Linux命令du详解

22 篇文章 0 订阅


用于学习记录,以下内容为官方英文文档的翻译,网络文章,和例子。

du是什么?

duDisk Usage的缩写, Linux 上最受欢迎的命令之一,du 是统计目录或文件所占磁盘空间大小的命令
官方文档:http://www.gnu.org/software/coreutils/du

du 命令的格式

du [选项] [目录或文件名]

常用的选项速查

  • -a: 显示目录中所有文件以及文件夹大小
  • -h: 以 KbMbGb 等易读的单位显示大小
  • --si: 类似 -h 选项,但是计算是用 1000 为基数而不是1024
  • -s: 显示目录总大小
  • -d: 是 --max-depth=N 选项的简写,表示深入到第几层目录,超过指定层数目录则忽略
  • -c: 除了显示目录大小外,额外一行显示总占用量
  • --time: 显示每一个目录下最近修改文件的时间
  • -t: 是 --threshold=SIZE 的简写,过滤掉小于 SIZE 大小的文件以及目录
  • --exclude=PATTERN:过滤与PATTERN匹配的文件名或者目录名

选项详解及例子

du [目录/文件]

du 什么参数都不加的时候,默认显示当前目录下的目录及子目录大小;单位默认是 Kb
du [目录] 显示指定目录及其子目录大小,单位默认是 Kb
du [文件] 显示指定文件大小,单位默认是 Kb
注意:不加-a情况下,只显示目录的大小,不显示文件大小

这里的[目录] 可加可不加,加上,表示指定目录,不加表示当前目录.
如果没有参数,du 报告表示当前目录或当前目录下的文件所需的空间。通常,空间以 1024 字节为单位打印,但这可以被覆盖。非整数数量将向上舍入到下一个更高的单位。

如果两个或多个硬链接指向同一文件,则仅计算其中一个硬链接。文件参数顺序会影响对哪些链接进行计数,并且更改参数顺序可能会更改 du 输出的数字和条目。

-a

--all 的简称
du -a显示当前目录及子目录及所有文件的大小;单位默认是 Kb

-d

--max-depth=N 选项的简写,表示深入到第几层目录,超过指定层数目录则忽略
du -d 2 相当于du --max-depth=2

-h

--human-readable的简称
让文件大小显示成人类易读的方式,比如
du -a -h
显示的信息以K,M,G为单位

-s

显示目录总大小;不能和-a -d 组合使用,否则会报错
可以和-h组合使用
--summarize 的简称
在这里插入图片描述

-c

相当于 --total
处理完所有参数后,打印所有参数的总计。这可用于找出给定文件或目录集的总文件系统使用情况。
通过-c选项也能获取目录总大小,不过它先显示子目录大小,最后一行显示总大小,下面例子最后一行 total 字符串前面的 3.6M 表示 lint/ 目录的总大小;
而且与-s 不同的是,-c可以和-a -d组合使用。

--time

显示最近修改时间

--time=ctime
--time=status
--time=use

显示目录或其任何子目录中任何文件的最近状态更改时间戳 (ctime)。

--time=atime
--time=access

显示目录或其任何子目录中任何文件的最近访问时间戳 (atime)。

--time --time-syle=STYLE 

显示最近修改时间 并指定时间的输出格式,
其中 STYLE 表示日期的格式化输出字符串,和 date 命令的格式化输出的格式一样的

以样式 style 列出时间戳。仅当同时指定了--time选项时,此选项才有效。

样式应该是以下之一:

+format

使用 format 列出时间戳,其中 format 的解释类似于日期的格式参数。
例如,--time-style="+%Y-%m-%d %H:%M:%S"导致du列出类似“2020-07-21 23:45:56”的时间戳。与日期一样,格式的解释受 LC_TIME 语言环境类别的影响。

full-iso

使用类似ISO 8601的日期、时间和时区组件(纳秒精度)完整列出时间戳,
例如“2020-07-21 23:45:56.477817180 -0400”。这种风格相当于‘+%Y-%m-%d %H:%M:%S.%N %z’

long-iso

