Linux笔记-常用命令-文件与目录管理
本文最后更新于 2025年9月22日 凌晨
“Linux笔记”系列博客是在阅读学习《鸟叔的LINUX私房菜》书籍时形成的思维导图,将其整理为笔记形式。包含以下部分:
文件与目录管理
1. 文件与目录的基本操作
cd 切换目录
语法:cd [相对路径/绝对路径]
路径缺省时代表cd ~
特殊目录
- . 此目录
- .. 上一层目录
- - 前一个工作目录
- ~ 当前使用者的家目录
- ~account 指定用户account的家目录
pwd 显示当前工作目录
选项
- -P:显示真正路径,而非连接路径
mkdir 新建目录
选项
- -m:使用给定的权限,不使用默认权限
- -p:递归地创建上层目录
rmdir 删除空目录
选项
-p:递归地删除上层的空目录
rmdir只能删除空目录,非空目录会报错,非空目录要用rm -r
ls 列出目录中的文件信息
语法:ls [-adFhilR] [–time={atime,ctime}] file/dir
选项
- -a:列出所有文件,包括隐藏文件(以 . 开头的文件)
- -d:仅列出目录本身信息,而非目录下的文件信息
- -F:在文件名后附加类型信息,如*代表可执行文件;/代表目录;=代表socket文件;|代表FIFO文件
- -h:将文件容量以人类较易读的方式(例如GB、KB等)列出来
- -i:列出inode号码
- -l:列出文件或目录的详细信息 可使用别名‘ll’
- -R:递归地列出目录下的所有文件与子目录
- –time={atime,ctime}:显示读取时间atime或状态时间ctime,而非修改时间mtime(mtime、atime、ctime含义见touch)
cp 复制文件或目录
语法:cp [-adfilspru] sourcefile/dir destinationfile/dir
选项
-a:等同于-dr –preserve=all,保留所有属性并递归地复制子目录(常用于备份)(使用cp -a时只能复制mtime、atime,不能复制ctime)
-d:若源文件为链接文件(link file), 则复制链接文件属性而非文件本身
-f:强制(force),若目标文件已经存在且无法开启,则删除后再尝试一次
-i:交互模式,覆盖已存在的目标文件前询问是否进行操作
-l:建立硬链接文件(hard link),而非复制文件本身
-s:建立符号链接文件(symbolic link),而非复制文件本身
-p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
若无-p选项,复制后目标文件的拥有者通常会变为cp命令的执行者,要注意文件的属性权限
-r:递归地复制目录下的所有文件与子目录,用于目录的复制
-u:destination比source旧才更新destination,或destination不存在的情況下才复制
–preserve=all:除了-p保留的属性外,还会保留SELinux、links、xattr等属性
rm 删除文件或目录
语法:rm [-fir] file/dir
选项
-f:强制(force),忽略不存在的文件
-i:交互模式,在删除前询问是否进行操作(建议设定别名rm=’rm -i’)
-r:递归地删除目录下的所有文件与子目录,用于目录的删除
cp、rm作用于目录都要用-r选项,mv作用于目录不需要
mv 移动文件或目录/重命名
语法:mv [-fiu] sourcefile/dir destinationfile/dir
选项
- -f:强制(force),若目标文件已经存在,不会询问直接覆盖
- -i:交互模式,覆盖已存在的目标文件前询问是否进行操作
- -u:destination比source旧才更新destination,或destination不存在的情況下才移动
touch 修改文件时间或创建新文件
选项
-a:仅修改atime
-m:仅修改mtime
不加选项时同时修改atime和mtime
-c:仅修改文件的时间,若文件不存在则不会创建新文件
若无-c,touch默认将文件的三个时间更新为当前时间,若文件不存在则创建新文件
-d ‘时间’/-t YYYYMMDDhhmm:自定义时间,而非当前时间
文件的三个时间
- mtime:修改时间,最近一次变动文件内容的时间(ls -l显示的是mtime)
- atime:读取时间,最近一次读取文件内容的时间
- ctime:状态时间,最近一次状态变更的时间,如权限与属性的变化
dirname/basename 获取目录名/文件名
语法:dirname/basename [路径]
拆分文件所在目录路径与文件名
PATH
环境变量,定义了执行命令时查找可执行文件的目录。不同用户有不同的PATH
显示环境变量:echo $PATH
修改环境变量:PATH=”${PATH}:目录”
2. 文件内容读取
cat 将文件内容打印在屏幕上
选项
- -n:打印行号,包括空白行
- -b:打印行号,不包括空白行
- -A:显示出特殊字符
tac 将文件反向打印在屏幕上
nl 添加行号打印文件
- 等价于cat -b
more/less 翻页查看文件内容
可执行命令
- [Space]/[PageDown]:向下翻一页
- [PageUp]:向上翻一页(more不支持PageDown/UP,less功能更全)
- [Home]:去到第一页
- [End]:去到最后一页
- /string:向下查找string这个字符串
- ?string:向上查找string这个字符串
- n,N:利用/或?来查找字符串时,可用n来继续下一个查找,用N来进行反向查找
- :f:显示文件名及当前显示的行数
- q:离开查看
head 截取前面几行显示
选项
- -n number:指定截取的行数
tail 截取后面几行显示
选项
- -n number:指定截取的行数
- -f:持续刷新显示内容,按下[Ctrl+C]停止,如/var/log/messages
可用管道组合head与tail,打印文件部分行。如打印文件第11~20行,可使用head -n 20 tmp.txt | tail -n 10
od 读取非纯文本文件
详见私房菜P191
file 观察文件类型
3. 命令与文件的查找
一般查找文件优先使用locate file,速度快,找不到再使用find path -name file。查找命令用which或where。
which 查找可执行文件
语法:which [-a] command (在PATH中查找命令的可执行文件)
选项
- -a:显示所有找到的命令
whereis 在部分特定目录中查找文件
whereis只查找与可执行文件、说明文件、源文件相关的特定目录
选项
- -l:列出whereis会查询的所有目录
- -b:只找binary可执行文件
- -m:只找manual说明文件
- -s:只找source源文件
- -u:查找不属于上述三类的文件
locate 在数据库中查找文件
locate是在已建立的数据库中查找,不用直接读磁盘,速度很快。数据库默认每天更新一次,可用sudo updatedb命令手动更新数据库。
选项
- -i:忽略大小写的差异
- -c:不输出文件名,仅计算找到的文件数量
- -l:仅输出前几行的意思,例如输出五行则是-l 5
- -r:后面可接正则表达式
find 在文件系统中查找
直接磁盘中的path路径下寻找文件,速度较慢
语法:find [path…] [option] [action]
选项option
- -mtime/-atime/-ctime n/+n/-n:筛选时间,n:n天之前的一天之内,+n:n天之前(不含n天),-n:n天之内(不含n天)
- -newer file:比file还要新的文件
- -user name:筛选拥有者
- -group name:筛选用户组
- -name filename:匹配文件名。可用通配符(要加引号 ‘’ )
- -regex pattern:使用正则表达式匹配文件名(-iregex 忽略大小写的正则)
- -size [+-]SIZE:查找比SIZE还要大/小的文件
- -type TYPE:查找TYPE类型的文件,TYPE:一般文件f,设备文件b/c,目录d,链接l,管道p
- -maxdepth levels:从path路径向下递归查找的最大目录层数,levels=0时表示只在path们自身中寻找
- -mindepth levels:至少从该层数开始向下递归查找,levels=1时表示不查找path们自身,而是其所有下层
- -perm MODE:查找权限为MODE的文件,MODE可以是664、4755等
- 多个以上表达式可以用运算符连接起来,包括-a 且 -o 或 ! 非 。如:
find ~ -name Customized* -o -name RPC*会匹配~目录下这两个字符串开头的文件
操作action
- -exec command:查找完成后,对找到的文件执行command命令,如:
find ~ -name test -exec ls -l {} \;其中ls -l {}代表查找后要执行的命令,{} (花括号)替换为查找结果,; (反斜杠加分号)为结束标志(command不支持别名)
文件权限管理
1. 修改文件属性与权限
chown 修改拥有者
语法:chown [-R] owner[:group] file/dir
选项
- -R:递归地修改目录下的所有文件与子目录
chgrp 修改所属用户组
语法:chgrp [-R] group file/dir
选项
- -R:递归地修改目录下的所有文件与子目录
chmod 修改权限
语法:chmod [-R] mode file/dir
选项
- -R:递归地修改目录下的所有文件与子目录
- mode
- 数字类型:r=4,w=2,x=1,如770代表-rwxrwx—
- 符号类型:u=user,g=group,o=others,a=all,如u=rwx,a+w,a-w
权限对文件与目录有不同的含义

