[转帖]009 Linux 文件大小统计与排序 (du 于 df 和 sort)

linux,文件大小,统计,排序,du,df,sort · 浏览次数 : 0

小编点评

**du 和 df 的作用与区别:** | 特征 | du | df | |---|---|---| | 文件大小单位 | 字节 | 字节 | | 显示 | 文件大小 | 文件系统使用情况 | | 可看到被删除的文件 | 可以 | 可以 | | 使用场景 | 获取文件大小 | 查看文件系统使用情况 | **01 du 常用命令示例:** * `du -h` 显示当前目录下所有文件及目录的大小,以字节为单位。 * `du -b` 或 `du -bytes` 显示目录或文件大小以字节为单位。 * `du -m` 或 `du -megabytes` 以 1MB 为单位显示目录或文件大小。 * `du -a` 显示当前目录下所有文件所占空间(含隐藏文件)。 * `du -s` 显示当前目录总大小。 * `du -s *` 显示当前目录下每个文件夹和文件的大小。 **02 sort 常用参数:** * `-n`:依照数值的大小排序。 * `-r`:以相反的顺序来排序。 * `-o`:将排序后的结果存入指定文件。 * `-b`:忽略每行前面开始出的空格字符。 * `-c`:检查文件是否已经按照顺序排序。 * `-f`:排序时,将小写字母视为大写字母。 * `-m`:将几个排序号的文件进行合并。 **03 sort 排序方式互斥:** * `-i`:除了 040 至 176 之间的 ASCII 字符外,忽略其他的字符。 * `-d`:处理英文字母、数字及空格字符外,忽略其他的字符。 * `-M`:将前面 3 个字母依照月份的缩写进行排序。 * `-4`:忽略所有其他字符。 **04 使用 rm 命令删除文件:** 使用 `rm` 命令可以删除文件,但无法直接删除文件,因为应用程序此时正在使用该文件,直接删除它们会产生有害影响。 **05 如何删除文件:** * **方案一:空字符串覆盖文件内容** ``` echo \"\"\" > info.log ``` * **方案二:使用 du 和 find 命令** ``` du -sh * # 查看文件的使用情况 du -h &--max-depth=1 & sort -nr # 查找占用磁盘的文件目录的大文件,删除日志 lsof | grep delete # 发现有文件句柄并未释放的大文件,导致磁盘使用率未下降 kill -9 [pid] # kill 这个进程(这个要根据线上实际情况来看是否可以被 kill,最好优雅关闭进程) ``` **06 小结:** * du 常用的组合命令是与 sort、head 一起使用,排序找出最大的那批文件。 * 在遇到磁盘溢满问题的时,可以与 find 命令合用找出最大的那一批文件删掉。

正文

https://my.oschina.net/u/3113381/blog/5463932

 

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 #  显示当前目录下所有文件所占空间(含隐藏文件,包含目录,文件,层级目录下文件); file

  • du -s # 显示当前目录总大小 (不会列出层级子目录); file

  • du -s * # 显示当前目录下每个文件夹和文件的大小 (最常用) file

  • du -s [文件夹 1] [或文件 1] #  显示指定目录或文件大小; file

  • du --max-depth=1 [目录] # 只显示指定目录下第一层目录(不单个含文件)的大小;

  • du --max-depth=2 [目录] # 只显示指定目录第一和二层目录(不含单个文件)的大小; file

03 sort 常用参数

(sort 作用是将文件内容排序,以行为单位)

  • -n  # 依照数值的大小排序;
  • -r  # 以相反的顺序来排序;
  • -o <输出文件>  # 将排序后的结果存入制定的文件;
  • -b  # 忽略每行前面开始出的空格字符;
  • -c  # 检查文件是否已经按照顺序排序;
  • -f  # 排序时,将小写字母视为大写字母;
  • -m  # 将几个排序号的文件进行合并;

👇以下几个参数与 -n 排序方式互斥:

  • -i  # 排序时,除了 040 至 176 之间的 ASCII 字符外,忽略其他的字符;
  • -d  # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
  • -M  # 将前面 3 个字母依照月份的缩写进行排序;

04 常用组合 du + sort + head

  • 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 中。

05 如何删除文件,如大的日志文件?

通常使用 rm 命令删除文件以释放空间。但是我们无法删除文件是非常常见的,因为应用程序此时正在使用该文件,直接删除它们会产生有害影响,例如挂起应用程序,应用程序崩溃等。

方案一:

空字符串覆盖文件内容,是删除文件的一种优雅方式。

echo "" > info.log

    

方案二:

echo 不管用的特列情况,使用如下步骤。

  1. (1)du -sh * # 查看文件的使用情况;
  2. (2)du -h  --max-depth=1  [文件目录]| sort -nr # 查找占用磁盘的文件目录的大文件,删除日志(优雅使用 echo "" > xx.log),发现磁盘使用率仍未下降;
  3. (3)lsof | grep delete # 发现有文件句柄并未释放的大文件,导致磁盘使用率未下降,文件已经 deleted 了,但是进程还未结束,所以直接 kill;
  4. (4)kill -9 [pid] # kill 这个进程(这个要根据线上实际情况来看是否可以被 kill,最好优雅关闭进程),最后查看 df -h 恢复正常。

06 小结

du 常用的组合命令是与 sort、head 一起使用,排序找出最大的那批文件。在遇到磁盘溢满问题的时,可以与 find 命令合用找出最大的那一批文件删掉。与 sort 排序统计时使用具体的 - m、-k 参数,而不是用 - h,否则会导致统计不准确。因为 sort -n 是根据数字大小,而不是单位进行统计。还有生产环境删除大文件的一些操作套路。

与[转帖]009 Linux 文件大小统计与排序 (du 于 df 和 sort)相似的内容:

[转帖]009 Linux 文件大小统计与排序 (du 于 df 和 sort)

https://my.oschina.net/u/3113381/blog/5463932 01 du 与 df 作用与区别? Linux 最有用最常用的统计文件大小命令是什么?无疑就是 du 和 df 了。 du(disk usage) du 能看到的文件只是一些当前存在的,没有被删除的。 df(

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes