路径
绝对路径:绝对路径肯定是从根目录开始写起的,比如/etc/yum
相对路径:相对路径不一定从根目录开始写起,而是相对于当前工作目录而言的相对位置。比如当前位于/etc/yum目录下,那么可以通过cd …/切换到上一层目录
- 一般情况下,绝对路径的正确性要高于相对路经
目录相关操作
- cd - 最常用的目录切换命令
基本用法 cd 目录
特殊的目录:
. //代表当前目录
.. //代表上层目录
- //代表之前的目录
~ //代表当前用户的家目录
~account //account对应的用户家目录
-
pwd - 查看当前所在的目录
pwd有一个可选参数 [-P],它的作用是列出文件真正的目录,以centos7.x中/var/mail为例,如下图:
首先执行ls -l /var
可以看到mail目录是一个连接目录,最终连接至spool/mail目录,那么在/var/mail目录下执行pwd -P命令可以看到下面的结果:
说明加上[-p]参数之后,会显示真正的目录,而不是连接目录 -
mkdir - 创建目录
可选参数:
m //直接设置目录的权限
p //递归创建多级目录
- rmdir - 删除目录
可选参数:
p - 删除多级目录,值得注意的是,该命令只能删除空目录
文件与目录
文件与目录展示
- ls - 列出当前文件夹下所有的文件和目录
该命令默认显示文件或目录名称以及对应的颜色
常用参数(其他参数请自行‘找男人’):
a //列出所有的文件和目录,包括隐藏文件和目录
l(小写L) //列出文件属性
- cp - 复制文件或目录
命令方式:cp [option] 文件源目录 目标目录
常用参数:
a //功能相当于-dr,即如果需要复制的目录是连接文件属性,则会复制文件连接属性,而非文件本身
i //当目标目录中已经存在改文件时,使用该参数,会发起询问是否继续执行操作
r //递归复制,多用于多级目录的复制
p //将文件属性一并复制,多用于文件备份
- rm - 删除文件或目录命令
常用参数:
f //强制删除,当文件不存在时也不会出现警告信息
r //递归删除,慎用慎用
i //交互模式删除,删除时会进一步给出确认信息,询问是否确认删除
-
mv - 移动或更改文件或目录名称
移动:mv 源 目标
更名:mv 原名称 目标名称 -
获取文件名与文件路径
basename 获取路径最后的文件名或目录名
dirname 获取文件或目录的上层路径
文件内容查看
查看文件的命令有如下
cat //从第一行开始显示文件内容
tac //从最后一行开始显示文件内容,不知有没有注意到,tac就是cat倒过来
nl //显示内容时同时显示行号
od //以二进制形式查看文件
tail //只看末尾几行
head //只看头几行
more //一页页显示文件内容
less //功能与more相似,但是还有一个比较好的功能,less支持向前翻页
- 直接查看文件内容
- cat
常用参数:
b //显示行号,但是空白行不显示行号
n //显示行号,空行也会显示对应的行号
A //列出文件中的所有特殊字符,比如Tab符号、以及结尾$等,相当于 -vET参数的组合
- tac
- nl
常用参数:
b (1) -b a:即使为空行,也会为该行添加行号
(2) -b t:如果为空行,就不加行号
n (1) -n ln:在屏幕左边显示行号
(2) -n rn:符号在字段右边显示,且不加0
(3) -n rz:符号在自己字段显示,加0
w 符号字段所占用的字符数
- 可翻页查看文件
- more
可执行的操作:
空格 //向下翻一页
Enter //向下翻一行
/字符串 //从文件中查找相应的字符串
:f //显示文件名及当前显示的行数
q //立刻退出more,不再显示内容
b或Ctrl+b //往回翻页,只对文件有效
- less
常用的可执行操作:
空格 //向下翻页
pageUp //向上翻页
pageDown //向下翻页
/字符串 //向下搜索对应的字符串
?字符串 //向上搜索字符串
g //跳转至当前文档第一行
G //跳转至当前文档的最后一行
q //退出less
- 提取文件内容
- head -n num //提取当前文档的前num行
- tail -n num //提取当前文档的后num行
- 以二进制形式读取文件
touch命令
Linux中,对于文件而言,有三个时间比较重要
- mtime - 当文件的内容发生变化时,这个时间就会发生改变
- ctime - 当文件属性或者权限发生改变时,这个时间会发生变动
- atime - 当文件被读取时,这个时间会发生变动
默认情况下,ls操作显示的是mtime,即文件最后一次被修改的时间,当需要更改时间时,可以使用touch命令,touch命令也可以用来创建新的空文件
touch命令常用参数:
a //仅修改文件访问时间,即atime
m //仅修改文件内容修改时间,即mtime
d //指定欲修改的时间字符串,而不使用当前时间,或使用 --date
t //指定欲修改的时间,而不使用当前时间,格式为【YYYYMMDDhhmm】
c //仅修改文件时间,如果文件不存在,则不会创建新的文件
##文件预设权限
umask - 预设拿掉那些权限,表示目前用户在创建文件或者目录时的去掉的权限默认值,可以通过以下命令查看
或者
- 新建文件时,默认分配的权限为-rw-rw-rw-
- 新建目录时,默认分配的权限为drwxrwxrwx
上面图中umask命令所显示的分数去后三位022,表示需要减掉的权限,当新建文件时,使用默认权限减掉三个分值,也就是user无变化,group和other均减去2(也即写权限),所以新建文件时的默认权限应该是-rw-r–r--,下面来验证一下,新建一个文件test1
新建目录同理,不多赘述。
可以使用umask 三位数分值来设定默认文件或目录权限,比如umask 022
文件隐藏权限
因为文件的隐藏权限操作命令chattr以及lsattr命令只有在Ext2/Ext3/Ext4文件系统中才会完全生效,centos7系统采用xfs文件系统不能完全支持,所以不在此叙述,有兴趣可以自行百度
指令与文件搜索
- which - 脚本文件名搜索
- whereis - 文件或目录搜索
- locate - 通过关键字查找目录或文件名
注:部分centos7.x系统可能不存在locate命令,在下的就没有,可以直接使用下面的命令安装
yum install mlocate
常用参数:
i //忽略大小写进行搜索
c //只列出搜索到结果的数量,不会列出搜索结果的所在目录
S //列出locate命令所使用的数据库信息,关于这个数据库会在下面做一下解释
l //指定搜索结果的数目,比如 locate -l 3 pass 会只列出三条文件或目录名与pass*匹配的记录
locate命令之数据库:
locate命令之所以查询速度快,是因为它自己维护了一个数据库,可以使用locate -S查看:
默认更新这个数据库的频次为一天,如果搜索新建立的文件可能搜索不到,是因为还没有将新建文件的信息更新至数据库,可以手动执行下面命令更新数据库
updatedb
##特殊文件权限
- SUID
当执行如下命令时,可以看到下面的结果
ll /usr/bin/passwd
可以看到这个文件拥有者的可执行权限被替换成了s,这时就成为Set UID,简称做SUID,这一权限有下面几个限制与功能
* 只对二进制可执行文件起作用,对目录没有作用
* 只在文件执行时起作用
* 执行者对于该文件需要有可执行权限
* 在改权限起作用时,文件的执行者可以具有root的权限
借用书中的案例,难道只有root用户才能修改其他非root用户的密码吗,当然不是,那root就掌握着所有人的生杀大权了。我们知道,所有用户的用户名密码信息是保存在/etc/shadow文件中的,这个文件只有root可以读取并强制修改,其权限为----------,但是/usr/bin/passwd对于其他用户是可执行的,而且具有SUID权限,而且这个文件的作用就是用来修改密码或用户名信息的,当其他用户在执行这个文件的时候,因为具有SUID权限,所以执行时,会暂时获得到root用户的权限,从而完成密码等信息修改
-
SGID
功能和SUID相似,只是在执行时会获取文件所属组的权限,综合来说,SGID权限有下面的限制与功能:- SGID只对二进制可执行文件起作用
- 可执行文件的执行者需拥有该文件的可执行权限
- 在该权限起作用时,会获得该程序组的权限
-
SBIT
只对目录有效,对于目录来说有下面的作用:- 当用户对目录具有写入权限时,在该目录下建立文件或目录后,只有root用户可以执行删除操作
-
设置特殊权限
有种方式可以设置特殊权限
- 数字方式
4 - SUID
2 - SGID
1 - SBIT
当设置权限时,需要在对应的一般权限前加上需要设置的特殊权限数字代码,例如
chmod 4755 filename,需要注意,对文件设置特殊权限的前提是,用户需要对该文件有可执行权限,否则,就是S或者T,即权限为空 - 字母方式
方式类似于设置其他权限
设置SUID - u+s
设置SGID - g+s
设置SBIT - o+t
第六章文件与权限部分的内容概括为以上的内容