📜  LINUX 中的 du 命令

📅  最后修改于: 2022-05-13 01:57:27.221000             🧑  作者: Mango

LINUX 中的 du 命令

在 LINUX 上工作时,可能会出现要传输一组文件或整个目录的情况。在这种情况下,您可能想知道该特定目录或文件集消耗的磁盘空间。当您使用 LINUX 时,也存在一个用于此的命令行实用程序,它是du命令,用于估计和显示文件使用的磁盘空间。

因此,简单地说, du命令行实用程序可帮助您找出一组文件或目录的磁盘使用情况。

这是 du 命令的语法:

//syntax of du command

du [OPTION]... [FILE]...
       or
du [OPTION]... --files0-from=F

其中OPTION是指与 du 命令兼容的选项, FILE是指您想知道其占用磁盘空间的文件名。

使用 du 命令



假设有两个文件kt.txtpt.txt并且您想知道这些文件的磁盘使用情况,那么您可以通过指定文件名以及它来简单地使用 du 命令:

//using du command

$du kt.txt pt.txt
8       kt.txt
4       pt.txt

/* the first column 
displayed the file's
disk usage */

所以,如上图du显示了相应文件所使用的磁盘空间。

现在,显示的值实际上是以– -block -size和 DU_BLOCK_SIZE 、 BLOCK_SIZEBLOCKSIZE环境变量的第一个可用 SIZE为单位,如果不是这种格式,则单位默认为 1024 字节(如果 POSIXLY_CORRECT 为 512 字节)放)。

不要对上面的段落感到困惑。我们可以简单地使用-h选项来强制 du 以人类可读的格式生成输出。

du 命令的选项

  • -a, – -all 选项:此选项将计数作为所有文件的输出,而不仅仅是目录。
  • – -apparent-size 选项:这会打印文件的表观大小,而不是磁盘使用量,由于文件中的漏洞(稀疏)、内部碎片和间接块可能会更大,但实际上表观大小更小。
  • -c, – -total 选项:显示总计。
  • -B, – -block-size=SIZE 选项:此选项使大小按 SIZE 缩放,就像-BM以兆字节为单位打印大小。
  • -b, – -bytes 选项:此选项等效于– -apparent-size – -block-size=1
  • -D, – -dereference-args 选项:此选项仅用于取消引用命令行中列出的符号链接。
  • -H 选项:此选项等效于上面的-D选项。
  • – -files0-from=F 选项:用于汇总文件 F 中指定的以 NUL结尾的文件名的磁盘使用情况,如果文件 F 是“-”,则从标准输入读取名称。
  • -h, – -human-readable 选项:这会以人类可读的格式打印大小,舍入值并使用1 K等缩写,这是 du 最常用的选项。
  • – -si 选项:这与 -h选项非常相似,但使用 1000 的幂而不是 1024 的幂。
  • -k 选项:相当于– -block-size=1K
  • -l, – -count-links 选项:如果文件是硬链接的,则此计数大小会增加很多倍。
  • -m 选项:这相当于– – block-size=1M
  • -L, – -dereference 选项:此选项取消引用所有符号链接。
  • -P, – -no-dereference 选项:这个选项告诉 du 不要遵循任何默认设置的符号链接。
  • -0, –null 选项:这会以0 字节而不是换行符结束每个输出行。
  • -S, – -separate-dirs 选项:这会导致输出不包括子目录的大小。
  • -s, – -summarize 选项:此选项将允许仅显示每个参数的总数。
  • -x, – -one-file-system 选项:这将导致 du 跳过不同文件系统上的目录。
  • -X, – -exclude-from=FILE 选项:排除与 FILE 中给出的任何模式匹配的文件。
  • – -exclude=PATTERN 选项:它将排除匹配 PATTERN 的文件。
  • -d, – -max-depth=N 选项:仅当目录(或文件,使用 –all)低于命令行参数 N 或更少级别时才打印总数; –max-depth=0 与 –summarize 相同。
  • – -time 选项:这将显示目录或其任何子目录中任何文件的最后修改时间。
  • – -time=WORD 选项:这将时间显示为 WORD 而不是修改时间: atime、access、use、ctimestatus
  • – -time-style=STYLE 选项:使用 STYLE 显示时间: full-iso、long-iso、iso+FORMAT (FORMAT 被解释为日期格式)。
  • – -help 选项:这将显示帮助消息并退出。
  • – -version 选项:这将显示版本信息并退出。

du 命令的使用示例

1. 使用 -h 选项:如上所述,-h 选项用于生成人类可读格式的输出。

//using -h with du

$du -h kt.txt pt.txt
8.0K    kt.txt
4.0K    pt.txt

/*now the output
is in human readable
format i.e in
Kilobytes */

2. 使用 du 显示目录的磁盘使用情况:现在,如果您将目录名称 say kartik作为参数传递给 du,它将显示输入目录kartik及其子目录(如果有)的磁盘使用信息。



