回到首页

输入关键词,多个关键词用空格分隔。

← 命令行与工程工具 · 系列目录

Linux 实战:归档、磁盘与文本命令

约 3 分钟更新于 2026-11-06
本页目录

压缩解压 tar

如果要在服务器之间发送大量数据,肯定少不了压缩和解压这两步,但是 tar 这个命令的参数之多,让我很绝望,于是我发明了一个简单的记忆方法。

使用 tar 命令只要记得参数是『必选+自选+f』即可,我们先来看看『必选!五选一』:

  1. -c 意为 create,表示创建归档(本身不压缩)
  2. -x 意为 extract,表示解压
  3. -t 表示查看内容
  4. -r 给归档追加文件
  5. -u 意为 update,更新归档中的文件

注意了,上面是一定要五选一的,不能一个都不选,也不能同时选俩。但是自选的部分就可以按照需要挑选了,比如:

  • -z 使用 gzip 属性
  • -j 使用 bz2 属性
  • -Z 使用 compress 属性
  • -v 意为 verbose,显示详细的操作过程
  • -O 将文件输出到标准输出

这套记法把 f 放在短选项组的最后,后面紧跟归档名(无论是要解压还是要压缩,都是指归档的名字)。接下来我们看看具体实例,就很容易理解具体的用法了。

# 假设我们有很多 .md 文件需要打包,那么可以使用
tar -cf posts.tar *.md # c 是创建归档,本身不压缩,然后是 f,给出归档名,最后是要压缩的文件

# 然后我们发现还有一些 .txt 文件也需要打包进去,那么可以使用
tar -rf posts.tar *.txt # r 是追加文件

# 然后我们发现 hello.md 弄错了,修正后需要更新到归档中,可以使用
tar -uf posts.tar hello.md # u 是更新

# 压缩好了,我们来看看归档的内容,可以使用
tar -tf posts.tar # t 是列出文件内容

# 把归档发送到其他位置之后,需要解压,可以使用
tar -xf posts.tar # x 是解压

加入自选参数后的用法(要不要加 v 可以看个人喜好)

# tar.gz 相关
tar -czf posts.tar.gz *.md # 压缩
tar -xzf posts.tar.gz # 解压

# tar.bz2 相关
tar -cjf posts.tar.bz2 *.md # 压缩
tar -xjf posts.tar.bz2 # 解压

# tar.Z 相关
tar -cZf posts.tar.Z *.md # 压缩
tar -xZf posts.tar.Z # 解压

总结一波,遇到不同类型的文件,请用不同的套路来应对:

  • *.tar -> tar -xf
  • *.tar.gz -> tar -xzf
  • *.tar.bz2 -> tar -xjf
  • *.tar.Z -> tar -xZf
  • *.gz -> gzip -d
  • *.rar -> unrar x(保留目录结构)
  • *.zip -> unzip

-r 和 -u 用于未压缩的 tar 归档,不能直接这样追加到 .tar.gz。解包前可以先列出内容,再解到独立目录;-O 则把内容写到标准输出。

磁盘占用与大文件

磁盘被写满是各种奇怪错误的常见源头。先看文件系统剩余空间,再逐层找目录:

df -h
du -h --max-depth=1 . | sort -h
find /var/log -type f -size +5120M -exec ls -lh {} +

这里的 --max-depth 和 sort -h 按 GNU 工具写法。sort -n 不会正确比较混合的 K/M/G 单位;macOS 等环境需要查对应手册。目录统计受到读取权限影响,不能把不完整结果当成全部占用。

按时间查找文件

find ./logs -type f -mtime +7 -print

-mtime 按已经过去的完整 24 小时区间计算,+7 指超过 7 个完整区间,不能简单理解为“自然日的七天以前”。先打印核对结果,再决定是否处理。

文件名可能有空格甚至换行。把结果交给其他程序时,优先用 -exec command {} +,或在两端都支持时使用 -print0 与 xargs -0,不要把普通换行输出直接交给 xargs 删除文件。

文本统计与查看

# 先排序,再统计重复行;uniq 只合并相邻重复行
sort access.log | uniq -c | sort -nr | head
# 查看文件开头、结尾,以及持续追加的日志
head -n 20 application.log
tail -n 50 application.log
tail -f application.log
# 保存输出的同时显示到终端
printf '%s\n' '检查结果' | tee result.txt

tee 默认覆盖文件,追加使用 tee -a。tail -f 关注文件追加;日志轮转时需要了解当前实现按文件描述符还是文件名跟踪。

更完整的排障顺序见 Linux 服务器检查指南,脚本语法见 Shell 入门指南。

相关文章