510 lines
19 KiB

.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40)
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
.de Vb \" Begin verbatim text
.ft CW
.ne \\$1
.de Ve \" End verbatim text
.ft R
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\" Avoid warning from groff about undefined register 'F'.
.de IX
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.rr rF
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.rm #[ #] #H #V #F C
.\" ========================================================================
.IX Title "NCDU 1"
.TH NCDU 1 "2021-07-22" "ncdu-2.0" "ncdu manual"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
ncdu \- NCurses Disk Usage
\&\fBncdu\fR [\fIoptions\fR] \fIdir\fR
ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du', and
provides a fast way to see what directories are using your disk space.
.IX Header "OPTIONS"
.SS "Mode Selection"
.IX Subsection "Mode Selection"
.IP "\-h, \-\-help" 4
.IX Item "-h, --help"
Print a short help message and quit.
.IP "\-v, \-V, \-\-version" 4
.IX Item "-v, -V, --version"
Print ncdu version and quit.
.IP "\-f \fI\s-1FILE\s0\fR" 4
.IX Item "-f FILE"
Load the given file, which has earlier been created with the \f(CW\*(C`\-o\*(C'\fR option. If
\&\fI\s-1FILE\s0\fR is equivalent to \f(CW\*(C`\-\*(C'\fR, the file is read from standard input.
For the sake of preventing a screw-up, the current version of ncdu will assume
that the directory information in the imported file does not represent the
filesystem on which the file is being imported. That is, the refresh, file
deletion and shell spawning options in the browser will be disabled.
.IP "\fIdir\fR" 4
.IX Item "dir"
Scan the given directory.
.IP "\-o \fI\s-1FILE\s0\fR" 4
.IX Item "-o FILE"
Export all necessary information to \fI\s-1FILE\s0\fR instead of opening the browser
interface. If \fI\s-1FILE\s0\fR is \f(CW\*(C`\-\*(C'\fR, the data is written to standard output. See the
examples section below for some handy use cases.
Be warned that the exported data may grow quite large when exporting a
directory with many files. 10.000 files will get you an export in the order of
600 to 700 KiB uncompressed, or a little over 100 KiB when compressed with
gzip. This scales linearly, so be prepared to handle a few tens of megabytes
when dealing with millions of files.
.IP "\-e" 4
.IX Item "-e"
Enable extended information mode. This will, in addition to the usual file
information, also read the ownership, permissions and last modification time
for each file. This will result in higher memory usage (by roughly ~30%) and in
a larger output file when exporting.
When using the file export/import function, this flag will need to be added
both when exporting (to make sure the information is added to the export), and
when importing (to read this extra information in memory). This flag has no
effect when importing a file that has been exported without the extended
This enables viewing and sorting by the latest child mtime, or modified time,
using 'm' and 'M', respectively.
.SS "Interface options"
.IX Subsection "Interface options"
.IP "\-0" 4
.IX Item "-0"
Don't give any feedback while scanning a directory or importing a file, other
than when a fatal error occurs. Ncurses will not be initialized until the scan
is complete. When exporting the data with \f(CW\*(C`\-o\*(C'\fR, ncurses will not be
initialized at all. This option is the default when exporting to standard
.IP "\-1" 4
.IX Item "-1"
Similar to \f(CW\*(C`\-0\*(C'\fR, but does give feedback on the scanning progress with a single
line of output. This option is the default when exporting to a file.
In some cases, the ncurses browser interface which you'll see after the
scan/import is complete may look garbled when using this option. If you're not
exporting to a file, \f(CW\*(C`\-2\*(C'\fR is probably a better choice.
.IP "\-2" 4
.IX Item "-2"
Provide a full-screen ncurses interface while scanning a directory or importing
a file. This is the only interface that provides feedback on any non-fatal
errors while scanning.
.IP "\-q" 4
.IX Item "-q"
Quiet mode. While scanning or importing the directory, ncdu will update the
screen 10 times a second by default, this will be decreased to once every 2
seconds in quiet mode. Use this feature to save bandwidth over remote
connections. This option has no effect when \f(CW\*(C`\-0\*(C'\fR is used.
.IP "\-r" 4
.IX Item "-r"
Read-only mode. This will disable the built-in file deletion feature. This
option has no effect when \f(CW\*(C`\-o\*(C'\fR is used, because there will not be a browser
interface in that case. It has no effect when \f(CW\*(C`\-f\*(C'\fR is used, either, because
the deletion feature is disabled in that case anyway.
\&\s-1WARNING:\s0 This option will only prevent deletion through the file browser. It is
still possible to spawn a shell from ncdu and delete or modify files from
there. To disable that feature as well, pass the \f(CW\*(C`\-r\*(C'\fR option twice (see
.IP "\-rr" 4
.IX Item "-rr"
In addition to \f(CW\*(C`\-r\*(C'\fR, this will also disable the shell spawning feature of the
file browser.
.IP "\-\-si" 4
.IX Item "--si"
List sizes using base 10 prefixes, that is, powers of 1000 (\s-1KB, MB,\s0 etc), as
defined in the International System of Units (\s-1SI\s0), instead of the usual base 2
prefixes, that is, powers of 1024 (KiB, MiB, etc).
.IP "\-\-confirm\-quit" 4
.IX Item "--confirm-quit"
Requires a confirmation before quitting ncdu. Very helpful when you
accidentally press 'q' during or after a very long scan.
.IP "\-\-color \fI\s-1SCHEME\s0\fR" 4
.IX Item "--color SCHEME"
Select a color scheme. Currently only two schemes are recognized: \fIoff\fR to
disable colors (the default) and \fIdark\fR for a color scheme intended for dark
.SS "Scan Options"
.IX Subsection "Scan Options"
These options affect the scanning progress, and have no effect when importing
directory information from a file.
.IP "\-x" 4
.IX Item "-x"
Do not cross filesystem boundaries, i.e. only count files and directories on
the same filesystem as the directory being scanned.
.IP "\-\-exclude \fI\s-1PATTERN\s0\fR" 4
.IX Item "--exclude PATTERN"
Exclude files that match \fI\s-1PATTERN\s0\fR. The files will still be displayed by
default, but are not counted towards the disk usage statistics. This argument
can be added multiple times to add more patterns.
.IP "\-X \fI\s-1FILE\s0\fR, \-\-exclude\-from \fI\s-1FILE\s0\fR" 4
.IX Item "-X FILE, --exclude-from FILE"
Exclude files that match any pattern in \fI\s-1FILE\s0\fR. Patterns should be separated
by a newline.
.IP "\-\-exclude\-caches" 4
.IX Item "--exclude-caches"
Exclude directories containing \s-1CACHEDIR.TAG.\s0 The directories will still be
displayed, but not their content, and they are not counted towards the disk
usage statistics.
.IP "\-L, \-\-follow\-symlinks" 4
.IX Item "-L, --follow-symlinks"
Follow symlinks and count the size of the file they point to. As of ncdu 1.14,
this option will not follow symlinks to directories and will count each
symlinked file as a unique file (i.e. unlike how hard links are handled). This
is subject to change in later versions.
.IP "\-\-exclude\-firmlinks" 4
.IX Item "--exclude-firmlinks"
(MacOS only) Exclude firmlinks.
.IP "\-\-exclude\-kernfs" 4
.IX Item "--exclude-kernfs"
(Linux only) Exclude Linux pseudo filesystems, e.g. /proc (procfs), /sys (sysfs).
The complete list of currently known pseudo filesystems is: binfmt, bpf, cgroup,
cgroup2, debug, devpts, proc, pstore, security, selinux, sys, trace.
.IX Header "KEYS"
.IP "?" 4
Show help + keys + about screen
.IP "up, down j, k" 4
.IX Item "up, down j, k"
Cycle through the items
.IP "right, enter, l" 4
.IX Item "right, enter, l"
Open selected directory
.IP "left, <, h" 4
.IX Item "left, <, h"
Go to parent directory
.IP "n" 4
.IX Item "n"
Order by filename (press again for descending order)
.IP "s" 4
.IX Item "s"
Order by filesize (press again for descending order)
.IP "C" 4
.IX Item "C"
Order by number of items (press again for descending order)
.IP "a" 4
.IX Item "a"
Toggle between showing disk usage and showing apparent size.
.IP "M" 4
.IX Item "M"
Order by latest child mtime, or modified time. (press again for descending order)
Requires the \-e flag.
.IP "d" 4
.IX Item "d"
Delete the selected file or directory. An error message will be shown when the
contents of the directory do not match or do not exist anymore on the
.IP "t" 4
.IX Item "t"
Toggle dirs before files when sorting.
.IP "g" 4
.IX Item "g"
Toggle between showing percentage, graph, both, or none. Percentage is relative
to the size of the current directory, graph is relative to the largest item in
the current directory.
.IP "c" 4
.IX Item "c"
Toggle display of child item counts.
.IP "m" 4
.IX Item "m"
Toggle display of latest child mtime, or modified time. Requires the \-e flag.
.IP "e" 4
.IX Item "e"
Show/hide 'hidden' or 'excluded' files and directories. Please note that even
though you can't see the hidden files and directories, they are still there and
they are still included in the directory sizes. If you suspect that the totals
shown at the bottom of the screen are not correct, make sure you haven't
enabled this option.
.IP "i" 4
.IX Item "i"
Show information about the current selected item.
.IP "r" 4
.IX Item "r"
Refresh/recalculate the current directory.
.IP "b" 4
.IX Item "b"
Spawn shell in current directory.
Ncdu will determine your preferred shell from the \f(CW\*(C`NCDU_SHELL\*(C'\fR or \f(CW\*(C`SHELL\*(C'\fR
variable (in that order), or will call \f(CW\*(C`/bin/sh\*(C'\fR if neither are set. This
allows you to also configure another command to be run when he 'b' key is
pressed. For example, to spawn the \fBvifm\fR\|(1) file manager instead of a shell,
run ncdu as follows:
.Vb 2
\& export NCDU_SHELL=vifm
\& ncdu
Ncdu will set the \f(CW\*(C`NCDU_LEVEL\*(C'\fR environment variable or increment it before
spawning the shell. This variable allows you to detect when your shell is
running from within ncdu, which can be useful to avoid nesting multiple
instances of ncdu. Ncdu itself does not (currently) warn when attempting to run
nested instances.
.IP "q" 4
.IX Item "q"
Entries in the browser interface may be prefixed by a one-character flag. These
flags have the following meaning:
.IP "!" 4
An error occurred while reading this directory.
.IP "." 4
An error occurred while reading a subdirectory, so the indicated size may not be
.IP "<" 4
File or directory is excluded from the statistics by using exclude patterns.
.IP ">" 4
Directory is on another filesystem.
.IP "^" 4
Directory is excluded from the statistics due to being a Linux pseudo filesystem.
.IP "@" 4
This is neither a file nor a folder (symlink, socket, ...).
.IP "H" 4
.IX Item "H"
Same file was already counted (hard link).
.IP "e" 4
.IX Item "e"
Empty directory.
To scan and browse the directory you're currently in, all you need is a simple:
.Vb 1
\& ncdu
If you want to scan a full filesystem, your root filesystem, for example, then
you'll want to use \f(CW\*(C`\-x\*(C'\fR:
.Vb 1
\& ncdu \-x /
Since scanning a large directory may take a while, you can scan a directory and
export the results for later viewing:
.Vb 3
\& ncdu \-1xo\- / | gzip >export.gz
\& # ...some time later:
\& zcat export.gz | ncdu \-f\-
To export from a cron job, make sure to replace \f(CW\*(C`\-1\*(C'\fR with \f(CW\*(C`\-0\*(C'\fR to suppress
any unnecessary output.
You can also export a directory and browse it once scanning is done:
.Vb 1
\& ncdu \-o\- | tee export.file | ./ncdu \-f\-
The same is possible with gzip compression, but is a bit kludgey:
.Vb 1
\& ncdu \-o\- | gzip | tee export.gz | gunzip | ./ncdu \-f\-
To scan a system remotely, but browse through the files locally:
.Vb 1
\& ssh \-C user@system ncdu \-o\- / | ./ncdu \-f\-
The \f(CW\*(C`\-C\*(C'\fR option to ssh enables compression, which will be very useful over
slow links. Remote scanning and local viewing has two major advantages when
compared to running ncdu directly on the remote system: You can browse through
the scanned directory on the local system without any network latency, and ncdu
does not keep the entire directory structure in memory when exporting, so you
won't consume much memory on the remote system.
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 \*(L"duplicate\*(R" and which as \*(L"original\*(R". 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 \*(L"H\*(R" 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.
.IX Header "BUGS"
Directory hard links are not supported. They will not be detected as being hard
links, and will thus be scanned and counted multiple times.
Some minor glitches may appear when displaying filenames that contain multibyte
or multicolumn characters.
All sizes are internally represented as a signed 64bit integer. If you have a
directory larger than 8 EiB minus one byte, ncdu will clip its size to 8 EiB
minus one byte. When deleting items in a directory with a clipped size, the
resulting sizes will be incorrect.
Item counts are stored in a signed 32\-bit integer without overflow detection.
If you have a directory with more than 2 billion files, quite literally
anything can happen.
On macOS 10.15 and later, running ncdu on the root directory without
`\-\-exclude\-firmlinks` may cause directories to be scanned and counted multiple
times. Firmlink cycles are currently (1.16) not detected, so it may also cause
ncdu to get stuck in an infinite loop and eventually run out of memory.
Please report any other bugs you may find at the bug tracker, which can be
found on the web site at
.IX Header "AUTHOR"
Written by Yoran Heling <>.
.IX Header "SEE ALSO"