/*using du to display disk usage 
of a directory and its
sub-directories */

$du kartik
4       kartik/thakral
24      kartik

上面的目录卡尔蒂克及其子目录显示德加拉的磁盘使用情况的信息。

3.使用-a选项:现在,如上所示,只有目录的磁盘使用信息
显示卡尔蒂克及其子目录德加拉,但如果你也想知道的所有文件提交的目录下卡尔蒂克的磁盘使用情况的信息是什么。为此,请使用-a选项。

//using -a with du

$du -a kartik
8       kartik/kt.txt
4       kartik/pt.txt
4       kartik/pranjal.png
4       kartik/thakral.png
4       kartik/thakral
24      kartik

/*so with -a option used
all the files (under directory
kartik) disk usage info is
displayed along with the 
thakral sub-directory */

4. 使用 -c 选项:此选项显示总计,如图所示。

//using -c with du

$du -c -h kt.txt pt.txt
8.0K    kt.txt
4.0K    pt.txt
12.0K   total

/* at the end
total is displayed 
for the disk usage */

5.使用--time选项:该选项用于在du的输出中显示最后修改时间。

//using --time with du

$du --time kt.txt
4       2017-11-18 16:00       kt.txt

/*so the last
modification date and
time gets displayed
when --time 
option is used */

6.使用- -exclude = PATTERN选项:在上面的例子中的一个,所有文件的磁盘使用情况有关的信息被显示的目录卡尔蒂克的。现在,假设您只想知道 .txt 文件的信息而不是 .png 文件的信息,在这种情况下,要排除.png模式,您可以使用此选项。

//using --exclude=PATTERN with du

$du --exclude=*.png -a kartik
8       kartik/kt.txt
4       kartik/pt.txt
4       kartik/thakral
24      kartik

/*so, in this case
.png files info are
excluded from the output */

7. 使用 – -max-depth=N 选项:现在,此选项允许您将 du 的输出限制到目录的特定深度。
假设您有一个名为FRIENDS的目录,在该目录下有 FRIENDS/collegeFRIENDS/school子目录,并且在子目录 College 下还有另一个子目录FRIENDS/college/farewell那么您可以使用– -max-depth =N选项在这种情况下为:

//using --max-depth=N with du

$du --max-depth=0 FRIENDS
24       FRIENDS


/* in this case you 
restricted du output
only to top=level
directory */

现在,对于子目录学院和学校,您可以使用:

$du --max-depth=1 FRIENDS
16      FRIENDS/college
8       FRIENDS/school
24      FRIENDS

现在,对于朋友/大学/告别,您可以使用–max-depth=2作为:

$du --max-depth=2 FRIENDS
4       FRIENDS/college/farewell
16      FRIENDS/college
8       FRIENDS/school
24      FRIENDS

/*so this is how N
in --max-depth=N 
is used for levels */

8. 使用--files0-from=F 选项:如上所述,这用于总结文件F中指定的以NUL结尾的文件名的磁盘使用情况,如果文件F为“-”,则从标准中读取名称输入。
让我们使用此选项从 STDIN 获取输入:

//using --files0from=F with du

$pwd
/home/kartik

$ls
kt.txt pt.txt thakral

/*now use this option for 
taking input from
STDIN */

$du --files0-from=-
kt.txt8 kt.txt
pt.txt4 pt.txt

/* in this case after 
giving kt.txt as a input
from STDIN there is need to
press Ctrl+D twice then the
output is shown and same for
pt.txt or any other file name
given from STDIN */

du 命令的应用

  • 它可用于在将文件从一台计算机传输到另一台计算机时找出特定目录占用的磁盘空间。
  • du命令可以通过管道链接到过滤器过滤器通常是一个专门的程序,它以有意义的方式转换数据。
  • 此外,还存在一些其他的方式就像df命令来查找磁盘使用情况,但他们都缺乏能力,显示单个目录和文件的磁盘使用情况。
  • 它还可以用于快速找出目录中存在的子目录的数量。

将 du 与过滤器一起使用的示例

让我们举一个简单的例子,将 du 与 sort 命令一起使用,以便 du 产生的输出将按照文件大小的递增顺序进行排序。

$du -a kartik
8       kartik/kt.txt
4       kartik/pt.txt
4       kartik/pranjal.png
4       kartik/thakral.png
4       kartik/thakral
24      kartik

/*now using du to produce
sorted output */

$du -a kartik | sort -n
4       kartik/pt.txt
4       kartik/pranjal.png
4       kartik/thakral.png
4       kartik/thakral
8       kartik/kt.txt
24      kartik

/* now the output displayed
is sorted according to the size */

sort命令和-n选项一起使用会导致按数字顺序列出输出,其中最小的文件首先出现。
这样du就可以根据大小来排列输出了。

这就是 du命令的全部内容。