ncdu
在 Linux 上,以下是NCurses 磁盘使用工具的一些示例输出:
命令:
ncdu /boot
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help
--- /boot -----------------------------------------------------
100.2 MiB [##########] initrd.img-5.13.0-28-generic
100.2 MiB [######### ] initrd.img-5.13.0-27-generic
11.2 MiB [# ] vmlinuz-5.11.0-46-generic
9.7 MiB [ ] vmlinuz-5.13.0-28-generic
9.7 MiB [ ] vmlinuz-5.13.0-27-generic
9.7 MiB [ ] vmlinuz-5.13.0-25-generic
8.0 MiB [ ] /grub
5.7 MiB [ ] System.map-5.13.0-28-generic
5.7 MiB [ ] System.map-5.13.0-27-generic
5.7 MiB [ ] System.map-5.13.0-25-generic
5.6 MiB [ ] System.map-5.11.0-46-generic
252.0 KiB [ ] config-5.13.0-28-generic
252.0 KiB [ ] config-5.13.0-27-generic
252.0 KiB [ ] config-5.13.0-25-generic
252.0 KiB [ ] config-5.11.0-46-generic
184.0 KiB [ ] memtest86+_multiboot.bin
184.0 KiB [ ] memtest86+.elf
180.0 KiB [ ] memtest86+.bin
! 16.0 KiB [ ] /lost+found
! 4.0 KiB [ ] /efi
@ 0.0 B [ ] initrd.img.old
@ 0.0 B [ ] initrd.img
@ 0.0 B [ ] vmlinuz.old
@ 0.0 B [ ] vmlinuz
但是,它是一个人机交互程序,并且输出不可编写脚本。我想将它存储到一个变量中,那么,我怎样才能获得类似的输出du
呢?
这是我的问题的后续问题:如何ncdu
快速显示磁盘使用情况并退出?
最终用途将如下所示:
output_before="$(du /boot)"
# do a bunch of stuff here which reduces the size of /boot
output_after="$(du /boot)"
echo "Before:"
echo "$output_before"
echo ""
echo "After:"
echo "$output_after"
这是一个开始,但它没有以正确的从大到小的降序显示输出:
du --all --max-depth=1 -h /boot
我最想看到的:
--- /boot -----------------------------------------------------
100.2 MiB [##########] initrd.img-5.13.0-28-generic
100.2 MiB [######### ] initrd.img-5.13.0-27-generic
11.2 MiB [# ] vmlinuz-5.11.0-46-generic
9.7 MiB [ ] vmlinuz-5.13.0-28-generic
9.7 MiB [ ] vmlinuz-5.13.0-27-generic
9.7 MiB [ ] vmlinuz-5.13.0-25-generic
8.0 MiB [ ] /grub
5.7 MiB [ ] System.map-5.13.0-28-generic
5.7 MiB [ ] System.map-5.13.0-27-generic
5.7 MiB [ ] System.map-5.13.0-25-generic
5.6 MiB [ ] System.map-5.11.0-46-generic
252.0 KiB [ ] config-5.13.0-28-generic
252.0 KiB [ ] config-5.13.0-27-generic
252.0 KiB [ ] config-5.13.0-25-generic
252.0 KiB [ ] config-5.11.0-46-generic
184.0 KiB [ ] memtest86+_multiboot.bin
184.0 KiB [ ] memtest86+.elf
180.0 KiB [ ] memtest86+.bin
16.0 KiB [ ] /lost+found
4.0 KiB [ ] /efi
0.0 B [ ] initrd.img.old
0.0 B [ ] initrd.img
0.0 B [ ] vmlinuz.old
0.0 B [ ] vmlinuz
但是,可接受的最低答案如下所示:
100.2 MiB /boot/initrd.img-5.13.0-28-generic
100.2 MiB /boot/initrd.img-5.13.0-27-generic
11.2 MiB /boot/vmlinuz-5.11.0-46-generic
9.7 MiB /boot/vmlinuz-5.13.0-28-generic
9.7 MiB /boot/vmlinuz-5.13.0-27-generic
9.7 MiB /boot/vmlinuz-5.13.0-25-generic
8.0 MiB /boot/grub
5.7 MiB /boot/System.map-5.13.0-28-generic
5.7 MiB /boot/System.map-5.13.0-27-generic
5.7 MiB /boot/System.map-5.13.0-25-generic
5.6 MiB /boot/System.map-5.11.0-46-generic
252.0 KiB /boot/config-5.13.0-28-generic
252.0 KiB /boot/config-5.13.0-27-generic
252.0 KiB /boot/config-5.13.0-25-generic
252.0 KiB /boot/config-5.11.0-46-generic
184.0 KiB /boot/memtest86+_multiboot.bin
184.0 KiB /boot/memtest86+.elf
180.0 KiB /boot/memtest86+.bin
16.0 KiB /boot/lost+found
4.0 KiB /boot/efi
0.0 B /boot/initrd.img.old
0.0 B /boot/initrd.img
0.0 B /boot/vmlinuz.old
0.0 B /boot/vmlinuz
根据以下问题,这提供了可接受的最低答案:
示例用法,根据问题中的示例(但制成“单行”命令,因此我可以将其复制粘贴到终端中,而无需为其制作可执行文件脚本):
输出到标准输出的示例:
参考:
sort -h
可以按人类可读的大小进行排序,例如9.7 MiB
vs100 KiB
。也可以看看:
sort -h
可以对人类可读的输出进行排序du -h
python
从以下内容读取的小脚本ncdu -o-
:read_ncdu.py
:您可能想要改进脚本:
dsize
(disk size) 代替asize
(apparant size),或者在脚本中引入参数让用户决定。os.walk()
使用而不是使用ncdu -o-
输入使脚本独立。有关json 输出格式的说明,另请参见此处。
ncdu
跑:
使
read_ncdu.py
可执行文件 -->chmod +x read_ncdu.py
,然后你可以运行:输出:
du 确实提供了 -ah 选项,或者,您可以使用带有选项 -h 的 df 命令来获取可以通过脚本解释的已用空间百分比数据。
要进行排序,您可以使用此 serverurfault 帖子上显示的建议。https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size
来自 GNU
sort
手册:-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)