Rewrite man page in mdoc

Still not a fan of roff, but even less a fan of build system stuff and a
dependency on a tool that is getting less ubiquitous over time.

I've removed the "hard links" section from the man page for now. Such a
section might be useful, but much of it was outdated.
This commit is contained in:
Yorhel 2024-01-21 09:49:13 +01:00
parent a2eb84e7d3
commit 491988d9a5
4 changed files with 519 additions and 581 deletions

1
.gitignore vendored
View file

@ -3,7 +3,6 @@
*.swp
*~
ncdu.1
ncurses
static-*/
zig-cache/

View file

@ -14,7 +14,7 @@ ZIG_FLAGS ?= -Doptimize=ReleaseFast
NCDU_VERSION=$(shell grep 'program_version = "' src/main.zig | sed -e 's/^.*"\(.\+\)".*$$/\1/')
.PHONY: build
build: release doc
build: release
release:
$(ZIG) build ${ZIG_FLAGS}
@ -25,21 +25,13 @@ debug:
clean:
rm -rf zig-cache zig-out
distclean: clean
rm -f ncdu.1
doc: ncdu.1
ncdu.1: ncdu.pod src/main.zig
pod2man --center "ncdu manual" --release "ncdu-${NCDU_VERSION}" ncdu.pod >ncdu.1
install: install-bin install-doc
install-bin: release
mkdir -p ${BINDIR}
install -m0755 zig-out/bin/ncdu ${BINDIR}/
install-doc: doc
install-doc:
mkdir -p ${MANDIR}
install -m0644 ncdu.1 ${MANDIR}/
@ -52,10 +44,10 @@ uninstall-bin:
uninstall-doc:
rm -f ${MANDIR}/ncdu.1
dist: doc
dist:
rm -f ncdu-${NCDU_VERSION}.tar.gz
mkdir ncdu-${NCDU_VERSION}
for f in ncdu.1 `git ls-files | grep -v ^\.gitignore`; do mkdir -p ncdu-${NCDU_VERSION}/`dirname $$f`; ln -s "`pwd`/$$f" ncdu-${NCDU_VERSION}/$$f; done
for f in `git ls-files | grep -v ^\.gitignore`; do mkdir -p ncdu-${NCDU_VERSION}/`dirname $$f`; ln -s "`pwd`/$$f" ncdu-${NCDU_VERSION}/$$f; done
tar -cophzf ncdu-${NCDU_VERSION}.tar.gz --sort=name ncdu-${NCDU_VERSION}
rm -rf ncdu-${NCDU_VERSION}

515
ncdu.1 Normal file
View file

