特殊的目录
- .(一个点) 代表当前目录
- …(两个点)代表上一层目录
- - 代表前一个工作目录
- ~目前使用者身份所在的家目录,如:~account,代表account这个使用者所在的家目录
- 根目录的上一层目录(…)与当前目录(.)是同一个目录
常见处理目录的命令
- cd:切换目录
- pwd [-P]:显示当前目录,-P可选参数,表示显示真正的路径,而非链接路径
- mkdir [-mp] 目录名称:创建一个新目录,-m:设置目录的权限,不用默认的权限;-p:将所需要的目录(包含上一层目录)直接创建,且如果该目录已经存在也不会打印错误信息。
- rmdir [-p]:删除一个空目录;-p连同上层的空目录一起删掉;注意:被删除的目录里必定不能存在其他的目录或文件
执行文件路径的变量:$PATH
- 当我们在执行某条命令的时候,系统会根据PATH(必须大写)设置的路径去查找到相应的命令进行执行,先找到先执行
文件与目录的查看:ls
- 指令格式:ls [选项或参数] 文件名或目录名。具体参数及其含义见下表:
选项与参数 | 含义 |
---|---|
-a | 全部文件,连同隐藏文件(开头为 . 的文件)一起列出来 |
-A | 全部文件,连同隐藏文件一起列出来,但不包括 . 和 … 这两个文件 |
-d | 仅列出目录本身,而不列出目录里的文件数据 |
-f | 直接列出结果,不进行排序(ls默认情况下会排序) |
-F | 根据文件、目录等信息,给予附加数据结构,如:*:代表可执行文件;/:代表目录;=:代表socket文件;|:代表FIFO文件 |
-h | 将文件容量以人类易读的方式列出来(如GB、KB) |
-i | 列出inode号码 |
-l | 详细信息显示,包含文件的属性和权限 |
-n | 列出UID与GID |
-r | 将排序结果反向输出 |
-R | 连同子目录内容一起列出来 |
-S | 以文件容量大小排序 |
-t | 依照时间排序 |
–color=never | 不依据文件特性给予颜色显示 |
–color=always | 显示颜色 |
–color=auto | 系统自行依据设置来判断是否给予颜色 |
–full-time | 以完整时间模式(年、月、日、时、分)输出 |
–time={atime,ctime} | 输出access时间或改变权限属性时间(ctime),而非内容修改时间 |
- ls默认显示的是非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示
复制文件或目录:cp
- 指令格式:cp [可选参数] 源文件 目标文件。具体参数及其含义见下表:
选项与参数 | 含义 |
---|---|
-a | 相当于 -dr --preserve=all 的意思 |
-d | 若源文件为链接文件属性,复制链接文件属性而非文件本身 |
-f | 强制,若目标文件已存在且无法开启,则删除后再尝试一次 |
-p | 连同文件属性一起复制(用户、权限、时间) |
-r | 递归复制,用于复制目录,目录下的子目录等会被一起复制 |
-u | 目标文件和源文件旧,或目标文件不存在情况下才会更新 |
- 在默认的条件中,cp的源文件与目标文件的权限是不同的,目标文件的拥有者通常是命令操作者本身。
- 由于上述特性,因此在对一些特殊权限的文件如密码文件或一些配置文件备份时,需要注意不能单纯的使用cp命令,而是需要加上-a或-p这些参数来完整复制文件权限。除此之外,当复制文件给其他用户时,也要注意文件的权限,否则其他用户依旧不能对复制的文件进行读写等操作。
- 复制链接文件时,若cp未加任何选项,那么复制的是原始文件,而非链接文件的属性;若要复制链接文件属性,则需要加上-d参数。
- 例题:使用dmtsai的身份,完整的复制/var/log/wtmp文件到/tmp下面,并更名为dmtsai_wtmp。实际结果如下图,可以看出由于dmtsai的身份不能随意修改所有者和用户组,因此尽管加了-a参数,也不能完整的复制权限。
删除文件或目录:rm
- 指令格式:rm [可选参数] 文件名或目录名
- 具体参数及含义见下表:
选项与参数 | 含义 |
---|---|
-f | 忽略不存在的文件,不会出现警告信息 |
-I | 交互模式,在删除前会询问使用者是否删除 |
-r | 递归删除,用于删除目录,目录下的子目录等会被一起删除,谨慎使用 |
- 使用 rm 删除时,若删除的是非空目录,则会报错,加上 -r 参数后可以递归删除。
移动文件或目录,或重命名:mv
- 指令格式:mv [ 可选参数 ] 源文件 目标文件
选项与参数 | 含义 |
---|---|
-f | 若目标文件已存在,不会询问而是直接覆盖 |
-i | 若目标文件已存在,会询问是否要覆盖 |
-u | 若目标文件已存在,且源文件比目标文件新,才会更新 |
-重命名指令格式:mv 旧文件名称 新文件名称
文件内容查看
直接查看文件内容:cat、tac、nl
cat:从第一行开始显示文件内容
- 指令格式:cat [ 可选参数 ] 文件名
- 具体参数及含义见下表:
选项与参数 | 含义 |
---|---|
-A | 可以列出一些特殊字符 |
-b | 对非空白行标上行号 |
-E | 将结尾换行符 $ 显示出来 |
-n | 打印出行号,包括空白行的行号 |
-T | 将 Tab 键以 ^I 显示出来 |
-v | 列出一些看不出来的特殊字符 |
tac:从最后一行开始显示文件内容,可以看出tac是cat的倒写
nl:显示时同时打印行号
- 指令格式:-nl [ 可选选项] 文件名
- 具体参数及含义见下表:
参数与选项 | 含义 |
---|---|
-b a | 列出行号,包括空行 |
-b t | 列出行号,不包括空行(默认值) |
-n ln | 行号在屏幕最左方显示 |
-n rn | 行号在自己栏位的最右方显示,且不加 0 |
-n rz | 行号在自己栏位的最右方显示,且加 0 |
-w | 设置行号栏位的占用字符数,默认为六位 |
翻页查看:more、less
more:一页一页的显示文件内容
- 当文件内容行数大于屏幕输出的行数时,more就会将其分页显示,屏幕的最后一行可以看到当前显示内容的百分比。
操作 | 含义 |
---|---|
空格键 | 代表向下翻一页 |
Enter键 | 代表向下翻一行 |
/字符串 | 代表在这个显示的内容当中,向下查找字符串这个关键词 |
:f | 立刻显示出文件名及目前显示的行数 |
q | 代表立刻more,不再显示该文件内容 |
b或者Ctrl-b | 代表往回翻页,该操作仅对文件有用,对管道无用 |
less:一页一页翻动
操作 | 含义 |
---|---|
空格键 | 代表向下翻一页 |
键盘上键 | 代表向下翻一页 |
键盘下键 | 代表向上翻动一页 |
/字符串 | 向下查找字符串 |
?字符串 | 向上查找字符串 |
n | 重复前一个查找(与 / 或 ?有关) |
N | 反向重复前一个查找(与 / 或 ?有关) |
g | 前进至第一行 |
G | 前进至最后一行 |
q | 离开 less |
数据截取:head、tail
head:取出前面几行
- 指令格式:head [-n number] 文件名
- 参数:-n,后边接数字,代表显示几行的意思,默认显示前面十行。
tail:取出后面几行
- 指令格式:tail [-n number] 文件名
- 参数:-n,后边接数字,代表显示几行的意思,默认显示最后十行。
- 参数:-f,表示持续刷新显示后面所接文件中的内容,按下Ctrl+c结束。
- tail -n +100 文件,该条指令代表该文件从100行以后的都会列出来。
查看非纯文本文件:od
- 指令格式:od [-t type] 文件
- 选项或参数含义见下表:
选项或参数 | 含义 |
---|---|
-t a | 利用默认的字符来输出 |
-t c | 使用ASCII字符输出 |
-t d[size] | 使用十进制来输出数据,每个整数占用size Bytes |
-t f[size] | 使用浮点数来输出数据,每个数占用size Bytes |
-t o[size] | 使用八进制来输出数据,每个整数占用size Bytes |
-t x[size] | 使用十六进制来输出数据,每个整数占用size Bytes |
修改文件时间或创建新文件:touch
- 修改时间(mtime):当文件【内容数据】发生变更时,就会更新这个时间
- 状态时间(ctime):当文件的【状态】比如权限或属性发生改变时,就会更新这个时间
- 读取时间(atime):当该【文件内容被读取】时,就会更新这个时间
- 默认情况下,ls显示出来的是该文件的mtime,也就是该文件上次被修改的时间。
- 指令格式:touch [可选参数] 文件
选项或参数 | 含义 |
---|---|
-a | 仅自定义atime |
-c | 仅修改文件的时间,若文件不存在也不会新建文件 |
-d | 其后可跟与自定义的日期而不用当前的日期 |
-m | 仅可修改mtime |
-t | 其后可跟欲自定义的时间而不使用当前的时间,格式为[YYYYMMDDhhmm |
文件默认权限:umask
- 指定当前用户在建立文件或目录时的权限默认值
- umask 其后跟的数字代表的是默认值需要拿掉的权限
配置文件隐藏属性:chattr
- 指令格式:chattr [±=] [ 可选参数 ] 文件或目录名
选项或参数 | 含义 |
---|---|
+ | 增加某一个参数,其余原本存在的参数不动 |
- | 删除某一个参数,其余原本存在的参数不动 |
= | 直接设置参数,且仅有后面接的参数 |
A | 设置该属性后,若再存取此文件,其存取时间 atime 将不会被修改(可避免I/O较慢的机器过度读写磁盘) |
S | 进行任何文件的修改,该修改都会同步写入磁盘(一般修改是非同步写入磁盘) |
a | 设置这个参数后,该文件只能增加数据,不能删除或修改数据,只有root可以设置该属性 |
d | 当dump程序被执行时,设置了该属性的文件或目录不会被dump备份 |
i | 设置该参数后,文件不能被删除、改名、设置链接也无法写入或新增数据 |
s | 设置该属性后,若文件被删除,将是从硬盘被删除,误删无法恢复 |
u | 设置该属性后,若文件被删除,但其数据内容其实还在硬盘,所以可以恢复 |
显示文件隐藏属性:lsattr
- 指令格式:lsattr [可选参数] 文件/目录
选项或参数 | 含义 |
---|---|
-a | 隐藏文件的属性也显示出来 |
-d | 若是目录,仅列出目录本身属性而无需列出其子目录等 |
-R | 连同子目录的数据也一并列出 |
文件特殊权限:SUID、SGID、SBIT
SUID:
- SUID权限仅对二进制程序有效,不能用在shell脚本上
- 执行者对于该程序需要有x可执行权限
- 本权限仅在该程序执行的过程中有效
- 执行者将具有该程序拥有者的权限
SGID:
对文件而言,SGID具有以下功能:
- 对二进制程序有用
- 程序执行者对该程序来说,需要具有x执行权限
- 执行者在执行过程中,将会获得该程序用户组的支持
对目录而言,SGID具有以下功能:
- 用户若对此目录具有 r 和 x 权限时,该用户能够进入此目录
- 用户在此目录下的有效用户组,将会变成该目录的用户组
- 若用户在此目录下具有 w 权限,则用户所建立的新文件,该新文件的用户组与此目录的用户组相同
SBIT:
- 该权限仅对目录有效
- 当用户对目录具有 w、x 权限,即具有写入的权限
- 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除
which:(查找执行文件,脚本文件)
- 指令格式:which -a command
- -a:将所有由PATH目录中可以找到的命令均列出
查找文件
whereis:由一些特定目录查找文件
- 指令格式:whereis [可选参数] 文件
参数或选项 | 含义 |
---|---|
-l | 可以列出whereis会查询的几个主要目录 |
-b | 只查找二进制格式(可执行)的文件 |
-m | 只找在说明文件manual路径下的文件 |
-s | 只找源文件 |
-u | 查找不在上述三个项目当中的其他特殊文件 |
locate:
- 指令格式:locate [可选参数] keyword
参数或选项 | 含义 |
---|---|
-i | 忽略大小写 |
-c | 不输出文件名,仅计算找到的文件数量 |
-l | 仅输出几行,如输出5行则是:-l 5 |
-S | 输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等 |
-r | 其后可跟正则表达式的显示方式 |
- locate是从数据库中去查找,而数据库默认每天更新一次,所以如果是新建立的文件,有可能查找不到。
- 使用指令updatedb可以更新数据库。
find:
- 指令格式:find [PATH] [option] [action]
参数或选项 | 含义 |
---|---|
-mtime n | 列出n天之前【一天之内】被修改过内容的文件 |
-mtime +n | 列出n天之前(不含n天)被修改过内容的文件 |
-mtime -n | 列出n天之前(含n天)被修改过内容的文件 |
-newer file | 列出比file还要新的文件,file是一个已经存在的文件 |
-uid n | n为数字,这个数字是使用者的账号的ID,即UID |
-gid n | n为数字,这个数字是用户组的名称的ID,即GID |
-user name | name为拥有者名称 |
-group name | name为用户组名称 |
-nouser | 查找文件的拥有者不在/etc/passwd中的文件 |
-ngroup | 查找文件的拥有用户组不存在与/etc/group中的文件 |
-name filename | 查找文件名称为filename的文件 |
-size [±SIZE] | 查找比SIZE还要大(+)或小(-)的文件;SIZE规格有:c(Bytes)k(KB,即1024Bytes) |
-type TYPE | 查找文件类型为TYPE的文件,类型主要有:一般正规文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s),FIFO(p) |
-perm -mode | 查找文件权限【必须要全部囊括mode的权限】的文件;如查找权限-rwxr–r--,即权限0744的文件,使用指令:-perm -0744,当一个文件权限为-rwsr-xr-x,即权限4755时也会被列出来,因为4755囊括了0744权限 |
-perm /mode | 查找文件权限【包含任一mode的权限】的文件;如查找权限-rwxr-xr-x,使用指令:-perm /755,当一个文件权限为-rw-------时也会被列出来 |
-exec command | command为其他命令,exec后边跟额外的命令来处理查找到的结果,注意:-exec不支持命令别名 |
将结果打印到屏幕上,这个是默认操作 |
- find虽然功能强大,但是使用find查找比较消耗硬盘资源,所以也要依情况使用。
权限与命令之间的关系
让用户能够进入某目录成为可工作目录的基本权限是什么?
- 可使用的命令:如 cd 等命令变换工作目录;
- 目录所需权限:用户对这个目录至少要有 x(可执行)的权限;
- 额外需求:如果用户还想要在这个目录中利用 ls 查看文件名,则还需要 r(可读)的权限;
用户能够在某目录内读取一个文件的基本权限是什么?
- 可使用的命令:如 cat less more
- 目录所需权限:至少需要 x(可执行)权限
- 文件所需权限:至少需要 r(可读)权限
用户可以修改一个文件的基本权限是什么?
- 目录所需权限:至少需要 x(可执行)权限
- 文件所需权限:至少需要 r(可读)和 w(可写)的权限
用户可以创建一个文件的基本权限是什么?
- 用户在该目录要有 w(可写)和 x(可读)的权限,w 权限很重要
用户进入某目录并执行该目录下的命令所需的基本权限是什么?
- 对目录和文件而言都需要 x(可执行)的权限