文章图片
01 du 与 df 作用与区别?
Linux 最有用最常用的统计文件大小命令是什么?无疑就是 du 和 df 了。
du(disk usage)
du 能看到的文件只是一些当前存在的,没有被删除的。
df(disk free)
df 主要用于 Linux 系统上的文件系统磁盘使用情况统计。
当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失,而是暂时消失,当所有程序都不用时,才会根据 OS 的规则释放掉已经删除的文件,df 记录的是通过文件系统获取到的文件的大小,它比 du 强的地方就是能够看到已经删除的文件。
df 和 du 不一致情况就是是否可看到被删除的文件,这也是 df 统计可能比 du 统计大的原因。
02 du 常用命令示例
- du -h # 显示当前目录下所有文件及目录(包含子目录下内容)大小,-h 会换算成 K、M、G 等人类易读结果;
- du -b # 或-bytes 显示目录或文件大小时,以byte为单位;
- du -k # 或--kilobytes,以1024 bytes为单位;
- du -m #或--megabytes 以1MB为单位
- du -a #显示当前目录下所有文件所占空间(含隐藏文件,包含目录,文件,层级目录下文件);
文章图片
- du -s # 显示当前目录总大小(不会列出层级子目录);
文章图片
- du -s * # 显示当前目录下每个文件夹和文件的大小(最常用)
文章图片
- du -s [文件夹1] [或文件1] #显示指定目录或文件大小;
文章图片
- du --max-depth=1 [目录] # 只显示指定目录下第一层目录(不单个含文件)的大小;
- du --max-depth=2 [目录] # 只显示指定目录第一和二层目录(不含单个文件)的大小;
文章图片
- -n# 依照数值的大小排序;
- -r# 以相反的顺序来排序;
- -o <输出文件># 将排序后的结果存入制定的文件;
- -b# 忽略每行前面开始出的空格字符;
- -c# 检查文件是否已经按照顺序排序;
- -f# 排序时,将小写字母视为大写字母;
- -m# 将几个排序号的文件进行合并;
- -i# 排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
- -d# 排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
- -M# 将前面3个字母依照月份的缩写进行排序;
- du -a /temp/logs| sort -nr #按照文件从大到小排序(含隐藏文件,包含目录,文件,层级目录下文件);
- du -m --max-depth=1/temp/logs| sort -nr | head -n 10 # 指定目录第一层,显示前 Top10,-m: 统计单位为MB,为什么不用-h?sort 大小排序只看数字,不看单位,可能会导致 2G 反而排序在 200M 之后;(只显示指定目录下第一层目录(不单个含文件)的大小;)
- du -m --max-depth=1/temp/logs| sort -nr -o 'sort.txt' | head -n 10 # 使用sort -o 参数将排序结果存入指定文件sort.txt 中。
方案一:
空字符串覆盖文件内容,是删除文件的一种优雅方式。
echo "" > info.log
方案二:
echo 不管用的特列情况,使用如下步骤。
- (1)du -sh * # 查看文件的使用情况;
- (2)du -h--max-depth=1[文件目录]| sort -nr # 查找占用磁盘的文件目录的大文件,删除日志(优雅使用 echo "" > xx.log),发现磁盘使用率仍未下降;
- (3)lsof | grep delete # 发现有文件句柄并未释放的大文件,导致磁盘使用率未下降,文件已经 deleted 了,但是进程还未结束,所以直接kill;
- (4)kill -9 [pid] # kill 这个进程(这个要根据线上实际情况来看是否可以被 kill,最好优雅关闭进程),最后查看 df -h 恢复正常。
「不甩锅的码农」原创,转载请注明来源,未经授权禁止商业用途!同名 GZH 请关注!
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- Python|Python实战(使用线性回归预测房价)
- IC|数字IC后端真的不如前端设计和验证吗()
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~
- python|oeasy教您玩转python - 007 - # 字符本质
- vue.js|后端开发学习Vue(一)
- Go|Docker后端部署详解(Go+Nginx)
- 后台|NATAPP内网穿透通过nginx实现一个端口访问多个不同端口服务