语句的含义 - du -sk * |sort -rn|head

语句的含义 - du -sk * |sort -rn|head

我在理解这个 Linux 命令的含义时遇到了困难:

du -sk * | sort -rn | head

我知道 du 用于显示磁盘使用情况,但我在理解命令的其余部分时遇到了困难。有人可以解释一下这里到底发生了什么吗?还可以建议一些好的资源来详细研究复杂的linux命令吗?

答案1

a | b | c运行abc同时在单独的进程中运行,其中一个命令的标准输出通过管道连接到下一个命令的标准输入。

adu -sk **由 shell 扩展为当前目录中按词法排序的非隐藏文件的名称(如果没有非隐藏文件,则要么因错误中止命令,要么*根据 shell 扩展为文字)。

在这里,如果任何文件的名称以 开头-,则该文件将被视为选项du,因此正确的语法是:du -sk -- *,确保--其后面的任何内容都不会被视为选项。

-k是获取以千字节为单位的磁盘使用情况(1024 字节,标准du实现中默认为 512 字节单位)。-s是总结每个文件的磁盘使用情况(对于那些类型目录,它没有给出所有子目录的详细信息)。

因此,它将打印当前目录中所有非隐藏文件的磁盘使用情况(目录类型的累积),并在同一行上显示千字节数,后跟文件名(但要注意文件名可能由多于一行)。

对于许多du实现,如果某些参数引用相同的文件(硬链接)或在多个目录中找到相同的文件,则仅在输出中考虑第一次出现的磁盘使用情况。

sort -rn sort线其输入的数字n反过来r,因此假设所有文件名都不包含换行符,则会将文件/目录从最大到最小进行排序(根据磁盘使用情况)。

head( 的缩写head -n 10) 丢弃 的输出中除前 10 行之外的所有内容sort

一个更正确的版本,这些实用程序的 GNU 实现是:

du -skl0 ./* | sort -zk1,1rn | head -z | tr '\0' '\n'

其中-l强制所有硬链接都被考虑在内,-0/-z输出/进程记录以NUL分隔,因此它对于包含换行符的文件名效果更好(并且前缀./可以指示每个文件名在输出中的起始位置,对于那些包含换行符的文件名除了避免以-) 开头的文件名出现问题之外;使用sort -k1,1rn而不是sort -rn更改关系(具有相同磁盘使用情况的两个文件)时的行为,避免按词法反向对关系进行排序。


1 对于 GNU du,默认值是千字节,但可以用环境变量覆盖,包括POSIXLY_CORRECT, DU_BLOCK_SIZE, BLOCK_SIZE,BLOCKSIZE

答案2

它使用管道结构,允许一个命令的输出作为以下命令的输入。

du -sk * |sort -rn|head

启动 3 个命令

du -sk * 

du它运行以千字节 ( ) 为单位的磁盘使用命令输出-k,包括子目录,仅输出小计 ( -s) 作为输入发送到

sort -rn 

它将排序,将每个行键视为数字,按相反顺序(降序),输出发送到下一个命令。

head

默认情况下仅输出前 10 行。

相关内容