基本的命令、文件及目录
pwd #查看当前目录
cd /var/log #进入/var/log目录
cd.. #进入父级,这里为 /var
cd - #返回上一个之前的目录,这里为 /var/log
ls #查看文件列表
man ls #查看帮助
ls -la #l表示详细格式,a表示显示dot文件
ls -l -h #h表示更可读,比如文件大小以KB,MB为单位
## 向上箭头或向下箭头 查看之前键入过的命w令
cat kern.log #按Tab可以提示并自动完成,如果按2下Tab,就列出所有可用的列表,再按Enter就使用当前提示
cd ~ #回到个人主目录
touch test.txt #创建一个空文件,Linux不看扩展名,这里只为了直观
mkdir testfiles #创建一个空文件夹
mv test.txt testfiles/testfile.txt #将test.txs移动testfiles文件夹下并改名
cd testfiles
ls
cp testfile.txt testfile2.txt #复制文件
rm testfile.txt #删除文件
cd .. #或使用cd - 回到上一次目录
rm testfiles #尝试删除该文件夹,提示不是空不能删
man rm #查用户手册
rm -r testfiles # r表示递归,删除文件夹里的所有文件和目录
文本编辑
Nano:
对初学者非常友好,在大部分Linux发行版开箱即用。但它只有基本功能,不提供高级功能,不过一般使用足够了。
nano #打开nano
# 输入几行文本
# 按下ctrl+O 表示存文件,然后输入文件名test.txt,即完成保存
# 按ctrl+x 退出nano
ls # 查到当前目录已生成刚创建的文件
cat test.txt # 查看编辑的内
nano test.txt # nano可以带现有的文件名,打开现存文件
# nano里 ctrl+G,查看帮助。看完按 ctrl+x 退出
# Alt+u undo功能
# Alt+e redo功能
# 剪切:用鼠标选择文本,如果没有,可以用shift+右箭头选择。选好之后ctrl+k
# 粘贴:ctrl+u
# 搜索:ctrl+w
# 未保存按ctrl+x,会提示是否保存,要保存就按y
Vim:
比较强大,还有很多插件,有些人甚至用它编码。
Emacs:
与Vim类似,可能更强大。
Linux文件系统层级
文件系统层级,也称fhs
类似unix,一切皆是文件。并不是所有文件都存在于硬盘,Linux内核提供了很多信息,或通过文件系统访问硬件或进程信息 。
ls -l / # linux一切文件从根 / 开始
/bin # /bin放置了单用户模式下的命令,linux是个多用户系统,但在维护或恢复时会切到单用户模式,
# ls,cat,cp,mv等命令都在这个目录,都是些小程序
/boot # 所有引导加载信息,除非很清楚,否则不要动
/dev # 这是个特殊文件夹,实际不存在硬盘驱动器中,由内核创建
# 比如插入一个网络摄像头,内核将创建一个文件,用于访问该摄像头
/etc # 包含系统范围的配置文件,比如DNS客户端,DNS服务器,WEB服务器等配置文件
# 当我们配置通用系统应用系统时,在这里工作
/home # 用户的个人目录,文档图片等
/lib # 包含运行基本程序需要的库,有些操作系统还有 /lib64,主要是/bin下的
# 程序用到的库
/lost+found # 当linux系统崩溃时,下次启动会检查文件,并将不正常未链接的放在
# 放在该文件夹,我们可以检查该文件夹,并进行复制和恢复
/media # 放置可移动文件,比如插入U盘,CDROM等,Linux内核会在该目录中新建
# 文件夹,以便访问
/mnt # 临时挂载作用。这是过去的残留,现在不太常用。但如果需要手动创建挂载点,
# 可以在这个目录创建挂载点
/opt # 意思是可选文件,一般放置第三方软件或自己编译的应用程序
/proc # 这也是特殊文件,Linux向文件系统提供进程信息。当我们启动一个新应用程序时,
# linux内核创建新进程时,同时也为该进程ID创建一个文件夹,我们可以在此文件中查找
# 该进程的相关信息
/root # 每个用户都有一个个人目录,除了root。因为root是个非常特殊的用户
/run # 程序运行时的可变数据,当程序运行,需要存储运行时的临时数据。
# 这也是在硬盘不存在的文件,但是在内存运行的临时文件系统
# 当我们重新启动时,这里面的东西将消失,所以不要放任何东西
/sbin # 与 /bin类似,但里面的应用程序仅供超级用户使用,比如格式化及其他系统关键的命令
/snap # 快照文件,也是特殊文件,存在硬盘上。包含容器应用程序的信息,比较复杂。讲明需要单独开课
/srv # 代表服务器文件,比如WEB服务器,FTP服务器上的文件可以存储在这里
/sys # 也是特殊文件,Linux将内核、硬件、系统进程信息放在这里
# 它与 /dev不同,它包含的东西更多。
# 某个时候你需要访问硬件时,可以使用/dev,但要查硬件信息如型号、供应商时需要查 /sys
/tmp # 临时文件。与/run类似。有个区别,/tmp可以被任何无特权的用户访问。不关键的临时数据放这里较好
# 当然具体取决于应用程序或开发人员如何使用
/usr # 这个不是用户文件,已经有/home文件夹了,这里放的是unix资源。
# usr是 unix system resources 的缩写。他有很多子目录,与 / 根目录有点类似
# 比如也有bin,sbin,lib等。各个Linux发行版处理这个文件夹也有不同。
# 比如 ubuntu,根目录下/bin与/usr/bin 还有有区别的
# 但现代有些发行版,比如arch linux,/bin甚至没有任何文件,只是指向/usr/bin的符号链接
# 该目录也有 lib,share目录等,如果想存字体、壁纸、图标等应用程序之间共享的任何东西,都可放在这里
/var # 可变数据,放一些预期大小会增长的数据,比如WEB服务器、邮件服务器的日志 放 /var/log下
用户和组
我们安装好系统,一般要先创建用户。
系统中原先存在很多用户,其中最重要的用户之一是root用户。
root用户也被称为超级用户或超级管理员,可以执行任何配置任务,访问任何文件,添加删除软件等等。
一般用普通用户来执行操作,避免对系统造成破坏。
添加删除软件,还是需要切换到root用户才能操作,操作完成之后切回普通用户,这会有些麻烦,所以出现了叫做sudo的东西。sudo代替用户做只有root才能做的事情,可以执行任何命令。
whoami # 显示当前用户
sudo whoami # 加上sudo,显示当前用户是root
cat /etc/passwd # 用户文件,所有用户都可读。但不是每个用户都可写
# 第一个是root用户,ID为0,一般创建的用户在后面,ID为1000
# 第一列是用户名
# 第二列是密码,用x表示,实际密码的哈希值存在/etc/shadow中
# 第三列是用户ID
# 第四列是组ID,告诉用户属于哪个主要组。默认情况当我们创建新用户时,linux总是创建同名的组,然后将这个组表示为该用户的主组存在用户文件下。
# 第五列是注释,可以放任文本
# 第六列是用户的主文件夹
# 第七列是用户的shell程序 ,普通用户是 /bin/bash,但看到不少用户是 /usr/sbin/nologin,
# 表示这些用户是无法真正登陆shell而执行某些操作的,这些用户一般是得用这个用户权限执行某些服务的,
# 比如运行WEB服务器并不需要全部权限,所以建立相应的服务用户
# 这也是我们在 /etc/passwd 看到这么多条目的原因
# 我们当然可以在前面加 sudo 的方式编辑这个 /etc/passwd 文件,但用命令方法可能更好。
man useradd
sudo useradd -m -s /bin/bash -c "test user" test # 新建test用户
# m表示添加home下目录,s表示shell,c表示注释
cat /etc/passwd # 查看已建立了test用户
sudo passwd test # 设置test用户的密码
passwd # 设置当前用户密码
su test # su命令,切换到test用户登陆测试是否正常
cd ~ # 转到test用户的主目录
exit # 退出test的shell,回到之前的用户
# 我们来看看组
cat /etc/group # 所有的组都存在这儿
# 我们看到很多组,能看到新建的用户组是1001
# 用户除了自己的组也可以属于其他组 sudo:x:27:chen,最后一列表示该组的成员,这里表示chen属于sudo组
su test
sudo whoami # 发现test用户无法使用sudo命令,它不在sudo组
exit
sudo usermod -aG sudo test # 用usermod命令 将test加入sudo组
# a表示添加,如果不加a原组里的成员将被删除,G后面跟组名。
su test
sudo whoami # 再登录test使用sudo命令,已可以了
sudo visudo # 打开文件,查看到sudo可以执行所有命w令,我们也可以参照修改,达到我们的要求
# 下面新建一个组
groupadd manages
sudo usermod -aG manages test
sudo usermod -aG manages chen # 将test,chen用户加入manages组
cat /etc/group # 能看到manages组最后一列有test,chen两个用户
# 下面删除test用户
sudo userdel test
cat /etc/group # 能看到test已从刚才的sudo组、manages组中删掉了
cat /etc/passwd # 这个用户文件中的test自然也已删除
# 不要手动编辑这些文件,用命令就好,他们之前是有关联的,免得未处理好出现问题
# 再删除manages组
sudo groupdel manages
cat /etc/group # 看到已从该文件中去除了
文件权限和属性
文件权限和属性,说明这些用户和组能访问哪些文件,执行哪些文件。
ls-l # 能看到详细的列
# 能看到权限设置,文件所属的用户和组
# 权限说明 drwxrwxr-x
# 第一位表示类型,d表示目录,- 表示文件
# 然后3个3位组,分别代表用户,用户组,以及其他用户的读写执行权限
# 修改权限命令是chmod,有两种方式:文本方式和数字方式
chmod u=rwx testscipt.sh # 文本模式 u 表示 用户,g 表示组, o 表示其他人
chmod u=rx testscript.sh # 权限不必写全
chmod u+w testscript.sh # +表示增加
chmod u-x testscript.sh # - 表示减少某权限
# 当然也可以用 g,o 然后 + ,- ,=
# 文本方式比较直观
# 文本模式每次只能设定一类用户,还有一种是数字方式,就灵活多了
chmod 761 testfile1.txt # 数字方式由3位数字组成,每位数字可以从0-7
# 从左至右的数字分别代表 用户、组、其他用户、
# r=4,w=2,x=1,组合成数字
# 可以改变文件的用户和组,命令是chown
sudo chown chen textfiles.txt # 将文件的用户改成chen
chown chen:chen testfiles.txt # 也可以修改文件的组,在冒号后面加上组名
sudo chown -R chen:chen downloads # 递归实现文件用户属性的修改,这样downloads文件夹下的所有文件用户都改成了chen:chen
# 同样的,-R 也适用于 chmod
文件除了权限,还有属性:
lsattr # 不带参数将看到当前目录下所有文件的属性
lsattr textfile2.txt # 具体文件的属性
# 属性包括是否是压缩,是否扩展,是否不可变等,可以查看具体文档
# 这里做个简单的测试,做个不可改变属性的修改
sudo lsattr +i textfile2.txt # 这将设置该文件的不可变属性
sudo nano textfile2.txt # 显示不可写入,即便是 root 用户也不能!!
sudo lsattr textfile2.txt # 可以看到 i 属性
# 可以经常查看文件属性,看看是否有可疑属性
sudo lsattr -i textfile2.txt # 删掉文件的不可改变 i 属性