@ -0,0 +1,515 @@
.\" SPDX-FileCopyrightText: Yoran Heling <projects@yorhel.nl>
.\" SPDX-License-Identifier: MIT
.Dd January 21, 2024
.Dt NCDU 1
.Os
.Sh NAME
.Nm ncdu
.Nd NCurses Disk Usage
.Sh SYNOPSIS
.Nm
.Op Fl f Ar file
.Op Fl o Ar file
.Op Fl e , \-extended , \-no\-extended
.Op Fl \-ignore\-config
.Op Fl x , \-one\-file\-system , \-cross\-file\-system
.Op Fl \-exclude Ar pattern
.Op Fl X , \-exclude\-from Ar file
.Op Fl \-include\-caches , \-exclude\-caches
.Op Fl L , \-follow\-symlinks , \-no\-follow\-symlinks
.Op Fl \-include\-kernfs , \-exclude\-kernfs
.Op Fl 0 , 1 , 2
.Op Fl q , \-slow\-ui\-updates , \-fast\-ui\-updates
.Op Fl \-enable\-shell , \-disable\-shell
.Op Fl \-enable\-delete , \-disable\-delete
.Op Fl \-enable\-refresh , \-disable\-refresh
.Op Fl r
.Op Fl \-si , \-no\-si
.Op Fl \-disk\-usage , \-apparent\-size
.Op Fl \-show\-hidden , \-hide\-hidden
.Op Fl \-show\-itemcount , \-hide\-itemcount
.Op Fl \-show\-mtime , \-hide\-mtime
.Op Fl \-show\-graph , \-hide\-graph
.Op Fl \-show\-percent , \-hide\-percent
.Op Fl \-graph\-style Ar hash | half\-block | eighth\-block
.Op Fl \-shared\-column Ar off | shared | unique
.Op Fl \-sort Ar column
.Op Fl \-enable\-natsort , \-disable\-natsort
.Op Fl \-group\-directories\-first , \-no\-group\-directories\-first
.Op Fl \-confirm\-quit , \-no\-confirm\-quit
.Op Fl \-confirm\-delete , \-no\-confirm\-delete
.Op Fl \-color Ar off | dark | dark-bg
.Op Ar path
.Nm
.Op Fl h , \-help
.Nm
.Op Fl v , V , \-version
.Sh DESCRIPTION
.Nm
(NCurses Disk Usage) is an interactive curses-based version of the well-known
.Xr du 1 ,
and provides a fast way to see what directories are using your disk space.
.Sh OPTIONS
.Ss Mode Selection
.Bl -tag -width Ds
.It Fl h , \-help
Print a short help message and quit.
.It Fl v , V , \-version
Print version and quit.
.It Fl f Ar file
Load the given file, which has earlier been created with the
.Fl o
flag.
If
.Ar file
is equivalent to '\-', the file is read from standard input.
.Pp
For the sake of preventing a screw-up, the current version of
.Nm
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.
.It Ar dir
Scan the given directory.
.It Fl o Ar file
Export all necessary information to
.Ar file
instead of opening the browser interface.
If
.Ar file
is '\-', the data is written to standard output.
See the examples section below for some handy use cases.
.Pp
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.
.It Fl e , \-extended , \-no\-extended
Enable/disable 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.
.Pp
When using the file export/import function, this flag should 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 information.
.Pp
This enables viewing and sorting by the latest child mtime, or modified time,
using 'm' and 'M', respectively.
.It Fl \-ignore\-config
Do not attempt to load any configuration files.
.El
.Ss Scan Options
These options affect the scanning progress, they have no effect when importing
directory information from a file.
.Bl -tag -width Ds
.It Fl x , \-one\-file\-system
Do not cross filesystem boundaries, i.e. only count files and directories on
the same filesystem as the directory being scanned.
.It Fl \-cross\-file\-system
Do cross filesystem boundaries.
This is the default, but can be specified to overrule a previously configured
.Fl x .
.It Fl \-exclude Ar pattern
Exclude files that match
.Ar pattern .
The files are still displayed by default, but are not counted towards the disk
usage statistics.
This argument can be added multiple times to add more patterns.
.It Fl X , \-exclude\-from Ar file
Exclude files that match any pattern in
.Ar file .
Patterns should be separated by a newline.
.It Fl \-include\-caches , \-exclude\-caches
Include (default) or exclude directories containing
.Pa CACHEDIR.TAG .
Excluded cache directories are still displayed, but their contents will not be
scanned or counted towards the disk usage statistics.
.Lk https://bford.info/cachedir/
.It Fl L , \-follow\-symlinks , \-no\-follow\-symlinks
Follow (or not) symlinks and count the size of the file they point to.
This option does not follow symlinks to directories and will cause each
symlinked file to count as a unique file.
This is different from how hard links are handled.
The exact counting behavior of this flag is subject to change in the future.
.It Fl \-include\-kernfs , \-exclude\-kernfs
(Linux only) Include (default) or exclude Linux pseudo filesystems such as
.Pa /proc
(procfs) and
.Pa /sys
(sysfs).
.Pp
The complete list of currently known pseudo filesystems is: binfmt, bpf, cgroup,
cgroup2, debug, devpts, proc, pstore, security, selinux, sys, trace.
.El
.Ss Interface Options
.Bl -tag -width Ds
.It Fl 0
Don't give any feedback while scanning a directory or importing a file, except
when a fatal error occurs.
Ncurses will not be initialized until the scan is complete.
When exporting the data with
.Fl o ,
ncurses will not be initialized at all.
This option is the default when exporting to standard output.
.It Fl 1
Similar to
.Fl 0 ,
but does give feedback on the scanning progress with a single line of output.
This option is the default when exporting to a file.
.Pp
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,
.Fl 2
is usually a better choice.
.It Fl 2
Show 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.
.It Fl q , \-slow\-ui\-updates , \-fast\-ui\-updates
Change the UI update interval while scanning or importing.
.Nm
updates the screen 10 times a second by default (with
.Fl \-fast\-ui\-updates
), this can be decreased to once every 2 seconds with
.Fl q
or
.Fl \-slow\-ui\-updates .
This option can be used to save bandwidth over remote connections.
This option has no effect in combination with
.Fl 0 .
.It Fl \-enable\-shell , \-disable\-shell
Enable or disable shell spawning from the file browser.
This feature is enabled by default when scanning a live directory and disabled
when importing from file.
.It Fl \-enable\-delete , \-disable\-delete
Enable or disable the built-in file deletion feature.
This feature is enabled by default when scanning a live directory and disabled
when importing from file.
Explicitly disabling the deletion feature can work as a safeguard to prevent
accidental data loss.
.It Fl \-enable\-refresh , \-disable\-refresh
Enable or disable directory refreshing from the file browser.
This feature is enabled by default when scanning a live directory and disabled
when importing from file.
.It Fl r
Read-only mode.
When given once, this is an alias for
.Fl \-disable\-delete ,
when given twice it will also add
.Fl \-disable\-shell ,
thus ensuring that there is no way to modify the file system from within
.Nm .
.It Fl \-si , \-no\-si
List sizes using base 10 prefixes, that is, powers of 1000 (KB, MB, etc), as
defined in the International System of Units (SI), instead of the usual base 2
prefixes (KiB, MiB, etc).
.It Fl \-disk\-usage , \-apparent\-size
Select whether to display disk usage (default) or apparent sizes.
Can also be toggled in the file browser with the 'a' key.
.It Fl \-show\-hidden , \-hide\-hidden
Show (default) or hide "hidden" and excluded files.
Can also be toggled in the file browser with the 'e' key.
.It Fl \-show\-itemcount , \-hide\-itemcount
Show or hide (default) the item counts column.
Can also be toggled in the file browser with the 'c' key.
.It Fl \-show\-mtime , \-hide\-mtime
Show or hide (default) the last modification time column.
Can also be toggled in the file browser with the 'm' key.
This option is ignored when not in extended mode, see
.Fl e .
.It Fl \-show\-graph , \-hide\-graph
Show (default) or hide the relative size bar column.
Can also be toggled in the file browser with the 'g' key.
.It Fl \-show\-percent , \-hide\-percent
Show (default) or hide the relative size percent column.
Can also be toggled in the file browser with the 'g' key.
.It Fl \-graph\-style Ar hash | half\-block | eighth\-block
Change the way that the relative size bar column is drawn.
Recognized values are
.Ar hash
to draw ASCII '#' characters (default and most portable),
.Ar half\-block
to use half-block drawing characters or
.Ar eighth\-block
to use eighth-block drawing characters.
Eighth-block characters are the most precise but may not render correctly in
all terminals.
.It Fl \-shared\-column Ar off | shared | unique
Set to
.Ar off
to disable the shared size column for directories,
.Ar shared
(default) to display shared directory sizes as a separate column or
.Ar unique
to display unique directory sizes as a separate column.
These options can also be cycled through in the file browser with the 'u' key.
.It Fl \-sort Ar column
Change the default column to sort on.
Accepted values are
.Ar disk\-usage
(the default),
.Ar name , apparent\-size , itemcount
or
.Ar mtime .
The latter only makes sense in extended mode, see
.Fl e .
.Pp
The column name can be suffixed with
.Li \-asc
or
.Li \-desc
to change the order to ascending or descending, respectively.
For example,
.Li \-\-sort=name\-desc
to sort by name in descending order.
.It Fl \-enable\-natsort , \-disable\-natsort
Enable (default) or disable natural sort when sorting by file name.
.It Fl \-group\-directories\-first , \-no\-group\-directories\-first
Sort (or not) directories before files.
.It Fl \-confirm\-quit , \-no\-confirm\-quit
Require a confirmation before quitting ncdu.
Can be helpful when you accidentally press 'q' during or after a very long scan.
.It Fl \-confirm\-delete , \-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'.
.It Fl \-color Ar off | dark | dark-bg
Set the color scheme.
The following schemes are recognized:
.Ar off
to disable colors,
.Ar dark
for a color scheme intended for dark backgrounds and
.Ar dark\-bg
for a variation of the
.Ar dark
color scheme that also works in terminals with a light background.
.Pp
The default is
.Ar dark\-bg
unless the
.Ev NO_COLOR
environment variable is set.
.El
.Sh CONFIGURATION
.Nm
can be configured by placing command-line options in
.Pa /etc/ncdu.conf
or
.Pa $HOME/.config/ncdu/config .
If both files exist, the system configuration will be loaded before the user
configuration, allowing users to override options set in the system
configuration.
Options given on the command line will override options set in the
configuration files.
The files will not be read at all when
.Fl \-ignore\-config
is given on the command line.
.Pp
The configuration file format is simply one command line option per line.
Lines starting with '#' are ignored.
Example configuration file:
.Bd -literal -offset indent
# Always enable extended mode
\-e
# Disable file deletion
\-\-disable\-delete
# Exclude .git directories
\-\-exclude .git
.Ed
.Sh KEYS
.Bl -tag -width Ds
.It ?
Open help + keys + about screen
.It up , down , j , k
Cycle through the items
.It right, enter, l
Open selected directory
.It left, <, h
Go to parent directory
.It n
Order by filename (press again for descending order)
.It s
Order by filesize (press again for descending order)
.It C
Order by number of items (press again for descending order)
.It a
Toggle between showing disk usage and showing apparent size.
.It M
Order by latest child mtime, or modified time (press again for descending
order).
Requires the
.Fl e
flag.
.It 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 filesystem.
.It t
Toggle dirs before files when sorting.
.It 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.
.It u
Toggle display of the shared / unique size column for directories that share
hard links.
This column is only visible if the current listing contains directories with
shared hard links.
.It c
Toggle display of child item counts.
.It m
Toggle display of latest child mtime, or modified time.
Requires the
.Fl e
flag.
.It e
Show/hide 'hidden' or 'excluded' files and directories.
Be aware that even if 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.
.It i
Show information about the current selected item.
.It r
Refresh/recalculate the current directory.
.It b
Spawn shell in current directory.
.Pp
.Nm
determines your preferred shell from the
.Ev NCDU_SHELL
or
.Ev SHELL
environment variable (in that order), or calls
.Pa /bin/sh
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
.Xr vifm 1
file manager instead of a shell, run
.Nm
as follows:
.Dl NCDU_SHELL=vifm ncdu
The
.Ev NCDU_LEVEL
environment variable is set or incremented before spawning the shell, allowing
you to detect if your shell is running from within
.Nm .
This can be useful to avoid nesting multiple instances, although
.Nm
itself does not (currently) warn about or prevent this situation.
.It q
Quit
.El
.Sh FILE FLAGS
Entries in the browser interface may be prefixed by a one\-character flag.
These flags have the following meaning:
.Bl -tag -width Ds
.It !
An error occurred while reading this directory.
.It \.
An error occurred while reading a subdirectory, so the indicated size may not
be correct.
.It <
File or directory is excluded from the statistics by using exclude patterns.
.It >
Directory is on another filesystem.
.It ^
Directory is excluded from the statistics due to being a Linux pseudo
filesystem.
.It @
This is neither a file nor a folder (symlink, socket, ...).
.It H
Same file was already counted (hard link).
.It e
Empty directory.
.El
.Sh EXAMPLES
To scan and browse the directory you're currently in, all you need is a simple:
.Dl ncdu
If you want to scan a full filesystem, for example your root filesystem, then
you'll want to use
.Fl x :
.Dl ncdu \-x /
.Pp
Since scanning a large directory may take a while, you can scan a directory and
export the results for later viewing:
.Bd -literal -offset indent
ncdu \-1xo\- / | gzip >export.gz
# ...some time later:
zcat export.gz | ncdu \-f\-
.Ed
To export from a cron job, make sure to replace
.Fl 1
with
.Fl 0
to suppress any unnecessary output.
.Pp
You can also export a directory and browse it once scanning is done:
.Dl ncdu \-o\- | tee export.file | ./ncdu \-f\-
The same is possible with gzip compression, but is a bit kludgey:
.Dl ncdu \-o\- | gzip | tee export.gz | gunzip | ./ncdu \-f\-
.Pp
To scan a system remotely, but browse through the files locally:
.Dl ssh \-C user@system ncdu \-o\- / | ./ncdu \-f\-
The
.Fl C
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
.Nm
directly on the remote system: You can browse through the scanned directory on
the local system without any network latency, and
.Nm
does not keep the entire directory structure in memory when exporting, so this
won't consume much memory on the remote system.
.Sh BUGS
Directory hard links and firmlinks (MacOS) are not supported.
They are not detected as being hard links, and will thus get scanned and
counted multiple times.
.Pp
Some minor glitches may appear when displaying filenames that contain multibyte
or multicolumn characters.
.Pp
The unique and shared directory sizes are calculated based on the assumption
that the link count of hard links does not change during a filesystem scan or
in between refreshes.
If this does happen, for example when a hard link is deleted, then these
numbers will be very much incorrect and a full refresh by restarting ncdu is
needed to get correct numbers again.
.Pp
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 or refreshing items in a directory with a clipped size, the
resulting sizes will be incorrect.
Likewise, item counts are stored in a 32-bit integer, so will be incorrect in
the unlikely event that you happen to have more than 4 billion items in a
directory.
.Pp
Please report any other bugs you may find at the bug tracker, which can be
found on the web site at
.Lk https://dev.yorhel.nl/ncdu
.Sh SEE ALSO
.Xr du 1 ,
.Xr tree 1 .
.Pp
.Nm
has a website:
.Lk https://dev.yorhel.nl/ncdu
.Sh AUTHORS
Written by
.An Yorhel Aq Mt projects@yorhel.nl