列出具有分钟精度的 ISO 8601 日期和时间组件,例如“2020-07-21 23:45”。这些时间戳比full-iso时间戳短,通常足以满足日常工作。这种风格相当于‘+%Y-%m-%d %H:%M’

iso

列出 ISO 8601 日期的时间戳,例如“2020-07-21”。这种风格相当于‘+%Y-%m-%d’。 您可以使用环境变量TIME_STYLE指定--time-style选项的默认值;如果未设置 TIME_STYLE,则默认样式为“long-iso”。为了与ls兼容,如果 TIME_STYLE“+”开头并包含换行符,则换行符和任何后续字符将被忽略;如果 TIME_STYLE“posix-”开头,则“posix-”将被忽略;如果 TIME_STYLE“locale”,则会被忽略。

-t --threshold=SIZE

过滤掉小于 SIZE 大小的文件以及目录; --threshold=SIZE 的缩写;
单位默认为byte; 即 如果-t 20 ,则表示过滤掉小于20 byte的数据,只打印大于20byte的数据;如果-t 3M 则表示过滤掉小于3M的数据,只打印小于3M的数据

根据给定大小排除条目。大小是指正常模式下使用的块,或与 --inodes 选项结合使用的 inode 计数。

如果size为正数,则 du 将仅打印大小大于或等于该值的条目。

如果 size 为负数,则 du 将仅打印大小小于或等于该值的条目。

虽然 GNU find 可用于查找特定大小的文件,但 du--threshold选项也可用于根据给定大小过滤目录。 当与 --apparent-size 选项结合使用时,--threshold 选项会根据表观大小删除条目。当与--inodes选项结合使用时,它会根据 inode 计数删除条目。

以下是如何使用--threshold查找大小大于或等于 200 MB 的目录:

du --threshold=200MB

以下是如何使用--threshold查找表观大小小于或等于 500 字节的目录和文件(注意 -a):

du -a -t -500 --apparent-size

以下是如何使用 --threshold 来查找根文件系统上的目录,并且在下面的目录树中使用了超过 20000 个 inode:

du --inodes -x --threshold=20000 /

--exclude=PATTERN

可以根据模式匹配,从而过滤掉匹配上的目录和文件。
递归时,跳过匹配模式的子目录或文件。例如,du --exclude='*.o' 排除名称以.o结尾的文件。

--si

为每个大小添加 SI 风格的缩写,例如“M”表示兆字节。使用 1000 的幂,而不是 1024; “M”代表 1,000,000 字节。该选项相当于--block-size=si。如果您更喜欢 1024 的幂,请使用-h --human-readable选项。

-0 --null

-0
--null
在每行末尾输出一个零字节 (ASCII NUL),而不是换行符。此选项使其他程序能够解析输出,即使该输出包含带有嵌入换行符的数据。

--apparent-size

Print apparent sizes, rather than file system usage. The apparent size of a file is the number of bytes reported by wc -c on regular files, or more generally, ls -l --block-size=1 or stat --format=%s. For example, a file containing the word ‘zoo’ with no newline would, of course, have an apparent size of 3. Such a small file may require anywhere from 0 to 16 KiB or more of file system space, depending on the type and configuration of the file system on which the file resides. However, a sparse file created with this command:
dd bs=1 seek=2GiB if=/dev/null of=big 

以下内容为机翻,建议直接看英文版原文解释

打印表观大小,而不是文件系统使用情况。文件的表观大小是 wc -c 对常规文件报告的字节数,或更一般地说,是 ls -l --block-size=1stat --format=%s。例如,包含单词zoo”且没有换行符的文件的表观大小当然为 3。如此小的文件可能需要 0 到 16 KiB 或更多的文件系统空间,具体取决于类型和文件所在的文件系统的配置。但是,使用此命令创建的稀疏文件: dd bs=1寻求=2GiB if=/dev/null of=big 表观大小为 2 GiB,但在大多数现代文件系统上,它实际上几乎不使用任何空间。 表观大小仅对常规文件和符号链接有意义。其他文件类型不会影响表观大小。

-B size--block-size=size

