Appearance
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* # 每个匹配文件都确认
注意事项
不可恢复性:Linux 没有回收站,删除后通常无法恢复
根目录保护:现代系统默认
--preserve-root
防止误删/
符号链接行为:
bashrm symlink # 只删除链接本身 rm -r symlink/ # 删除链接指向的内容(危险!)
☠️ 著名危险操作:
rm -rf /
或rm -rf *
在错误目录执行会导致灾难性后果
删除保护措施
- 设置
alias rm='rm -I'
在.bashrc
中 - 重要文件先
chattr +i
设置不可删除属性 - 使用
--one-file-system
防止跨文件系统删除 - 定期备份重要数据
- 建议管理员将
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/ # 使用日期变量
注意事项
跨文件系统移动实际是"复制+删除"操作
权限保留:移动后保留原文件属性(同分区)
符号链接行为:
bashmv 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 7 | find / -maxdepth 3 -name "*.conf" |
-mindepth N | 从第N层开始搜索如-mindepth 3 | find / -mindepth 3 -name "*.conf" |
按权限过滤
选项 | 说明 | 示例 |
---|---|---|
-perm MODE | 精确匹配权限(如 -perm 644 ) | |
-perm -MODE | 匹配至少包含指定权限(如 -perm -u=r 表示用户有读权限) | |
-perm /MODE | 匹配任意位权限(如 -perm /o=w 表示其他用户有写权限) | |
-user username | 匹配指定用户的文件如:-user www | find /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 # 统计文件总数
注意事项
- 性能影响:在根目录
/
下运行find
可能会消耗大量资源,建议指定具体路径。 - 权限问题:如果没有权限访问某些目录,
find
会报错(可使用2>/dev/null
忽略错误)。 -exec
语法:必须以\;
结尾,{}
表示匹配的文件名。- 危险操作:
-delete
或-exec rm
会直接删除文件,务必确认条件正确! - 通配符转义:使用
-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
统计字节数。
- 在ASCII文件中,
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
注意事项
- MD5 安全性
- MD5 已被证明存在碰撞漏洞,不适用于安全敏感场景(如密码存储)。
- 需要更高安全性时,应使用
sha256sum
或sha512sum
。
- 大文件处理
- 计算大文件时可能耗时较长,但内存占用较低。
- 跨平台一致性
- Windows 的
certutil -hashfile
和 macOS 的md5
命令输出格式不同,需注意兼容性。
- Windows 的
- 校验文件格式
- 使用
-c
时,校验文件必须是MD5值 文件名
格式(如d41d8cd... file.txt
)。
- 使用
- 隐藏文件
- 对隐藏文件(如
.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 | 解压文件(等同于 gunzip ) | gzip -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 100m ) | zip -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 # 检查是否损坏
注意事项
- 默认不删除原文件(
zip
不会自动删除源文件,除非用-m
) - Windows 兼容性:
zip
格式在 Windows 上可直接打开,而.tar.gz
需要额外工具 - 密码安全:
-P
选项会暴露密码在命令行历史,建议用-e
交互式输入 - 大文件压缩:
zip
对超大文件(>4GB)支持不如7z
或tar
稳定
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.gz ) | tar -czvf archive.tar.gz dir/ |
-j | 使用 bzip2 压缩 / 解压(.tar.bz2 ) | tar -cjvf archive.tar.bz2 dir/ |
-J | 使用 xz 压缩 / 解压(.tar.xz ) | tar -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
注意事项
-f
必须放在最后,否则会报错 ❌tar -fc archive.tar /dir
→ ✅tar -cvf archive.tar /dir
-z
/-j
/-J
仅用于压缩,解压时tar
会自动检测tar
默认覆盖文件,加-k
可避免tar
不能加密,需配合gpg
或zip -e
--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
注意事项
- 大多数
chattr
操作需要 root 权限 - 即使 root 用户也无法修改设置了
+i
属性的文件 - 某些属性(如
+c
压缩)只在特定文件系统(如 ext2/ext3/ext4)上有效 - 使用
-R
递归选项时要特别小心,可能会意外锁定整个目录树 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-------"
注意事项
- 需要 root 权限才能查看某些系统文件的完整属性
- 属性标志
-
表示该属性未设置 - 某些属性只在特定文件系统(如 ext2/ext3/ext4)上有效
- 在递归模式(
-R
)下可能会显示大量输出,建议重定向到文件 - 属性标志的顺序和位置不影响其含义
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占位符
参数 | 说明 | 示例输出 |
---|---|---|
%Y | 4位年份 | 2025 |
%y | 2位年份 | 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-%d | 2025-06-13 |
%T | 等价于 %H:%M:%S | 15:30:45 |
%Z | 时区 | CST |
%z | 时区偏移 | +0800 |
%s | Unix时间戳(秒) | 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
注意事项
- 需要先安装 inotify-tools 包:
sudo apt install inotify-tools
(Debian/Ubuntu) - 监控大量文件时可能触及系统默认的 inotify 限制,可通过修改
/proc/sys/fs/inotify/max_user_watches
调整 - 在 NFS 等网络文件系统上监控可能不可靠
- 使用
-m
持续监控模式时需配合管道或重定向使用,否则会持续输出到控制台 - 监控目录需要有读取权限
rsync - 远程文件同步工具
简介
rsync 是 Linux 下强大的文件同步工具,采用差异算法实现高效传输,支持本地和远程文件同步,能够只传输文件的变化部分,显著提高传输效率。
语法格式
bash
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
选项
选项 | 描述 | 示例 |
---|---|---|
-a | 归档模式(相当于-rlptgoD ) | rsync -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 | 指定远程shell | rsync -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/
注意事项
- 源目录结尾的
/
很重要:带/
表示同步目录内容,不带/
表示同步目录本身 - 首次同步大文件建议使用
-P
参数以便查看进度 --delete
操作会永久删除目标端文件,使用前建议先不加此参数测试- 远程同步需要配置SSH免密登录以便自动化
- 可通过
--dry-run
参数模拟运行而不实际执行