Skip to content

cd - 切换工作目录

路径名--指定移动位置;

语法格式

bash
cd [参数] [目标路径]

选项

参数/符号说明
无参数切换到用户主目录(~
-返回前一个工作目录(类似“后退”)
~表示用户主目录(如 cd ~/Documents
..切换到上级目录(父目录)
.保持当前目录不变(常用于路径拼接)
-L跟随符号链接(默认行为)
-P不跟随符号链接,直接切换到物理路径

经典案例

bash
cd /var/log       # 切换到绝对路径
cd ..             # 返回上级目录
cd ~              # 返回当前用户家目录
cd -              # 返回上一次所在目录(相当于导航历史记录)

cp - 复制文件或目录

cp命令来自英文单词copy的缩写,中文译为“复制”,其功能是复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。

语法格式

bash
cp [选项] 源文件 目标文件 
# 复制单个文件cp [选项] 源文件1 源文件2 ... 目标目录 
# 复制多个文件到目录cp [选项] -t 目标目录 源文件1 ... 
# 指定目标目录(批量复制)

选项

参数说明示例
-i交互模式(覆盖前询问)cp -i file.txt backup/
-f强制覆盖(不提示)cp -f file.txt /强制路径/
-r/-R递归复制目录及子内容cp -r dir1/ dir2/
-v显示详细操作信息cp -v *.log logs/
-a归档模式(保留权限、时间戳等)cp -a source/ backup/
-p保留文件属性(同归档模式)cp -p file.txt dest/
-u增量复制(仅更新新文件)cp -u *.csv latest/
-l创建硬链接(非复制文件)cp -l data.db backup.db
-s创建符号链接(软链接)cp -s /path/to/file link
-n不覆盖已存在文件cp -n *.txt safe_dir/
-t指定目标目录(批量操作)cp -t dest/ file1 file2

经典案例

bash
cp file1.txt file2.txt          # 文件到文件复制
cp *.jpg /target_dir/           # 批量复制到目录
cp -v /etc/*.conf ~/backup/     # 显示详细复制过程
cp -r source_dir/ dest_dir/     # 递归复制目录
cp -a /etc/ /backup/etc_full/   # 完整保留属性复制(包括隐藏文件)
cp --backup=numbered file.txt dest/  # 自动备份冲突文件(生成file.txt.~1~)
cp -u *.log /archive/         # 仅复制更新的日志文件
cp -l bigfile.dat backup/     # 创建硬链接节省空间
cp -r --exclude="*.tmp" src/ dst/  # 递归复制但排除临时文件

cat - 查看文件内容

在 Linux 中,cat(concatenate)命令用于查看文件内容、合并文件或创建新文件

语法格式

bash
cat [选项] [文件...]

选项

选项说明
-n显示所有行的行号(包括空行)。
-b显示非空行的行号(忽略空行)。
-s压缩连续空行为一行(仅保留一个空行)。
-E在每行末尾显示 $ 符号(标记行尾)。
-T将制表符(Tab)显示为 ^I
-A显示所有特殊符号(等效于 -vET)。
-v显示非打印字符(如控制字符)。
--help显示帮助信息。

经典案例

bash
cat -n file.txt  # 带行号查看文件

tac - 倒序查看文件

按行逆序输出文件内容(cat的逆序)

语法格式

bash
tac [选项] [文件...]

选项

选项说明
-b行分隔符前插入分隔符
-s指定行分隔符

经典案例

bash
tac log.txt  # 倒序查看日志文件

more - 分页查看

分页显示文件内容(仅向前翻页)

语法格式

bash
more [选项] [文件...]

选项

选项说明
-num指定每屏显示行数
+num从第num行开始显示

经典案例

bash
more +5 file.txt		# 从第5行开始
more -5 file.txt 		# 每屏显示5行
more +10 -5 file.txt  	# 从第10行开始,每屏显示5行

less - 分页查看

分页显示文件内容(支持前后翻页)

语法格式

bash
less [选项] [文件...]

选项

选项说明
-N显示行号
-i忽略搜索时的大小写
/pattern搜索内容(交互模式)

经典案例

bash
less -N /var/log/syslog  # 带行号查看系统日志
less app.log			# 查看时输入/搜索匹配内容回车后跳转到行

NOTE

q退出

pwd - 显示当前工作目录

打印当前所在绝对路径(当前位置) ctr+l(clear) 是清屏

语法格式

bash
pwd [选项]

选项

选项说明
-P显示物理路径(解析符号链接)
-L显示逻辑路径(默认行为,保留符号链接)

经典案例

bash
pwd       			# 显示当前工作目录(默认逻辑路径)
pwd -L             # 显示逻辑路径:/var/www/html
pwd -P             # 显示实际路径:/var/www/actual_site

ls - 列出目录内容

当前目录的内容 ; ls 目录名--查看指定目录 ; ls -l --查看文件属性

语法格式

bash
ls [选项] [目录或文件...]

选项

选项描述示例
-l以长格式显示(详细信息)ls -l
-a显示所有文件,包括隐藏文件(以 . 开头的文件)ls -a
-A显示除 ... 外的所有文件ls -A
-h以人类可读的格式显示文件大小(如 KB、MB)ls -lh
-t按修改时间排序(最新的在前)ls -t
-r反向排序ls -r
-S按文件大小排序(最大的在前)ls -S
-R递归列出子目录内容ls -R
-d显示目录本身而非内容`ls -d
-C以多列形式显示文件(按垂直方向排列)ls -C
--color彩色显示文件类型(默认启用)ls --color
-F在目录后加 /,可执行文件后加 *ls -F
-i显示文件的 inode 号ls -i

经典案例

bash
ls           # 简单列出当前目录
ls /etc      # 查看指定目录
ls *.txt     # 通配符匹配
ls -lh       # 带文件大小单位的长格式
ls -lht      # 按修改时间倒序(最新文件在前)
ls -lSrh     # 按文件大小升序(小文件在前)
ls -R /var/log | grep '\.log$'  # 递归查找日志文件
ls -l $(find /tmp -type f -mtime -1)  # 列出24小时内修改的文件

touch - 创建文件

touch命令的功能是创建空文件与修改时间戳。如果文件不存在,则会创建一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,管理员可以完成此项工作,而普通用户只能管理主机的文‍件。

语法格式

bash
touch [选项] [文件名]

选项

选项描述示例
-a仅更新访问时间(atime)touch -a file.txt
-m仅更新修改时间(mtime)touch -m file.txt
-c不创建新文件(仅更新时间戳)touch -c file.txt
-d "时间"使用指定时间更新文件时间戳touch -d "2023-01-01" file.txt
-r 参考文件使用参考文件的时间戳更新目标文件touch -r ref.txt file.txt
-t [[CC]YY]MMDDhhmm[.ss]使用指定时间格式更新文件时间戳touch -t 202301011200 file.txt

经典案例

bash
touch file.txt           # 更新访问和修改时间为当前时间
touch -a file.txt        # 仅更新访问时间
touch -m file.txt        # 仅更新修改时间
touch -t 202310151230.45 file.txt  # 设置为 2023-10-15 12:30:45
touch -d "2023-10-15 12:30" file.txt  # 使用自然语言格式(需系统支持)

stat - 文件或目录详细状态信息

Linux 的 stat 命令是用于显示文件或文件系统详细状态信息的核心工具,其功能比 ls 更底层。

语法格式

bash
stat [参数] 文件名

选项

选项作用示例
-c自定义输出格式stat -c "%A %n" * 显示所有文件权限和名称
-t简洁模式stat -t file 输出单行机器可读格式
-f格式化输出(支持换行)stat --printf="Size: %s\nOwner: %U\n" file
-L跟踪符号链接stat -L /path/to/link 显示链接目标信息

经典案例

bash
stat /etc/passwd			# 基础文件信息

mkdir - 创建目录

mkdir命令拿来创建目录。该命令创建由dirname命名的目录。若果在目录名的后面没有加任何路径名,则在当前目录下创建由dirname指定的目录;假如给出了一个早已存在的路径linux的777命令,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

语法格式

bash
mkdir [选项] 目录名...

选项

选项描述示例
-p--parents递归创建目录(包括父目录)mkdir -p /path/to/newdir
-m--mode设置目录权限(八进制或符号模式)mkdir -m 755 newdir
-v显示创建目录的详细信息mkdir -v newdir
--help显示帮助信息mkdir --help
--version显示版本信息mkdir --version
-z设置安全上下文,当使用SELinux时有效;mkdir -z newdir

经典案例

bash
mkdir project           # 创建单个目录
mkdir dir1 dir2 dir3    # 批量创建目录
mkdir -p a/b/c/d        # 自动创建父目录
mkdir -pv log/{2023,2024}/{q1,q2,q3,q4}  # 创建年度季度目录结构
mkdir -m 750 secure_dir    # 创建rwxr-x---权限的目录
mkdir -m a=rwx public_dir  # 使用符号权限模式

rm - 删除文件或目录

删除文件或目录

语法格式

bash
rm [选项] [文件或目录...]

选项

选项描述示例
-f强制删除,忽略不存在的文件和不提示rm -f file.txt
-i交互式删除,删除前询问确认rm -i file.txt
-r-R递归删除目录及其内容rm -r directory
-v显示删除的详细信息rm -v file.txt
-d删除空目录(类似 mkdir 命令)。rm -d directory
--preserve-root默认保护根目录 / ,防止误删(现代系统默认启用)。rm --preserve-root
--no-preserve-root危险!允许删除根目录(仅在特殊场景使用)。rm --no-preserve-root
--help显示帮助信息rm --help
--version显示版本信息rm --version

经典案例

bash
rm file.txt          # 删除单个文件
rm *.tmp             # 通配符删除临时文件
rm -v log_*.txt      # 显示删除的每个文件
rm -r old_project/   # 递归删除目录
rm -rf node_modules/ # 强制删除(无确认)
rm -I *.bak          # 批量删除但提示一次确认
rm -i important*     # 每个匹配文件都确认

注意事项

  1. 不可恢复性:Linux 没有回收站,删除后通常无法恢复

  2. 根目录保护:现代系统默认 --preserve-root 防止误删 /

  3. 符号链接行为:

    bash
    rm symlink       # 只删除链接本身
    rm -r symlink/   # 删除链接指向的内容(危险!)

☠️ 著名危险操作rm -rf /rm -rf * 在错误目录执行会导致灾难性后果

删除保护措施

  1. 设置 alias rm='rm -I'.bashrc
  2. 重要文件先 chattr +i 设置不可删除属性
  3. 使用 --one-file-system 防止跨文件系统删除
  4. 定期备份重要数据
  5. 建议管理员将 rm -rf / 等危险命令加入 sudoers 禁用列表。

mv - 移动或重命名文件

mv命令来自英文单词move的缩写,中文译为“移动”,其功能与英文含义相同,能够对文件进行剪切和重命名操作。

语法格式

bash
mv [选项] 源文件或目录 目标文件或目录mv [选项] 源文件1 源文件2 ... 目标目录

选项

选项描述示例
-i交互模式(覆盖前询问)mv -i file.txt newfile.txt
-f强制移动(不询问,直接覆盖)mv -f file.txt /backup/
-n不覆盖已存在的文件mv -n file.txt /backup/
-u仅当源文件比目标文件新时才移动mv -u file.txt /backup/
-v显示详细操作信息mv -v file.txt /backup/
--help显示帮助信息mv --help
--version显示版本信息mv --version

经典案例

bash
mv oldname.txt newname.txt      # 文件重命名
mv *.jpg /target_directory/     # 移动多个文件
mv old_dir/ new_dir/            # 目录重命名
mv dir1/ dir2/ dir3/ target/    # 移动多个目录
mv -i important.txt backup/     # 覆盖前确认
mv -n *.log logs/               # 跳过已存在文件
mv -b config.conf backup/       # 覆盖前创建备份(生成config.conf~)
mv -v {file1,file2,file3} destination/  # 显示移动过程
mv -S .bak -b old.c new.c       # 指定备份后缀(生成new.c.bak)
find . -name "*.tmp" -exec mv {} /tmp \; # 结合find移动文件、
mv -- -奇怪文件 正常文件名      # 处理特殊字符文件名
mv "$(date +%Y%m%d).log" archive/ # 使用日期变量

注意事项

  1. 跨文件系统移动实际是"复制+删除"操作

  2. 权限保留:移动后保留原文件属性(同分区)

  3. 符号链接行为

    bash
    mv symlink target/    # 移动链接本身
    mv symlink/ target/   # 移动链接指向内容(需-R)

find -搜索文件或目录

find 用于在指定目录及其子目录中搜索文件或目录,支持按名称、类型、大小、时间、权限等条件过滤,并能对结果执行操作(如删除、复制、执行命令等)。

语法格式

bash
find [搜索路径] [表达式] [操作]

选项

基础条件

选项说明示例
-name PATTERN按文件名匹配(区分大小写,支持通配符 * ? []find /home -name "*.txt"
-iname PATTERN按文件名匹配(不区分大小写)find /home -iname "readme*"
-type TYPE按类型过滤:f(文件)、d(目录)、l(符号链接)等find /var -type d
-path PATTERN按路径匹配(支持通配符,匹配完整路径)
-regex PATTERN按正则表达式匹配路径(需用 -regextype 指定类型,如 posix-extended

按时间过滤

选项说明示例
-mtime N按文件修改时间(N 天前,+N 表示超过 N 天,-N 表示 N 天内)find / -mtime -7
-atime N按文件访问时间
-ctime N按文件状态(如权限)修改时间
-mmin N按修改时间(分钟,+N/-N 同上)
-newer FILE比指定文件更新的文件

按大小过滤

选项说明示例
-size N[bcwkMG]按文件大小:N 为数值,单位可选
c(字节)、
k(KB)、
M(MB)等,
+N 表示大于,
-N 表示小于
find / -size +10M
-empty查找空目录find / -empty

按搜索深度

选项说明示例
-maxdepth N最多搜索N层如:-maxdepth 7find / -maxdepth 3 -name "*.conf"
-mindepth N从第N层开始搜索如-mindepth 3find / -mindepth 3 -name "*.conf"

按权限过滤

选项说明示例
-perm MODE精确匹配权限(如 -perm 644
-perm -MODE匹配至少包含指定权限(如 -perm -u=r 表示用户有读权限)
-perm /MODE匹配任意位权限(如 -perm /o=w 表示其他用户有写权限)
-user username匹配指定用户的文件如:-user wwwfind /home -user alice
-group groupname匹配指定组的文件如:group www
-nouser匹配没有属主的文件

逻辑操作符

选项说明
-and / -a逻辑与(默认)
-or / -o逻辑或
-not / !逻辑非
()分组条件(需转义为 $ ... $

执行操作

选项说明示例
-print打印结果(默认操作)
-delete删除匹配的文件/目录find /tmp -name "*.tmp" -delete
-exec COMMAND \;对结果执行命令({} 表示匹配项,\; 结束符)find . -name "*.log" -exec rm {} \;
-ok COMMAND \;交互式执行命令(需用户确认)
-print0输出以 \0 分隔(配合 xargs -0 处理含空格的文件名)

应用场景

1. 按名称搜索文件

bash
find /var/log -name "*.log"            # 搜索 /var/log 下所有 .log 文件
find ~ -iname "readme.md"              # 忽略大小写搜索用户主目录下的 README 文件

2. 按类型过滤

bash
find /etc -type d                      # 查找 /etc 下的所有目录
find . -type f -name "*.tmp"           # 查找当前目录下的 .tmp 文件

3. 按时间过滤

bash
find /backup -mtime +7                 # 查找 7 天前修改过的文件
find ~/Downloads -mmin -10             # 查找 10 分钟内修改过的文件
find . -newer reference.txt            # 比 reference.txt 更新的文件

4. 按大小过滤

bash
find /var -size +10M                   # 查找大于 10MB 的文件
find ~/ -size -100k                    # 查找小于 100KB 的文件

5. 按权限过滤

bash
find /usr/bin -perm 755                # 查找权限为 755 的文件
find . -perm -u=rwx                   # 查找用户有读、写、执行权限的文件

6. 组合条件

bash
# 查找当前目录下 7 天前修改的 .log 文件,且大小超过 1MB
find . -name "*.log" -mtime +7 -size +1M
# 查找用户主目录下的目录或 .jpg 文件
find ~ $ -type d -o -name "*.jpg" $

7. 执行操作

bash
# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -delete
# 将找到的 .txt 文件复制到 backup 目录
find . -name "*.txt" -exec cp {} ~/backup \;
# 交互式删除旧日志文件
find /var/log -name "*.log" -mtime +30 -ok rm {} \;

8. 处理含空格或特殊字符的文件名

bash
find . -name "*.pdf" -print0 | xargs -0 -I {} mv {} ~/Documents

9. 排除特定目录

bash
find /path -name "*.log" -not -path "*/exclude_dir/*"

10. 限制搜索深度

bash
find /var -maxdepth 2 -name "*.conf"    # 仅搜索 /var 及其下一级子目录

11. 结合正则表达式

bash
find . -regextype posix-extended -regex ".*/(2023|2024)-[0-9]{2}.log"

12. 统计文件数量

bash
find /var/log -type f | wc -l           # 统计文件总数

注意事项

  1. 性能影响:在根目录 / 下运行 find 可能会消耗大量资源,建议指定具体路径。
  2. 权限问题:如果没有权限访问某些目录,find 会报错(可使用 2>/dev/null 忽略错误)。
  3. -exec 语法:必须以 \; 结尾,{} 表示匹配的文件名。
  4. 危险操作-delete-exec rm 会直接删除文件,务必确认条件正确!
  5. 通配符转义:使用 -name 时,通配符需用引号包裹(如 "*.txt")。

head - 查看文件头部内容

显示文件的前 N 行(默认 10 行),常用于快速预览文件。

语法格式

bash
head [选项] 文件

选项

选项作用示例
-n NUM显示前 NUM 行head -n 5 file.log
-c NUM显示前 NUM 字节head -c 100 file.bin
-q不显示文件名(多文件时)head -q file1 file2
-v始终显示文件名head -v file1 → ==> file1 <== ...

经典案例

bash
# 查看前 5 行配置文件
head -n 5 /etc/nginx/nginx.conf

# 查看前 100 字节(适合二进制文件预览)
head -c 100 image.jpg

# 结合管道处理其他命令的输出
ps aux | head -n 5      # 显示前 5 个进程
seq 100 | head -n 20    # 显示 1-20 的序列

tail - 查看文件尾部内容

显示文件的最后 N 行(默认 10 行),常用于日志监控。

语法格式

bash
tail [选项] 文件

选项

选项作用示例
-n NUM显示最后 NUM 行tail -n 20 file.log
-c NUM显示最后 NUM 字节tail -c 500 file.log
-f实时追踪文件更新tail -f /var/log/nginx/access.log
-F类似 -f,但文件被轮转后自动重新打开tail -F app.log
-q不显示文件名(多文件时)tail -q file1 file2

经典案例

bash
# 查看日志最后 50 行
tail -n 50 /var/log/syslog

# 实时监控日志新增内容(调试必备)
tail -f /var/log/nginx/access.log

# 持续追踪日志(即使日志文件被轮转)
tail -F /var/log/app/app.log

# 查看文件末尾 1KB 内容
tail -c 1024 large_file.bin

# 结合 grep 过滤实时日志
tail -f app.log | grep "ERROR"

wc - 文件统计

统计文件的行数、单词数、字节数或字符数

语法格式

bash
wc [选项] [文件...]

选项

选项描述示例
-l仅统计行数wc -l file.txt
-w仅统计单词数wc -w file.txt
-c仅统计字符数wc -c file.txt
-m统计字符数(多字节字符按实际计算)wc -m file.txt
-L显示最长行的长度wc -L file.txt
--help显示帮助信息wc --help
--version显示版本信息wc --version

经典案例

bash
wc file.txt  				# 统计文件的行数、单词数、字节数(默认)
wc -l access.log  			# 仅统计文件行数
wc -w file1.txt file2.txt 	# 统计多个文件的总单词数
wc -l *.txt  				# 统计当前目录下所有 .txt 文件的行数
ls | wc -l 					# 结合管道统计命令输出的行数
wc -L script.sh 			# 统计最长行的长度(字节数)

注意事项:

  • 单词(-w)的定义:以空格、制表符或换行符分隔的字符串。
  • 字符(-m) vs 字节(-c
    • 在ASCII文件中,-c-m 结果相同。
    • 在UTF-8等多字节编码文件中,-m 统计实际字符数(如中文),-c 统计字节数。

md5sum - 效验文件

md5sum 是 Linux/Unix 系统中用于计算和校验文件 MD5 哈希值的工具。MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可生成 128 位(16字节)哈希值,常用于验证文件完整性。

语法格式

bash
md5sum [选项] [文件...]

选项

选项作用
-b二进制模式读取文件
-c从文件中读取 MD5 校验值并验证
--tag生成 BSD 风格的校验值
-t文本模式读取文件(默认)
--quiet校验失败时不输出警告信息
--status不输出任何信息,通过返回状态码表示结果

经典案例

bash
md5sum file.txt						# 计算单个文件的 MD5 值
md5sum file.txt > checksum.md5		# 生成校验文件
md5sum -c checksum.md5				# 验证文件 输出:file.txt: OK

注意事项

  1. MD5 安全性
    • MD5 已被证明存在碰撞漏洞,不适用于安全敏感场景(如密码存储)。
    • 需要更高安全性时,应使用 sha256sumsha512sum
  2. 大文件处理
    • 计算大文件时可能耗时较长,但内存占用较低。
  3. 跨平台一致性
    • Windows 的 certutil -hashfile 和 macOS 的 md5 命令输出格式不同,需注意兼容性。
  4. 校验文件格式
    • 使用 -c 时,校验文件必须是 MD5值 文件名 格式(如 d41d8cd... file.txt)。
  5. 隐藏文件
    • 对隐藏文件(如 .bashrc)同样有效。

echo - 输出文本内容

在 Linux 中,echo 命令用于在终端或脚本中输出文本。其语法简单但功能灵活,支持转义字符和变量扩展。

语法格式

bash
cat [选项] [字符串或变量...]

选项

选项描述示例
-n不输出末尾的换行符echo -n "Hello"
-e启用转义字符解释echo -e "Line1\nLine2"
-E禁用转义字符解释(默认)echo -E "Line1\nLine2"
--help显示帮助信息echo --help
--version显示版本信息echo --version

经典案例

bash
echo -e "OK! \n" 				# -e 开启转义
echo "It is a test" > myfile	# 显示结果定向至文件
echo "Price: \$100"				# 5. 输出特殊字符(如 $)
echo "Today is $(date)"			# 输出命令结果

gzip - 文件压缩工具

gzip (GNU zip) 是 Linux 系统中常用的文件压缩工具,采用 LZ77 算法实现高效压缩,生成 .gz 后缀的压缩文件。

语法格式

bash
gzip [选项] [文件...]
gunzip [选项] [文件.gz...]
zcat [文件.gz...]

选项

选项描述示例
-d解压文件(等同于 gunzipgzip -d file.gz
-c保留原始文件(输出到标准输出)gzip -c file > file.gz
-k保留原始文件(不删除)gzip -k file
-1~-9压缩级别(1 最快压缩率最低,9 最慢压缩率最高)gzip -9 largefile
-v显示压缩 / 解压进度gzip -v data.log
-t测试压缩文件完整性gzip -t backup.gz
-l显示压缩文件信息gzip -l archive.gz
-r递归处理目录gzip -r mydir
-f强制覆盖输出文件gzip -f logfile

经典案例

bash
gzip filename.txt  				# 生成 filename.txt.gz 并删除原文件
gzip -k access.log				# 保留原文件压缩
gzip -v *.log      				# 显示压缩进度
gzip -r /var/log/  				# 注意:只压缩文件不打包目录结构
gzip -d file.gz					# 解压缩
gunzip file.gz					# 解压缩
zcat file.gz       				# 不解压查看内容
gunzip -c file.gz  				# 不解压查看内容

WARNING

动态文件压缩可能会损坏文件内容。如音视频文件。

zip - 压缩工具

zip 是 Linux 下常用的压缩工具,支持跨平台(Windows/macOS/Linux),生成 .zip 格式的压缩文件。与 gzip 不同,zip 可以同时压缩多个文件和目录,并保留文件权限和目录结构。

语法格式

bash
zip [选项] 压缩文件名.zip 文件或目录...

选项

-r递归压缩目录zip -r archive.zip mydir/
-q静默模式(不显示输出)zip -q secret.zip file.txt
-e加密压缩(设置密码)zip -e secure.zip sensitive.txt
-1~-9压缩级别(1 最快压缩率最低,9 最慢压缩率最高)zip -9 data.zip largefile
-v显示详细压缩信息zip -v log.zip *.log
-m压缩后删除原文件zip -m backup.zip old_data.txt
-x排除指定文件zip archive.zip * -x "*.tmp"
-FS同步更新压缩包(仅添加新 / 修改的文件)zip -FS update.zip changed.txt
-s分卷压缩(指定每卷大小,如 -s 100mzip -s 100m split.zip bigfile
-T测试压缩包完整性zip -T archive.zip

经典案例

bash
zip archive.zip file1.txt file2.txt  			# 压缩多个文件
zip -r backup.zip /path/to/directory  			# 包含子目录
zip -e secure.zip secret.txt  					# 交互式输入密码
zip -r logs.zip /var/log/ -x "*.tmp"  			# 排除 .tmp 文件
zip -r test.zip test/ -x "test/1.txt" "test/2.txt" # 排除多个文件
zip -T archive.zip  							# 检查是否损坏

注意事项

  1. 默认不删除原文件zip 不会自动删除源文件,除非用 -m
  2. Windows 兼容性zip 格式在 Windows 上可直接打开,而 .tar.gz 需要额外工具
  3. 密码安全-P 选项会暴露密码在命令行历史,建议用 -e 交互式输入
  4. 大文件压缩zip 对超大文件(>4GB)支持不如 7ztar 稳定

unzip - 解压 ZIP 格式压缩文件

unzip 是用于解压 .zip 格式压缩文件的工具,支持查看压缩包内容、解压到指定目录、选择性解压文件等功能。它是 zip 命令的配套工具。

语法格式

bash
unzip [选项] 压缩包.zip [文件...] [-x 排除文件...] [-d 输出目录]

选项

选项描述示例
-d dir解压到指定目录unzip data.zip -d /tmp
-l仅列出压缩包内容(不解压)unzip -l archive.zip
-v详细模式(显示更多信息)unzip -v archive.zip
-o覆盖已存在文件(不提示)unzip -o backup.zip
-n不覆盖已存在文件unzip -n backup.zip
-x files排除指定文件unzip data.zip -x "*.tmp"
-P pwd使用密码解压(不安全)unzip -P 1234 secret.zip
-t测试压缩包完整性unzip -t archive.zip
-j丢弃路径信息(所有文件解压到当前目录)unzip -j flat.zip
-q静默模式(不显示输出)unzip -q silent.zip

经典案例

bash
# 基本解压
unzip archive.zip
# 解压到指定目录
unzip data.zip -d /path/to/target
# 查看压缩包内容
unzip -l archive.zip
# 只解压.txt文件
unzip archive.zip "*.txt"
# 排除.tmp文件
unzip archive.zip -x "*.tmp"
# 测试压缩包完整性
unzip -t archive.zip

tar- 打包归档工具

tar(Tape Archive)是 Linux 下最常用的归档工具,用于打包多个文件/目录(不压缩),或结合 gzip/bzip2/xz 进行压缩

语法格式

bash
# 打包/压缩
tar [选项] 输出文件.tar[.gz|.bz2|.xz] 文件或目录...

# 解包/解压
tar [选项] 输入文件.tar[.gz|.bz2|.xz] [-C 目标目录]

选项

选项描述示例
-c创建归档文件tar -cvf archive.tar dir/
-x解压归档文件tar -xvf archive.tar
-f指定归档文件名(必须放在最后)tar -cvf backup.tar /data
-v显示详细过程tar -cvf logs.tar /var/log
-z使用 gzip 压缩 / 解压(.tar.gztar -czvf archive.tar.gz dir/
-j使用 bzip2 压缩 / 解压(.tar.bz2tar -cjvf archive.tar.bz2 dir/
-J使用 xz 压缩 / 解压(.tar.xztar -cJvf archive.tar.xz dir/
-t查看归档内容(不解压)tar -tvf archive.tar
-r追加文件到归档tar -rvf archive.tar newfile.txt
-u仅添加比归档中更新的文件tar -uvf archive.tar modified.txt
--exclude排除指定文件 / 目录**(放在打包名后面)**tar -cvf backup.tar --exclude="*.tmp" dir/
-C解压到指定目录tar -xvf archive.tar -C /target
--auto-compress自动根据扩展名选择压缩方式tar -xvf archive.tar --auto-compress
-p保留文件权限tar -pcvf archive.tar dir/
-k不覆盖已有文件tar -kxvf archive.tar

经典案例

1. 基本打包(不压缩)

bash
tar -cvf archive.tar /path/to/directory  # 打包目录
tar -tvf archive.tar                     # 查看内容
tar -xvf archive.tar                     # 解包

2. 压缩(gzip / bzip2 / xz

bash
# gzip 压缩(.tar.gz)
tar -czvf archive.tar.gz /path/to/directory

# bzip2 压缩(.tar.bz2)
tar -cjvf archive.tar.bz2 /path/to/directory

# xz 压缩(.tar.xz,压缩率最高但最慢)
tar -cJvf archive.tar.xz /path/to/directory

3. 解压

bash
# 自动检测压缩方式并解压
tar -xvf archive.tar.gz

# 解压到指定目录
tar -xvf archive.tar.gz -C /target/directory

4. 排除某些文件

bash
tar -czvf backup.tar.gz --exclude="*.log" /path/to/directory

5. 追加文件到已有归档

bash
tar -rvf archive.tar newfile.txt  # 仅适用于未压缩的 .tar

注意事项

  1. -f 必须放在最后,否则会报错 ❌ tar -fc archive.tar /dir → ✅ tar -cvf archive.tar /dir
  2. -z / -j / -J 仅用于压缩,解压时 tar 会自动检测
  3. tar 默认覆盖文件,加 -k 可避免
  4. tar 不能加密,需配合 gpgzip -e
  5. --exclude排除选项在Centos7系统中放在打包名后面或者最后都可以,其它的要放在打包名后面(*.tar.gz --exclude="*.log")

chattr - 更改文件属性

chattr 命令用于更改 Linux 文件系统上的文件属性,这些属性比标准文件权限(如 chmod 设置的权限)更底层。它常用于设置文件不可删除、不可修改等特殊属性,特别适合系统关键文件的保护。

语法格式

bash
chattr [选项] [+/-/=属性] 文件...

选项

选项描述示例
-R递归处理目录及其内容chattr -R +i /etc
-V显示详细的输出信息chattr -V +a file.txt
-f抑制大部分错误信息chattr -f +i file.txt

属性

属性描述示例
+a只能追加内容(不能修改已有内容)chattr +a logfile.log
+i不可修改(不能删除、重命名、修改内容、创建链接)chattr +i /etc/passwd
+A不更新文件的访问时间chattr +A database.db
+c文件会被自动压缩存储chattr +c largefile.iso
+u文件被删除后,内容仍可恢复chattr +u important.doc
-移除属性chattr -i protected.sh

经典案例

bash
# 保护关键系统文件不被修改
sudo chattr +i /etc/passwd /etc/shadow /etc/group

# 允许日志文件只能追加内容
chattr +a /var/log/syslog

# 递归设置目录下所有文件不可修改
chattr -R +i /etc/nginx/

# 查看文件属性(使用 lsattr)
lsattr /etc/passwd

# 移除文件的不可修改属性
chattr -i /etc/resolv.conf

注意事项

  1. 大多数 chattr 操作需要 root 权限
  2. 即使 root 用户也无法修改设置了 +i 属性的文件
  3. 某些属性(如 +c 压缩)只在特定文件系统(如 ext2/ext3/ext4)上有效
  4. 使用 -R 递归选项时要特别小心,可能会意外锁定整个目录树
  5. lsattr 命令用于查看当前设置的属性

lsattr - 列出文件属性

lsattr 命令用于显示 Linux 文件系统上的文件扩展属性,这些属性是比标准文件权限更底层的控制标志。它通常与 chattr 命令配合使用,用于查看文件是否被设置为不可删除、不可修改等特殊状态。

语法格式

bash
lsattr [选项] [文件...]

选项

选项描述示例
-R递归列出目录及其内容的属性lsattr -R /etc
-d显示目录本身的属性lsattr -d /var/log
-a显示所有文件包括隐藏文件lsattr -a ~
-v显示文件版本/生成号lsattr -v /bin/bash
-p以数字形式显示属性lsattr -p /etc/passwd

属性标志说明

标志含义
a只能追加内容(append only)
A不更新访问时间(no atime updates)
c压缩存储(compressed)
d不进行 dump 备份(no dump)
e使用 extents 格式存储(extent format)
i不可修改(immutable)
j数据日志(data journaling)
s安全删除(secure deletion)
t禁用 tail-merging(no tail-merging)
u可恢复删除(undeletable)

经典案例

bash
# 查看关键系统文件的属性
sudo lsattr /etc/passwd /etc/shadow

# 递归查看目录下所有文件的属性
lsattr -R /etc/nginx/

# 查看目录本身的属性(而非内容)
lsattr -d /var/log

# 查看隐藏文件的属性
lsattr -a ~

# 结合 grep 查找被锁定的文件
lsattr -R / | grep "\----i-------"

注意事项

  1. 需要 root 权限才能查看某些系统文件的完整属性
  2. 属性标志 - 表示该属性未设置
  3. 某些属性只在特定文件系统(如 ext2/ext3/ext4)上有效
  4. 在递归模式(-R)下可能会显示大量输出,建议重定向到文件
  5. 属性标志的顺序和位置不影响其含义

inotifywait - 监控文件系统事件

简介

inotifywait 是 Linux 下基于 inotify 机制的文件系统监控工具,属于 inotify-tools 软件包的一部分。它可以阻塞式地等待文件系统事件(如文件创建、修改、删除等),非常适合用于编写自动化脚本。

语法格式

bash
inotifywait [-hcmrq] [-e <event>] [-t <seconds>] [--format <fmt>] [--timefmt <fmt>] <file> [<file> ...]

选项

选项描述示例
-h显示帮助信息inotifywait -h
-m持续监控模式(不退出)inotifywait -m /tmp
-r递归监控目录inotifywait -r /var/log
-q减少冗余输出inotifywait -q /home
-e <event>指定监控的事件类型inotifywait -e create,delete /tmp
-t <seconds>设置超时时间(秒)inotifywait -t 60 /opt
--format <fmt>自定义输出格式inotifywait --format '%T %w%f' /tmp
--timefmt <fmt>设置时间格式inotifywait --timefmt '%Y-%m-%d' /tmp
--exclude <pattern>大小写敏感的正则表达式排除模式inotifywait -r --exclude '^/tmp/backup' /tmp
--excludei <pattern>大小写不敏感的正则表达式排除模式inotifywait -r --excludei '\.log$' /var
--fromfile <file>从文件读取排除模式(每行一个)inotifywait -r --fromfile exclude_list.txt /data

--format占位符

占位符描述示例输出
%w监控的目录路径/tmp
%f触发事件的文件名(目录事件为空)test.log
%e事件类型(多个事件用逗号分隔)CREATE,MODIFY
%T当前时间(需配合--timefmt使用)2025-06-12 14:30:00

--timefmt占位符

参数说明示例输出
%Y4位年份2025
%y2位年份25
%m月份(01-12)06
%d日期(01-31)13
%H小时(00-23)15
%M分钟(00-59)30
%S秒(00-59)45
%A星期全称Friday
%a星期缩写Fri
%B月份全称June
%b月份缩写Jun
%F等价于 %Y-%m-%d2025-06-13
%T等价于 %H:%M:%S15:30:45
%Z时区CST
%z时区偏移+0800
%sUnix时间戳(秒)176543210
%N纳秒(需高精度支持)123456789

-e <event>事件

事件名称描述
access文件或目录被读取
modify文件内容被修改(目录的修改时间变化)
attrib文件或目录的元数据(权限、所有者、时间戳等)被修改
move文件或目录被移动(源目录触发)
move_to文件或目录被移动到监控目录(目标目录触发)
create在监控目录内创建新文件或子目录
open文件或目录被打开
close文件或目录被关闭(无论读写模式)
delete文件或目录被删除
umount包含监控项目的文件系统被卸载

经典案例

bash
# 监控/tmp目录下的文件创建和删除事件
inotifywait -m -e create,delete /tmp

# 递归监控网站目录的文件修改(用于触发自动部署)
inotifywait -mrq --format '%w%f' -e modify /var/www/html | while read file
do
    echo "文件已修改: $file"
    # 在此添加部署逻辑
done

# 带时间戳的监控输出
inotifywait -m --format '%T %w%f %e' --timefmt '%F %T' /data/logs

# 监控关键文件操作(创建/修改/删除/移动)
inotifywait -e create,modify,delete,move /important/files

# 监控权限变更和属性修改
inotifywait -e attrib /sensitive/data

# 递归监控/data但排除所有.git目录
inotifywait -mr --exclude '/\.git/' /data

# 监控网站目录但排除缓存和临时文件(不区分大小写)
inotifywait -mr --excludei '\.(sw[px]|tmp|bak)' /var/www

# 使用排除列表文件监控
echo -e "*.tmp\n*.bak\n/tmp/old/" > exclude.txt
inotifywait -mr --fromfile exclude.txt /home/user

注意事项

  1. 需要先安装 inotify-tools 包:sudo apt install inotify-tools(Debian/Ubuntu)
  2. 监控大量文件时可能触及系统默认的 inotify 限制,可通过修改 /proc/sys/fs/inotify/max_user_watches 调整
  3. 在 NFS 等网络文件系统上监控可能不可靠
  4. 使用 -m 持续监控模式时需配合管道或重定向使用,否则会持续输出到控制台
  5. 监控目录需要有读取权限

rsync - 远程文件同步工具

简介

rsync 是 Linux 下强大的文件同步工具,采用差异算法实现高效传输,支持本地和远程文件同步,能够只传输文件的变化部分,显著提高传输效率。

语法格式

bash
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]

选项

选项描述示例
-a归档模式(相当于-rlptgoDrsync -a /src /dest
-v显示详细输出rsync -v file.txt backup:/backup
-z传输时压缩数据rsync -az /data server:/backup
-h人类可读格式输出rsync -ah /src /dest
-P显示进度并支持断点续传rsync -aP largefile user@host:/path
-e ssh指定远程shellrsync -e "ssh -p 2222" /src user@host:/dest
--delete删除目标端多余文件rsync -a --delete /src/ /dest/
--exclude=PATTERN排除匹配文件rsync -a --exclude='*.tmp' /src /dest
--bwlimit=KBPS限制带宽(KB/s)rsync --bwlimit=1000 /src server:/dest

经典案例

bash
# 本地目录同步(保留所有属性)
rsync -av /path/to/src/ /path/to/dest/

# 远程同步到本地(使用SSH加密)
rsync -azP user@remote:/path/to/src/ /local/dest/

# 同步时排除特定文件
rsync -av --exclude='*.log' --exclude='temp/' /src/ user@host:/dest/

# 镜像同步(完全一致)
rsync -a --delete /src/ /dest/

# 带宽限制同步(1MB/s)
rsync -av --bwlimit=1000 /largefiles/ backup:/storage/

注意事项

  1. 源目录结尾的/很重要:带/表示同步目录内容,不带/表示同步目录本身
  2. 首次同步大文件建议使用-P参数以便查看进度
  3. --delete操作会永久删除目标端文件,使用前建议先不加此参数测试
  4. 远程同步需要配置SSH免密登录以便自动化
  5. 可通过--dry-run参数模拟运行而不实际执行