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 被打包的目录

Linux笔记-常用命令-文件与目录管理
https://leo.zz.ac/posts/2b60.html
作者
AquariusLeo
发布于
2025年9月20日
更新于
2025年9月22日
许可协议