SPDX-FileCopyrightText: 2021-2023 Yoran Heling <projects@yorhel.nl>SPDX-License-Identifier: MIT=head1 NAMEB<ncdu> - NCurses Disk Usage=head1 SYNOPSISB<ncdu> [I<options>] I<dir>=head1 DESCRIPTIONncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du', andprovides a fast way to see what directories are using your disk space.=head1 OPTIONS=head2 Mode Selection=over=item B<-h>, B<--help>Print a short help message and quit.=item B<-v>, B<-V>, B<--version>Print ncdu version and quit.=item B<-f> I<FILE>Load the given file, which has earlier been created with the C<-o> option. IfI<FILE> is equivalent to C<->, the file is read from standard input.For the sake of preventing a screw-up, the current version of ncdu will assumethat the directory information in the imported file does not represent thefilesystem on which the file is being imported. That is, the refresh, filedeletion and shell spawning options in the browser will be disabled.=item I<dir>Scan the given directory.=item B<-o> I<FILE>Export all necessary information to I<FILE> instead of opening the browserinterface. If I<FILE> is C<->, the data is written to standard output. See theexamples section below for some handy use cases.Be warned that the exported data may grow quite large when exporting adirectory with many files. 10.000 files will get you an export in the order of600 to 700 KiB uncompressed, or a little over 100 KiB when compressed withgzip. This scales linearly, so be prepared to handle a few tens of megabyteswhen dealing with millions of files.=item B<-e>, B<--extended>, B<--no-extended>Enable/disable extended information mode. This will, in addition to the usualfile information, also read the ownership, permissions and last modificationtime 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 addedboth when exporting (to make sure the information is added to the export), andwhen importing (to read this extra information in memory). This flag has noeffect when importing a file that has been exported without the extendedinformation.This enables viewing and sorting by the latest child mtime, or modified time,using 'm' and 'M', respectively.=item B<--ignore-config>Do not attempt to load any configuration files.=back=head2 Scan OptionsThese options affect the scanning progress, and have no effect when importingdirectory information from a file.=over=item B<-x>, B<--one-file-system>Do not cross filesystem boundaries, i.e. only count files and directories onthe same filesystem as the directory being scanned.=item B<--cross-file-system>Do cross filesystem boundaries. This is the default, but can be specified tooverrule a previously given C<-x>.=item B<--exclude> I<PATTERN>Exclude files that match I<PATTERN>. The files will still be displayed bydefault, but are not counted towards the disk usage statistics. This argumentcan be added multiple times to add more patterns.=item B<-X> I<FILE>, B<--exclude-from> I<FILE>Exclude files that match any pattern in I<FILE>. Patterns should be separatedby a newline.=item B<--include-caches>, B<--exclude-caches>Include (default) or exclude directories containing CACHEDIR.TAG. Thedirectories will still be displayed, but their contents will not be scanned orcounted towards the disk usage statistics.L<http://www.brynosaurus.com/cachedir/>=item B<-L>, B<--follow-symlinks>, B<--no-follow-symlinks>Follow (or not) symlinks and count the size of the file they point to. As ofncdu 1.14, this option will not follow symlinks to directories and will counteach symlinked file as a unique file (i.e. unlike how hard links are handled).This is subject to change in later versions.=item B<--include-kernfs>, B<--exclude-kernfs>(Linux only) Include (default) or 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.=back=head2 Interface options=over=item B<-0>Don't give any feedback while scanning a directory or importing a file, otherthan when a fatal error occurs. Ncurses will not be initialized until the scanis complete. When exporting the data with C<-o>, ncurses will not beinitialized at all. This option is the default when exporting to standardoutput.=item B<-1>Similar to C<-0>, but does give feedback on the scanning progress with a singleline of output. This option is the default when exporting to a file.In some cases, the ncurses browser interface which you'll see after thescan/import is complete may look garbled when using this option. If you're notexporting to a file, C<-2> is probably a better choice.=item B<-2>Provide a full-screen ncurses interface while scanning a directory or importinga file. This is the only interface that provides feedback on any non-fatalerrors while scanning.=item B<-q>, B<--slow-ui-updates>, B<--fast-ui-updates>Change the UI update interval while scanning or importing. Ncdu will update thescreen 10 times a second by default (C<--fast-ui-updates>), this can bedecreased to once every 2 seconds with C<-q> or C<--slow-ui-updates>. Thisfeature can be used to save bandwidth over remote connections. This option hasno effect when C<-0> is used.=item B<--enable-shell>, B<--disable-shell>Enable or disable shell spawning from the browser. This feature is enabled bydefault when scanning a live directory and disabled when importing from file.=item B<--enable-delete>, B<--disable-delete>Enable or disable the built-in file deletion feature. This feature is enabledby default when scanning a live directory and disabled when importing fromfile. Explicitly disabling the deletion feature can work as a safeguard toprevent accidental data loss.=item B<--enable-refresh>, B<--disable-refresh>Enable or disable directory refreshing from the browser. This feature isenabled by default when scanning a live directory and disabled when importingfrom file.=item B<-r>Read-only mode. When given once, this is an alias for C<--disable-delete>, whengiven twice it will also add C<--disable-shell>, thus ensuring that there is noway to modify the file system from within ncdu.=item B<--si>, B<--no-si>List sizes using base 10 prefixes, that is, powers of 1000 (KB, MB, etc), asdefined in the International System of Units (SI), instead of the usual base 2prefixes, that is, powers of 1024 (KiB, MiB, etc).=item B<--disk-usage>, B<--apparent-size>Select whether to display disk usage (default) or apparent sizes. Can also betoggled in the browser with the 'a' key.=item B<--show-hidden>, B<--hide-hidden>Show (default) or hide "hidden" and excluded files. Can also be toggled in thebrowser with the 'e' key.=item B<--show-itemcount>, B<--hide-itemcount>Show or hide (default) the item counts column. Can also be toggled in thebrowser with the 'c' key.=item B<--show-mtime>, B<--hide-mtime>Show or hide (default) the last modification time column. Can also be toggledin the browser with the 'm' key. This option is ignored when not in extendedmode (see C<-e>).=item B<--show-graph>, B<--hide-graph>Show (default) or hide the relative size bar column. Can also be toggled in thebrowser with the 'g' key.=item B<--show-percent>, B<--hide-percent>Show (default) or hide the relative size percent column. Can also be toggled inthe browser with the 'g' key.=item B<--graph-style> I<OPTION>Change the way that the relative size bar column is drawn. Recognized valuesare I<hash> to draw ASCII C<#> characters (default and most portable),I<half-block> to use half-block drawing characters or I<eighth-block> to useeighth-block drawing characters. Eighth-block characters are the most precisebut may not render correctly in all terminals.=item B<--shared-column> I<OPTION>Set to I<off> to disable the shared size column for directories, I<shared>(default) to display shared directory sizes as a separate column or I<unique>to display unique directory sizes as a separate column. These options can alsobe cycled through in the browser with the 'u' key.=item B<--sort> I<COLUMN>Change the default column to sort on. Accepted values are I<disk-usage> (thedefault), I<name>, I<apparent-size>, I<itemcount> or I<mtime>. The latter onlymakes sense in extended mode, see C<-e>.The column can be suffixed with I<-asc> or I<-desc> to set the order toascending or descending, respectively. e.g. C<--sort=name-desc> will sort byname in descending order.=item B<--enable-natsort>, B<--disable-natsort>Enable (default) or disable natural sort when sorting by file name.=item B<--group-directories-first>, B<--no-group-directories-first>Sort (or not) directories before files.=item B<--confirm-quit>, B<--no-confirm-quit>Require a confirmation before quitting ncdu. Very helpful when you accidentallypress 'q' during or after a very long scan.=item B<--confirm-delete>, B<--no-confirm-delete>Require a confirmation before deleting a file or directory. Enabled by default,but can be disabled if you're absolutely sure you won't accidentally press 'd'.=item B<--color> I<SCHEME>Select a color scheme. The following schemes are recognized: I<off> to disablecolors, I<dark> for a color scheme intended for dark backgrounds and I<dark-bg>for a variation of the I<dark> color scheme that also works in terminals with alight background.The default is I<dark-bg> unless the C<NO_COLOR> environment variable is set.=back=head1 CONFIGURATIONNcdu can be configured by placing command-line options in C</etc/ncdu.conf> orC<$HOME/.config/ncdu/config>. If both files exist, the system configurationwill be loaded before the user configuration, allowing users to overrideoptions set in the system configuration. Options given on the command line willoverride options set in the configuration files. The files will not be read atall when C<--ignore-config> is given on the command line.The configuration file format is simply one command line option per line. Linesstarting with C<#> are ignored. Example configuration file:# Always enable extended mode-e# Disable file deletion--disable-delete# Exclude .git directories--exclude .git=head1 KEYS=over=item B<?>Show help + keys + about screen=item B<up>, B<down>, B<j>, B<k>Cycle through the items=item B<right>, B<enter>, B<l>Open selected directory=item B<left>, B<< < >>, B<h>Go to parent directory=item B<n>Order by filename (press again for descending order)=item B<s>Order by filesize (press again for descending order)=item B<C>Order by number of items (press again for descending order)=item B<a>Toggle between showing disk usage and showing apparent size.=item B<M>Order by latest child mtime, or modified time. (press again for descending order)Requires the -e flag.=item B<d>Delete the selected file or directory. An error message will be shown when thecontents of the directory do not match or do not exist anymore on thefilesystem.=item B<t>Toggle dirs before files when sorting.=item B<g>Toggle between showing percentage, graph, both, or none. Percentage is relativeto the size of the current directory, graph is relative to the largest item inthe current directory.=item B<u>Toggle display of the shared / unique size column for directories that sharehard links. This column is only visible if the current listing containsdirectories with shared hard links.=item B<c>Toggle display of child item counts.=item B<m>Toggle display of latest child mtime, or modified time. Requires the -e flag.=item B<e>Show/hide 'hidden' or 'excluded' files and directories. Please note that eventhough you can't see the hidden files and directories, they are still there andthey are still included in the directory sizes. If you suspect that the totalsshown at the bottom of the screen are not correct, make sure you haven'tenabled this option.=item B<i>Show information about the current selected item.=item B<r>Refresh/recalculate the current directory.=item B<b>Spawn shell in current directory.Ncdu will determine your preferred shell from the C<NCDU_SHELL> or C<SHELL>variable (in that order), or will call C</bin/sh> if neither are set. Thisallows you to also configure another command to be run when he 'b' key ispressed. For example, to spawn the L<vifm(1)> file manager instead of a shell,run ncdu as follows:export NCDU_SHELL=vifmncduNcdu will set the C<NCDU_LEVEL> environment variable or increment it beforespawning the shell. This variable allows you to detect when your shell isrunning from within ncdu, which can be useful to avoid nesting multipleinstances of ncdu. Ncdu itself does not (currently) warn when attempting to runnested instances.=item B<q>Quit=back=head1 FILE FLAGSEntries in the browser interface may be prefixed by a one-character flag. Theseflags have the following meaning:=over=item B<!>An error occurred while reading this directory.=item B<.>An error occurred while reading a subdirectory, so the indicated size may not becorrect.=item B<< < >>File or directory is excluded from the statistics by using exclude patterns.=item B<< > >>Directory is on another filesystem.=item B<^>Directory is excluded from the statistics due to being a Linux pseudo filesystem.=item B<@>This is neither a file nor a folder (symlink, socket, ...).=item B<H>Same file was already counted (hard link).=item B<e>Empty directory.=back=head1 EXAMPLESTo scan and browse the directory you're currently in, all you need is a simple:ncduIf you want to scan a full filesystem, your root filesystem, for example, thenyou'll want to use C<-x>:ncdu -x /Since scanning a large directory may take a while, you can scan a directory andexport the results for later viewing:ncdu -1xo- / | gzip >export.gz# ...some time later:zcat export.gz | ncdu -f-To export from a cron job, make sure to replace C<-1> with C<-0> to suppressany unnecessary output.You can also export a directory and browse it once scanning is done:ncdu -o- | tee export.file | ./ncdu -f-The same is possible with gzip compression, but is a bit kludgey:ncdu -o- | gzip | tee export.gz | gunzip | ./ncdu -f-To scan a system remotely, but browse through the files locally:ssh -C user@system ncdu -o- / | ./ncdu -f-The C<-C> option to ssh enables compression, which will be very useful overslow links. Remote scanning and local viewing has two major advantages whencompared to running ncdu directly on the remote system: You can browse throughthe scanned directory on the local system without any network latency, and ncdudoes not keep the entire directory structure in memory when exporting, so youwon't consume much memory on the remote system.=head1 HARD LINKSEvery 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 sectionexplains what each version of ncdu does.ncdu 1.5 and below does not support any hard link detection at all: each linkis considered a separate inode and its size is counted for every link. Thismeans that the displayed directory sizes are incorrect when analyzingdirectories which contain hard links.ncdu 1.6 has basic hard link detection: When a link to a previously encounteredinode 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 browserinterface with a 'H' mark. The displayed directory sizes are only correct whenall 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 consideredas "duplicate" and which as "original". The indicated size of the topmostdirectory (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 morethan two links has the "H" mark visible in the browser interface. Each hardlink is counted exactly once for every directory it appears in. The indicatedsize of each directory is therefore, correctly, the sum of the sizes of allunique inodes that can be found in that directory. Note, however, that this maynot always be same as the space that will be reclaimed after deleting thedirectory, as some inodes may still be accessible from hard links outside it.=head1 BUGSDirectory hard links and firmlinks (MacOS) are not supported. They will not bedetected as being hard links, and may thus be scanned and counted multipletimes.Some minor glitches may appear when displaying filenames that contain multibyteor multicolumn characters.The unique and shared directory sizes are calculated based on the assumptionthat the link count of hard links does not change during a filesystem scan orin between refreshes. If it does, for example after deleting a hard link, thenthese numbers will be very much incorrect and a full refresh by restarting ncduis needed to get correct numbers again.All sizes are internally represented as a signed 64bit integer. If you have adirectory larger than 8 EiB minus one byte, ncdu will clip its size to 8 EiBminus one byte. When deleting or refreshing items in a directory with a clippedsize, the resulting sizes will be incorrect. Likewise, item counts are storedin a 32-bit integer, so will be incorrect in the unlikely event that you happento have more than 4 billion items in a directory.Please report any other bugs you may find at the bug tracker, which can befound on the web site at https://dev.yorhel.nl/ncdu=head1 AUTHORWritten by Yoran Heling <projects@yorhel.nl>.=head1 SEE ALSOL<du(1)>