Linux 实战:归档、磁盘与文本命令
本页目录
压缩解压 tar
如果要在服务器之间发送大量数据,肯定少不了压缩和解压这两步,但是 tar 这个命令的参数之多,让我很绝望,于是我发明了一个简单的记忆方法。
使用 tar 命令只要记得参数是『必选+自选+f』即可,我们先来看看『必选!五选一』:
-c意为 create,表示创建归档(本身不压缩)-x意为 extract,表示解压-t表示查看内容-r给归档追加文件-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 入门指南。
相关文章
- Shell 入门指南2016-08-02
- Crontab 指南:周期任务与执行环境2016-07-26
- Linux 服务器检查指南2016-09-28
- Tmux 与 Byobu:终端中的窗口管理2016-03-30