ncdu 磁盘空间管理小工具

2020/5/27 linux 命令

ncdu (NCurses Disk Usage) 是众所周知的 du 的基于 curses 的版本,它提供了一种快速的方式来查看正在使用哪些磁盘空间的目录。

官方网站 (opens new window)

# 概要

ncdu [options] dir
1

# 运行图片

# Scanning...

# Done scanning

# Directory information

# 示例

要扫描和浏览您当前所在的目录,只需一个简单的操作:

ncdu
1

如果要扫描整个文件系统(例如,根文件系统),则需要使用 -x

ncdu -x /
1

由于扫描大型目录可能需要一段时间,因此您可以扫描目录并导出结果以供以后查看:

ncdu -1xo- / | gzip > export.gz
# ...some time later:
zcat export.gz | ncdu -f-
1
2
3

要从 cron 作业导出,请确保将 -1 替换为 -0 以禁止任何不必要的输出。

扫描完成后,您还可以导出目录并浏览目录:

ncdu -o- | tee export.file | ./ncdu -f-
1

使用 gzip 压缩也可以做到这一点,但有点麻烦:

ncdu -o- | gzip | tee export.gz | gunzip | ./ncdu -f-
1

要远程扫描系统,但在本地浏览文件:

ssh -C user@system ncdu -o- / | ./ncdu -f-
1

ssh-C 选项启用压缩,这对于慢速链接非常有用。与直接在远程系统上运行 ncdu 相比,远程扫描和本地查看具有两个主要优点:您可以浏览本地系统上的扫描目录而没有任何网络延迟,并且 ncdu 在导出时不会将整个目录结构保留在内存中,这样您就不会在远程系统上消耗太多内存。

# 选项

# 模式选择

# -h,--help

打印简短的帮助消息并退出。

# -v,-V,-version

打印 ncdu 版本并退出。

# -f FILE

加载给定文件,该文件先前是使用 -o 选项创建的。如果 FILE 等效于 -,则从标准输入中读取文件。

为了防止损坏,当前版本的 ncdu 将假定导入文件中的目录信息不代表要在其上导入文件的文件系统。也就是说,浏览器中的刷新,文件删除和 shell 生成选项将被禁用。

# dir

扫描给定目录。

# -o FILE

将所有必要的信息导出到 FILE,而不是打开浏览器界面。如果 FILE 为 -,则将数据写入标准输出。有关一些方便的用例,请参见下面的示例部分。

请注意,导出包含许多文件的目录时,导出的数据可能会变得很大。10.000 个文件将为您提供大约 600 到 700 KiB 的未压缩输出,或使用 gzip 压缩后大约 100 KiB 的输出。这是线性扩展的,因此在处理数百万个文件时准备处理几十兆字节。

# -e

启用扩展信息模式。除通常的文件信息外,这还将读取每个文件的所有权,权限和最后修改时间。导出时,这将导致更高的内存使用率(大约 30%)和更大的输出文件。

使用文件导出/导入功能时,在导出(以确保将信息添加到导出中)和导入(以在内存中读取此额外信息)时都需要添加此标志。当导入已导出而没有扩展信息的文件时,此标志无效。

这样可以使用最新的 child mtime 或修改的时间,分别使用 'm' 和 'M' 进行查看和排序。

# 界面选项

# -0

扫描目录或导入文件时,请勿提供任何反馈,除非发生致命错误。扫描完成之前,不会初始化 Ncurses。用 -o 导出数据时,ncurses 根本不会初始化。导出到标准输出时,此选项是默认选项。

# -1

类似于 -0,但仅以单行输出就扫描进度提供反馈。导出到文件时,此选项是默认选项。

在某些情况下,使用此选项时,在扫描/导入完成后将看到的 ncurses 浏览器界面可能会出现乱码。如果您不导出到文件,则 -2 是一个更好的选择。

# -2

在扫描目录或导入文件时,提供全屏 ncurses 界面。这是唯一在扫描时提供有关任何非致命错误的反馈的界面。

# -q

静音模式。在扫描或导入目录时,默认情况下,ncdu 将每秒更新屏幕 10 次,在安静模式下,此间隔将减少为每 2 秒一次。使用此功能可以节省远程连接上的带宽。使用 -0 时,此选项无效。

# -r

只读模式。这将禁用内置文件删除功能。使用 -o 时,此选项无效,因为在这种情况下将没有浏览器界面。当使用 -f 时,它也不起作用,因为在这种情况下,无论如何都禁用了删除功能。

警告:此选项将仅防止通过文件浏览器删除。仍然有可能从 ncdu 生成 shell 并从那里删除或修改文件。要同时禁用该功能,请两次传递 -r 选项(请参阅 -rr)。

# -rr

除了 -r 之外,这还将禁用文件浏览器的 shell 生成功能。

# --si

使用国际单位制(SI)中定义的基数 10 前缀(即 1000 的幂,KB,MB 等)而不是通常的基数 2 前缀(即 1024 的幂,KiB,MiB 等)。