568
ncdu.pod
View file

@ -1,568 +0,0 @@
SPDX-FileCopyrightText: 2021-2023 Yoran Heling <projects@yorhel.nl>
SPDX-License-Identifier: MIT
=head1 NAME
B<ncdu> - NCurses Disk Usage
=head1 SYNOPSIS
B<ncdu> [I<options>] I<dir>
=head1 DESCRIPTION
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.
=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. If
I<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 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.
=item I<dir>
Scan the given directory.
=item B<-o> I<FILE>
Export all necessary information to I<FILE> instead of opening the browser
interface. If I<FILE> is C<->, 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.
=item B<-e>, B<--extended>, B<--no-extended>
Enable/disable 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
information.
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 Options
These options affect the scanning progress, and have no effect when importing
directory information from a file.
=over
=item B<-x>, B<--one-file-system>
Do not cross filesystem boundaries, i.e. only count files and directories on
the same filesystem as the directory being scanned.
=item B<--cross-file-system>
Do cross filesystem boundaries. This is the default, but can be specified to
overrule a previously given C<-x>.
=item B<--exclude> I<PATTERN>
Exclude files that match I<PATTERN>. 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.
=item B<-X> I<FILE>, B<--exclude-from> I<FILE>
Exclude files that match any pattern in I<FILE>. Patterns should be separated
by a newline.
=item B<--include-caches>, B<--exclude-caches>
Include (default) or exclude directories containing CACHEDIR.TAG. The
directories will still be displayed, but their contents will not be scanned or
counted 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 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.
=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, other
than when a fatal error occurs. Ncurses will not be initialized until the scan
is complete. When exporting the data with C<-o>, ncurses will not be
initialized at all. This option is the default when exporting to standard
output.
=item B<-1>
Similar to C<-0>, 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, C<-2> is probably a better choice.
=item B<-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.
=item B<-q>, B<--slow-ui-updates>, B<--fast-ui-updates>
Change the UI update interval while scanning or importing. Ncdu will update the
screen 10 times a second by default (C<--fast-ui-updates>), this can be
decreased to once every 2 seconds with C<-q> or C<--slow-ui-updates>. This
feature can be used to save bandwidth over remote connections. This option has
no 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 by
default 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 enabled
by default when scanning a live directory and disabled when importing from
file. Explicitly disabling the deletion feature can work as a safeguard to
prevent accidental data loss.
=item B<--enable-refresh>, B<--disable-refresh>
Enable or disable directory refreshing from the browser. This feature is
enabled by default when scanning a live directory and disabled when importing
from file.
=item B<-r>
Read-only mode. When given once, this is an alias for C<--disable-delete>, when
given twice it will also add C<--disable-shell>, thus ensuring that there is no
way 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), as
defined in the International System of Units (SI), instead of the usual base 2
prefixes, 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 be
toggled 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 the
browser with the 'e' key.
=item B<--show-itemcount>, B<--hide-itemcount>
Show or hide (default) the item counts column. Can also be toggled in the
browser with the 'c' key.
=item B<--show-mtime>, B<--hide-mtime>
Show or hide (default) the last modification time column. Can also be toggled
in the browser with the 'm' key. This option is ignored when not in extended
mode (see C<-e>).
=item B<--show-graph>, B<--hide-graph>
Show (default) or hide the relative size bar column. Can also be toggled in the
browser with the 'g' key.
=item B<--show-percent>, B<--hide-percent>
Show (default) or hide the relative size percent column. Can also be toggled in
the browser with the 'g' key.
=item B<--graph-style> I<OPTION>
Change the way that the relative size bar column is drawn. Recognized values
are 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 use
eighth-block drawing characters. Eighth-block characters are the most precise
but 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 also
be 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> (the
default), I<name>, I<apparent-size>, I<itemcount> or I<mtime>. The latter only
makes sense in extended mode, see C<-e>.
The column can be suffixed with I<-asc> or I<-desc> to set the order to
ascending or descending, respectively. e.g. C<--sort=name-desc> will sort by
name 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 accidentally
press '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 disable
colors, 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 a
light background.
The default is I<dark-bg> unless the C<NO_COLOR> environment variable is set.
=back
=head1 CONFIGURATION
Ncdu can be configured by placing command-line options in C</etc/ncdu.conf> or
C<$HOME/.config/ncdu/config>. If both files exist, the system configuration
will be loaded before the user configuration, allowing users to override
options set in the system configuration. Options given on the command line will
override options set in the configuration files. The files will not be read at
all when C<--ignore-config> is given on the command line.
The configuration file format is simply one command line option per line. Lines
starting 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 the
contents of the directory do not match or do not exist anymore on the
filesystem.
=item B<t>
Toggle dirs before files when sorting.
=item B<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.
=item B<u>
Toggle display of the shared / unique size column for directories that share
hard links. This column is only visible if the current listing contains
directories 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 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.
=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. This
allows you to also configure another command to be run when he 'b' key is
pressed. For example, to spawn the L<vifm(1)> file manager instead of a shell,
run ncdu as follows:
export NCDU_SHELL=vifm
ncdu
Ncdu will set the C<NCDU_LEVEL> 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.
=item B<q>
Quit
=back
=head1 FILE FLAGS
Entries in the browser interface may be prefixed by a one-character flag. These
flags 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 be
correct.
=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 EXAMPLES
To scan and browse the directory you're currently in, all you need is a simple:
ncdu
If you want to scan a full filesystem, your root filesystem, for example, then
you'll want to use C<-x>:
ncdu -x /
Since scanning a large directory may take a while, you can scan a directory and
export 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 suppress
any 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 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.
=head1 HARD LINKS
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.
=head1 BUGS
Directory hard links and firmlinks (MacOS) are not supported. They will not be
detected as being hard links, and may thus be scanned and counted multiple
times.
Some minor glitches may appear when displaying filenames that contain multibyte
or multicolumn characters.
The unique and shared directory sizes are calculated based on the assumption
that the link count of hard links does not change during a filesystem scan or
in between refreshes. If it does, for example after deleting a hard link, then
these numbers will be very much incorrect and a full refresh by restarting ncdu
is needed to get correct numbers again.
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 or refreshing items in a directory with a clipped
size, the resulting sizes will be incorrect. Likewise, item counts are stored
in a 32-bit integer, so will be incorrect in the unlikely event that you happen
to have more than 4 billion items in a directory.
Please report any other bugs you may find at the bug tracker, which can be
found on the web site at https://dev.yorhel.nl/ncdu
=head1 AUTHOR
Written by Yoran Heling <projects@yorhel.nl>.
=head1 SEE ALSO
L<du(1)>