ls -l所列出的第一位含义
- -:常规文件,分为纯文本文件、二进制文件、数据文件
- d:目录
- l:符号链接文件(硬链接文件类型为-)
- b:区块设备文件,以区块读写的设备,如磁盘软盘
- c:字符设备文件,串行端口的设备,如键盘鼠标
- s:接口数据文件,用于网络的数据交换
- p:管道文件,先进先出的特殊文件类型
2. 文件默认权限
umask 默认值需要减去的权限
- 默认值-umask值=建立文件目录时的默认权限(默认值:文件:-rw-rw-rw- 666 目录:drwxrwxrwx 777)
- 建议计算时用符号法计算,以免出错
- root的umask值一般为022,一般用户为002
3. 文件隐藏属性
lsattr 显示文件隐藏属性
选项:-adR 含义同ls中选项含义
chattr 修改文件隐藏属性
语法:chattr [+-=][aiS…] file/dir
选项
- a:文件只能增加数据,不能删除或修改数据(只有root可设置)
- i:文件不能被删除、改名、修改、设置链接(只有root可设置)
- S:对文件的修改会同步写入磁盘(无需sync)
- xfs文件系统只支持AadiS属性,ext系列支持更多
4. 文件特殊权限
SUID
- s出现在拥有者的x位上,如-rwsr-xr-x
- SUID权限仅对二进制程序(binary)有效,执行者对于该程序要有x的可执行权限,执行者将在执行该程序的过程中暂时具有该程序拥有者(owner)的权限
- 如一般用户执行passwd时,将暂时拥有root的权限,从而可修改/etc/shadow(只有root有w权限)中的密码
SGID
- s出现在用户组的x位上,如-rwx–s–x
- 对于二进制程序:执行者对于该程序要有x的可执行权限,执行者将在执行该程序的过程中暂时具有该程序所属用户组(group)的权限,如locate命令
- 对于目录:若用户在此目录下具有w权限(可新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同
- 项目开发中有重要意义,如私房菜P208例子
SBIT
- t出现在其他人的x位上,如drwxrwxrwt
- SBIT仅对目录有效,用户对此目录有w、x权限,可新建文件或目录;当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件
- 如/tmp权限为drwxrwxrwt,当甲在/tmp下建立文件时只有甲与root可修改此文件
修改方式
- 4=SUID,2=SGID,1=SBIT,如chmod 6755 test 加入SUID、SGID的权限
- u+s=SUID,g+s=SGID,o+t=SBIT,如chmod u+s,g+s test
文件的压缩
1. 压缩文件类型
- *.z:compress程序压缩的文件
- *.zip:zip程序压缩的文件
- *.gz:gzip程序压缩的文件
- *.bz2:bzip2程序压缩的文件
- *.xz:xz程序压缩的文件
- *.tar:tar程序打包的文件,并没有压缩过
- *.tar.gz、*.tar.bz2、*.tar.xz:tar程序打包的文件,并且经过压缩
2. gzip
语法:gzip [-cdltv#] file
gzip可向下兼容解压compress、zip的压缩文件
选项
- -c:将结果输出到标准输出,源文件保持不变。可以重定向到文件(gzip默认压缩后会删除源文件。使用-c并重定向到文件可以保留源文件,如gzip -c services > services.gz)
- -d:解压(gzip -d会在解压后删除原压缩文件.gz)
- -l:列出压缩文件的相关信息
- -t:检验压缩文件的完整性
- -#:#为数字,代表压缩等级,-1最快但是压缩比最差,-9最慢但是压缩比最好,默认是-6
zcat、zmore、zless、zgrep 读取纯文本文件被压缩后的压缩文件或查找关键词
3. bzip2
语法与选项与gzip相同,多了一个-k可保留源文件
bzcat、bzmore、bzless、bzgrep
4. xz
语法与选项与gzip相同,多了一个-k可保留源文件。压缩率xz最好,但时间xz最差
xzcat、xzmore、xzless、xzgrep
5. tar 打包及压缩
语法
- 打包:tar [-z/j/J] -cv -f 打包后的文件名 被打包的文件或目录名
- 查询:tar [-z/j/J] -tv -f 打包后的文件名
- 解包:tar [-z/j/J] -xv -f 打包后的文件名 -C 欲解包到的目录
这里打包后的文件名要符合上面压缩文件命名规范,如*.tar.gz等。由于tar会打包时会把目录结构打进去,因此强烈建议不使用绝对路径,打包前先cd到目标目录,tar命令中使用相对路径,如cd /home/fly/tobetar/ && tar -cz -f ${zipfile} ./*
选项
- -z:通过gzip解压缩
- -j:通过bzip2解压缩
- -J:通过xz解压缩
- (以上三个选项之间不可共存。不加这三个选项,表示仅作打包,filename要取为*.tar;加这三个选项,表示同时使用压缩技术,filename要取为*.tar.gz、*.tar.bz2、*.tar.xz)
- -c:建立打包文件
- -t:查询打包文件的内容(列出文件名)
- -x:解包文件
- (以上三个选项之间不可共存)
- -v:显示正在处理的文件名(显示提示信息)
- -f:接打包后的文件名,最好单独写一个选项
- -C:在执行任何操作前先cd到特定目录
- -p:保留原本权限与属性,常用于备份
- -P:保留绝对路径,即打包文件中也存在根目录(不常用)
- –exclude=file:排除某些文件
特殊用法
- 仅解开单一文件:tar [-z/j/J] -xv -f 打包后的文件名 要解开的单一文件名(要解开的单一文件名要通过 -t 选项查找到正确的文件名)
- 打包某目录,但不包括该目录下某些文件:加上–exclude=file选项
- 仅备份比某时刻新的文件:加上–newer-mtime=’DATE’选项
- 备份到磁带(如/dev/st0):tar -cv -f /dev/st0 被打包的目录