# -确认退出

退出 ncdu 之前需要确认。在长时间扫描过程中或扫描后不小心按 “q” 时,将非常有用。

# --color SCHEME

选择一种配色方案。当前仅识别两种方案:off 以禁用颜色(默认设置)和 dark(用于用于深色背景的配色方案)。

# 扫描选项

这些选项影响扫描进度,并且在从文件导入目录信息时不起作用。

# -x

请勿越过文件系统边界,即仅将与正在扫描的目录位于同一文件系统上的文件和目录计数。

# -exclude PATTERN

排除与 PATTERN 匹配的文件。默认情况下,这些文件仍将显示,但不计入磁盘使用情况统计信息。可以多次添加此参数以添加更多模式。

# -X FILE,--exclude-from FILE

排除与 FILE 中的任何模式匹配的文件。模式应该用换行符分隔。

# --exclude-caches

排除包含 CACHEDIR.TAG 的目录。目录仍将显示,但不显示其内容,并且不计入磁盘使用情况统计信息。请参阅此处 (opens new window)

跟随符号链接并计算它们指向的文件的大小。从 ncdu 1.14 开始,此选项将不遵循指向目录的符号链接,并且会将每个符号链接的文件视为一个唯一文件(即与处理硬链接不同)。这可能会在以后的版本中更改。

# 键位

#

显示帮助

# 上方向键,下方向键(j,k)

循环浏览项目

# 右方向键,enter, l

打开所选目录

# 左方向键,<,h

转到父目录

# n

按文件名排序(再次按降序排列)

# s

按文件大小排序(再次按降序排列)

# C

按项目数排序(再次按降序排列)

# a

在显示磁盘使用情况和显示大小之间切换。

# M

按最新的 child mtime 或修改的时间排序。(再次按降序排列)需要 -e 标志。

# d

删除选定的文件或目录。当目录的内容与文件系统不匹配或不再存在时,将显示一条错误消息。

# t

排序时,在文件前切换目录。

# G

在显示百分比,图形,两者显示或不显示之间切换。百分比是相对于当前目录的大小,图是相对于当前目录中的最大项目。

# c

切换子项计数的显示。

# m

切换最新 child mtime 或修改时间的显示。需要 -e 标志。

# e

显示/隐藏“隐藏”或“排除”的文件和目录。请注意,即使看不到隐藏的文件和目录,它们也仍然存在,并且仍包含在目录大小中。如果您怀疑屏幕底部显示的总数不正确,请确保未启用此选项。

# i

显示有关当前所选项目的信息。

# R

刷新/重新计算当前目录。

# b

在当前目录中生成 shell。

Ncdu 将通过 NCDU_SHELL 或 SHELL 变量(按此顺序)确定您首选的 shell,或者如果未设置两者,则将调用 /bin/sh。这样,您还可以配置另一个在按下 b 键时要运行的命令。例如,要生成 vifm(1)文件管理器而不是 shell,请按以下方式运行 ncdu:

export NCDU_SHELL=vifm
ncdu
q
Quit
1
2
3
4

# 文件标记

浏览器界面中的条目可以以一个字符的标志为前缀。这些标志的含义如下:

! 读取此目录时发生错误。

. 读取子目录时发生错误,因此指示的大小可能不正确。

< 通过使用排除模式,文件或目录将从统计信息中排除。

> 目录在另一个文件系统上。

@ 这既不是文件也不是文件夹(符号链接,套接字等)。

H 相同文件已被计数(硬链接)。

e 空目录。

Every disk usage analysis utility has its own way of (not) counting hard links. There does not seem to be any universally agreed method of handling hard links, and it is even inconsistent among different versions of ncdu. This section explains what each version of ncdu does.

ncdu 1.5 and below does not support any hard link detection at all: each link is considered a separate inode and its size is counted for every link. This means that the displayed directory sizes are incorrect when analyzing directories which contain hard links.

ncdu 1.6 has basic hard link detection: When a link to a previously encountered inode is detected, the link is considered to have a file size of zero bytes. Its size is not counted again, and the link is indicated in the browser interface with a 'H' mark. The displayed directory sizes are only correct when all links to an inode reside within that directory. When this is not the case, the sizes may or may not be correct, depending on which links were considered as "duplicate" and which as "original". The indicated size of the topmost directory (that is, the one specified on the command line upon starting ncdu) is always correct.

ncdu 1.7 and later has improved hard link detection. Each file that has more than two links has the "H" mark visible in the browser interface. Each hard link is counted exactly once for every directory it appears in. The indicated size of each directory is therefore, correctly, the sum of the sizes of all unique inodes that can be found in that directory. Note, however, that this may not always be same as the space that will be reclaimed after deleting the directory, as some inodes may still be accessible from hard links outside it.

Last Updated: 2023-10-29T08:26:04.000Z