在打印之前按尺寸缩放尺寸。例如,-BG 以 1,073,741,824 字节为单位打印大小。
按照指定的size为单位 打印出大小;单位为byte。
在这里插入图片描述

-b--bytes

--apparent-size --block-size=1效果一致
在这里插入图片描述

-k

以 1024 字节块为单位打印大小,覆盖默认块大小。该选项相当于--block-size=1K

-m

以 1,048,576 字节块为单位打印大小,覆盖默认块大小。该选项相当于--block-size=1M

-L--dereference

取消引用符号链接(显示链接指向的文件或目录使用的文件系统空间,而不是链接使用的空间)。

-l--count-links

计算所有文件的大小,即使它们已经出现(作为硬链接)。

-P--no-dereference

对于 du 遇到的每个符号链接,请考虑符号链接本身使用的文件系统空间。

-S--separate-dirs

通常,在 du 的输出中(不使用 --summarize 时),目录名称 d 旁边列出的大小表示 d 下面的所有条目的大小总和以及 d 本身的大小。使用--separate-dirs时,为目录名称 d 报告的大小将排除任何子目录的大小。

-D--dereference-args

或者 -H
取消引用作为命令行参数的符号链接。不影响其他符号链接。这有助于找出目录的文件系统使用情况,例如 /usr/tmp,这些目录通常是符号链接。

--inodes

列出 inode 使用信息而不是块使用信息。此选项对于查找包含许多文件的目录非常有用,因此会占用文件系统的大部分 inode 空间。它可以很好地与选项 -a、-c、-h、-l、-s、-S、-t 和 -x 结合使用;但是,传递有关块大小的其他选项(例如 -b、-m 和 --apparent-size)将被忽略。

-X file--exclude-from=file

--exclude 类似,但采用从文件中排除的模式(每行一个)。如果文件为“-”,则从标准输入中获取模式。

-x --one-file-system

跳过与正在处理的参数所在的文件系统不同的文件系统上的目录。
--files0-from=file
禁止处理命令行上命名的文件,而是处理文件 file 中命名的文件;每个名称均以零字节 (ASCII NUL) 结尾。当文件名列表太长以至于可能超出命令行长度限制时,这非常有用。在这种情况下,通过 xargs 运行 du 是不可取的,因为它将列表分成几部分,并为每个子列表而不是整个列表使用

--total (-c)

选项进行 du 打印。生成ASCII NUL终止文件名列表的一种方法是使用 GNU find,使用其-print0谓词。如果文件为“-”,则从标准输入读取以 ASCII NUL 结尾的文件名。

du 应用场景

当磁盘空间满的时候,排查出占用大的文件和目录,进行针对性的清理工作。

du 和 sort

组合使用排查 磁盘占用大的文件

du -c -h lint/ -d 2 -t 21 | sort -hr | head -n 2

du --help

在这里插入图片描述
在这里插入图片描述

总结

du 命令通常被系统管理员用作自动监控和通知程序的补充,有助于防止关键目录和分区变满。已满或几乎已满的目录和分区会导致系统变慢,阻止用户登录,甚至导致系统崩溃。

由于 du 依赖于操作系统报告的信息,因此其输出可能无法反映底层设备中消耗的空间。

例如:

操作系统通常不会报告重复或备份块、纠错位等消耗的设备空间。这导致du低估了实际使用的设备空间。

在使用写时复制的文件系统中,如果两个不同的文件共享空间,du 的输出通常会计算重写所有文件的非空洞时将消耗的空间,而不是当前消耗的空间。

在使用压缩的文件系统中,操作系统可能会报告未压缩的空间。 (如果它确实报告了压缩空间,则该报告可能会在仅覆盖现有文件数据后发生变化。)

网络文件系统历来难以将准确的文件系统信息从服务器传输到客户端。

由于这些原因,du 最好被视为对一组文件的 tar 或其他常规备份的大小的估计,而不是作为底层设备中消耗的空间的度量。 退出状态为零表示成功,非零值表示失败。

参考

https://www.php.cn/faq/491002.html

  • 40
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值