AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 684952
Accepted
Dawson Smith
Dawson Smith
Asked: 2022-01-05 02:23:52 +0800 CST2022-01-05 02:23:52 +0800 CST 2022-01-05 02:23:52 +0800 CST

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

  • 772

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

du -sk * | sort -rn | head

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

disk-usage
  • 2 2 个回答
  • 78 Views

2 个回答

  • Voted
  1. X Tian
    2022-01-05T02:38:44+08:002022-01-05T02:38:44+08:00

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

    du -sk * |sort -rn|head
    

    启动 3 个命令

    du -sk * 
    

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

    sort -rn 
    

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

    head
    

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

    • 1
  2. Best Answer
    Stéphane Chazelas
    2022-01-05T03:36:45+08:002022-01-05T03:36:45+08:00

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

    这里,a是du -sk *。*由 shell 扩展为当前目录中按词法排序的非隐藏文件的名称(如果没有非隐藏文件,则中止命令并出现错误或扩展为文字*,具体取决于 shell)。

    在这里,如果任何文件的名称以 开头-,则将被 视为选项du,因此正确的语法应为:du -sk -- *,以--确保不将任何超过它的内容视为选项。

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

    因此它将打印当前目录中所有非隐藏文件的磁盘使用情况(对于那些类型目录的累积),其中千字节数后跟同一行的文件名(尽管要注意文件名可能由不止一行)。

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

    sort -rn sorts其输入的行在neverse 中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更改关系时的行为(两个文件具有相同的磁盘使用情况),避免在词法上反向排序关系。


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

    • 1

相关问题

  • 如何使用df计算总磁盘空间?

  • 使用 DD 在外部读取器中写入原始磁盘时出现磁盘空间错误?

  • 如何提高磁盘空间使用率?

  • 具有更细粒度的人类可读的“du”

  • 除了完全使用的文件夹之外,“设备上没有剩余空间”的其他原因是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve