summaryrefslogtreecommitdiffstats
path: root/doc/coreutils.info
diff options
context:
space:
mode:
Diffstat (limited to 'doc/coreutils.info')
-rw-r--r--doc/coreutils.info21870
1 files changed, 21870 insertions, 0 deletions
diff --git a/doc/coreutils.info b/doc/coreutils.info
new file mode 100644
index 0000000..8071e5b
--- /dev/null
+++ b/doc/coreutils.info
@@ -0,0 +1,21870 @@
+This is coreutils.info, produced by makeinfo version 7.0.2 from
+coreutils.texi.
+
+This manual documents version 9.4 of the GNU core utilities, including
+the standard programs for text and file manipulation.
+
+ Copyright © 1994–2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled “GNU Free Documentation License”.
+INFO-DIR-SECTION Basics
+START-INFO-DIR-ENTRY
+* Coreutils: (coreutils). Core GNU (file, text, shell) utilities.
+* Common options: (coreutils)Common options.
+* File permissions: (coreutils)File permissions. Access modes.
+* Date input formats: (coreutils)Date input formats.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* arch: (coreutils)arch invocation. Print machine hardware name.
+* b2sum: (coreutils)b2sum invocation. Print or check BLAKE2 digests.
+* base32: (coreutils)base32 invocation. Base32 encode/decode data.
+* base64: (coreutils)base64 invocation. Base64 encode/decode data.
+* basename: (coreutils)basename invocation. Strip directory and suffix.
+* basenc: (coreutils)basenc invocation. Encoding/decoding of data.
+* cat: (coreutils)cat invocation. Concatenate and write files.
+* chcon: (coreutils)chcon invocation. Change SELinux CTX of files.
+* chgrp: (coreutils)chgrp invocation. Change file groups.
+* chmod: (coreutils)chmod invocation. Change access permissions.
+* chown: (coreutils)chown invocation. Change file owners and groups.
+* chroot: (coreutils)chroot invocation. Specify the root directory.
+* cksum: (coreutils)cksum invocation. Print POSIX CRC checksum.
+* comm: (coreutils)comm invocation. Compare sorted files by line.
+* cp: (coreutils)cp invocation. Copy files.
+* csplit: (coreutils)csplit invocation. Split by context.
+* cut: (coreutils)cut invocation. Print selected parts of lines.
+* date: (coreutils)date invocation. Print/set system date and time.
+* dd: (coreutils)dd invocation. Copy and convert a file.
+* df: (coreutils)df invocation. Report file system usage.
+* dir: (coreutils)dir invocation. List directories briefly.
+* dircolors: (coreutils)dircolors invocation. Color setup for ls.
+* dirname: (coreutils)dirname invocation. Strip last file name component.
+* du: (coreutils)du invocation. Report file usage.
+* echo: (coreutils)echo invocation. Print a line of text.
+* env: (coreutils)env invocation. Modify the environment.
+* expand: (coreutils)expand invocation. Convert tabs to spaces.
+* expr: (coreutils)expr invocation. Evaluate expressions.
+* factor: (coreutils)factor invocation. Print prime factors
+* false: (coreutils)false invocation. Do nothing, unsuccessfully.
+* fmt: (coreutils)fmt invocation. Reformat paragraph text.
+* fold: (coreutils)fold invocation. Wrap long input lines.
+* groups: (coreutils)groups invocation. Print group names a user is in.
+* head: (coreutils)head invocation. Output the first part of files.
+* hostid: (coreutils)hostid invocation. Print numeric host identifier.
+* hostname: (coreutils)hostname invocation. Print or set system name.
+* id: (coreutils)id invocation. Print user identity.
+* install: (coreutils)install invocation. Copy files and set attributes.
+* join: (coreutils)join invocation. Join lines on a common field.
+* kill: (coreutils)kill invocation. Send a signal to processes.
+* link: (coreutils)link invocation. Make hard links between files.
+* ln: (coreutils)ln invocation. Make links between files.
+* logname: (coreutils)logname invocation. Print current login name.
+* ls: (coreutils)ls invocation. List directory contents.
+* md5sum: (coreutils)md5sum invocation. Print or check MD5 digests.
+* mkdir: (coreutils)mkdir invocation. Create directories.
+* mkfifo: (coreutils)mkfifo invocation. Create FIFOs (named pipes).
+* mknod: (coreutils)mknod invocation. Create special files.
+* mktemp: (coreutils)mktemp invocation. Create temporary files.
+* mv: (coreutils)mv invocation. Rename files.
+* nice: (coreutils)nice invocation. Modify niceness.
+* nl: (coreutils)nl invocation. Number lines and write files.
+* nohup: (coreutils)nohup invocation. Immunize to hangups.
+* nproc: (coreutils)nproc invocation. Print the number of processors.
+* numfmt: (coreutils)numfmt invocation. Reformat numbers.
+* od: (coreutils)od invocation. Dump files in octal, etc.
+* paste: (coreutils)paste invocation. Merge lines of files.
+* pathchk: (coreutils)pathchk invocation. Check file name portability.
+* pr: (coreutils)pr invocation. Paginate or columnate files.
+* printenv: (coreutils)printenv invocation. Print environment variables.
+* printf: (coreutils)printf invocation. Format and print data.
+* ptx: (coreutils)ptx invocation. Produce permuted indexes.
+* pwd: (coreutils)pwd invocation. Print working directory.
+* readlink: (coreutils)readlink invocation. Print referent of a symlink.
+* realpath: (coreutils)realpath invocation. Print resolved file names.
+* rm: (coreutils)rm invocation. Remove files.
+* rmdir: (coreutils)rmdir invocation. Remove empty directories.
+* runcon: (coreutils)runcon invocation. Run in specified SELinux CTX.
+* seq: (coreutils)seq invocation. Print numeric sequences
+* sha1sum: (coreutils)sha1sum invocation. Print or check SHA-1 digests.
+* sha2: (coreutils)sha2 utilities. Print or check SHA-2 digests.
+* shred: (coreutils)shred invocation. Remove files more securely.
+* shuf: (coreutils)shuf invocation. Shuffling text files.
+* sleep: (coreutils)sleep invocation. Delay for a specified time.
+* sort: (coreutils)sort invocation. Sort text files.
+* split: (coreutils)split invocation. Split into pieces.
+* stat: (coreutils)stat invocation. Report file(system) status.
+* stdbuf: (coreutils)stdbuf invocation. Modify stdio buffering.
+* stty: (coreutils)stty invocation. Print/change terminal settings.
+* sum: (coreutils)sum invocation. Print traditional checksum.
+* sync: (coreutils)sync invocation. Sync files to stable storage.
+* tac: (coreutils)tac invocation. Reverse files.
+* tail: (coreutils)tail invocation. Output the last part of files.
+* tee: (coreutils)tee invocation. Redirect to multiple files.
+* test: (coreutils)test invocation. File/string tests.
+* timeout: (coreutils)timeout invocation. Run with time limit.
+* touch: (coreutils)touch invocation. Change file timestamps.
+* tr: (coreutils)tr invocation. Translate characters.
+* true: (coreutils)true invocation. Do nothing, successfully.
+* truncate: (coreutils)truncate invocation. Shrink/extend size of a file.
+* tsort: (coreutils)tsort invocation. Topological sort.
+* tty: (coreutils)tty invocation. Print terminal name.
+* uname: (coreutils)uname invocation. Print system information.
+* unexpand: (coreutils)unexpand invocation. Convert spaces to tabs.
+* uniq: (coreutils)uniq invocation. Uniquify files.
+* unlink: (coreutils)unlink invocation. Removal via unlink(2).
+* uptime: (coreutils)uptime invocation. Print uptime and load.
+* users: (coreutils)users invocation. Print current user names.
+* vdir: (coreutils)vdir invocation. List directories verbosely.
+* wc: (coreutils)wc invocation. Line, word, and byte counts.
+* who: (coreutils)who invocation. Print who is logged in.
+* whoami: (coreutils)whoami invocation. Print effective user ID.
+* yes: (coreutils)yes invocation. Print a string indefinitely.
+END-INFO-DIR-ENTRY
+
+
+File: coreutils.info, Node: Top, Next: Introduction, Up: (dir)
+
+GNU Coreutils
+*************
+
+This manual documents version 9.4 of the GNU core utilities, including
+the standard programs for text and file manipulation.
+
+ Copyright © 1994–2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled “GNU Free Documentation License”.
+
+* Menu:
+
+* Introduction:: Caveats, overview, and authors
+* Common options:: Common options
+* Output of entire files:: cat tac nl od base32 base64 basenc
+* Formatting file contents:: fmt pr fold
+* Output of parts of files:: head tail split csplit
+* Summarizing files:: wc sum cksum b2sum md5sum sha1sum sha2
+* Operating on sorted files:: sort shuf uniq comm ptx tsort
+* Operating on fields:: cut paste join
+* Operating on characters:: tr expand unexpand
+* Directory listing:: ls dir vdir dircolors
+* Basic operations:: cp dd install mv rm shred
+* Special file types:: mkdir rmdir unlink mkfifo mknod ln link readlink
+* Changing file attributes:: chgrp chmod chown touch
+* File space usage:: df du stat sync truncate
+* Printing text:: echo printf yes
+* Conditions:: false true test expr
+* Redirection:: tee
+* File name manipulation:: dirname basename pathchk mktemp realpath
+* Working context:: pwd stty printenv tty
+* User information:: id logname whoami groups users who
+* System context:: date arch nproc uname hostname hostid uptime
+* SELinux context:: chcon runcon
+* Modified command invocation:: chroot env nice nohup stdbuf timeout
+* Process control:: kill
+* Delaying:: sleep
+* Numeric operations:: factor numfmt seq
+* File permissions:: Access modes
+* File timestamps:: File timestamp issues
+* Date input formats:: Specifying date strings
+* Version sort ordering:: Details on version-sort algorithm
+* Opening the software toolbox:: The software tools philosophy
+* GNU Free Documentation License:: Copying and sharing this manual
+* Concept index:: General index
+
+ — The Detailed Node Listing —
+
+Common Options
+
+* Exit status:: Indicating program success or failure
+* Backup options:: Backup options
+* Block size:: Block size
+* Floating point:: Floating point number representation
+* Signal specifications:: Specifying signals
+* Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
+* Random sources:: Sources of random data
+* Target directory:: Target directory
+* Trailing slashes:: Trailing slashes
+* Traversing symlinks:: Traversing symlinks to directories
+* Treating / specially:: Treating / specially
+* Standards conformance:: Standards conformance
+* Multi-call invocation:: Multi-call program invocation
+
+Output of entire files
+
+* cat invocation:: Concatenate and write files
+* tac invocation:: Concatenate and write files in reverse
+* nl invocation:: Number lines and write files
+* od invocation:: Write files in octal or other formats
+* base32 invocation:: Transform data into printable data
+* base64 invocation:: Transform data into printable data
+* basenc invocation:: Transform data into printable data
+
+Formatting file contents
+
+* fmt invocation:: Reformat paragraph text
+* pr invocation:: Paginate or columnate files for printing
+* fold invocation:: Wrap input lines to fit in specified width
+
+Output of parts of files
+
+* head invocation:: Output the first part of files
+* tail invocation:: Output the last part of files
+* split invocation:: Split a file into fixed-size pieces
+* csplit invocation:: Split a file into context-determined pieces
+
+Summarizing files
+
+* wc invocation:: Print newline, word, and byte counts
+* sum invocation:: Print checksum and block counts
+* cksum invocation:: Print CRC checksum and byte counts
+* md5sum invocation:: Print or check MD5 digests
+* b2sum invocation:: Print or check BLAKE2 digests
+* sha1sum invocation:: Print or check SHA-1 digests
+* sha2 utilities:: Print or check SHA-2 digests
+
+Operating on sorted files
+
+* sort invocation:: Sort text files
+* shuf invocation:: Shuffle text files
+* uniq invocation:: Uniquify files
+* comm invocation:: Compare two sorted files line by line
+* ptx invocation:: Produce a permuted index of file contents
+* tsort invocation:: Topological sort
+
+‘ptx’: Produce permuted indexes
+
+* General options in ptx:: Options which affect general program behavior
+* Charset selection in ptx:: Underlying character set considerations
+* Input processing in ptx:: Input fields, contexts, and keyword selection
+* Output formatting in ptx:: Types of output format, and sizing the fields
+* Compatibility in ptx:: The GNU extensions to ‘ptx’
+
+Operating on fields
+
+* cut invocation:: Print selected parts of lines
+* paste invocation:: Merge lines of files
+* join invocation:: Join lines on a common field
+
+Operating on characters
+
+* tr invocation:: Translate, squeeze, and/or delete characters
+* expand invocation:: Convert tabs to spaces
+* unexpand invocation:: Convert spaces to tabs
+
+‘tr’: Translate, squeeze, and/or delete characters
+
+* Character arrays:: Specifying arrays of characters
+* Translating:: Changing one set of characters to another
+* Squeezing and deleting:: Removing characters
+
+Directory listing
+
+* ls invocation:: List directory contents
+* dir invocation:: Briefly list directory contents
+* vdir invocation:: Verbosely list directory contents
+* dircolors invocation:: Color setup for ‘ls’
+
+‘ls’: List directory contents
+
+* Which files are listed:: Which files are listed
+* What information is listed:: What information is listed
+* Sorting the output:: Sorting the output
+* General output formatting:: General output formatting
+* Formatting the file names:: Formatting the file names
+
+Basic operations
+
+* cp invocation:: Copy files and directories
+* dd invocation:: Convert and copy a file
+* install invocation:: Copy files and set attributes
+* mv invocation:: Move (rename) files
+* rm invocation:: Remove files or directories
+* shred invocation:: Remove files more securely
+
+Special file types
+
+* link invocation:: Make a hard link via the link syscall
+* ln invocation:: Make links between files
+* mkdir invocation:: Make directories
+* mkfifo invocation:: Make FIFOs (named pipes)
+* mknod invocation:: Make block or character special files
+* readlink invocation:: Print value of a symlink or canonical file name
+* rmdir invocation:: Remove empty directories
+* unlink invocation:: Remove files via unlink syscall
+
+Changing file attributes
+
+* chown invocation:: Change file owner and group
+* chgrp invocation:: Change group ownership
+* chmod invocation:: Change access permissions
+* touch invocation:: Change file timestamps
+
+File space usage
+
+* df invocation:: Report file system space usage
+* du invocation:: Estimate file space usage
+* stat invocation:: Report file or file system status
+* sync invocation:: Synchronize cached writes to persistent storage
+* truncate invocation:: Shrink or extend the size of a file
+
+Printing text
+
+* echo invocation:: Print a line of text
+* printf invocation:: Format and print data
+* yes invocation:: Print a string until interrupted
+
+Conditions
+
+* false invocation:: Do nothing, unsuccessfully
+* true invocation:: Do nothing, successfully
+* test invocation:: Check file types and compare values
+* expr invocation:: Evaluate expressions
+
+‘test’: Check file types and compare values
+
+* File type tests:: File type tests
+* Access permission tests:: Access permission tests
+* File characteristic tests:: File characteristic tests
+* String tests:: String tests
+* Numeric tests:: Numeric tests
+
+‘expr’: Evaluate expression
+
+* String expressions:: ‘+ : match substr index length’
+* Numeric expressions:: ‘+ - * / %’
+* Relations for expr:: ‘| & < <= = == != >= >’
+* Examples of expr:: Examples of using ‘expr’
+
+Redirection
+
+* tee invocation:: Redirect output to multiple files or processes
+
+File name manipulation
+
+* basename invocation:: Strip directory and suffix from a file name
+* dirname invocation:: Strip last file name component
+* pathchk invocation:: Check file name validity and portability
+* mktemp invocation:: Create temporary file or directory
+* realpath invocation:: Print resolved file names
+
+Working context
+
+* pwd invocation:: Print working directory
+* stty invocation:: Print or change terminal characteristics
+* printenv invocation:: Print all or some environment variables
+* tty invocation:: Print file name of terminal on standard input
+
+‘stty’: Print or change terminal characteristics
+
+* Control:: Control settings
+* Input:: Input settings
+* Output:: Output settings
+* Local:: Local settings
+* Combination:: Combination settings
+* Characters:: Special characters
+* Special:: Special settings
+
+User information
+
+* id invocation:: Print user identity
+* logname invocation:: Print current login name
+* whoami invocation:: Print effective user ID
+* groups invocation:: Print group names a user is in
+* users invocation:: Print login names of users currently logged in
+* who invocation:: Print who is currently logged in
+
+System context
+
+* arch invocation:: Print machine hardware name
+* date invocation:: Print or set system date and time
+* nproc invocation:: Print the number of processors
+* uname invocation:: Print system information
+* hostname invocation:: Print or set system name
+* hostid invocation:: Print numeric host identifier
+* uptime invocation:: Print system uptime and load
+
+‘date’: Print or set system date and time
+
+* Time conversion specifiers:: %[HIklMNpPrRsSTXzZ]
+* Date conversion specifiers:: %[aAbBcCdDeFgGhjmuUVwWxyY]
+* Literal conversion specifiers:: %[%nt]
+* Padding and other flags:: Pad with zeros, spaces, etc.
+* Setting the time:: Changing the system clock
+* Options for date:: Instead of the current time
+* Date input formats:: Specifying date strings
+* Examples of date:: Examples
+
+SELinux context
+
+* chcon invocation:: Change SELinux context of file
+* runcon invocation:: Run a command in specified SELinux context
+
+Modified command invocation
+
+* chroot invocation:: Run a command with a different root directory
+* env invocation:: Run a command in a modified environment
+* nice invocation:: Run a command with modified niceness
+* nohup invocation:: Run a command immune to hangups
+* stdbuf invocation:: Run a command with modified I/O buffering
+* timeout invocation:: Run a command with a time limit
+
+Process control
+
+* kill invocation:: Sending a signal to processes.
+
+Delaying
+
+* sleep invocation:: Delay for a specified time
+
+Numeric operations
+
+* factor invocation:: Print prime factors
+* numfmt invocation:: Reformat numbers
+* seq invocation:: Print numeric sequences
+
+
+File timestamps
+
+* File timestamps:: File timestamp issues
+
+File permissions
+
+* Mode Structure:: Structure of file mode bits
+* Symbolic Modes:: Mnemonic representation of file mode bits
+* Numeric Modes:: File mode bits as octal numbers
+* Directory Setuid and Setgid:: Set-user-ID and set-group-ID on directories
+
+Date input formats
+
+* General date syntax:: Common rules
+* Calendar date items:: ‘14 Nov 2022’
+* Time of day items:: ‘9:02pm’
+* Time zone items:: ‘UTC’, ‘-0700’, ‘+0900’, ...
+* Combined date and time of day items:: ‘2022-11-14T21:02:42,000000-0500’
+* Day of week items:: ‘Monday’ and others
+* Relative items in date strings:: ‘next tuesday, 2 years ago’
+* Pure numbers in date strings:: ‘20221114’, ‘2102’
+* Seconds since the Epoch:: ‘@1668477762’
+* Specifying time zone rules:: ‘TZ="America/New_York"’, ‘TZ="UTC0"’
+* Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+
+Version sorting order
+
+* Version sort overview::
+* Version sort implementation::
+* Differences from Debian version sort::
+* Advanced version sort topics::
+
+Opening the software toolbox
+
+* Toolbox introduction:: Toolbox introduction
+* I/O redirection:: I/O redirection
+* The who command:: The ‘who’ command
+* The cut command:: The ‘cut’ command
+* The sort command:: The ‘sort’ command
+* The uniq command:: The ‘uniq’ command
+* Putting the tools together:: Putting the tools together
+
+Copying This Manual
+
+* GNU Free Documentation License:: Copying and sharing this manual
+
+
+
+File: coreutils.info, Node: Introduction, Next: Common options, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+This manual is a work in progress: many sections make no attempt to
+explain basic concepts in a way suitable for novices. Thus, if you are
+interested, please get involved in improving this manual. The entire
+GNU community will benefit.
+
+ The GNU utilities documented here are mostly compatible with the
+POSIX standard.
+
+ Please report bugs to <bug-coreutils@gnu.org>. Include the version
+number, machine architecture, input files, and any other information
+needed to reproduce the bug: your input, what you expected, what you
+got, and why it is wrong.
+
+ If you have a problem with ‘sort’ or ‘date’, try using the ‘--debug’
+option, as it can often help find and fix problems without having to
+wait for an answer to a bug report. If the debug output does not
+suffice to fix the problem on your own, please compress and attach it to
+the rest of your bug report.
+
+ Although diffs are welcome, please include a description of the
+problem as well, since this is sometimes difficult to infer. *Note
+(gcc)Bugs::.
+
+ This manual was originally derived from the Unix man pages in the
+distributions, which were written by David MacKenzie and updated by Jim
+Meyering. What you are reading now is the authoritative documentation
+for these utilities; the man pages are no longer being maintained. The
+original ‘fmt’ man page was written by Ross Paterson. François Pinard
+did the initial conversion to Texinfo format. Karl Berry did the
+indexing, some reorganization, and editing of the results. Brian
+Youmans of the Free Software Foundation office staff combined the
+manuals for textutils, fileutils, and sh-utils to produce the present
+omnibus manual. Richard Stallman contributed his usual invaluable
+insights to the overall process.
+
+
+File: coreutils.info, Node: Common options, Next: Output of entire files, Prev: Introduction, Up: Top
+
+2 Common options
+****************
+
+Certain options are available in all of these programs. Rather than
+writing identical descriptions for each of the programs, they are
+described here. (In fact, every GNU program accepts (or should accept)
+these options.)
+
+ Normally options and operands can appear in any order, and programs
+act as if all the options appear before any operands. For example,
+‘sort -r passwd -t :’ acts like ‘sort -r -t : passwd’, since ‘:’ is an
+option-argument of ‘-t’. However, if the ‘POSIXLY_CORRECT’ environment
+variable is set, options must appear before operands, unless otherwise
+specified for a particular command.
+
+ A few programs can usefully have trailing operands with leading ‘-’.
+With such a program, options must precede operands even if
+‘POSIXLY_CORRECT’ is not set, and this fact is noted in the program
+description. For example, the ‘env’ command’s options must appear
+before its operands, since in some cases the operands specify a command
+that itself contains options.
+
+ Most programs that accept long options recognize unambiguous
+abbreviations of those options. For example, ‘rmdir
+--ignore-fail-on-non-empty’ can be invoked as ‘rmdir --ignore-fail’ or
+even ‘rmdir --i’. Ambiguous options, such as ‘ls --h’, are identified
+as such.
+
+ Some of these programs recognize the ‘--help’ and ‘--version’ options
+only when one of them is the sole command line argument. For these
+programs, abbreviations of the long options are not always recognized.
+
+‘--help’
+ Print a usage message listing all available options, then exit
+ successfully.
+
+‘--version’
+ Print the version number, then exit successfully.
+
+‘--’
+ Delimit the option list. Later arguments, if any, are treated as
+ operands even if they begin with ‘-’. For example, ‘sort -- -r’
+ reads from the file named ‘-r’.
+
+ A single ‘-’ operand is not really an option, though it looks like
+one. It stands for a file operand, and some tools treat it as standard
+input, or as standard output if that is clear from the context. For
+example, ‘sort -’ reads from standard input, and is equivalent to plain
+‘sort’. Unless otherwise specified, a ‘-’ can appear as any operand
+that requires a file name.
+
+* Menu:
+
+Items shared between some programs:
+
+* Backup options:: ‘-b’ ‘-S’.
+* Block size:: BLOCK_SIZE and ‘--block-size’.
+* Signal specifications:: Specifying signals with ‘--signal’.
+* Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
+* Random sources:: ‘--random-source’.
+* Target directory:: Specifying a target directory.
+* Trailing slashes:: ‘--strip-trailing-slashes’.
+* Traversing symlinks:: ‘-H’, ‘-L’, or ‘-P’.
+* Treating / specially:: ‘--preserve-root’ and the converse.
+* Special built-in utilities:: ‘break’, ‘:’, ...
+
+Items applicable to all programs:
+
+* Exit status:: Indicating program success or failure.
+* Floating point:: Floating point number representation.
+* Standards conformance:: Conformance to the POSIX standard.
+* Multi-call invocation:: Multi-call program invocation.
+
+
+File: coreutils.info, Node: Backup options, Next: Block size, Up: Common options
+
+2.1 Backup options
+==================
+
+Some GNU programs (at least ‘cp’, ‘install’, ‘ln’, and ‘mv’) optionally
+make backups of files before writing new versions. These options
+control the details of these backups. The options are also briefly
+mentioned in the descriptions of the particular programs.
+
+‘-b’
+‘--backup[=METHOD]’
+ Make a backup of each file that would otherwise be overwritten or
+ removed. Without this option, the original versions are destroyed.
+ Use METHOD to determine the type of backups to make. When this
+ option is used but METHOD is not specified, then the value of the
+ ‘VERSION_CONTROL’ environment variable is used. And if
+ ‘VERSION_CONTROL’ is not set, the default backup type is
+ ‘existing’.
+
+ Note that the short form of this option, ‘-b’ does not accept any
+ argument. Using ‘-b’ is equivalent to using ‘--backup=existing’.
+
+ This option corresponds to the Emacs variable ‘version-control’;
+ the values for METHOD are the same as those used in Emacs. This
+ option also accepts more descriptive names. The valid METHODs are
+ (unique abbreviations are accepted):
+
+ ‘none’
+ ‘off’
+ Never make backups.
+
+ ‘numbered’
+ ‘t’
+ Always make numbered backups.
+
+ ‘existing’
+ ‘nil’
+ Make numbered backups of files that already have them, simple
+ backups of the others.
+
+ ‘simple’
+ ‘never’
+ Always make simple backups. Please note ‘never’ is not to be
+ confused with ‘none’.
+
+‘-S SUFFIX’
+‘--suffix=SUFFIX’
+ Append SUFFIX to each backup file made with ‘-b’. If this option
+ is not specified, the value of the ‘SIMPLE_BACKUP_SUFFIX’
+ environment variable is used. And if ‘SIMPLE_BACKUP_SUFFIX’ is not
+ set, the default is ‘~’, just as in Emacs.
+
+
+File: coreutils.info, Node: Block size, Next: Signal specifications, Prev: Backup options, Up: Common options
+
+2.2 Block size
+==============
+
+Some GNU programs (at least ‘df’, ‘du’, and ‘ls’) display sizes in
+“blocks”. You can adjust the block size and method of display to make
+sizes easier to read. The block size used for display is independent of
+any file system block size. Fractional block counts are rounded up to
+the nearest integer.
+
+ The default block size is chosen by examining the following
+environment variables in turn; the first one that is set determines the
+block size.
+
+‘DF_BLOCK_SIZE’
+ This specifies the default block size for the ‘df’ command.
+ Similarly, ‘DU_BLOCK_SIZE’ specifies the default for ‘du’ and
+ ‘LS_BLOCK_SIZE’ for ‘ls’.
+
+‘BLOCK_SIZE’
+ This specifies the default block size for all three commands, if
+ the above command-specific environment variables are not set.
+
+‘BLOCKSIZE’
+ This specifies the default block size for all values that are
+ normally printed as blocks, if neither ‘BLOCK_SIZE’ nor the above
+ command-specific environment variables are set. Unlike the other
+ environment variables, ‘BLOCKSIZE’ does not affect values that are
+ normally printed as byte counts, e.g., the file sizes contained in
+ ‘ls -l’ output.
+
+‘POSIXLY_CORRECT’
+ If neither ‘COMMAND_BLOCK_SIZE’, nor ‘BLOCK_SIZE’, nor ‘BLOCKSIZE’
+ is set, but this variable is set, the block size defaults to 512.
+
+ If none of the above environment variables are set, the block size
+currently defaults to 1024 bytes in most contexts, but this number may
+change in the future. For ‘ls’ file sizes, the block size defaults to 1
+byte.
+
+ A block size specification can be a positive integer specifying the
+number of bytes per block, or it can be ‘human-readable’ or ‘si’ to
+select a human-readable format. Integers may be followed by suffixes
+that are upward compatible with the SI prefixes
+(http://www.bipm.org/en/publications/si-brochure/chapter3.html) for
+decimal multiples and with the ISO/IEC 80000-13 (formerly IEC 60027-2)
+prefixes (https://physics.nist.gov/cuu/Units/binary.html) for binary
+multiples.
+
+ With human-readable formats, output sizes are followed by a size
+letter such as ‘M’ for megabytes. ‘BLOCK_SIZE=human-readable’ uses
+powers of 1024; ‘M’ stands for 1,048,576 bytes. ‘BLOCK_SIZE=si’ is
+similar, but uses powers of 1000 and appends ‘B’; ‘MB’ stands for
+1,000,000 bytes.
+
+ A block size specification preceded by ‘'’ causes output sizes to be
+displayed with thousands separators. The ‘LC_NUMERIC’ locale specifies
+the thousands separator and grouping. For example, in an American
+English locale, ‘--block-size="'1kB"’ would cause a size of 1234000
+bytes to be displayed as ‘1,234’. In the default C locale, there is no
+thousands separator so a leading ‘'’ has no effect.
+
+ An integer block size can be followed by a suffix to specify a
+multiple of that size. A bare size letter, or one followed by ‘iB’,
+specifies a multiple using powers of 1024. A size letter followed by
+‘B’ specifies powers of 1000 instead. For example, ‘1M’ and ‘1MiB’ are
+equivalent to ‘1048576’, whereas ‘1MB’ is equivalent to ‘1000000’.
+
+ A plain suffix without a preceding integer acts as if ‘1’ were
+prepended, except that it causes a size indication to be appended to the
+output. For example, ‘--block-size="kB"’ displays 3000 as ‘3kB’.
+
+ The following suffixes are defined. Large sizes like ‘1Q’ may be
+rejected by your computer due to limitations of its arithmetic.
+
+‘kB’
+ kilobyte: 10^3 = 1000.
+‘k’
+‘K’
+‘KiB’
+ kibibyte: 2^{10} = 1024. ‘K’ is special: the SI prefix is ‘k’ and
+ the ISO/IEC 80000-13 prefix is ‘Ki’, but tradition and POSIX use
+ ‘k’ to mean ‘KiB’.
+‘MB’
+ megabyte: 10^6 = 1,000,000.
+‘M’
+‘MiB’
+ mebibyte: 2^{20} = 1,048,576.
+‘GB’
+ gigabyte: 10^9 = 1,000,000,000.
+‘G’
+‘GiB’
+ gibibyte: 2^{30} = 1,073,741,824.
+‘TB’
+ terabyte: 10^{12} = 1,000,000,000,000.
+‘T’
+‘TiB’
+ tebibyte: 2^{40} = 1,099,511,627,776.
+‘PB’
+ petabyte: 10^{15} = 1,000,000,000,000,000.
+‘P’
+‘PiB’
+ pebibyte: 2^{50} = 1,125,899,906,842,624.
+‘EB’
+ exabyte: 10^{18} = 1,000,000,000,000,000,000.
+‘E’
+‘EiB’
+ exbibyte: 2^{60} = 1,152,921,504,606,846,976.
+‘ZB’
+ zettabyte: 10^{21} = 1,000,000,000,000,000,000,000
+‘Z’
+‘ZiB’
+ zebibyte: 2^{70} = 1,180,591,620,717,411,303,424.
+‘YB’
+ yottabyte: 10^{24} = 1,000,000,000,000,000,000,000,000.
+‘Y’
+‘YiB’
+ yobibyte: 2^{80} = 1,208,925,819,614,629,174,706,176.
+‘RB’
+ ronnabyte: 10^{27} = 1,000,000,000,000,000,000,000,000,000.
+‘R’
+‘RiB’
+ robibyte: 2^{90} = 1,237,940,039,285,380,274,899,124,224.
+‘QB’
+ quettabyte: 10^{30} = 1,000,000,000,000,000,000,000,000,000,000.
+‘Q’
+‘QiB’
+ quebibyte: 2^{100} = 1,267,650,600,228,229,401,496,703,205,376.
+
+ Block size defaults can be overridden by an explicit
+‘--block-size=SIZE’ option. The ‘-k’ option is equivalent to
+‘--block-size=1K’, which is the default unless the ‘POSIXLY_CORRECT’
+environment variable is set. The ‘-h’ or ‘--human-readable’ option is
+equivalent to ‘--block-size=human-readable’. The ‘--si’ option is
+equivalent to ‘--block-size=si’. Note for ‘ls’ the ‘-k’ option does not
+control the display of the apparent file sizes, whereas the
+‘--block-size’ option does.
+
+
+File: coreutils.info, Node: Signal specifications, Next: Disambiguating names and IDs, Prev: Block size, Up: Common options
+
+2.3 Signal specifications
+=========================
+
+A SIGNAL may be a signal name like ‘HUP’, or a signal number like ‘1’,
+or an exit status of a process terminated by the signal. A signal name
+can be given in canonical form or prefixed by ‘SIG’. The case of the
+letters is ignored. The following signal names and numbers are
+supported on all POSIX compliant systems:
+
+‘HUP’
+ 1. Hangup.
+‘INT’
+ 2. Terminal interrupt.
+‘QUIT’
+ 3. Terminal quit.
+‘ABRT’
+ 6. Process abort.
+‘KILL’
+ 9. Kill (cannot be caught or ignored).
+‘ALRM’
+ 14. Alarm Clock.
+‘TERM’
+ 15. Termination.
+
+Other supported signal names have system-dependent corresponding
+numbers. All systems conforming to POSIX 1003.1-2001 also support the
+following signals:
+
+‘BUS’
+ Access to an undefined portion of a memory object.
+‘CHLD’
+ Child process terminated, stopped, or continued.
+‘CONT’
+ Continue executing, if stopped.
+‘FPE’
+ Erroneous arithmetic operation.
+‘ILL’
+ Illegal Instruction.
+‘PIPE’
+ Write on a pipe with no one to read it.
+‘SEGV’
+ Invalid memory reference.
+‘STOP’
+ Stop executing (cannot be caught or ignored).
+‘TSTP’
+ Terminal stop.
+‘TTIN’
+ Background process attempting read.
+‘TTOU’
+ Background process attempting write.
+‘URG’
+ High bandwidth data is available at a socket.
+‘USR1’
+ User-defined signal 1.
+‘USR2’
+ User-defined signal 2.
+
+POSIX 1003.1-2001 systems that support the XSI extension also support
+the following signals:
+
+‘POLL’
+ Pollable event.
+‘PROF’
+ Profiling timer expired.
+‘SYS’
+ Bad system call.
+‘TRAP’
+ Trace/breakpoint trap.
+‘VTALRM’
+ Virtual timer expired.
+‘XCPU’
+ CPU time limit exceeded.
+‘XFSZ’
+ File size limit exceeded.
+
+POSIX 1003.1-2001 systems that support the XRT extension also support at
+least eight real-time signals called ‘RTMIN’, ‘RTMIN+1’, ..., ‘RTMAX-1’,
+‘RTMAX’.
+
+
+File: coreutils.info, Node: Disambiguating names and IDs, Next: Random sources, Prev: Signal specifications, Up: Common options
+
+2.4 chown, chgrp, chroot, id: Disambiguating user names and IDs
+===============================================================
+
+Since the USER and GROUP arguments to these commands may be specified as
+names or numeric IDs, there is an apparent ambiguity. What if a user or
+group _name_ is a string of digits? Should the command interpret it as
+a user name or as an ID? (Using a number as a user name is common in
+some environments.) POSIX requires that these commands first attempt to
+resolve the specified string as a name, and only once that fails, then
+try to interpret it as an ID. This is troublesome when you want to
+specify a numeric ID, say 42, and it must work even in a pathological
+situation where ‘42’ is a user name that maps to some other user ID, say
+1000. Simply invoking ‘chown 42 F’, will set ‘F’s owner ID to 1000 –
+not what you intended.
+
+ GNU ‘chown’, ‘chgrp’, ‘chroot’, and ‘id’ provide a way to work around
+this, that at the same time may result in a significant performance
+improvement by eliminating a database look-up. Simply precede each
+numeric user ID and/or group ID with a ‘+’, in order to force its
+interpretation as an integer:
+
+ chown +42 F
+ chgrp +$numeric_group_id another-file
+ chown +0:+0 /
+
+ The name look-up process is skipped for each ‘+’-prefixed string,
+because a string containing ‘+’ is never a valid user or group name.
+This syntax is accepted on most common Unix systems, but not on Solaris
+10.
+
+
+File: coreutils.info, Node: Random sources, Next: Target directory, Prev: Disambiguating names and IDs, Up: Common options
+
+2.5 Sources of random data
+==========================
+
+The ‘shuf’, ‘shred’, and ‘sort’ commands sometimes need random data to
+do their work. For example, ‘sort -R’ must choose a hash function at
+random, and it needs random data to make this selection.
+
+ By default these commands use an internal pseudo-random generator
+initialized by a small amount of entropy, but can be directed to use an
+external source with the ‘--random-source=FILE’ option. An error is
+reported if FILE does not contain enough bytes.
+
+ For example, the device file ‘/dev/urandom’ could be used as the
+source of random data. Typically, this device gathers environmental
+noise from device drivers and other sources into an entropy pool, and
+uses the pool to generate random bits. If the pool is short of data,
+the device reuses the internal pool to produce more bits, using a
+cryptographically secure pseudo-random number generator. But be aware
+that this device is not designed for bulk random data generation and is
+relatively slow.
+
+ ‘/dev/urandom’ suffices for most practical uses, but applications
+requiring high-value or long-term protection of private data may require
+an alternate data source like ‘/dev/random’ or ‘/dev/arandom’. The set
+of available sources depends on your operating system.
+
+ To reproduce the results of an earlier invocation of a command, you
+can save some random data into a file and then use that file as the
+random source in earlier and later invocations of the command. Rather
+than depending on a file, one can generate a reproducible arbitrary
+amount of pseudo-random data given a seed value, using for example:
+
+ get_seeded_random()
+ {
+ seed="$1"
+ openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
+ </dev/zero 2>/dev/null
+ }
+
+ shuf -i1-100 --random-source=<(get_seeded_random 42)
+
+
+File: coreutils.info, Node: Target directory, Next: Trailing slashes, Prev: Random sources, Up: Common options
+
+2.6 Target directory
+====================
+
+The ‘cp’, ‘install’, ‘ln’, and ‘mv’ commands normally treat the last
+operand specially when it is a directory or a symbolic link to a
+directory. For example, ‘cp source dest’ is equivalent to ‘cp source
+dest/source’ if ‘dest’ is a directory. Sometimes this behavior is not
+exactly what is wanted, so these commands support the following options
+to allow more fine-grained control:
+
+‘-T’
+‘--no-target-directory’
+ Do not treat the last operand specially when it is a directory or a
+ symbolic link to a directory. This can help avoid race conditions
+ in programs that operate in a shared area. For example, when the
+ command ‘mv /tmp/source /tmp/dest’ succeeds, there is no guarantee
+ that ‘/tmp/source’ was renamed to ‘/tmp/dest’: it could have been
+ renamed to ‘/tmp/dest/source’ instead, if some other process
+ created ‘/tmp/dest’ as a directory. However, if ‘mv -T /tmp/source
+ /tmp/dest’ succeeds, there is no question that ‘/tmp/source’ was
+ renamed to ‘/tmp/dest’.
+
+ In the opposite situation, where you want the last operand to be
+ treated as a directory and want a diagnostic otherwise, you can use
+ the ‘--target-directory’ (‘-t’) option.
+
+‘-t DIRECTORY’
+‘--target-directory=DIRECTORY’
+ Use DIRECTORY as the directory component of each destination file
+ name.
+
+ The interface for most programs is that after processing options
+ and a finite (possibly zero) number of fixed-position arguments,
+ the remaining argument list is either expected to be empty, or is a
+ list of items (usually files) that will all be handled identically.
+ The ‘xargs’ program is designed to work well with this convention.
+
+ The commands in the ‘mv’-family are unusual in that they take a
+ variable number of arguments with a special case at the _end_
+ (namely, the target directory). This makes it nontrivial to
+ perform some operations, e.g., “move all files from here to ../d/”,
+ because ‘mv * ../d/’ might exhaust the argument space, and ‘ls |
+ xargs ...’ doesn’t have a clean way to specify an extra final
+ argument for each invocation of the subject command. (It can be
+ done by going through a shell command, but that requires more human
+ labor and brain power than it should.)
+
+ The ‘--target-directory’ (‘-t’) option allows the ‘cp’, ‘install’,
+ ‘ln’, and ‘mv’ programs to be used conveniently with ‘xargs’. For
+ example, you can move the files from the current directory to a
+ sibling directory, ‘d’ like this:
+
+ ls | xargs mv -t ../d --
+
+ However, this doesn’t move files whose names begin with ‘.’. If
+ you use the GNU ‘find’ program, you can move those files too, with
+ this command:
+
+ find . -mindepth 1 -maxdepth 1 \
+ | xargs mv -t ../d
+
+ But both of the above approaches fail if there are no files in the
+ current directory, or if any file has a name containing a blank or
+ some other special characters. The following example removes those
+ limitations and requires both GNU ‘find’ and GNU ‘xargs’:
+
+ find . -mindepth 1 -maxdepth 1 -print0 \
+ | xargs --null --no-run-if-empty \
+ mv -t ../d
+
+The ‘--target-directory’ (‘-t’) and ‘--no-target-directory’ (‘-T’)
+options cannot be combined.
+
+
+File: coreutils.info, Node: Trailing slashes, Next: Traversing symlinks, Prev: Target directory, Up: Common options
+
+2.7 Trailing slashes
+====================
+
+Some GNU programs (at least ‘cp’ and ‘mv’) allow you to remove any
+trailing slashes from each SOURCE argument before operating on it. The
+‘--strip-trailing-slashes’ option enables this behavior.
+
+ This is useful when a SOURCE argument may have a trailing slash and
+specify a symbolic link to a directory. This scenario is in fact rather
+common because some shells can automatically append a trailing slash
+when performing file name completion on such symbolic links. Without
+this option, ‘mv’, for example, (via the system’s rename function) must
+interpret a trailing slash as a request to dereference the symbolic link
+and so must rename the indirectly referenced _directory_ and not the
+symbolic link. Although it may seem surprising that such behavior be
+the default, it is required by POSIX and is consistent with other parts
+of that standard.
+
+
+File: coreutils.info, Node: Traversing symlinks, Next: Treating / specially, Prev: Trailing slashes, Up: Common options
+
+2.8 Traversing symlinks
+=======================
+
+The following options modify how ‘chown’ and ‘chgrp’ traverse a
+hierarchy when the ‘--recursive’ (‘-R’) option is also specified. If
+more than one of the following options is specified, only the final one
+takes effect. These options specify whether processing a symbolic link
+to a directory entails operating on just the symbolic link or on all
+files in the hierarchy rooted at that directory.
+
+ These options are independent of ‘--dereference’ and
+‘--no-dereference’ (‘-h’), which control whether to modify a symlink or
+its referent.
+
+‘-H’
+ If ‘--recursive’ (‘-R’) is specified and a command line argument is
+ a symbolic link to a directory, traverse it.
+
+‘-L’
+ In a recursive traversal, traverse every symbolic link to a
+ directory that is encountered.
+
+‘-P’
+ Do not traverse any symbolic links. This is the default if none of
+ ‘-H’, ‘-L’, or ‘-P’ is specified.
+
+
+File: coreutils.info, Node: Treating / specially, Next: Special built-in utilities, Prev: Traversing symlinks, Up: Common options
+
+2.9 Treating ‘/’ specially
+==========================
+
+Certain commands can operate destructively on entire hierarchies. For
+example, if a user with appropriate privileges mistakenly runs ‘rm -rf /
+tmp/junk’, that may remove all files on the entire system. Since there
+are so few legitimate uses for such a command, GNU ‘rm’ normally
+declines to operate on any directory that resolves to ‘/’. If you
+really want to try to remove all the files on your system, you can use
+the ‘--no-preserve-root’ option, but the default behavior, specified by
+the ‘--preserve-root’ option, is safer for most purposes.
+
+ The commands ‘chgrp’, ‘chmod’ and ‘chown’ can also operate
+destructively on entire hierarchies, so they too support these options.
+Although, unlike ‘rm’, they don’t actually unlink files, these commands
+are arguably more dangerous when operating recursively on ‘/’, since
+they often work much more quickly, and hence damage more files before an
+alert user can interrupt them. Tradition and POSIX require these
+commands to operate recursively on ‘/’, so they default to
+‘--no-preserve-root’, but using the ‘--preserve-root’ option makes them
+safer for most purposes. For convenience you can specify
+‘--preserve-root’ in an alias or in a shell function.
+
+ Note that the ‘--preserve-root’ option also ensures that ‘chgrp’ and
+‘chown’ do not modify ‘/’ even when dereferencing a symlink pointing to
+‘/’.
+
+
+File: coreutils.info, Node: Special built-in utilities, Next: Exit status, Prev: Treating / specially, Up: Common options
+
+2.10 Special built-in utilities
+===============================
+
+Some programs like ‘nice’ can invoke other programs; for example, the
+command ‘nice cat file’ invokes the program ‘cat’ by executing the
+command ‘cat file’. However, “special built-in utilities” like ‘exit’
+cannot be invoked this way. For example, the command ‘nice exit’ does
+not have a well-defined behavior: it may generate an error message
+instead of exiting.
+
+ Here is a list of the special built-in utilities that are
+standardized by POSIX 1003.1-2004.
+
+ . : break continue eval exec exit export readonly return set shift
+ times trap unset
+
+ For example, because ‘.’, ‘:’, and ‘exec’ are special, the commands
+‘nice . foo.sh’, ‘nice :’, and ‘nice exec pwd’ do not work as you might
+expect.
+
+ Many shells extend this list. For example, Bash has several extra
+special built-in utilities like ‘history’, and ‘suspend’, and with Bash
+the command ‘nice suspend’ generates an error message instead of
+suspending.
+
+
+File: coreutils.info, Node: Exit status, Next: Floating point, Prev: Special built-in utilities, Up: Common options
+
+2.11 Exit status
+================
+
+Nearly every command invocation yields an integral “exit status” that
+can be used to change how other commands work. For the vast majority of
+commands, an exit status of zero indicates success. Failure is
+indicated by a nonzero value – typically ‘1’, though it may differ on
+unusual platforms as POSIX requires only that it be nonzero.
+
+ However, some of the programs documented here do produce other exit
+status values and a few associate different meanings with the values ‘0’
+and ‘1’. Here are the exceptions: ‘chroot’, ‘env’, ‘expr’, ‘ls’,
+‘nice’, ‘nohup’, ‘numfmt’, ‘printenv’, ‘runcon’, ‘sort’, ‘stdbuf’,
+‘test’, ‘timeout’, ‘tty’.
+
+
+File: coreutils.info, Node: Floating point, Next: Standards conformance, Prev: Exit status, Up: Common options
+
+2.12 Floating point numbers
+===========================
+
+Commands that accept or produce floating point numbers employ the
+floating point representation of the underlying system, and suffer from
+rounding error, overflow, and similar floating-point issues. Almost all
+modern systems use IEEE-754 floating point, and it is typically portable
+to assume IEEE-754 behavior these days. IEEE-754 has positive and
+negative infinity, distinguishes positive from negative zero, and uses
+special values called NaNs to represent invalid computations such as
+dividing zero by itself. For more information, please see David
+Goldberg’s paper What Every Computer Scientist Should Know About
+Floating-Point Arithmetic
+(https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).
+
+ Commands that accept floating point numbers as options, operands or
+input use the standard C functions ‘strtod’ and ‘strtold’ to convert
+from text to floating point numbers. These floating point numbers
+therefore can use scientific notation like ‘1.0e-34’ and ‘-10e100’.
+Commands that parse floating point also understand case-insensitive
+‘inf’, ‘infinity’, and ‘NaN’, although whether such values are useful
+depends on the command in question. Modern C implementations also
+accept hexadecimal floating point numbers such as ‘-0x.ep-3’, which
+stands for −14/16 times 2^-3, which equals −0.109375. *Note
+(libc)Parsing of Floats::.
+
+ Normally the ‘LC_NUMERIC’ locale determines the decimal-point
+character. However, some commands’ descriptions specify that they
+accept numbers in either the current or the C locale; for example, they
+treat ‘3.14’ like ‘3,14’ if the current locale uses comma as a decimal
+point.
+
+
+File: coreutils.info, Node: Standards conformance, Next: Multi-call invocation, Prev: Floating point, Up: Common options
+
+2.13 Standards conformance
+==========================
+
+In a few cases, the GNU utilities’ default behavior is incompatible with
+the POSIX standard. To suppress these incompatibilities, define the
+‘POSIXLY_CORRECT’ environment variable. Unless you are checking for
+POSIX conformance, you probably do not need to define ‘POSIXLY_CORRECT’.
+
+ Newer versions of POSIX are occasionally incompatible with older
+versions. For example, older versions of POSIX required the command
+‘sort +1’ to sort based on the second and succeeding fields in each
+input line, but in POSIX 1003.1-2001 the same command is required to
+sort the file named ‘+1’, and you must instead use the command ‘sort -k
+2’ to get the field-based sort. To complicate things further, POSIX
+1003.1-2008 allows an implementation to have either the old or the new
+behavior.
+
+ The GNU utilities normally conform to the version of POSIX that is
+standard for your system. To cause them to conform to a different
+version of POSIX, define the ‘_POSIX2_VERSION’ environment variable to a
+value of the form YYYYMM specifying the year and month the standard was
+adopted. Three values are currently supported for ‘_POSIX2_VERSION’:
+‘199209’ stands for POSIX 1003.2-1992, ‘200112’ stands for POSIX
+1003.1-2001, and ‘200809’ stands for POSIX 1003.1-2008. For example, if
+you have a POSIX 1003.1-2001 system but are running software containing
+traditional usage like ‘sort +1’ or ‘tail +10’, you can work around the
+compatibility problems by setting ‘_POSIX2_VERSION=200809’ in your
+environment.
+
+
+File: coreutils.info, Node: Multi-call invocation, Prev: Standards conformance, Up: Common options
+
+2.14 ‘coreutils’: Multi-call program
+====================================
+
+The ‘coreutils’ command invokes an individual utility, either implicitly
+selected by the last component of the name used to invoke ‘coreutils’,
+or explicitly with the ‘--coreutils-prog’ option. Synopsis:
+
+ coreutils --coreutils-prog=PROGRAM ...
+
+ The ‘coreutils’ command is not installed by default, so portable
+scripts should not rely on its existence.
+
+
+File: coreutils.info, Node: Output of entire files, Next: Formatting file contents, Prev: Common options, Up: Top
+
+3 Output of entire files
+************************
+
+These commands read and write entire files, possibly transforming them
+in some way.
+
+* Menu:
+
+* cat invocation:: Concatenate and write files.
+* tac invocation:: Concatenate and write files in reverse.
+* nl invocation:: Number lines and write files.
+* od invocation:: Write files in octal or other formats.
+* base32 invocation:: Transform data into printable data.
+* base64 invocation:: Transform data into printable data.
+* basenc invocation:: Transform data into printable data.
+
+
+File: coreutils.info, Node: cat invocation, Next: tac invocation, Up: Output of entire files
+
+3.1 ‘cat’: Concatenate and write files
+======================================
+
+‘cat’ copies each FILE (‘-’ means standard input), or standard input if
+none are given, to standard output. Synopsis:
+
+ cat [OPTION] [FILE]...
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-A’
+‘--show-all’
+ Equivalent to ‘-vET’.
+
+‘-b’
+‘--number-nonblank’
+ Number all nonempty output lines, starting with 1.
+
+‘-e’
+ Equivalent to ‘-vE’.
+
+‘-E’
+‘--show-ends’
+ Display a ‘$’ after the end of each line. The ‘\r\n’ combination
+ is shown as ‘^M$’.
+
+‘-n’
+‘--number’
+ Number all output lines, starting with 1. This option is ignored
+ if ‘-b’ is in effect.
+
+‘-s’
+‘--squeeze-blank’
+ Suppress repeated adjacent blank lines; output just one empty line
+ instead of several.
+
+‘-t’
+ Equivalent to ‘-vT’.
+
+‘-T’
+‘--show-tabs’
+ Display TAB characters as ‘^I’.
+
+‘-u’
+ Ignored; for POSIX compatibility.
+
+‘-v’
+‘--show-nonprinting’
+ Display control characters except for LFD and TAB using ‘^’
+ notation and precede characters that have the high bit set with
+ ‘M-’.
+
+ On systems like MS-DOS that distinguish between text and binary
+files, ‘cat’ normally reads and writes in binary mode. However, ‘cat’
+reads in text mode if one of the options ‘-bensAE’ is used or if ‘cat’
+is reading from standard input and standard input is a terminal.
+Similarly, ‘cat’ writes in text mode if one of the options ‘-bensAE’ is
+used or if standard output is a terminal.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Output f's contents, then standard input, then g's contents.
+ cat f - g
+
+ # Copy standard input to standard output.
+ cat
+
+
+File: coreutils.info, Node: tac invocation, Next: nl invocation, Prev: cat invocation, Up: Output of entire files
+
+3.2 ‘tac’: Concatenate and write files in reverse
+=================================================
+
+‘tac’ copies each FILE (‘-’ means standard input), or standard input if
+none are given, to standard output, reversing the records (lines by
+default) in each separately. Synopsis:
+
+ tac [OPTION]... [FILE]...
+
+ “Records” are separated by instances of a string (newline by
+default). By default, this separator string is attached to the end of
+the record that it follows in the file.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--before’
+ The separator is attached to the beginning of the record that it
+ precedes in the file.
+
+‘-r’
+‘--regex’
+ Treat the separator string as a regular expression.
+
+‘-s SEPARATOR’
+‘--separator=SEPARATOR’
+ Use SEPARATOR as the record separator, instead of newline. Note an
+ empty SEPARATOR is treated as a zero byte. I.e., input and output
+ items are delimited with ASCII NUL.
+
+ On systems like MS-DOS that distinguish between text and binary
+files, ‘tac’ reads and writes in binary mode.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Example:
+
+ # Reverse a file character by character.
+ tac -r -s 'x\|[^x]'
+
+
+File: coreutils.info, Node: nl invocation, Next: od invocation, Prev: tac invocation, Up: Output of entire files
+
+3.3 ‘nl’: Number lines and write files
+======================================
+
+‘nl’ writes each FILE (‘-’ means standard input), or standard input if
+none are given, to standard output, with line numbers added to some or
+all of the lines. Synopsis:
+
+ nl [OPTION]... [FILE]...
+
+ ‘nl’ decomposes its input into (logical) page sections; by default,
+the line number is reset to 1 at each logical page section. ‘nl’ treats
+all of the input files as a single document; it does not reset line
+numbers or logical pages between files.
+
+ A logical page consists of three sections: header, body, and footer.
+Any of the sections can be empty. Each can be numbered in a different
+style from the others.
+
+ The beginnings of the sections of logical pages are indicated in the
+input file by a line containing exactly one of these delimiter strings:
+
+‘\:\:\:’
+ start of header;
+‘\:\:’
+ start of body;
+‘\:’
+ start of footer.
+
+ The characters from which these strings are made can be changed from
+‘\’ and ‘:’ via options (see below), but the pattern of each string
+cannot be changed.
+
+ A section delimiter is replaced by an empty line on output. Any text
+that comes before the first section delimiter string in the input file
+is considered to be part of a body section, so ‘nl’ treats a file that
+contains no section delimiters as a single body section.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b STYLE’
+‘--body-numbering=STYLE’
+ Select the numbering style for lines in the body section of each
+ logical page. When a line is not numbered, the current line number
+ is not incremented, but the line number separator character is
+ still prepended to the line. The styles are:
+
+ ‘a’
+ number all lines,
+ ‘t’
+ number only nonempty lines (default for body),
+ ‘n’
+ do not number lines (default for header and footer),
+ ‘pBRE’
+ number only lines that contain a match for the basic regular
+ expression BRE. *Note Regular Expressions: (grep)Regular
+ Expressions.
+
+‘-d CD’
+‘--section-delimiter=CD’
+ Set the section delimiter characters to CD; default is ‘\:’. If
+ only C is given, the second remains ‘:’. As a GNU extension more
+ than two characters can be specified, and also if CD is empty (‘-d
+ ''’), then section matching is disabled. (Remember to protect ‘\’
+ or other metacharacters from shell expansion with quotes or extra
+ backslashes.)
+
+‘-f STYLE’
+‘--footer-numbering=STYLE’
+ Analogous to ‘--body-numbering’.
+
+‘-h STYLE’
+‘--header-numbering=STYLE’
+ Analogous to ‘--body-numbering’.
+
+‘-i NUMBER’
+‘--line-increment=NUMBER’
+ Increment line numbers by NUMBER (default 1). NUMBER can be
+ negative to decrement.
+
+‘-l NUMBER’
+‘--join-blank-lines=NUMBER’
+ Consider NUMBER (default 1) consecutive empty lines to be one
+ logical line for numbering, and only number the last one. Where
+ fewer than NUMBER consecutive empty lines occur, do not number
+ them. An empty line is one that contains no characters, not even
+ spaces or tabs.
+
+‘-n FORMAT’
+‘--number-format=FORMAT’
+ Select the line numbering format (default is ‘rn’):
+
+ ‘ln’
+ left justified, no leading zeros;
+ ‘rn’
+ right justified, no leading zeros;
+ ‘rz’
+ right justified, leading zeros.
+
+‘-p’
+‘--no-renumber’
+ Do not reset the line number at the start of a logical page.
+
+‘-s STRING’
+‘--number-separator=STRING’
+ Separate the line number from the text line in the output with
+ STRING (default is the TAB character).
+
+‘-v NUMBER’
+‘--starting-line-number=NUMBER’
+ Set the initial line number on each logical page to NUMBER (default
+ 1). The starting NUMBER can be negative.
+
+‘-w NUMBER’
+‘--number-width=NUMBER’
+ Use NUMBER characters for line numbers (default 6).
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: od invocation, Next: base32 invocation, Prev: nl invocation, Up: Output of entire files
+
+3.4 ‘od’: Write files in octal or other formats
+===============================================
+
+‘od’ writes an unambiguous representation of each FILE (‘-’ means
+standard input), or standard input if none are given. Synopses:
+
+ od [OPTION]... [FILE]...
+ od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]
+ od [OPTION]... --traditional [FILE] [[+]OFFSET[.][b] [[+]LABEL[.][b]]]
+
+ Each line of output consists of the offset in the input, followed by
+groups of data from the file. By default, ‘od’ prints the offset in
+octal, and each group of file data is a C ‘short int’’s worth of input
+printed as a single octal number.
+
+ If OFFSET is given, it specifies how many input bytes to skip before
+formatting and writing. By default, it is interpreted as an octal
+number, but the optional trailing decimal point causes it to be
+interpreted as decimal. If no decimal is specified and the offset
+begins with ‘0x’ or ‘0X’ it is interpreted as a hexadecimal number. If
+there is a trailing ‘b’, the number of bytes skipped will be OFFSET
+multiplied by 512.
+
+ If a command is of both the first and second forms, the second form
+is assumed if the last operand begins with ‘+’ or (if there are two
+operands) a digit. For example, in ‘od foo 10’ and ‘od +10’ the ‘10’ is
+an offset, whereas in ‘od 10’ the ‘10’ is a file name.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-A RADIX’
+‘--address-radix=RADIX’
+ Select the base in which file offsets are printed. RADIX can be
+ one of the following:
+
+ ‘d’
+ decimal;
+ ‘o’
+ octal;
+ ‘x’
+ hexadecimal;
+ ‘n’
+ none (do not print offsets).
+
+ The default is octal.
+
+‘--endian=ORDER’
+ Reorder input bytes, to handle inputs with differing byte orders,
+ or to provide consistent output independent of the endian
+ convention of the current system. Swapping is performed according
+ to the specified ‘--type’ size and endian ORDER, which can be
+ ‘little’ or ‘big’.
+
+‘-j BYTES’
+‘--skip-bytes=BYTES’
+ Skip BYTES input bytes before formatting and writing. If BYTES
+ begins with ‘0x’ or ‘0X’, it is interpreted in hexadecimal;
+ otherwise, if it begins with ‘0’, in octal; otherwise, in decimal.
+ BYTES may be, or may be an integer optionally followed by, one of
+ the following multiplicative suffixes:
+ ‘b’ => 512 ("blocks")
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+‘-N BYTES’
+‘--read-bytes=BYTES’
+ Output at most BYTES bytes of the input. Prefixes and suffixes on
+ ‘bytes’ are interpreted as for the ‘-j’ option.
+
+‘-S BYTES’
+‘--strings[=BYTES]’
+ Instead of the normal output, output only “string constants”: at
+ least BYTES consecutive printable characters, followed by a zero
+ byte (ASCII NUL). Prefixes and suffixes on BYTES are interpreted as
+ for the ‘-j’ option.
+
+ If BYTES is omitted with ‘--strings’, the default is 3.
+
+‘-t TYPE’
+‘--format=TYPE’
+ Select the format in which to output the file data. TYPE is a
+ string of one or more of the below type indicator characters. If
+ you include more than one type indicator character in a single TYPE
+ string, or use this option more than once, ‘od’ writes one copy of
+ each output line using each of the data types that you specified,
+ in the order that you specified.
+
+ Adding a trailing “z” to any type specification appends a display
+ of the single byte character representation of the printable
+ characters to the output line generated by the type specification.
+
+ ‘a’
+ named character, ignoring high-order bit
+ ‘c’
+ printable single byte character, C backslash escape or a 3
+ digit octal sequence
+ ‘d’
+ signed decimal
+ ‘f’
+ floating point (*note Floating point::)
+ ‘o’
+ octal
+ ‘u’
+ unsigned decimal
+ ‘x’
+ hexadecimal
+
+ The type ‘a’ outputs things like ‘sp’ for space, ‘nl’ for newline,
+ and ‘nul’ for a zero byte. Only the least significant seven bits
+ of each byte is used; the high-order bit is ignored. Type ‘c’
+ outputs ‘ ’, ‘\n’, and ‘\0’, respectively.
+
+ Except for types ‘a’ and ‘c’, you can specify the number of bytes
+ to use in interpreting each number in the given data type by
+ following the type indicator character with a decimal integer.
+ Alternately, you can specify the size of one of the C compiler’s
+ built-in data types by following the type indicator character with
+ one of the following characters. For integers (‘d’, ‘o’, ‘u’,
+ ‘x’):
+
+ ‘C’
+ char
+ ‘S’
+ short
+ ‘I’
+ int
+ ‘L’
+ long
+
+ For floating point (‘f’):
+
+ F
+ float
+ D
+ double
+ L
+ long double
+
+‘-v’
+‘--output-duplicates’
+ Output consecutive lines that are identical. By default, when two
+ or more consecutive output lines would be identical, ‘od’ outputs
+ only the first line, and puts just an asterisk on the following
+ line to indicate the elision.
+
+‘-w[N]’
+‘--width[=N]’
+ Dump ‘n’ input bytes per output line. This must be a multiple of
+ the least common multiple of the sizes associated with the
+ specified output types.
+
+ If this option is not given at all, the default is 16. If N is
+ omitted, the default is 32.
+
+ The next several options are shorthands for format specifications.
+GNU ‘od’ accepts any combination of shorthands and format specification
+options. These options accumulate.
+
+‘-a’
+ Output as named characters. Equivalent to ‘-t a’.
+
+‘-b’
+ Output as octal bytes. Equivalent to ‘-t o1’.
+
+‘-c’
+ Output as printable single byte characters, C backslash escapes or
+ 3 digit octal sequences. Equivalent to ‘-t c’.
+
+‘-d’
+ Output as unsigned decimal two-byte units. Equivalent to ‘-t u2’.
+
+‘-f’
+ Output as floats. Equivalent to ‘-t fF’.
+
+‘-i’
+ Output as decimal ints. Equivalent to ‘-t dI’.
+
+‘-l’
+ Output as decimal long ints. Equivalent to ‘-t dL’.
+
+‘-o’
+ Output as octal two-byte units. Equivalent to ‘-t o2’.
+
+‘-s’
+ Output as decimal two-byte units. Equivalent to ‘-t d2’.
+
+‘-x’
+ Output as hexadecimal two-byte units. Equivalent to ‘-t x2’.
+
+‘--traditional’
+ Recognize the non-option label argument that traditional ‘od’
+ accepted. The following syntax:
+
+ od --traditional [FILE] [[+]OFFSET[.][b] [[+]LABEL[.][b]]]
+
+ can be used to specify at most one file and optional arguments
+ specifying an offset and a pseudo-start address, LABEL. The LABEL
+ argument is interpreted just like OFFSET, but it specifies an
+ initial pseudo-address. The pseudo-addresses are displayed in
+ parentheses following any normal address.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: base32 invocation, Next: base64 invocation, Prev: od invocation, Up: Output of entire files
+
+3.5 ‘base32’: Transform data into printable data
+================================================
+
+‘base32’ transforms data read from a file, or standard input, into (or
+from) base32 encoded form. The base32 encoded form uses printable ASCII
+characters to represent binary data. The usage and options of this
+command are precisely the same as for ‘base64’. *Note base64
+invocation::. For more general encoding functionality see *note basenc
+invocation::.
+
+
+File: coreutils.info, Node: base64 invocation, Next: basenc invocation, Prev: base32 invocation, Up: Output of entire files
+
+3.6 ‘base64’: Transform data into printable data
+================================================
+
+‘base64’ transforms data read from a file, or standard input, into (or
+from) base64 encoded form. The base64 encoded form uses printable ASCII
+characters to represent binary data. Synopses:
+
+ base64 [OPTION]... [FILE]
+ base64 --decode [OPTION]... [FILE]
+
+ The base64 encoding expands data to roughly 133% of the original.
+The base32 encoding expands data to roughly 160% of the original. The
+format conforms to RFC 4648 (https://tools.ietf.org/search/rfc4648).
+
+ For more general encoding functionality see *note basenc
+invocation::.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-w COLS’
+‘--wrap=COLS’
+ During encoding, wrap lines after COLS characters. This must be a
+ positive number.
+
+ The default is to wrap after 76 characters. Use the value 0 to
+ disable line wrapping altogether.
+
+‘-d’
+‘--decode’
+ Change the mode of operation, from the default of encoding data, to
+ decoding data. Input is expected to be base64 encoded data, and
+ the output will be the original data.
+
+‘-i’
+‘--ignore-garbage’
+ When decoding, newlines are always accepted. During decoding,
+ ignore unrecognized bytes, to permit distorted data to be decoded.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: basenc invocation, Prev: base64 invocation, Up: Output of entire files
+
+3.7 ‘basenc’: Transform data into printable data
+================================================
+
+‘basenc’ transforms data read from a file, or standard input, into (or
+from) various common encoding forms. The encoded form uses printable
+ASCII characters to represent binary data.
+
+ Synopses:
+
+ basenc ENCODING [OPTION]... [FILE]
+ basenc ENCODING --decode [OPTION]... [FILE]
+
+ The ENCODING argument is required. If FILE is omitted, ‘basenc’
+reads from standard input. The ‘-w/--wrap’,‘-i/--ignore-garbage’,
+‘-d/--decode’ options of this command are precisely the same as for
+‘base64’. *Note base64 invocation::.
+
+ Supported ENCODINGs are:
+
+‘--base64’
+ Encode into (or decode from with ‘-d/--decode’) base64 form. The
+ format conforms to RFC 4648#4
+ (https://tools.ietf.org/search/rfc4648#section-4). Equivalent to
+ the ‘base64’ command.
+
+‘--base64url’
+ Encode into (or decode from with ‘-d/--decode’) file-and-url-safe
+ base64 form (using ‘_’ and ‘-’ instead of ‘+’ and ‘/’). The format
+ conforms to RFC 4648#5
+ (https://tools.ietf.org/search/rfc4648#section-5).
+
+‘--base32’
+ Encode into (or decode from with ‘-d/--decode’) base32 form. The
+ encoded data uses the ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=’
+ characters. The format conforms to RFC 4648#6
+ (https://tools.ietf.org/search/rfc4648#section-6). Equivalent to
+ the ‘base32’ command.
+
+‘--base32hex’
+ Encode into (or decode from with ‘-d/--decode’) Extended Hex
+ Alphabet base32 form. The encoded data uses the
+ ‘0123456789ABCDEFGHIJKLMNOPQRSTUV=’ characters. The format
+ conforms to RFC 4648#7
+ (https://tools.ietf.org/search/rfc4648#section-7).
+
+‘--base16’
+ Encode into (or decode from with ‘-d/--decode’) base16
+ (hexadecimal) form. The encoded data uses the ‘0123456789ABCDEF’
+ characters. The format conforms to RFC 4648#8
+ (https://tools.ietf.org/search/rfc4648#section-8).
+
+‘--base2lsbf’
+ Encode into (or decode from with ‘-d/--decode’) binary string form
+ (‘0’ and ‘1’) with the _least_ significant bit of every byte first.
+
+‘--base2msbf’
+ Encode into (or decode from with ‘-d/--decode’) binary string form
+ (‘0’ and ‘1’) with the _most_ significant bit of every byte first.
+
+‘--z85’
+ Encode into (or decode from with ‘-d/--decode’) Z85 form (a
+ modified Ascii85 form). The encoded data uses the
+ ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU VWXYZ.-:+=^!/*?&<>()[]{}@%$#’.
+ characters. The format conforms to ZeroMQ spec:32/Z85
+ (https://rfc.zeromq.org/spec:32/Z85/).
+
+ When encoding with ‘--z85’, input length must be a multiple of 4;
+ when decoding with ‘--z85’, input length must be a multiple of 5.
+
+ Encoding/decoding examples:
+
+ $ printf '\376\117\202' | basenc --base64
+ /k+C
+
+ $ printf '\376\117\202' | basenc --base64url
+ _k-C
+
+ $ printf '\376\117\202' | basenc --base32
+ 7ZHYE===
+
+ $ printf '\376\117\202' | basenc --base32hex
+ VP7O4===
+
+ $ printf '\376\117\202' | basenc --base16
+ FE4F82
+
+ $ printf '\376\117\202' | basenc --base2lsbf
+ 011111111111001001000001
+
+ $ printf '\376\117\202' | basenc --base2msbf
+ 111111100100111110000010
+
+ $ printf '\376\117\202\000' | basenc --z85
+ @.FaC
+
+ $ printf 01010100 | basenc --base2msbf --decode
+ T
+
+ $ printf 01010100 | basenc --base2lsbf --decode
+ *
+
+
+File: coreutils.info, Node: Formatting file contents, Next: Output of parts of files, Prev: Output of entire files, Up: Top
+
+4 Formatting file contents
+**************************
+
+These commands reformat the contents of files.
+
+* Menu:
+
+* fmt invocation:: Reformat paragraph text.
+* pr invocation:: Paginate or columnate files for printing.
+* fold invocation:: Wrap input lines to fit in specified width.
+
+
+File: coreutils.info, Node: fmt invocation, Next: pr invocation, Up: Formatting file contents
+
+4.1 ‘fmt’: Reformat paragraph text
+==================================
+
+‘fmt’ fills and joins lines to produce output lines of (at most) a given
+number of characters (75 by default). Synopsis:
+
+ fmt [OPTION]... [FILE]...
+
+ ‘fmt’ reads from the specified FILE arguments (or standard input if
+none are given), and writes to standard output.
+
+ By default, blank lines, spaces between words, and indentation are
+preserved in the output; successive input lines with different
+indentation are not joined; tabs are expanded on input and introduced on
+output.
+
+ ‘fmt’ prefers breaking lines at the end of a sentence, and tries to
+avoid line breaks after the first word of a sentence or before the last
+word of a sentence. A “sentence break” is defined as either the end of
+a paragraph or a word ending in any of ‘.?!’, followed by two spaces or
+end of line, ignoring any intervening parentheses or quotes. Like TeX,
+‘fmt’ reads entire “paragraphs” before choosing line breaks; the
+algorithm is a variant of that given by Donald E. Knuth and Michael F.
+Plass in “Breaking Paragraphs Into Lines”, ‘Software: Practice &
+Experience’ 11, 11 (November 1981), 1119–1184.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--crown-margin’
+ “Crown margin” mode: preserve the indentation of the first two
+ lines within a paragraph, and align the left margin of each
+ subsequent line with that of the second line.
+
+‘-t’
+‘--tagged-paragraph’
+ “Tagged paragraph” mode: like crown margin mode, except that if
+ indentation of the first line of a paragraph is the same as the
+ indentation of the second, the first line is treated as a one-line
+ paragraph.
+
+‘-s’
+‘--split-only’
+ Split lines only. Do not join short lines to form longer ones.
+ This prevents sample lines of code, and other such “formatted” text
+ from being unduly combined.
+
+‘-u’
+‘--uniform-spacing’
+ Uniform spacing. Reduce spacing between words to one space, and
+ spacing between sentences to two spaces.
+
+‘-WIDTH’
+‘-w WIDTH’
+‘--width=WIDTH’
+ Fill output lines up to WIDTH characters (default 75 or GOAL plus
+ 10, if GOAL is provided).
+
+‘-g GOAL’
+‘--goal=GOAL’
+ ‘fmt’ initially tries to make lines GOAL characters wide. By
+ default, this is 7% shorter than WIDTH.
+
+‘-p PREFIX’
+‘--prefix=PREFIX’
+ Only lines beginning with PREFIX (possibly preceded by whitespace)
+ are subject to formatting. The prefix and any preceding whitespace
+ are stripped for the formatting and then re-attached to each
+ formatted output line. One use is to format certain kinds of
+ program comments, while leaving the code unchanged.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: pr invocation, Next: fold invocation, Prev: fmt invocation, Up: Formatting file contents
+
+4.2 ‘pr’: Paginate or columnate files for printing
+==================================================
+
+‘pr’ writes each FILE (‘-’ means standard input), or standard input if
+none are given, to standard output, paginating and optionally outputting
+in multicolumn format; optionally merges all FILEs, printing all in
+parallel, one per column. Synopsis:
+
+ pr [OPTION]... [FILE]...
+
+ By default, a 5-line header is printed at each page: two blank lines;
+a line with the date, the file name, and the page count; and two more
+blank lines. A footer of five blank lines is also printed. The default
+PAGE_LENGTH is 66 lines. The default number of text lines is therefore
+56. The text line of the header takes the form ‘DATE STRING PAGE’, with
+spaces inserted around STRING so that the line takes up the full
+PAGE_WIDTH. Here, DATE is the date (see the ‘-D’ or ‘--date-format’
+option for details), STRING is the centered header string, and PAGE
+identifies the page number. The ‘LC_MESSAGES’ locale category affects
+the spelling of PAGE; in the default C locale, it is ‘Page NUMBER’ where
+NUMBER is the decimal page number.
+
+ Form feeds in the input cause page breaks in the output. Multiple
+form feeds produce empty pages.
+
+ Columns are of equal width, separated by an optional string (default
+is ‘space’). For multicolumn output, lines will always be truncated to
+PAGE_WIDTH (default 72), unless you use the ‘-J’ option. For single
+column output no line truncation occurs by default. Use ‘-W’ option to
+truncate lines in that case.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘+FIRST_PAGE[:LAST_PAGE]’
+‘--pages=FIRST_PAGE[:LAST_PAGE]’
+ Begin printing with page FIRST_PAGE and stop with LAST_PAGE.
+ Missing ‘:LAST_PAGE’ implies end of file. While estimating the
+ number of skipped pages each form feed in the input file results in
+ a new page. Page counting with and without ‘+FIRST_PAGE’ is
+ identical. By default, counting starts with the first page of
+ input file (not first page printed). Line numbering may be altered
+ by ‘-N’ option.
+
+‘-COLUMN’
+‘--columns=COLUMN’
+ With each single FILE, produce COLUMN columns of output (default is
+ 1) and print columns down, unless ‘-a’ is used. The column width
+ is automatically decreased as COLUMN increases; unless you use the
+ ‘-W/-w’ option to increase PAGE_WIDTH as well. This option might
+ well cause some lines to be truncated. The number of lines in the
+ columns on each page are balanced. The options ‘-e’ and ‘-i’ are
+ on for multiple text-column output. Together with ‘-J’ option
+ column alignment and line truncation is turned off. Lines of full
+ length are joined in a free field format and ‘-S’ option may set
+ field separators. ‘-COLUMN’ may not be used with ‘-m’ option.
+
+‘-a’
+‘--across’
+ With each single FILE, print columns across rather than down. The
+ ‘-COLUMN’ option must be given with COLUMN greater than one. If a
+ line is too long to fit in a column, it is truncated.
+
+‘-c’
+‘--show-control-chars’
+ Print control characters using hat notation (e.g., ‘^G’); print
+ other nonprinting characters in octal backslash notation. By
+ default, nonprinting characters are not changed.
+
+‘-d’
+‘--double-space’
+ Double space the output.
+
+‘-D FORMAT’
+‘--date-format=FORMAT’
+ Format header dates using FORMAT, using the same conventions as for
+ the command ‘date +FORMAT’. *Note date invocation::. Except for
+ directives, which start with ‘%’, characters in FORMAT are printed
+ unchanged. You can use this option to specify an arbitrary string
+ in place of the header date, e.g., ‘--date-format="Monday
+ morning"’.
+
+ The default date format is ‘%Y-%m-%d %H:%M’ (for example,
+ ‘2020-07-09 23:59’); but if the ‘POSIXLY_CORRECT’ environment
+ variable is set and the ‘LC_TIME’ locale category specifies the
+ POSIX locale, the default is ‘%b %e %H:%M %Y’ (for example, ‘Jul 9
+ 23:59 2020’.
+
+ Timestamps are listed according to the time zone rules specified by
+ the ‘TZ’ environment variable, or by the system default rules if
+ ‘TZ’ is not set. *Note Specifying the Time Zone with ‘TZ’:
+ (libc)TZ Variable.
+
+‘-e[IN-TABCHAR[IN-TABWIDTH]]’
+‘--expand-tabs[=IN-TABCHAR[IN-TABWIDTH]]’
+ Expand TABs to spaces on input. Optional argument IN-TABCHAR is
+ the input tab character (default is the TAB character). Second
+ optional argument IN-TABWIDTH is the input tab character’s width
+ (default is 8).
+
+‘-f’
+‘-F’
+‘--form-feed’
+ Use a form feed instead of newlines to separate output pages. This
+ does not alter the default page length of 66 lines.
+
+‘-h HEADER’
+‘--header=HEADER’
+ Replace the file name in the header with the centered string
+ HEADER. When using the shell, HEADER should be quoted and should
+ be separated from ‘-h’ by a space.
+
+‘-i[OUT-TABCHAR[OUT-TABWIDTH]]’
+‘--output-tabs[=OUT-TABCHAR[OUT-TABWIDTH]]’
+ Replace spaces with TABs on output. Optional argument OUT-TABCHAR
+ is the output tab character (default is the TAB character). Second
+ optional argument OUT-TABWIDTH is the output tab character’s width
+ (default is 8).
+
+‘-J’
+‘--join-lines’
+ Merge lines of full length. Used together with the column options
+ ‘-COLUMN’, ‘-a -COLUMN’ or ‘-m’. Turns off ‘-W/-w’ line
+ truncation; no column alignment used; may be used with
+ ‘--sep-string[=STRING]’. ‘-J’ has been introduced (together with
+ ‘-W’ and ‘--sep-string’) to disentangle the old (POSIX-compliant)
+ options ‘-w’ and ‘-s’ along with the three column options.
+
+‘-l PAGE_LENGTH’
+‘--length=PAGE_LENGTH’
+ Set the page length to PAGE_LENGTH (default 66) lines, including
+ the lines of the header [and the footer]. If PAGE_LENGTH is less
+ than or equal to 10, the header and footer are omitted, as if the
+ ‘-t’ option had been given.
+
+‘-m’
+‘--merge’
+ Merge and print all FILEs in parallel, one in each column. If a
+ line is too long to fit in a column, it is truncated, unless the
+ ‘-J’ option is used. ‘--sep-string[=STRING]’ may be used. Empty
+ pages in some FILEs (form feeds set) produce empty columns, still
+ marked by STRING. The result is a continuous line numbering and
+ column marking throughout the whole merged file. Completely empty
+ merged pages show no separators or line numbers. The default
+ header becomes ‘DATE PAGE’ with spaces inserted in the middle; this
+ may be used with the ‘-h’ or ‘--header’ option to fill up the
+ middle blank part.
+
+‘-n[NUMBER-SEPARATOR[DIGITS]]’
+‘--number-lines[=NUMBER-SEPARATOR[DIGITS]]’
+ Provide DIGITS digit line numbering (default for DIGITS is 5).
+ With multicolumn output the number occupies the first DIGITS column
+ positions of each text column or only each line of ‘-m’ output.
+ With single column output the number precedes each line just as
+ ‘-m’ does. Default counting of the line numbers starts with the
+ first line of the input file (not the first line printed, compare
+ the ‘--page’ option and ‘-N’ option). Optional argument
+ NUMBER-SEPARATOR is the character appended to the line number to
+ separate it from the text followed. The default separator is the
+ TAB character. In a strict sense a TAB is always printed with
+ single column output only. The TAB width varies with the TAB
+ position, e.g., with the left MARGIN specified by ‘-o’ option.
+ With multicolumn output priority is given to ‘equal width of output
+ columns’ (a POSIX specification). The TAB width is fixed to the
+ value of the first column and does not change with different values
+ of left MARGIN. That means a fixed number of spaces is always
+ printed in the place of the NUMBER-SEPARATOR TAB. The tabification
+ depends upon the output position.
+
+‘-N LINE_NUMBER’
+‘--first-line-number=LINE_NUMBER’
+ Start line counting with the number LINE_NUMBER at first line of
+ first page printed (in most cases not the first line of the input
+ file).
+
+‘-o MARGIN’
+‘--indent=MARGIN’
+ Indent each line with a margin MARGIN spaces wide (default is
+ zero). The total page width is the size of the margin plus the
+ PAGE_WIDTH set with the ‘-W/-w’ option. A limited overflow may
+ occur with numbered single column output (compare ‘-n’ option).
+
+‘-r’
+‘--no-file-warnings’
+ Do not print a warning message when an argument FILE cannot be
+ opened. (The exit status will still be nonzero, however.)
+
+‘-s[CHAR]’
+‘--separator[=CHAR]’
+ Separate columns by a single character CHAR. The default for CHAR
+ is the TAB character without ‘-w’ and ‘no character’ with ‘-w’.
+ Without ‘-s’ the default separator ‘space’ is set. ‘-s[char]’
+ turns off line truncation of all three column options
+ (‘-COLUMN’|‘-a -COLUMN’|‘-m’) unless ‘-w’ is set. This is a
+ POSIX-compliant formulation.
+
+‘-S[STRING]’
+‘--sep-string[=STRING]’
+ Use STRING to separate output columns. The ‘-S’ option doesn’t
+ affect the ‘-W/-w’ option, unlike the ‘-s’ option which does. It
+ does not affect line truncation or column alignment. Without ‘-S’,
+ and with ‘-J’, ‘pr’ uses the default output separator, TAB.
+ Without ‘-S’ or ‘-J’, ‘pr’ uses a ‘space’ (same as ‘-S" "’). If no
+ ‘STRING’ argument is specified, ‘""’ is assumed.
+
+‘-t’
+‘--omit-header’
+ Do not print the usual header [and footer] on each page, and do not
+ fill out the bottom of pages (with blank lines or a form feed). No
+ page structure is produced, but form feeds set in the input files
+ are retained. The predefined pagination is not changed. ‘-t’ or
+ ‘-T’ may be useful together with other options; e.g.: ‘-t -e4’,
+ expand TAB characters in the input file to 4 spaces but don’t make
+ any other changes. Use of ‘-t’ overrides ‘-h’.
+
+‘-T’
+‘--omit-pagination’
+ Do not print header [and footer]. In addition eliminate all form
+ feeds set in the input files.
+
+‘-v’
+‘--show-nonprinting’
+ Print nonprinting characters in octal backslash notation.
+
+‘-w PAGE_WIDTH’
+‘--width=PAGE_WIDTH’
+ Set page width to PAGE_WIDTH characters for multiple text-column
+ output only (default for PAGE_WIDTH is 72). The specified
+ PAGE_WIDTH is rounded down so that columns have equal width.
+ ‘-s[CHAR]’ turns off the default page width and any line truncation
+ and column alignment. Lines of full length are merged, regardless
+ of the column options set. No PAGE_WIDTH setting is possible with
+ single column output. A POSIX-compliant formulation.
+
+‘-W PAGE_WIDTH’
+‘--page_width=PAGE_WIDTH’
+ Set the page width to PAGE_WIDTH characters, honored with and
+ without a column option. With a column option, the specified
+ PAGE_WIDTH is rounded down so that columns have equal width. Text
+ lines are truncated, unless ‘-J’ is used. Together with one of the
+ three column options (‘-COLUMN’, ‘-a -COLUMN’ or ‘-m’) column
+ alignment is always used. The separator options ‘-S’ or ‘-s’ don’t
+ disable the ‘-W’ option. Default is 72 characters. Without ‘-W
+ PAGE_WIDTH’ and without any of the column options NO line
+ truncation is used (defined to keep downward compatibility and to
+ meet most frequent tasks). That’s equivalent to ‘-W 72 -J’. The
+ header line is never truncated.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: fold invocation, Prev: pr invocation, Up: Formatting file contents
+
+4.3 ‘fold’: Wrap input lines to fit in specified width
+======================================================
+
+‘fold’ writes each FILE (‘-’ means standard input), or standard input if
+none are given, to standard output, breaking long lines. Synopsis:
+
+ fold [OPTION]... [FILE]...
+
+ By default, ‘fold’ breaks lines wider than 80 columns. The output is
+split into as many lines as necessary.
+
+ ‘fold’ counts screen columns by default; thus, a tab may count more
+than one column, backspace decreases the column count, and carriage
+return sets the column to zero.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--bytes’
+ Count bytes rather than columns, so that tabs, backspaces, and
+ carriage returns are each counted as taking up one column, just
+ like other characters.
+
+‘-s’
+‘--spaces’
+ Break at word boundaries: the line is broken after the last blank
+ before the maximum line length. If the line contains no such
+ blanks, the line is broken at the maximum line length as usual.
+
+‘-w WIDTH’
+‘--width=WIDTH’
+ Use a maximum line length of WIDTH columns instead of 80.
+
+ For compatibility ‘fold’ supports an obsolete option syntax
+ ‘-WIDTH’. New scripts should use ‘-w WIDTH’ instead.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Output of parts of files, Next: Summarizing files, Prev: Formatting file contents, Up: Top
+
+5 Output of parts of files
+**************************
+
+These commands output pieces of the input.
+
+* Menu:
+
+* head invocation:: Output the first part of files.
+* tail invocation:: Output the last part of files.
+* split invocation:: Split a file into pieces.
+* csplit invocation:: Split a file into context-determined pieces.
+
+
+File: coreutils.info, Node: head invocation, Next: tail invocation, Up: Output of parts of files
+
+5.1 ‘head’: Output the first part of files
+==========================================
+
+‘head’ prints the first part (10 lines by default) of each FILE; it
+reads from standard input if no files are given or when given a FILE of
+‘-’. Synopsis:
+
+ head [OPTION]... [FILE]...
+
+ If more than one FILE is specified, ‘head’ prints a one-line header
+consisting of:
+
+ ==> FILE NAME <==
+
+before the output for each FILE.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c [-]NUM’
+‘--bytes=[-]NUM’
+ Print the first NUM bytes, instead of initial lines. However, if
+ NUM is prefixed with a ‘-’, print all but the last NUM bytes of
+ each file. NUM may be, or may be an integer optionally followed
+ by, one of the following multiplicative suffixes:
+ ‘b’ => 512 ("blocks")
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+‘-n [-]NUM’
+‘--lines=[-]NUM’
+ Output the first NUM lines. However, if NUM is prefixed with a
+ ‘-’, print all but the last NUM lines of each file. Size
+ multiplier suffixes are the same as with the ‘-c’ option.
+
+‘-q’
+‘--quiet’
+‘--silent’
+ Never print file name headers.
+
+‘-v’
+‘--verbose’
+ Always print file name headers.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ For compatibility ‘head’ also supports an obsolete option syntax
+‘-[NUM][bkm][cqv]’, which is recognized only if it is specified first.
+NUM is a decimal number optionally followed by a size letter (‘b’, ‘k’,
+‘m’) as in ‘-c’, or ‘l’ to mean count by lines, or other option letters
+(‘cqv’). Scripts intended for standard hosts should use ‘-c NUM’ or ‘-n
+NUM’ instead. If your script must also run on hosts that support only
+the obsolete syntax, it is usually simpler to avoid ‘head’, e.g., by
+using ‘sed 5q’ instead of ‘head -5’.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: tail invocation, Next: split invocation, Prev: head invocation, Up: Output of parts of files
+
+5.2 ‘tail’: Output the last part of files
+=========================================
+
+‘tail’ prints the last part (10 lines by default) of each FILE; it reads
+from standard input if no files are given or when given a FILE of ‘-’.
+Synopsis:
+
+ tail [OPTION]... [FILE]...
+
+ If more than one FILE is specified, ‘tail’ prints a one-line header
+before the output for each FILE, consisting of:
+
+ ==> FILE NAME <==
+
+ For further processing of tail output, it can be useful to convert
+the file headers to line prefixes, which can be done like:
+
+ tail ... |
+ awk '
+ /^==> .* <==$/ {prefix=substr($0,5,length-8)":"; next}
+ {print prefix$0}
+ ' | ...
+
+ GNU ‘tail’ can output any amount of data (some other versions of
+‘tail’ cannot). It also has no ‘-r’ option (print in reverse), since
+reversing a file is really a different job from printing the end of a
+file; BSD ‘tail’ (which is the one with ‘-r’) can only reverse files
+that are at most as large as its buffer, which is typically 32 KiB. A
+more reliable and versatile way to reverse files is the GNU ‘tac’
+command.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c [+]NUM’
+‘--bytes=[+]NUM’
+ Output the last NUM bytes, instead of final lines. If NUM is
+ prefixed with a ‘+’, start printing with byte NUM from the start of
+ each file. For example to skip the first byte use ‘tail -c +2’,
+ while to skip all but the last byte use ‘tail -c 1’. NUM may be,
+ or may be an integer optionally followed by, one of the following
+ multiplicative suffixes:
+ ‘b’ => 512 ("blocks")
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+‘-f’
+‘--follow[=HOW]’
+ Loop forever trying to read more characters at the end of the file,
+ presumably because the file is growing. If more than one file is
+ given, ‘tail’ prints a header whenever it gets output from a
+ different file, to indicate which file that output is from.
+
+ There are two ways to specify how you’d like to track files with
+ this option, but that difference is noticeable only when a followed
+ file is removed or renamed. If you’d like to continue to track the
+ end of a growing file even after it has been unlinked, use
+ ‘--follow=descriptor’. This is the default behavior, but it is not
+ useful if you’re tracking a log file that may be rotated (removed
+ or renamed, then reopened). In that case, use ‘--follow=name’ to
+ track the named file, perhaps by reopening it periodically to see
+ if it has been removed and recreated by some other program. Note
+ that the inotify-based implementation handles this case without the
+ need for any periodic reopening.
+
+ No matter which method you use, if the tracked file is determined
+ to have shrunk, ‘tail’ prints a message saying the file has been
+ truncated and resumes tracking from the start of the file, assuming
+ it has been truncated to 0, which is the usual truncation operation
+ for log files.
+
+ When a file is removed, ‘tail’’s behavior depends on whether it is
+ following the name or the descriptor. When following by name, tail
+ can detect that a file has been removed and gives a message to that
+ effect, and if ‘--retry’ has been specified it will continue
+ checking periodically to see if the file reappears. When following
+ a descriptor, tail does not detect that the file has been unlinked
+ or renamed and issues no message; even though the file may no
+ longer be accessible via its original name, it may still be
+ growing.
+
+ The option values ‘descriptor’ and ‘name’ may be specified only
+ with the long form of the option, not with ‘-f’.
+
+ The ‘-f’ option is ignored if no FILE operand is specified and
+ standard input is a FIFO or a pipe. Likewise, the ‘-f’ option has
+ no effect for any operand specified as ‘-’, when standard input is
+ a FIFO or a pipe.
+
+ With kernel inotify support, output is triggered by file changes
+ and is generally very prompt. Otherwise, ‘tail’ sleeps for one
+ second between checks – use ‘--sleep-interval=N’ to change that
+ default – which can make the output appear slightly less responsive
+ or bursty. When using tail without inotify support, you can make
+ it more responsive by using a sub-second sleep interval, e.g., via
+ an alias like this:
+
+ alias tail='tail -s.1'
+
+‘-F’
+ This option is the same as ‘--follow=name --retry’. That is, tail
+ will attempt to reopen a file when it is removed. Should this
+ fail, tail will keep trying until it becomes accessible again.
+
+‘--max-unchanged-stats=N’
+ When tailing a file by name, if there have been N (default n=5)
+ consecutive iterations for which the file has not changed, then
+ ‘open’/‘fstat’ the file to determine if that file name is still
+ associated with the same device/inode-number pair as before. When
+ following a log file that is rotated, this is approximately the
+ number of seconds between when tail prints the last pre-rotation
+ lines and when it prints the lines that have accumulated in the new
+ log file. This option is meaningful only when polling (i.e.,
+ without inotify) and when following by name.
+
+‘-n [+]NUM’
+‘--lines=[+]’
+ Output the last NUM lines. If NUM is prefixed with a ‘+’, start
+ printing with line NUM from the start of each file. For example to
+ skip the first line use ‘tail -n +2’, while to skip all but the
+ last line use ‘tail -n 1’. Size multiplier suffixes are the same
+ as with the ‘-c’ option.
+
+‘--pid=PID’
+ When following by name or by descriptor, you may specify the
+ process ID, PID, of the sole writer of all FILE arguments. Then,
+ shortly after that process terminates, tail will also terminate.
+ This will work properly only if the writer and the tailing process
+ are running on the same machine. For example, to save the output
+ of a build in a file and to watch the file grow, if you invoke
+ ‘make’ and ‘tail’ like this then the tail process will stop when
+ your build completes. Without this option, you would have had to
+ kill the ‘tail -f’ process yourself.
+
+ $ make >& makerr & tail --pid=$! -f makerr
+
+ If you specify a PID that is not in use or that does not correspond
+ to the process that is writing to the tailed files, then ‘tail’ may
+ terminate long before any FILEs stop growing or it may not
+ terminate until long after the real writer has terminated. Note
+ that ‘--pid’ cannot be supported on some systems; ‘tail’ will print
+ a warning if this is the case.
+
+‘-q’
+‘--quiet’
+‘--silent’
+ Never print file name headers.
+
+‘--retry’
+ Indefinitely try to open the specified file. This option is useful
+ mainly when following (and otherwise issues a warning).
+
+ When following by file descriptor (i.e., with
+ ‘--follow=descriptor’), this option only affects the initial open
+ of the file, as after a successful open, ‘tail’ will start
+ following the file descriptor.
+
+ When following by name (i.e., with ‘--follow=name’), ‘tail’
+ infinitely retries to re-open the given files until killed.
+
+ Without this option, when ‘tail’ encounters a file that doesn’t
+ exist or is otherwise inaccessible, it reports that fact and never
+ checks it again.
+
+‘-s NUMBER’
+‘--sleep-interval=NUMBER’
+ Change the number of seconds to wait between iterations (the
+ default is 1.0). During one iteration, every specified file is
+ checked to see if it has changed size. When ‘tail’ uses inotify,
+ this polling-related option is usually ignored. However, if you
+ also specify ‘--pid=P’, ‘tail’ checks whether process P is alive at
+ least every NUMBER seconds. The NUMBER must be non-negative and
+ can be a floating-point number in either the current or the C
+ locale. *Note Floating point::.
+
+‘-v’
+‘--verbose’
+ Always print file name headers.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ For compatibility ‘tail’ also supports an obsolete usage ‘tail
+-[NUM][bcl][f] [FILE]’, which is recognized only if it does not conflict
+with the usage described above. This obsolete form uses exactly one
+option and at most one file. In the option, NUM is an optional decimal
+number optionally followed by a size letter (‘b’, ‘c’, ‘l’) to mean
+count by 512-byte blocks, bytes, or lines, optionally followed by ‘f’
+which has the same meaning as ‘-f’.
+
+ On systems not conforming to POSIX 1003.1-2001, the leading ‘-’ can
+be replaced by ‘+’ in the traditional option syntax with the same
+meaning as in counts, and on obsolete systems predating POSIX
+1003.1-2001 traditional usage overrides normal usage when the two
+conflict. This behavior can be controlled with the ‘_POSIX2_VERSION’
+environment variable (*note Standards conformance::).
+
+ Scripts intended for use on standard hosts should avoid traditional
+syntax and should use ‘-c NUM[b]’, ‘-n NUM’, and/or ‘-f’ instead. If
+your script must also run on hosts that support only the traditional
+syntax, you can often rewrite it to avoid problematic usages, e.g., by
+using ‘sed -n '$p'’ rather than ‘tail -1’. If that’s not possible, the
+script can use a test like ‘if tail -c +1 </dev/null >/dev/null 2>&1;
+then ...’ to decide which syntax to use.
+
+ Even if your script assumes the standard behavior, you should still
+beware usages whose behaviors differ depending on the POSIX version.
+For example, avoid ‘tail - main.c’, since it might be interpreted as
+either ‘tail main.c’ or as ‘tail -- - main.c’; avoid ‘tail -c 4’, since
+it might mean either ‘tail -c4’ or ‘tail -c 10 4’; and avoid ‘tail +4’,
+since it might mean either ‘tail ./+4’ or ‘tail -n +4’.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: split invocation, Next: csplit invocation, Prev: tail invocation, Up: Output of parts of files
+
+5.3 ‘split’: Split a file into pieces.
+======================================
+
+‘split’ creates output files containing consecutive or interleaved
+sections of INPUT (standard input if none is given or INPUT is ‘-’).
+Synopsis:
+
+ split [OPTION] [INPUT [PREFIX]]
+
+ By default, ‘split’ puts 1000 lines of INPUT (or whatever is left
+over for the last section), into each output file.
+
+ The output files’ names consist of PREFIX (‘x’ by default) followed
+by a group of characters (‘aa’, ‘ab’, ... by default), such that
+concatenating the output files in traditional sorted order by file name
+produces the original input file (except ‘-nr/N’). By default split
+will initially create files with two generated suffix characters, and
+will increase this width by two when the next most significant position
+reaches the last character. (‘yz’, ‘zaaa’, ‘zaab’, ...). In this way
+an arbitrary number of output files are supported, which sort as
+described above, even in the presence of an ‘--additional-suffix’
+option. If the ‘-a’ option is specified and the output file names are
+exhausted, ‘split’ reports an error without deleting the output files
+that it did create.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-l LINES’
+‘--lines=LINES’
+ Put LINES lines of INPUT into each output file. If ‘--separator’
+ is specified, then LINES determines the number of records.
+
+ For compatibility ‘split’ also supports an obsolete option syntax
+ ‘-LINES’. New scripts should use ‘-l LINES’ instead.
+
+‘-b SIZE’
+‘--bytes=SIZE’
+ Put SIZE bytes of INPUT into each output file. SIZE may be, or may
+ be an integer optionally followed by, one of the following
+ multiplicative suffixes:
+ ‘b’ => 512 ("blocks")
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+‘-C SIZE’
+‘--line-bytes=SIZE’
+ Put into each output file as many complete lines of INPUT as
+ possible without exceeding SIZE bytes. Individual lines or records
+ longer than SIZE bytes are broken into multiple files. SIZE has
+ the same format as for the ‘--bytes’ option. If ‘--separator’ is
+ specified, then LINES determines the number of records.
+
+‘--filter=COMMAND’
+ With this option, rather than simply writing to each output file,
+ write through a pipe to the specified shell COMMAND for each output
+ file. COMMAND should use the $FILE environment variable, which is
+ set to a different output file name for each invocation of the
+ command. For example, imagine that you have a 1TiB compressed file
+ that, if uncompressed, would be too large to reside on secondary
+ storage, yet you must split it into individually-compressed pieces
+ of a more manageable size. To do that, you might run this command:
+
+ xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
+
+ Assuming a 10:1 compression ratio, that would create about fifty
+ 20GiB files with names ‘big-aa.xz’, ‘big-ab.xz’, ‘big-ac.xz’, etc.
+
+‘-n CHUNKS’
+‘--number=CHUNKS’
+
+ Split INPUT to CHUNKS output files where CHUNKS may be:
+
+ N generate N files based on current size of INPUT
+ K/N output only Kth of N to standard output
+ l/N generate N files without splitting lines or records
+ l/K/N likewise but output only Kth of N to stdout
+ r/N like ‘l’ but use round robin distribution
+ r/K/N likewise but output only Kth of N to stdout
+
+ If the input size is not a multiple of N, early output files are
+ one byte longer than later output files, to make up the difference.
+ Any excess bytes appearing after the initial calculation are
+ discarded (except when using ‘r’ mode).
+
+ All N files are created even if there are fewer than N lines, or
+ the INPUT is truncated.
+
+ For ‘l’ mode, chunks are approximately INPUT size / N. Although
+ the INPUT is still partitioned as before into N regions of
+ approximately equal size, if a line _starts_ within a partition it
+ is written completely to the corresponding file. Since lines or
+ records are not split even if they overlap a partition, the files
+ written can be larger or smaller than the partition size, and even
+ empty if a line/record is so long as to completely overlap the
+ partition.
+
+ When the input is a pipe or some other special file where the size
+ cannot easily be determined, there is no trouble for ‘r’ mode
+ because the size of the input is irrelevant. For other modes, such
+ an input is first copied to a temporary to determine its size.
+
+‘-a LENGTH’
+‘--suffix-length=LENGTH’
+ Use suffixes of length LENGTH. If a LENGTH of 0 is specified, this
+ is the same as if (any previous) ‘-a’ was not specified, and thus
+ enables the default behavior, which starts the suffix length at 2,
+ and unless ‘-n’ or ‘--numeric-suffixes=FROM’ is specified, will
+ auto increase the length by 2 as required.
+
+‘-d’
+‘--numeric-suffixes[=FROM]’
+ Use digits in suffixes rather than lower-case letters. The
+ numerical suffix counts from FROM if specified, 0 otherwise.
+
+ FROM is supported with the long form option, and is used to either
+ set the initial suffix for a single run, or to set the suffix
+ offset for independently split inputs, and consequently the auto
+ suffix length expansion described above is disabled. Therefore you
+ may also want to use option ‘-a’ to allow suffixes beyond ‘99’.
+ Note if option ‘--number’ is specified and the number of files is
+ less than FROM, a single run is assumed and the minimum suffix
+ length required is automatically determined.
+
+‘-x’
+‘--hex-suffixes[=FROM]’
+ Like ‘--numeric-suffixes’, but use hexadecimal numbers (in lower
+ case).
+
+‘--additional-suffix=SUFFIX’
+ Append an additional SUFFIX to output file names. SUFFIX must not
+ contain slash.
+
+‘-e’
+‘--elide-empty-files’
+ Suppress the generation of zero-length output files. This can
+ happen with the ‘--number’ option if a file is (truncated to be)
+ shorter than the number requested, or if a line is so long as to
+ completely span a chunk. The output file sequence numbers, always
+ run consecutively even when this option is specified.
+
+‘-t SEPARATOR’
+‘--separator=SEPARATOR’
+ Use character SEPARATOR as the record separator instead of the
+ default newline character (ASCII LF). To specify ASCII NUL as the
+ separator, use the two-character string ‘\0’, e.g., ‘split -t
+ '\0'’.
+
+‘-u’
+‘--unbuffered’
+ Immediately copy input to output in ‘--number r/...’ mode, which is
+ a much slower mode of operation.
+
+‘--verbose’
+ Write a diagnostic just before each output file is opened.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Here are a few examples to illustrate how the ‘--number’ (‘-n’)
+option works:
+
+ Notice how, by default, one line may be split onto two or more:
+
+ $ seq -w 6 10 > k; split -n3 k; head xa?
+ ==> xaa <==
+ 06
+ 07
+ ==> xab <==
+
+ 08
+ 0
+ ==> xac <==
+ 9
+ 10
+
+ Use the "l/" modifier to suppress that:
+
+ $ seq -w 6 10 > k; split -nl/3 k; head xa?
+ ==> xaa <==
+ 06
+ 07
+
+ ==> xab <==
+ 08
+ 09
+
+ ==> xac <==
+ 10
+
+ Use the "r/" modifier to distribute lines in a round-robin fashion:
+
+ $ seq -w 6 10 > k; split -nr/3 k; head xa?
+ ==> xaa <==
+ 06
+ 09
+
+ ==> xab <==
+ 07
+ 10
+
+ ==> xac <==
+ 08
+
+ You can also extract just the Kth chunk. This extracts and prints
+just the 7th "chunk" of 33:
+
+ $ seq 100 > k; split -nl/7/33 k
+ 20
+ 21
+ 22
+
+
+File: coreutils.info, Node: csplit invocation, Prev: split invocation, Up: Output of parts of files
+
+5.4 ‘csplit’: Split a file into context-determined pieces
+=========================================================
+
+‘csplit’ creates zero or more output files containing sections of INPUT
+(standard input if INPUT is ‘-’). Synopsis:
+
+ csplit [OPTION]... INPUT PATTERN...
+
+ The contents of the output files are determined by the PATTERN
+arguments, as detailed below. An error occurs if a PATTERN argument
+refers to a nonexistent line of the input file (e.g., if no remaining
+line matches a given regular expression). After every PATTERN has been
+matched, any remaining input is copied into one last output file.
+
+ By default, ‘csplit’ prints the number of bytes written to each
+output file after it has been created.
+
+ The types of pattern arguments are:
+
+‘N’
+ Create an output file containing the input up to but not including
+ line N (a positive integer). If followed by a repeat count, also
+ create an output file containing the next N lines of the input file
+ once for each repeat.
+
+‘/REGEXP/[OFFSET]’
+ Create an output file containing the current line up to (but not
+ including) the next line of the input file that contains a match
+ for REGEXP. The optional OFFSET is an integer, that can be
+ preceded by ‘+’ or ‘-’. If it is given, the input up to (but not
+ including) the matching line plus or minus OFFSET is put into the
+ output file, and the line after that begins the next section of
+ input. Note lines within a negative offset of a regexp pattern are
+ not matched in subsequent regexp patterns.
+
+‘%REGEXP%[OFFSET]’
+ Like the previous type, except that it does not create an output
+ file, so that section of the input file is effectively ignored.
+
+‘{REPEAT-COUNT}’
+ Repeat the previous pattern REPEAT-COUNT additional times. The
+ REPEAT-COUNT can either be a positive integer or an asterisk,
+ meaning repeat as many times as necessary until the input is
+ exhausted.
+
+ The output files’ names consist of a prefix (‘xx’ by default)
+followed by a suffix. By default, the suffix is an ascending sequence
+of two-digit decimal numbers from ‘00’ to ‘99’. In any case,
+concatenating the output files in sorted order by file name produces the
+original input file, excluding portions skipped with a %REGEXP% pattern
+or the ‘--suppress-matched’ option.
+
+ By default, if ‘csplit’ encounters an error or receives a hangup,
+interrupt, quit, or terminate signal, it removes any output files that
+it has created so far before it exits.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-f PREFIX’
+‘--prefix=PREFIX’
+ Use PREFIX as the output file name prefix.
+
+‘-b FORMAT’
+‘--suffix-format=FORMAT’
+ Use FORMAT as the output file name suffix. When this option is
+ specified, the suffix string must include exactly one
+ ‘printf(3)’-style conversion specification, possibly including
+ format specification flags, a field width, a precision
+ specification, or all of these kinds of modifiers. The format
+ letter must convert a binary unsigned integer argument to readable
+ form. The format letters ‘d’ and ‘i’ are aliases for ‘u’, and the
+ ‘u’, ‘o’, ‘x’, and ‘X’ conversions are allowed. The entire FORMAT
+ is given (with the current output file number) to ‘sprintf(3)’ to
+ form the file name suffixes for each of the individual output files
+ in turn. If this option is used, the ‘--digits’ option is ignored.
+
+‘-n DIGITS’
+‘--digits=DIGITS’
+ Use output file names containing numbers that are DIGITS digits
+ long instead of the default 2.
+
+‘-k’
+‘--keep-files’
+ Do not remove output files when errors are encountered.
+
+‘--suppress-matched’
+ Do not output lines matching the specified PATTERN. I.e., suppress
+ the boundary line from the start of the second and subsequent
+ splits.
+
+‘-z’
+‘--elide-empty-files’
+ Suppress the generation of zero-length output files. (In cases
+ where the section delimiters of the input file are supposed to mark
+ the first lines of each of the sections, the first output file will
+ generally be a zero-length file unless you use this option.) The
+ output file sequence numbers always run consecutively starting from
+ 0, even when this option is specified.
+
+‘-s’
+‘-q’
+‘--silent’
+‘--quiet’
+ Do not print counts of output file sizes.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Here is an example of its usage. First, create an empty directory
+for the exercise, and cd into it:
+
+ $ mkdir d && cd d
+
+ Now, split the sequence of 1..14 on lines that end with 0 or 5:
+
+ $ seq 14 | csplit - '/[05]$/' '{*}'
+ 8
+ 10
+ 15
+
+ Each number printed above is the size of an output file that csplit
+has just created. List the names of those output files:
+
+ $ ls
+ xx00 xx01 xx02
+
+ Use ‘head’ to show their contents:
+
+ $ head xx*
+ ==> xx00 <==
+ 1
+ 2
+ 3
+ 4
+
+ ==> xx01 <==
+ 5
+ 6
+ 7
+ 8
+ 9
+
+ ==> xx02 <==
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ Example of splitting input by empty lines:
+
+ $ csplit --suppress-matched INPUT.TXT '/^$/' '{*}'
+
+
+File: coreutils.info, Node: Summarizing files, Next: Operating on sorted files, Prev: Output of parts of files, Up: Top
+
+6 Summarizing files
+*******************
+
+These commands generate just a few numbers representing entire contents
+of files.
+
+* Menu:
+
+* wc invocation:: Print newline, word, and byte counts.
+* sum invocation:: Print checksum and block counts.
+* cksum invocation:: Print CRC checksum and byte counts.
+* md5sum invocation:: Print or check MD5 digests.
+* b2sum invocation:: Print or check BLAKE2 digests.
+* sha1sum invocation:: Print or check SHA-1 digests.
+* sha2 utilities:: Print or check SHA-2 digests.
+
+
+File: coreutils.info, Node: wc invocation, Next: sum invocation, Up: Summarizing files
+
+6.1 ‘wc’: Print newline, word, and byte counts
+==============================================
+
+‘wc’ counts the number of bytes, characters, words, and newlines in each
+given FILE, or standard input if none are given or for a FILE of ‘-’. A
+word is a nonzero length sequence of printable characters delimited by
+white space. Synopsis:
+
+ wc [OPTION]... [FILE]...
+
+ ‘wc’ prints one line of counts for each file, and if the file was
+given as an argument, it prints the file name following the counts. By
+default if more than one FILE is given, ‘wc’ prints a final line
+containing the cumulative counts, with the file name ‘total’. This
+‘total’ line can be controlled with the ‘--total’ option, which is a GNU
+extension. The counts are printed in this order: newlines, words,
+characters, bytes, maximum line length. Each count is printed
+right-justified in a field with at least one space between fields so
+that the numbers and file names normally line up nicely in columns. The
+width of the count fields varies depending on the inputs, so you should
+not depend on a particular field width. However, as a GNU extension, if
+only one count is printed, it is guaranteed to be printed without
+leading spaces.
+
+ By default, ‘wc’ prints three counts: the newline, words, and byte
+counts. Options can specify that only certain counts be printed.
+Options do not undo others previously given, so
+
+ wc --bytes --words
+
+prints both the byte counts and the word counts.
+
+ With the ‘--max-line-length’ option, ‘wc’ prints the length of the
+longest line per file, and if there is more than one file it prints the
+maximum (not the sum) of those lengths. The line lengths here are
+measured in screen columns, according to the current locale and assuming
+tab positions in every 8th column.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--bytes’
+ Print only the byte counts.
+
+‘-m’
+‘--chars’
+ Print only the character counts, as per the current locale.
+ Invalid characters are not counted.
+
+‘-w’
+‘--words’
+ Print only the word counts. A word is a nonzero length sequence of
+ printable characters separated by white space.
+
+‘-l’
+‘--lines’
+ Print only the newline character counts. Note a file without a
+ trailing newline character, will not have that last portion
+ included in the line count.
+
+‘-L’
+‘--max-line-length’
+ Print only the maximum display widths. Tabs are set at every 8th
+ column. Display widths of wide characters are considered.
+ Non-printable characters are given 0 width.
+
+‘--total=WHEN’
+ Control when and how the final line with cumulative counts is
+ printed. WHEN is one of:
+ • auto - This is the default mode of ‘wc’ when no ‘--total’
+ option is specified. Output a total line if more than one
+ FILE is specified.
+ • always - Always output a total line, irrespective of the
+ number of files processed.
+ • only - Only output total counts. I.e., don’t print individual
+ file counts, suppress any leading spaces, and don’t print the
+ ‘total’ word itself, to simplify subsequent processing.
+ • never - Never output a total line.
+
+‘--files0-from=FILE’
+ Disallow processing files named on the command line, and instead
+ process those named in file FILE; each name being terminated by a
+ zero byte (ASCII NUL). This is useful when the list of file names
+ is so long that it may exceed a command line length limitation. In
+ such cases, running ‘wc’ via ‘xargs’ is undesirable because it
+ splits the list into pieces and makes ‘wc’ print a total for each
+ sublist rather than for the entire list. One way to produce a list
+ of ASCII NUL terminated file names is with GNU ‘find’, using its
+ ‘-print0’ predicate. If FILE is ‘-’ then the ASCII NUL terminated
+ file names are read from standard input.
+
+ For example, to find the length of the longest line in any ‘.c’ or
+ ‘.h’ file in the current hierarchy, do this:
+
+ find . -name '*.[ch]' -print0 |
+ wc -L --files0-from=- | tail -n1
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: sum invocation, Next: cksum invocation, Prev: wc invocation, Up: Summarizing files
+
+6.2 ‘sum’: Print checksum and block counts
+==========================================
+
+‘sum’ computes a 16-bit checksum for each given FILE, or standard input
+if none are given or for a FILE of ‘-’. Synopsis:
+
+ sum [OPTION]... [FILE]...
+
+ ‘sum’ prints the checksum for each FILE followed by the number of
+blocks in the file (rounded up). If at least one FILE is given, file
+names are also printed.
+
+ By default, GNU ‘sum’ computes checksums using an algorithm
+compatible with BSD ‘sum’ and prints file sizes in units of 1024-byte
+blocks.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-r’
+ Use the default (BSD compatible) algorithm. This option is
+ included for compatibility with the System V ‘sum’. Unless ‘-s’
+ was also given, it has no effect.
+
+‘-s’
+‘--sysv’
+ Compute checksums using an algorithm compatible with System V
+ ‘sum’’s default, and print file sizes in units of 512-byte blocks.
+
+ ‘sum’ is provided for compatibility; the ‘cksum’ program (see next
+section) is preferable in new applications.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: cksum invocation, Next: md5sum invocation, Prev: sum invocation, Up: Summarizing files
+
+6.3 ‘cksum’: Print and verify file checksums
+============================================
+
+‘cksum’ by default computes a 32-bit cyclic redundancy check (CRC)
+checksum for each given FILE, or standard input if none are given or for
+a FILE of ‘-’.
+
+ cksum also supports the ‘-a/--algorithm’ option to select the digest
+algorithm to use. ‘cksum’ is the preferred interface to these digests,
+subsuming the other standalone checksumming utilities, which can be
+emulated using ‘cksum -a md5 --untagged "$@"’ etc. Synopsis:
+
+ cksum [OPTION]... [FILE]...
+
+ ‘cksum’ is typically used to ensure that files have not been
+corrupted, by comparing the ‘cksum’ output for the received files with
+the ‘cksum’ output for the original files (typically given in the
+distribution).
+
+* Menu:
+
+* cksum output modes:: Legacy and non Legacy output formats
+* cksum general options:: Options supported only by cksum
+* cksum common options:: Options supported also by standalone utilities
+
+
+File: coreutils.info, Node: cksum output modes, Next: cksum general options, Up: cksum invocation
+
+Legacy output format
+ ‘cksum’ by default prints the POSIX standard CRC checksum for each
+ file along with the number of bytes in the file, and the file name
+ unless no arguments were given. The 32-bit CRC used is based on
+ the polynomial used for CRC error checking in the ISO/IEC
+ 8802-3:1996 standard (Ethernet). Similar output formats are used
+ for the other legacy checksums selectable with ‘--algorithm=sysv’
+ or ‘--algorithm=bsd’, detailed at *note sum invocation::.
+
+Tagged output format
+ With the ‘--algorithm’ option selecting non legacy checksums, the
+ ‘cksum’ command defaults to output of the form:
+ DIGEST_NAME (FILE NAME) = DIGEST
+ Note the standalone checksum utilities can select this output mode
+ by using the ‘--tag’ option.
+
+Untagged output format
+ With the ‘--untagged’ option and the ‘--algorithm’ option selecting
+ non legacy checksums, the following output format is used. Note
+ this is the default output format of the standalone checksum
+ utilities. For each FILE, we print the checksum, a space, a flag
+ indicating binary or text input mode, and the file name. Binary
+ mode is indicated with ‘*’, text mode with ‘ ’ (space). Binary
+ mode is the default on systems where it’s significant, otherwise
+ text mode is the default.
+
+ Note without ‘--zero’, and with non legacy output formats, if FILE
+contains a backslash, newline, or carriage return, the line is started
+with a backslash, and each problematic character in the file name is
+escaped with a backslash, making the output unambiguous even in the
+presence of arbitrary file names. Since the backslash character itself
+is escaped, any other backslash escape sequences are reserved for future
+use.
+
+
+File: coreutils.info, Node: cksum general options, Next: cksum common options, Prev: cksum output modes, Up: cksum invocation
+
+‘-a’
+‘--algorithm’
+ Compute checksums using the specified digest algorithm.
+
+ Supported legacy checksums (which are not supported by ‘--check’):
+ ‘sysv’ equivalent to sum -s
+ ‘bsd’ equivalent to sum -r
+ ‘crc’ equivalent to cksum (the default)
+
+ Supported more modern digest algorithms are:
+ ‘md5’ equivalent to md5sum
+ ‘sha1’ equivalent to sha1sum
+ ‘sha224’ equivalent to sha224sum
+ ‘sha256’ equivalent to sha256sum
+ ‘sha384’ equivalent to sha384sum
+ ‘sha512’ equivalent to sha512sum
+ ‘blake2b’ equivalent to b2sum
+ ‘sm3’ only available through cksum
+
+‘--base64’
+ Print base64-encoded digests not hexadecimal. This option is
+ ignored with ‘--check’. The format conforms to RFC 4648#4
+ (https://tools.ietf.org/search/rfc4648#section-4).
+
+ Note that each base64-encoded digest has zero, one or two trailing
+ padding (‘=’) bytes. The length of that padding is the
+ checksum-bit-length modulo 3, and the ‘--check’ parser requires
+ precisely the same input digest string as what is output. I.e.,
+ removing or adding any ‘=’ padding renders a digest non-matching.
+
+‘--debug’
+ Output extra information to stderr, like the checksum
+ implementation being used.
+
+‘-l’
+‘--length’
+ Change (shorten) the default digest length. This is specified in
+ bits and thus must be a multiple of 8. This option is ignored when
+ ‘--check’ is specified, as the length is automatically determined
+ when checking.
+
+‘--raw’
+ Print only the unencoded raw binary digest for a single input. Do
+ not output the file name or anything else. Use network byte order
+ (big endian) where applicable: for ‘bsd’, ‘crc’, and ‘sysv’. This
+ option works only with a single input. Unlike other output
+ formats, ‘cksum’ provides no way to ‘--check’ a ‘--raw’ checksum.
+
+‘--untagged’
+ Output using the original Coreutils format used by the other
+ standalone checksum utilities like ‘md5sum’ for example. This
+ format has the checksum at the start of the line, and may be more
+ amenable to further processing by other utilities, especially in
+ combination with the ‘--zero’ option. Note this does not identify
+ the digest algorithm used for the checksum. *Note cksum output
+ modes:: for details of this format.
+
+
+File: coreutils.info, Node: cksum common options, Prev: cksum general options, Up: cksum invocation
+
+‘-b’
+‘--binary’
+ Note this option is not supported by the ‘cksum’ command, as it
+ operates in binary mode exclusively. Treat each input file as
+ binary, by reading it in binary mode and outputting a ‘*’ flag.
+ This is the inverse of ‘--text’. On systems like GNU that do not
+ distinguish between binary and text files, this option merely flags
+ each input mode as binary: the checksum is unaffected. This option
+ is the default on systems like MS-DOS that distinguish between
+ binary and text files, except for reading standard input when
+ standard input is a terminal.
+
+‘-c’
+‘--check’
+ Read file names and checksum information (not data) from each FILE
+ (or from standard input if no FILE was specified) and report
+ whether the checksums match the contents of the named files. The
+ input to this mode is usually the output of a prior,
+ checksum-generating run of the command.
+
+ Three input formats are supported. Either the default output
+ format described above, the ‘--tag’ output format, or the BSD
+ reversed mode format which is similar to the default mode, but
+ doesn’t use a character to distinguish binary and text modes.
+
+ For the ‘cksum’ command, the ‘--check’ option supports
+ auto-detecting the digest algorithm to use, when presented with
+ checksum information in the ‘--tag’ output format.
+
+ Also for the ‘cksum’ command, the ‘--check’ option auto-detects the
+ digest encoding, accepting both standard hexadecimal checksums and
+ those generated via ‘cksum’ with its ‘--base64’ option.
+
+ Output with ‘--zero’ enabled is not supported by ‘--check’.
+
+ For each such line, ‘cksum’ reads the named file and computes its
+ checksum. Then, if the computed message digest does not match the
+ one on the line with the file name, the file is noted as having
+ failed the test. Otherwise, the file passes the test. By default,
+ for each valid line, one line is written to standard output
+ indicating whether the named file passed the test. After all
+ checks have been performed, if there were any failures, a warning
+ is issued to standard error. Use the ‘--status’ option to inhibit
+ that output. If any listed file cannot be opened or read, if any
+ valid line has a checksum inconsistent with the associated file, or
+ if no valid line is found, ‘cksum’ exits with nonzero status.
+ Otherwise, it exits successfully. Note the ‘cksum’ command doesn’t
+ support ‘--check’ with the older ‘sysv’, ‘bsd’, or ‘crc’
+ algorithms.
+
+‘--ignore-missing’
+ This option is useful only when verifying checksums. When
+ verifying checksums, don’t fail or report any status for missing
+ files. This is useful when verifying a subset of downloaded files
+ given a larger list of checksums.
+
+‘--quiet’
+ This option is useful only when verifying checksums. When
+ verifying checksums, don’t generate an ’OK’ message per
+ successfully checked file. Files that fail the verification are
+ reported in the default one-line-per-file format. If there is any
+ checksum mismatch, print a warning summarizing the failures to
+ standard error.
+
+‘--status’
+ This option is useful only when verifying checksums. When
+ verifying checksums, don’t generate the default one-line-per-file
+ diagnostic and don’t output the warning summarizing any failures.
+ Failures to open or read a file still evoke individual diagnostics
+ to standard error. If all listed files are readable and are
+ consistent with the associated checksums, exit successfully.
+ Otherwise exit with a status code indicating there was a failure.
+
+‘--tag’
+ Output BSD style checksums, which indicate the checksum algorithm
+ used. As a GNU extension, if ‘--zero’ is not used, file names with
+ problematic characters are escaped as described above, using the
+ same escaping indicator of ‘\’ at the start of the line, as used
+ with the other output format. The ‘--tag’ option implies binary
+ mode, and is disallowed with ‘--text’ mode as supporting that would
+ unnecessarily complicate the output format, while providing little
+ benefit. *Note cksum output modes:: for details of this format.
+ The ‘cksum’ command, uses ‘--tag’ as its default output format.
+
+‘-t’
+‘--text’
+ Note this option is not supported by the ‘cksum’ command. Treat
+ each input file as text, by reading it in text mode and outputting
+ a ‘ ’ flag. This is the inverse of ‘--binary’. This option is the
+ default on systems like GNU that do not distinguish between binary
+ and text files. On other systems, it is the default for reading
+ standard input when standard input is a terminal. This mode is
+ never defaulted to if ‘--tag’ is used.
+
+‘-w’
+‘--warn’
+ When verifying checksums, warn about improperly formatted checksum
+ lines. This option is useful only if all but a few lines in the
+ checked input are valid.
+
+‘--strict’
+ When verifying checksums, if one or more input line is invalid,
+ exit nonzero after all warnings have been issued.
+
+‘-z’
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+ Also file name escaping is not used.
+
+
+File: coreutils.info, Node: md5sum invocation, Next: b2sum invocation, Prev: cksum invocation, Up: Summarizing files
+
+6.4 ‘md5sum’: Print or check MD5 digests
+========================================
+
+‘md5sum’ computes a 128-bit checksum (or “fingerprint” or
+“message-digest”) for each specified FILE.
+
+ Note: The MD5 digest is more reliable than a simple CRC (provided by
+the ‘cksum’ command) for detecting accidental file corruption, as the
+chances of accidentally having two files with identical MD5 are
+vanishingly small. However, it should not be considered secure against
+malicious tampering: although finding a file with a given MD5
+fingerprint is considered infeasible at the moment, it is known how to
+modify certain files, including digital certificates, so that they
+appear valid when signed with an MD5 digest. For more secure hashes,
+consider using SHA-2, or the newer ‘b2sum’ command. *Note sha2
+utilities::. *Note b2sum invocation::.
+
+ If a FILE is specified as ‘-’ or if no files are given ‘md5sum’
+computes the checksum for the standard input. ‘md5sum’ can also
+determine whether a file and checksum are consistent. Synopsis:
+
+ md5sum [OPTION]... [FILE]...
+
+ ‘md5sum’ uses the ‘Untagged output format’ for each specified file,
+as described at *note cksum output modes::.
+
+ The program accepts *note cksum common options::. Also see *note
+Common options::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: b2sum invocation, Next: sha1sum invocation, Prev: md5sum invocation, Up: Summarizing files
+
+6.5 ‘b2sum’: Print or check BLAKE2 digests
+==========================================
+
+‘b2sum’ computes a 512-bit checksum for each specified FILE.
+
+ If a FILE is specified as ‘-’ or if no files are given ‘b2sum’
+computes the checksum for the standard input. ‘b2sum’ can also
+determine whether a file and checksum are consistent. Synopsis:
+
+ b2sum [OPTION]... [FILE]...
+
+ ‘b2sum’ uses the ‘Untagged output format’ for each specified file, as
+described at *note cksum output modes::.
+
+ The program accepts *note cksum common options::. Also see *note
+Common options::.
+
+ In addition ‘b2sum’ supports the following options.
+
+‘-l’
+‘--length’
+ Change (shorten) the default digest length. This is specified in
+ bits and thus must be a multiple of 8. This option is ignored when
+ ‘--check’ is specified, as the length is automatically determined
+ when checking.
+
+
+File: coreutils.info, Node: sha1sum invocation, Next: sha2 utilities, Prev: b2sum invocation, Up: Summarizing files
+
+6.6 ‘sha1sum’: Print or check SHA-1 digests
+===========================================
+
+‘sha1sum’ computes a 160-bit checksum for each specified FILE.
+
+ Note: The SHA-1 digest is more reliable than a simple CRC (provided
+by the ‘cksum’ command) for detecting accidental file corruption, as the
+chances of accidentally having two files with identical SHA-1 are
+vanishingly small. However, it should not be considered secure against
+malicious tampering: although finding a file with a given SHA-1
+fingerprint is considered infeasible at the moment, it is known how to
+modify certain files, including digital certificates, so that they
+appear valid when signed with an SHA-1 digest. For more secure hashes,
+consider using SHA-2, or the newer ‘b2sum’ command. *Note sha2
+utilities::. *Note b2sum invocation::.
+
+ If a FILE is specified as ‘-’ or if no files are given ‘sha1sum’
+computes the checksum for the standard input. ‘sha1sum’ can also
+determine whether a file and checksum are consistent. Synopsis:
+
+ sha1sum [OPTION]... [FILE]...
+
+ ‘sha1sum’ uses the ‘Untagged output format’ for each specified file,
+as described at *note cksum output modes::.
+
+ The program accepts *note cksum common options::. Also see *note
+Common options::.
+
+
+File: coreutils.info, Node: sha2 utilities, Prev: sha1sum invocation, Up: Summarizing files
+
+6.7 sha2 utilities: Print or check SHA-2 digests
+================================================
+
+The commands ‘sha224sum’, ‘sha256sum’, ‘sha384sum’ and ‘sha512sum’
+compute checksums of various lengths (respectively 224, 256, 384 and 512
+bits), collectively known as the SHA-2 hashes.
+
+ If a FILE is specified as ‘-’ or if no files are given ‘sha???sum’
+computes the checksum for the standard input. ‘sha???sum’ can also
+determine whether a file and checksum are consistent. Synopsis:
+
+ sha???sum [OPTION]... [FILE]...
+
+ ‘sha???sum’ uses the ‘Untagged output format’ for each specified
+file, as described at *note cksum output modes::.
+
+ The program accepts *note cksum common options::. Also see *note
+Common options::.
+
+
+File: coreutils.info, Node: Operating on sorted files, Next: Operating on fields, Prev: Summarizing files, Up: Top
+
+7 Operating on sorted files
+***************************
+
+These commands work with (or produce) sorted files.
+
+* Menu:
+
+* sort invocation:: Sort text files.
+* shuf invocation:: Shuffle text files.
+* uniq invocation:: Uniquify files.
+* comm invocation:: Compare two sorted files line by line.
+* ptx invocation:: Produce a permuted index of file contents.
+* tsort invocation:: Topological sort.
+
+
+File: coreutils.info, Node: sort invocation, Next: shuf invocation, Up: Operating on sorted files
+
+7.1 ‘sort’: Sort text files
+===========================
+
+‘sort’ sorts, merges, or compares all the lines from the given files, or
+standard input if none are given or for a FILE of ‘-’. By default,
+‘sort’ writes the results to standard output. Synopsis:
+
+ sort [OPTION]... [FILE]...
+
+ Many options affect how ‘sort’ compares lines; if the results are
+unexpected, try the ‘--debug’ option to see what happened. A pair of
+lines is compared as follows: ‘sort’ compares each pair of fields (see
+‘--key’), in the order specified on the command line, according to the
+associated ordering options, until a difference is found or no fields
+are left. If no key fields are specified, ‘sort’ uses a default key of
+the entire line. Finally, as a last resort when all keys compare equal,
+‘sort’ compares entire lines as if no ordering options other than
+‘--reverse’ (‘-r’) were specified. The ‘--stable’ (‘-s’) option
+disables this “last-resort comparison” so that lines in which all fields
+compare equal are left in their original relative order. The ‘--unique’
+(‘-u’) option also disables the last-resort comparison.
+
+ Unless otherwise specified, all comparisons use the character
+collating sequence specified by the ‘LC_COLLATE’ locale.(1) A line’s
+trailing newline is not part of the line for comparison purposes. If
+the final byte of an input file is not a newline, GNU ‘sort’ silently
+supplies one. GNU ‘sort’ (as specified for all GNU utilities) has no
+limit on input line length or restrictions on bytes allowed within
+lines.
+
+ ‘sort’ has three modes of operation: sort (the default), merge, and
+check for order. The following options change the operation mode:
+
+‘-c’
+‘--check’
+‘--check=diagnose-first’
+ Check whether the given file is already sorted: if it is not all
+ sorted, print a diagnostic containing the first out-of-order line
+ and exit with a status of 1. Otherwise, exit successfully. At
+ most one input file can be given.
+
+‘-C’
+‘--check=quiet’
+‘--check=silent’
+ Exit successfully if the given file is already sorted, and exit
+ with status 1 otherwise. At most one input file can be given.
+ This is like ‘-c’, except it does not print a diagnostic.
+
+‘-m’
+‘--merge’
+ Merge the given files by sorting them as a group. Each input file
+ must always be individually sorted. It always works to sort
+ instead of merge; merging is provided because it is faster, in the
+ case where it works.
+
+ Exit status:
+
+ 0 if no error occurred
+ 1 if invoked with ‘-c’ or ‘-C’ and the input is not sorted
+ 2 if an error occurred
+
+ If the environment variable ‘TMPDIR’ is set, ‘sort’ uses its value as
+the directory for temporary files instead of ‘/tmp’. The
+‘--temporary-directory’ (‘-T’) option in turn overrides the environment
+variable.
+
+ The following options affect the ordering of output lines. They may
+be specified globally or as part of a specific key field. If no key
+fields are specified, global options apply to comparison of entire
+lines; otherwise the global options are inherited by key fields that do
+not specify any special options of their own. In pre-POSIX versions of
+‘sort’, global options affect only later key fields, so portable shell
+scripts should specify global options first.
+
+‘-b’
+‘--ignore-leading-blanks’
+ Ignore leading blanks when finding sort keys in each line. By
+ default a blank is a space or a tab, but the ‘LC_CTYPE’ locale can
+ change this. Note blanks may be ignored by your locale’s collating
+ rules, but without this option they will be significant for
+ character positions specified in keys with the ‘-k’ option.
+
+‘-d’
+‘--dictionary-order’
+ Sort in “phone directory” order: ignore all characters except
+ letters, digits and blanks when sorting. By default letters and
+ digits are those of ASCII and a blank is a space or a tab, but the
+ ‘LC_CTYPE’ locale can change this.
+
+‘-f’
+‘--ignore-case’
+ Fold lowercase characters into the equivalent uppercase characters
+ when comparing so that, for example, ‘b’ and ‘B’ sort as equal.
+ The ‘LC_CTYPE’ locale determines character types. When used with
+ ‘--unique’ those lower case equivalent lines are thrown away.
+ (There is currently no way to throw away the upper case equivalent
+ instead. (Any ‘--reverse’ given would only affect the final
+ result, after the throwing away.))
+
+‘-g’
+‘--general-numeric-sort’
+‘--sort=general-numeric’
+ Sort numerically, converting a prefix of each line to a long
+ double-precision floating point number. *Note Floating point::.
+ Do not report overflow, underflow, or conversion errors. Use the
+ following collating sequence:
+
+ • Lines that do not start with numbers (all considered to be
+ equal).
+ • NaNs (“Not a Number” values, in IEEE floating point
+ arithmetic) in a consistent but machine-dependent order.
+ • Minus infinity.
+ • Finite numbers in ascending numeric order (with -0 and +0
+ equal).
+ • Plus infinity.
+
+ Use this option only if there is no alternative; it is much slower
+ than ‘--numeric-sort’ (‘-n’) and it can lose information when
+ converting to floating point.
+
+ You can use this option to sort hexadecimal numbers prefixed with
+ ‘0x’ or ‘0X’, where those numbers are not fixed width, or of
+ varying case. However for hex numbers of consistent case, and left
+ padded with ‘0’ to a consistent width, a standard lexicographic
+ sort will be faster.
+
+‘-h’
+‘--human-numeric-sort’
+‘--sort=human-numeric’
+ Sort numerically, first by numeric sign (negative, zero, or
+ positive); then by SI suffix (either empty, or ‘k’ or ‘K’, or one
+ of ‘MGTPEZYRQ’, in that order; *note Block size::); and finally by
+ numeric value. For example, ‘1023M’ sorts before ‘1G’ because ‘M’
+ (mega) precedes ‘G’ (giga) as an SI suffix. This option sorts
+ values that are consistently scaled to the nearest suffix,
+ regardless of whether suffixes denote powers of 1000 or 1024, and
+ it therefore sorts the output of any single invocation of the ‘df’,
+ ‘du’, or ‘ls’ commands that are invoked with their
+ ‘--human-readable’ or ‘--si’ options. The syntax for numbers is
+ the same as for the ‘--numeric-sort’ option; the SI suffix must
+ immediately follow the number. Note also the ‘numfmt’ command,
+ which can be used to reformat numbers to human format _after_ the
+ sort, thus often allowing sort to operate on more accurate numbers.
+
+‘-i’
+‘--ignore-nonprinting’
+ Ignore nonprinting characters. The ‘LC_CTYPE’ locale determines
+ character types. This option has no effect if the stronger
+ ‘--dictionary-order’ (‘-d’) option is also given.
+
+‘-M’
+‘--month-sort’
+‘--sort=month’
+ An initial string, consisting of any amount of blanks, followed by
+ a month name abbreviation, is folded to UPPER case and compared in
+ the order ‘JAN’ < ‘FEB’ < ... < ‘DEC’. Invalid names compare low
+ to valid names. The ‘LC_TIME’ locale category determines the month
+ spellings. By default a blank is a space or a tab, but the
+ ‘LC_CTYPE’ locale can change this.
+
+‘-n’
+‘--numeric-sort’
+‘--sort=numeric’
+ Sort numerically. The number begins each line and consists of
+ optional blanks, an optional ‘-’ sign, and zero or more digits
+ possibly separated by thousands separators, optionally followed by
+ a decimal-point character and zero or more digits. An empty number
+ is treated as ‘0’. The ‘LC_NUMERIC’ locale specifies the
+ decimal-point character and thousands separator. By default a
+ blank is a space or a tab, but the ‘LC_CTYPE’ locale can change
+ this.
+
+ Comparison is exact; there is no rounding error.
+
+ Neither a leading ‘+’ nor exponential notation is recognized. To
+ compare such strings numerically, use the ‘--general-numeric-sort’
+ (‘-g’) option.
+
+‘-V’
+‘--version-sort’
+ Sort by version name and number. It behaves like a standard sort,
+ except that each sequence of decimal digits is treated numerically
+ as an index/version number. (*Note Version sort ordering::.)
+
+‘-r’
+‘--reverse’
+ Reverse the result of comparison, so that lines with greater key
+ values appear earlier in the output instead of later.
+
+‘-R’
+‘--random-sort’
+‘--sort=random’
+ Sort by hashing the input keys and then sorting the hash values.
+ Choose the hash function at random, ensuring that it is free of
+ collisions so that differing keys have differing hash values. This
+ is like a random permutation of the inputs (*note shuf
+ invocation::), except that keys with the same value sort together.
+
+ If multiple random sort fields are specified, the same random hash
+ function is used for all fields. To use different random hash
+ functions for different fields, you can invoke ‘sort’ more than
+ once.
+
+ The choice of hash function is affected by the ‘--random-source’
+ option.
+
+ Other options are:
+
+‘--compress-program=PROG’
+ Compress any temporary files with the program PROG.
+
+ With no arguments, PROG must compress standard input to standard
+ output, and when given the ‘-d’ option it must decompress standard
+ input to standard output.
+
+ Terminate with an error if PROG exits with nonzero status.
+
+ White space and the backslash character should not appear in PROG;
+ they are reserved for future use.
+
+‘--files0-from=FILE’
+ Disallow processing files named on the command line, and instead
+ process those named in file FILE; each name being terminated by a
+ zero byte (ASCII NUL). This is useful when the list of file names
+ is so long that it may exceed a command line length limitation. In
+ such cases, running ‘sort’ via ‘xargs’ is undesirable because it
+ splits the list into pieces and makes ‘sort’ print sorted output
+ for each sublist rather than for the entire list. One way to
+ produce a list of ASCII NUL terminated file names is with GNU
+ ‘find’, using its ‘-print0’ predicate. If FILE is ‘-’ then the
+ ASCII NUL terminated file names are read from standard input.
+
+‘-k POS1[,POS2]’
+‘--key=POS1[,POS2]’
+ Specify a sort field that consists of the part of the line between
+ POS1 and POS2 (or the end of the line, if POS2 is omitted),
+ _inclusive_.
+
+ In its simplest form POS specifies a field number (starting with
+ 1), with fields being separated by runs of blank characters, and by
+ default those blanks being included in the comparison at the start
+ of each field. To adjust the handling of blank characters see the
+ ‘-b’ and ‘-t’ options.
+
+ More generally, each POS has the form ‘F[.C][OPTS]’, where F is the
+ number of the field to use, and C is the number of the first
+ character from the beginning of the field. Fields and character
+ positions are numbered starting with 1; a character position of
+ zero in POS2 indicates the field’s last character. If ‘.C’ is
+ omitted from POS1, it defaults to 1 (the beginning of the field);
+ if omitted from POS2, it defaults to 0 (the end of the field).
+ OPTS are ordering options, allowing individual keys to be sorted
+ according to different rules; see below for details. Keys can span
+ multiple fields.
+
+ Example: To sort on the second field, use ‘--key=2,2’ (‘-k 2,2’).
+ See below for more notes on keys and more examples. See also the
+ ‘--debug’ option to help determine the part of the line being used
+ in the sort.
+
+‘--debug’
+ Highlight the portion of each line used for sorting. Also issue
+ warnings about questionable usage to standard error.
+
+‘--batch-size=NMERGE’
+ Merge at most NMERGE inputs at once.
+
+ When ‘sort’ has to merge more than NMERGE inputs, it merges them in
+ groups of NMERGE, saving the result in a temporary file, which is
+ then used as an input in a subsequent merge.
+
+ A large value of NMERGE may improve merge performance and decrease
+ temporary storage utilization at the expense of increased memory
+ usage and I/O. Conversely a small value of NMERGE may reduce
+ memory requirements and I/O at the expense of temporary storage
+ consumption and merge performance.
+
+ The value of NMERGE must be at least 2. The default value is
+ currently 16, but this is implementation-dependent and may change
+ in the future.
+
+ The value of NMERGE may be bounded by a resource limit for open
+ file descriptors. The commands ‘ulimit -n’ or ‘getconf OPEN_MAX’
+ may display limits for your systems; these limits may be modified
+ further if your program already has some files open, or if the
+ operating system has other limits on the number of open files. If
+ the value of NMERGE exceeds the resource limit, ‘sort’ silently
+ uses a smaller value.
+
+‘-o OUTPUT-FILE’
+‘--output=OUTPUT-FILE’
+ Write output to OUTPUT-FILE instead of standard output. Normally,
+ ‘sort’ reads all input before opening OUTPUT-FILE, so you can sort
+ a file in place by using commands like ‘sort -o F F’ and ‘cat F |
+ sort -o F’. However, it is often safer to output to an
+ otherwise-unused file, as data may be lost if the system crashes or
+ ‘sort’ encounters an I/O or other serious error while a file is
+ being sorted in place. Also, ‘sort’ with ‘--merge’ (‘-m’) can open
+ the output file before reading all input, so a command like ‘cat F
+ | sort -m -o F - G’ is not safe as ‘sort’ might start writing ‘F’
+ before ‘cat’ is done reading it.
+
+ On newer systems, ‘-o’ cannot appear after an input file if
+ ‘POSIXLY_CORRECT’ is set, e.g., ‘sort F -o F’. Portable scripts
+ should specify ‘-o OUTPUT-FILE’ before any input files.
+
+‘--random-source=FILE’
+ Use FILE as a source of random data used to determine which random
+ hash function to use with the ‘-R’ option. *Note Random sources::.
+
+‘-s’
+‘--stable’
+
+ Make ‘sort’ stable by disabling its last-resort comparison. This
+ option has no effect if no fields or global ordering options other
+ than ‘--reverse’ (‘-r’) are specified.
+
+‘-S SIZE’
+‘--buffer-size=SIZE’
+ Use a main-memory sort buffer of the given SIZE. By default, SIZE
+ is in units of 1024 bytes. Appending ‘%’ causes SIZE to be
+ interpreted as a percentage of physical memory. Appending ‘K’
+ multiplies SIZE by 1024 (the default), ‘M’ by 1,048,576, ‘G’ by
+ 1,073,741,824, and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’.
+ Appending ‘b’ causes SIZE to be interpreted as a byte count, with
+ no multiplication.
+
+ This option can improve the performance of ‘sort’ by causing it to
+ start with a larger or smaller sort buffer than the default.
+ However, this option affects only the initial buffer size. The
+ buffer grows beyond SIZE if ‘sort’ encounters input lines larger
+ than SIZE.
+
+‘-t SEPARATOR’
+‘--field-separator=SEPARATOR’
+ Use character SEPARATOR as the field separator when finding the
+ sort keys in each line. By default, fields are separated by the
+ empty string between a non-blank character and a blank character.
+ By default a blank is a space or a tab, but the ‘LC_CTYPE’ locale
+ can change this.
+
+ That is, given the input line ‘ foo bar’, ‘sort’ breaks it into
+ fields ‘ foo’ and ‘ bar’. The field separator is not considered to
+ be part of either the field preceding or the field following, so
+ with ‘sort -t " "’ the same input line has three fields: an empty
+ field, ‘foo’, and ‘bar’. However, fields that extend to the end of
+ the line, as ‘-k 2’, or fields consisting of a range, as ‘-k 2,3’,
+ retain the field separators present between the endpoints of the
+ range.
+
+ To specify ASCII NUL as the field separator, use the two-character
+ string ‘\0’, e.g., ‘sort -t '\0'’.
+
+‘-T TEMPDIR’
+‘--temporary-directory=TEMPDIR’
+ Use directory TEMPDIR to store temporary files, overriding the
+ ‘TMPDIR’ environment variable. If this option is given more than
+ once, temporary files are stored in all the directories given. If
+ you have a large sort or merge that is I/O-bound, you can often
+ improve performance by using this option to specify directories on
+ different file systems.
+
+‘--parallel=N’
+ Set the number of sorts run in parallel to N. By default, N is set
+ to the number of available processors, but limited to 8, as there
+ are diminishing performance gains after that. Note also that using
+ N threads increases the memory usage by a factor of log N. Also
+ see *note nproc invocation::.
+
+‘-u’
+‘--unique’
+
+ Normally, output only the first of a sequence of lines that compare
+ equal. For the ‘--check’ (‘-c’ or ‘-C’) option, check that no pair
+ of consecutive lines compares equal.
+
+ This option also disables the default last-resort comparison.
+
+ The commands ‘sort -u’ and ‘sort | uniq’ are equivalent, but this
+ equivalence does not extend to arbitrary ‘sort’ options. For
+ example, ‘sort -n -u’ inspects only the value of the initial
+ numeric string when checking for uniqueness, whereas ‘sort -n |
+ uniq’ inspects the entire line. *Note uniq invocation::.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ Historical (BSD and System V) implementations of ‘sort’ have differed
+in their interpretation of some options, particularly ‘-b’, ‘-f’, and
+‘-n’. GNU sort follows the POSIX behavior, which is usually (but not
+always!) like the System V behavior. According to POSIX, ‘-n’ no
+longer implies ‘-b’. For consistency, ‘-M’ has been changed in the same
+way. This may affect the meaning of character positions in field
+specifications in obscure cases. The only fix is to add an explicit
+‘-b’.
+
+ A position in a sort field specified with ‘-k’ may have any of the
+option letters ‘MbdfghinRrV’ appended to it, in which case no global
+ordering options are inherited by that particular field. The ‘-b’
+option may be independently attached to either or both of the start and
+end positions of a field specification, and if it is inherited from the
+global options it will be attached to both. If input lines can contain
+leading or adjacent blanks and ‘-t’ is not used, then ‘-k’ is typically
+combined with ‘-b’ or an option that implicitly ignores leading blanks
+(‘Mghn’) as otherwise the varying numbers of leading blanks in fields
+can cause confusing results.
+
+ If the start position in a sort field specifier falls after the end
+of the line or after the end field, the field is empty. If the ‘-b’
+option was specified, the ‘.C’ part of a field specification is counted
+from the first nonblank character of the field.
+
+ On systems not conforming to POSIX 1003.1-2001, ‘sort’ supports a
+traditional origin-zero syntax ‘+POS1 [-POS2]’ for specifying sort keys.
+The traditional command ‘sort +A.X -B.Y’ is equivalent to ‘sort -k
+A+1.X+1,B’ if Y is ‘0’ or absent, otherwise it is equivalent to ‘sort -k
+A+1.X+1,B+1.Y’.
+
+ This traditional behavior can be controlled with the
+‘_POSIX2_VERSION’ environment variable (*note Standards conformance::);
+it can also be enabled when ‘POSIXLY_CORRECT’ is not set by using the
+traditional syntax with ‘-POS2’ present.
+
+ Scripts intended for use on standard hosts should avoid traditional
+syntax and should use ‘-k’ instead. For example, avoid ‘sort +2’, since
+it might be interpreted as either ‘sort ./+2’ or ‘sort -k 3’. If your
+script must also run on hosts that support only the traditional syntax,
+it can use a test like ‘if sort -k 1 </dev/null >/dev/null 2>&1; then
+...’ to decide which syntax to use.
+
+ Here are some examples to illustrate various combinations of options.
+
+ • Sort in descending (reverse) numeric order.
+
+ sort -n -r
+
+ • Run no more than 4 sorts concurrently, using a buffer size of 10M.
+
+ sort --parallel=4 -S 10M
+
+ • Sort alphabetically, omitting the first and second fields and the
+ blanks at the start of the third field. This uses a single key
+ composed of the characters beginning at the start of the first
+ nonblank character in field three and extending to the end of each
+ line.
+
+ sort -k 3b
+
+ • Sort numerically on the second field and resolve ties by sorting
+ alphabetically on the third and fourth characters of field five.
+ Use ‘:’ as the field delimiter.
+
+ sort -t : -k 2,2n -k 5.3,5.4
+
+ Note that if you had written ‘-k 2n’ instead of ‘-k 2,2n’ ‘sort’
+ would have used all characters beginning in the second field and
+ extending to the end of the line as the primary _numeric_ key. For
+ the large majority of applications, treating keys spanning more
+ than one field as numeric will not do what you expect.
+
+ Also note that the ‘n’ modifier was applied to the field-end
+ specifier for the first key. It would have been equivalent to
+ specify ‘-k 2n,2’ or ‘-k 2n,2n’. All modifiers except ‘b’ apply to
+ the associated _field_, regardless of whether the modifier
+ character is attached to the field-start and/or the field-end part
+ of the key specifier.
+
+ • Sort the password file on the fifth field and ignore any leading
+ blanks. Sort lines with equal values in field five on the numeric
+ user ID in field three. Fields are separated by ‘:’.
+
+ sort -t : -k 5b,5 -k 3,3n /etc/passwd
+ sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
+ sort -t : -b -k 5,5 -k 3,3n /etc/passwd
+
+ These three commands have equivalent effect. The first specifies
+ that the first key’s start position ignores leading blanks and the
+ second key is sorted numerically. The other two commands rely on
+ global options being inherited by sort keys that lack modifiers.
+ The inheritance works in this case because ‘-k 5b,5b’ and ‘-k 5b,5’
+ are equivalent, as the location of a field-end lacking a ‘.C’
+ character position is not affected by whether initial blanks are
+ skipped.
+
+ • Sort a set of log files, primarily by IPv4 address and secondarily
+ by timestamp. If two lines’ primary and secondary keys are
+ identical, output the lines in the same order that they were input.
+ The log files contain lines that look like this:
+
+ 4.150.156.3 - - [01/Apr/2020:06:31:51 +0000] message 1
+ 211.24.3.231 - - [24/Apr/2020:20:17:39 +0000] message 2
+
+ Fields are separated by exactly one space. Sort IPv4 addresses
+ lexicographically, e.g., 212.61.52.2 sorts before 212.129.233.201
+ because 61 is less than 129.
+
+ sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
+ sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
+
+ This example cannot be done with a single POSIX ‘sort’ invocation,
+ since IPv4 address components are separated by ‘.’ while dates come
+ just after a space. So it is broken down into two invocations of
+ ‘sort’: the first sorts by timestamp and the second by IPv4
+ address. The timestamp is sorted by year, then month, then day,
+ and finally by hour-minute-second field, using ‘-k’ to isolate each
+ field. Except for hour-minute-second there’s no need to specify
+ the end of each key field, since the ‘n’ and ‘M’ modifiers sort
+ based on leading prefixes that cannot cross field boundaries. The
+ IPv4 addresses are sorted lexicographically. The second sort uses
+ ‘-s’ so that ties in the primary key are broken by the secondary
+ key; the first sort uses ‘-s’ so that the combination of the two
+ sorts is stable. Note as a GNU extension, the above example could
+ be achieved in a single ‘sort’ invocation by sorting the IPv4
+ address field using a ‘V’ version type, like ‘-k1,1V’.
+
+ • Generate a tags file in case-insensitive sorted order.
+
+ find src -type f -print0 | sort -z -f | xargs -0 etags --append
+
+ The use of ‘-print0’, ‘-z’, and ‘-0’ in this case means that file
+ names that contain blanks or other special characters are not
+ broken up by the sort operation.
+
+ • Use the common DSU, Decorate Sort Undecorate idiom to sort lines
+ according to their length.
+
+ awk '{print length, $0}' /etc/passwd | sort -n | cut -f2- -d' '
+
+ In general this technique can be used to sort data that the ‘sort’
+ command does not support, or is inefficient at, sorting directly.
+
+ • Shuffle a list of directories, but preserve the order of files
+ within each directory. For instance, one could use this to
+ generate a music playlist in which albums are shuffled but the
+ songs of each album are played in order.
+
+ ls */* | sort -t / -k 1,1R -k 2,2
+
+ ---------- Footnotes ----------
+
+ (1) If you use a non-POSIX locale (e.g., by setting ‘LC_ALL’ to
+‘en_US’), then ‘sort’ may produce output that is sorted differently than
+you’re accustomed to. In that case, set the ‘LC_ALL’ environment
+variable to ‘C’. Note that setting only ‘LC_COLLATE’ has two problems.
+First, it is ineffective if ‘LC_ALL’ is also set. Second, it has
+undefined behavior if ‘LC_CTYPE’ (or ‘LANG’, if ‘LC_CTYPE’ is unset) is
+set to an incompatible value. For example, you get undefined behavior
+if ‘LC_CTYPE’ is ‘ja_JP.PCK’ but ‘LC_COLLATE’ is ‘en_US.UTF-8’.
+
+
+File: coreutils.info, Node: shuf invocation, Next: uniq invocation, Prev: sort invocation, Up: Operating on sorted files
+
+7.2 ‘shuf’: Shuffling text
+==========================
+
+‘shuf’ shuffles its input by outputting a random permutation of its
+input lines. Each output permutation is equally likely. Synopses:
+
+ shuf [OPTION]... [FILE]
+ shuf -e [OPTION]... [ARG]...
+ shuf -i LO-HI [OPTION]...
+
+ ‘shuf’ has three modes of operation that affect where it obtains its
+input lines. By default, it reads lines from standard input. The
+following options change the operation mode:
+
+‘-e’
+‘--echo’
+ Treat each command-line operand as an input line.
+
+‘-i LO-HI’
+‘--input-range=LO-HI’
+ Act as if input came from a file containing the range of unsigned
+ decimal integers LO...HI, one per line.
+
+ ‘shuf’’s other options can affect its behavior in all operation
+modes:
+
+‘-n COUNT’
+‘--head-count=COUNT’
+ Output at most COUNT lines. By default, all input lines are
+ output.
+
+‘-o OUTPUT-FILE’
+‘--output=OUTPUT-FILE’
+ Write output to OUTPUT-FILE instead of standard output. ‘shuf’
+ reads all input before opening OUTPUT-FILE, so you can safely
+ shuffle a file in place by using commands like ‘shuf -o F <F’ and
+ ‘cat F | shuf -o F’.
+
+‘--random-source=FILE’
+ Use FILE as a source of random data used to determine which
+ permutation to generate. *Note Random sources::.
+
+‘-r’
+‘--repeat’
+ Repeat output values, that is, select with replacement. With this
+ option the output is not a permutation of the input; instead, each
+ output line is randomly chosen from all the inputs. This option is
+ typically combined with ‘--head-count’; if ‘--head-count’ is not
+ given, ‘shuf’ repeats indefinitely.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ For example:
+
+ shuf <<EOF
+ A man,
+ a plan,
+ a canal:
+ Panama!
+ EOF
+
+might produce the output
+
+ Panama!
+ A man,
+ a canal:
+ a plan,
+
+Similarly, the command:
+
+ shuf -e clubs hearts diamonds spades
+
+might output:
+
+ clubs
+ diamonds
+ spades
+ hearts
+
+and the command ‘shuf -i 1-4’ might output:
+
+ 4
+ 2
+ 1
+ 3
+
+The above examples all have four input lines, so ‘shuf’ might produce
+any of the twenty-four possible permutations of the input. In general,
+if there are N input lines, there are N! (i.e., N factorial, or N * (N
+- 1) * ... * 1) possible output permutations.
+
+To output 50 random numbers each in the range 0 through 9, use:
+
+ shuf -r -n 50 -i 0-9
+
+To simulate 100 coin flips, use:
+
+ shuf -r -n 100 -e Head Tail
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: uniq invocation, Next: comm invocation, Prev: shuf invocation, Up: Operating on sorted files
+
+7.3 ‘uniq’: Uniquify files
+==========================
+
+‘uniq’ writes the unique lines in the given ‘input’, or standard input
+if nothing is given or for an INPUT name of ‘-’. Synopsis:
+
+ uniq [OPTION]... [INPUT [OUTPUT]]
+
+ By default, ‘uniq’ prints its input lines, except that it discards
+all but the first of adjacent repeated lines, so that no output lines
+are repeated. Optionally, it can instead discard lines that are not
+repeated, or all repeated lines.
+
+ The input need not be sorted, but repeated input lines are detected
+only if they are adjacent. If you want to discard non-adjacent
+duplicate lines, perhaps you want to use ‘sort -u’. *Note sort
+invocation::.
+
+ Comparisons honor the rules specified by the ‘LC_COLLATE’ locale
+category.
+
+ If no OUTPUT file is specified, ‘uniq’ writes to standard output.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-f N’
+‘--skip-fields=N’
+ Skip N fields on each line before checking for uniqueness. Use a
+ null string for comparison if a line has fewer than N fields.
+ Fields are a sequence of blank characters followed by non-blank
+ characters. Field numbers are one based, i.e., ‘-f 1’ will skip
+ the first field (which may optionally have leading blanks).
+
+ For compatibility ‘uniq’ supports a traditional option syntax ‘-N’.
+ New scripts should use ‘-f N’ instead.
+
+‘-s N’
+‘--skip-chars=N’
+ Skip N characters before checking for uniqueness. Use a null
+ string for comparison if a line has fewer than N characters. If
+ you use both the field and character skipping options, fields are
+ skipped over first.
+
+ On systems not conforming to POSIX 1003.1-2001, ‘uniq’ supports a
+ traditional option syntax ‘+N’. Although this traditional behavior
+ can be controlled with the ‘_POSIX2_VERSION’ environment variable
+ (*note Standards conformance::), portable scripts should avoid
+ commands whose behavior depends on this variable. For example, use
+ ‘uniq ./+10’ or ‘uniq -s 10’ rather than the ambiguous ‘uniq +10’.
+
+‘-c’
+‘--count’
+ Print the number of times each line occurred along with the line.
+
+‘-i’
+‘--ignore-case’
+ Ignore differences in case when comparing lines.
+
+‘-d’
+‘--repeated’
+ Discard lines that are not repeated. When used by itself, this
+ option causes ‘uniq’ to print the first copy of each repeated line,
+ and nothing else.
+
+‘-D’
+‘--all-repeated[=DELIMIT-METHOD]’
+ Do not discard the second and subsequent repeated input lines, but
+ discard lines that are not repeated. This option is useful mainly
+ in conjunction with other options e.g., to ignore case or to
+ compare only selected fields. The optional DELIMIT-METHOD,
+ supported with the long form option, specifies how to delimit
+ groups of repeated lines, and must be one of the following:
+
+ ‘none’
+ Do not delimit groups of repeated lines. This is equivalent
+ to ‘--all-repeated’ (‘-D’).
+
+ ‘prepend’
+ Output a newline before each group of repeated lines. With
+ ‘--zero-terminated’ (‘-z’), use a zero byte (ASCII NUL)
+ instead of a newline as the delimiter.
+
+ ‘separate’
+ Separate groups of repeated lines with a single newline. This
+ is the same as using ‘prepend’, except that no delimiter is
+ inserted before the first group, and hence may be better
+ suited for output direct to users. With ‘--zero-terminated’
+ (‘-z’), use a zero byte (ASCII NUL) instead of a newline as
+ the delimiter.
+
+ Note that when groups are delimited and the input stream contains
+ blank lines, then the output is ambiguous. To avoid that, filter
+ the input through ‘tr -s '\n'’ to remove blank lines.
+
+ This is a GNU extension.
+
+‘--group[=DELIMIT-METHOD]’
+ Output all lines, and delimit each unique group. With
+ ‘--zero-terminated’ (‘-z’), use a zero byte (ASCII NUL) instead of
+ a newline as the delimiter. The optional DELIMIT-METHOD specifies
+ how to delimit groups, and must be one of the following:
+
+ ‘separate’
+ Separate unique groups with a single delimiter. This is the
+ default delimiting method if none is specified, and better
+ suited for output direct to users.
+
+ ‘prepend’
+ Output a delimiter before each group of unique items.
+
+ ‘append’
+ Output a delimiter after each group of unique items.
+
+ ‘both’
+ Output a delimiter around each group of unique items.
+
+ Note that when groups are delimited and the input stream contains
+ blank lines, then the output is ambiguous. To avoid that, filter
+ the input through ‘tr -s '\n'’ to remove blank lines.
+
+ This is a GNU extension.
+
+‘-u’
+‘--unique’
+ Discard the last line that would be output for a repeated input
+ group. When used by itself, this option causes ‘uniq’ to print
+ unique lines, and nothing else.
+
+‘-w N’
+‘--check-chars=N’
+ Compare at most N characters on each line (after skipping any
+ specified fields and characters). By default the entire rest of
+ the lines are compared.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters). Note with
+ ‘-z’ the newline character is treated as a field separator.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: comm invocation, Next: ptx invocation, Prev: uniq invocation, Up: Operating on sorted files
+
+7.4 ‘comm’: Compare two sorted files line by line
+=================================================
+
+‘comm’ writes to standard output lines that are common, and lines that
+are unique, to two input files; a file name of ‘-’ means standard input.
+Synopsis:
+
+ comm [OPTION]... FILE1 FILE2
+
+ Before ‘comm’ can be used, the input files must be sorted using the
+collating sequence specified by the ‘LC_COLLATE’ locale. If an input
+file ends in a non-newline character, a newline is silently appended.
+The ‘sort’ command with no options always outputs a file that is
+suitable input to ‘comm’.
+
+ With no options, ‘comm’ produces three-column output. Column one
+contains lines unique to FILE1, column two contains lines unique to
+FILE2, and column three contains lines common to both files. Columns
+are separated by a single TAB character.
+
+ The options ‘-1’, ‘-2’, and ‘-3’ suppress printing of the
+corresponding columns (and separators). Also see *note Common
+options::.
+
+ Unlike some other comparison utilities, ‘comm’ has an exit status
+that does not depend on the result of the comparison. Upon normal
+completion ‘comm’ produces an exit code of zero. If there is an error
+it exits with nonzero status.
+
+ If the ‘--check-order’ option is given, unsorted inputs will cause a
+fatal error message. If the option ‘--nocheck-order’ is given, unsorted
+inputs will never cause an error message. If neither of these options
+is given, wrongly sorted inputs are diagnosed only if an input file is
+found to contain unpairable lines. If an input file is diagnosed as
+being unsorted, the ‘comm’ command will exit with a nonzero status (and
+the output should not be used).
+
+ Forcing ‘comm’ to process wrongly sorted input files containing
+unpairable lines by specifying ‘--nocheck-order’ is not guaranteed to
+produce any particular output. The output will probably not correspond
+with whatever you hoped it would be.
+
+‘--check-order’
+ Fail with an error message if either input file is wrongly ordered.
+
+‘--nocheck-order’
+ Do not check that both input files are in sorted order.
+
+ Other options are:
+
+‘--output-delimiter=STR’
+ Print STR between adjacent output columns, rather than the default
+ of a single TAB character.
+
+ The delimiter STR may be empty, in which case the ASCII NUL
+ character is used to delimit output columns.
+
+‘--total’
+ Output a summary at the end.
+
+ Similar to the regular output, column one contains the total number
+ of lines unique to FILE1, column two contains the total number of
+ lines unique to FILE2, and column three contains the total number
+ of lines common to both files, followed by the word ‘total’ in the
+ additional column four.
+
+ In the following example, ‘comm’ omits the regular output (‘-123’),
+ thus just printing the summary:
+
+ $ printf '%s\n' a b c d e > file1
+ $ printf '%s\n' b c d e f g > file2
+ $ comm --total -123 file1 file2
+ 1 2 4 total
+
+ This option is a GNU extension. Portable scripts should use ‘wc’
+ to get the totals, e.g. for the above example files:
+
+ $ comm -23 file1 file2 | wc -l # number of lines only in file1
+ 1
+ $ comm -13 file1 file2 | wc -l # number of lines only in file2
+ 2
+ $ comm -12 file1 file2 | wc -l # number of lines common to both files
+ 4
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+
+File: coreutils.info, Node: ptx invocation, Next: tsort invocation, Prev: comm invocation, Up: Operating on sorted files
+
+7.5 ‘ptx’: Produce permuted indexes
+===================================
+
+‘ptx’ reads a text file and essentially produces a permuted index, with
+each keyword in its context. The calling sketch is either one of:
+
+ ptx [OPTION ...] [FILE ...]
+ ptx -G [OPTION ...] [INPUT [OUTPUT]]
+
+ The ‘-G’ (or its equivalent: ‘--traditional’) option disables all GNU
+extensions and reverts to traditional mode, thus introducing some
+limitations and changing several of the program’s default option values.
+When ‘-G’ is not specified, GNU extensions are always enabled. GNU
+extensions to ‘ptx’ are documented wherever appropriate in this
+document. *Note Compatibility in ptx::, for the full list.
+
+ Individual options are explained in the following sections.
+
+ When GNU extensions are enabled, there may be zero, one or several
+FILEs after the options. If there is no FILE, the program reads the
+standard input. If there is one or several FILEs, they give the name of
+input files which are all read in turn, as if all the input files were
+concatenated. However, there is a full contextual break between each
+file and, when automatic referencing is requested, file names and line
+numbers refer to individual text input files. In all cases, the program
+outputs the permuted index to the standard output.
+
+ When GNU extensions are _not_ enabled, that is, when the program
+operates in traditional mode, there may be zero, one or two parameters
+besides the options. If there are no parameters, the program reads the
+standard input and outputs the permuted index to the standard output.
+If there is only one parameter, it names the text INPUT to be read
+instead of the standard input. If two parameters are given, they give
+respectively the name of the INPUT file to read and the name of the
+OUTPUT file to produce. _Be very careful_ to note that, in this case,
+the contents of file given by the second parameter is destroyed. This
+behavior is dictated by System V ‘ptx’ compatibility; GNU Standards
+normally discourage output parameters not introduced by an option.
+
+ Note that for _any_ file named as the value of an option or as an
+input text file, a single dash ‘-’ may be used, in which case standard
+input is assumed. However, it would not make sense to use this
+convention more than once per program invocation.
+
+* Menu:
+
+* General options in ptx:: Options which affect general program behavior.
+* Charset selection in ptx:: Underlying character set considerations.
+* Input processing in ptx:: Input fields, contexts, and keyword selection.
+* Output formatting in ptx:: Types of output format, and sizing the fields.
+* Compatibility in ptx::
+
+
+File: coreutils.info, Node: General options in ptx, Next: Charset selection in ptx, Up: ptx invocation
+
+7.5.1 General options
+---------------------
+
+‘-G’
+‘--traditional’
+ As already explained, this option disables all GNU extensions to
+ ‘ptx’ and switches to traditional mode.
+
+‘--help’
+ Print a short help on standard output, then exit without further
+ processing.
+
+‘--version’
+ Print the program version on standard output, then exit without
+ further processing.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Charset selection in ptx, Next: Input processing in ptx, Prev: General options in ptx, Up: ptx invocation
+
+7.5.2 Charset selection
+-----------------------
+
+As it is set up now, ‘ptx’ assumes that the input file is coded using
+8-bit characters, and it may not work well in multibyte locales. In a
+single-byte locale, the default regular expression for a keyword allows
+foreign or diacriticized letters. Keyword sorting, however, is still
+crude; it obeys the underlying character set ordering quite blindly.
+
+ The output of ‘ptx’ assumes the locale’s character encoding. For
+example, with ‘ptx’’s ‘-T’ option, if the locale uses the Latin-1
+encoding you may need a LaTeX directive like
+‘\usepackage[latin1]{inputenc}’ to render non-ASCII characters
+correctly.
+
+‘-f’
+‘--ignore-case’
+ Fold lower case letters to upper case for sorting.
+
+
+File: coreutils.info, Node: Input processing in ptx, Next: Output formatting in ptx, Prev: Charset selection in ptx, Up: ptx invocation
+
+7.5.3 Word selection and input processing
+-----------------------------------------
+
+‘-b FILE’
+‘--break-file=FILE’
+
+ This option provides an alternative (to ‘-W’) method of describing
+ which characters make up words. It introduces the name of a file
+ which contains a list of characters which can_not_ be part of one
+ word; this file is called the “Break file”. Any character which is
+ not part of the Break file is a word constituent. If both options
+ ‘-b’ and ‘-W’ are specified, then ‘-W’ has precedence and ‘-b’ is
+ ignored.
+
+ When GNU extensions are enabled, the only way to avoid newline as a
+ break character is to write all the break characters in the file
+ with no newline at all, not even at the end of the file. When GNU
+ extensions are disabled, spaces, tabs and newlines are always
+ considered as break characters even if not included in the Break
+ file.
+
+‘-i FILE’
+‘--ignore-file=FILE’
+
+ The file associated with this option contains a list of words which
+ will never be taken as keywords in concordance output. It is
+ called the “Ignore file”. The file contains exactly one word in
+ each line; the end of line separation of words is not subject to
+ the value of the ‘-S’ option.
+
+‘-o FILE’
+‘--only-file=FILE’
+
+ The file associated with this option contains a list of words which
+ will be retained in concordance output; any word not mentioned in
+ this file is ignored. The file is called the “Only file”. The
+ file contains exactly one word in each line; the end of line
+ separation of words is not subject to the value of the ‘-S’ option.
+
+ There is no default for the Only file. When both an Only file and
+ an Ignore file are specified, a word is considered a keyword only
+ if it is listed in the Only file and not in the Ignore file.
+
+‘-r’
+‘--references’
+
+ On each input line, the leading sequence of non-white space
+ characters will be taken to be a reference that has the purpose of
+ identifying this input line in the resulting permuted index. *Note
+ Output formatting in ptx::, for more information about reference
+ production. Using this option changes the default value for option
+ ‘-S’.
+
+ Using this option, the program does not try very hard to remove
+ references from contexts in output, but it succeeds in doing so
+ _when_ the context ends exactly at the newline. If option ‘-r’ is
+ used with ‘-S’ default value, or when GNU extensions are disabled,
+ this condition is always met and references are completely excluded
+ from the output contexts.
+
+‘-S REGEXP’
+‘--sentence-regexp=REGEXP’
+
+ This option selects which regular expression will describe the end
+ of a line or the end of a sentence. In fact, this regular
+ expression is not the only distinction between end of lines or end
+ of sentences, and input line boundaries have no special
+ significance outside this option. By default, when GNU extensions
+ are enabled and if ‘-r’ option is not used, end of sentences are
+ used. In this case, this REGEX is imported from GNU Emacs:
+
+ [.?!][]\"')}]*\\($\\|\t\\| \\)[ \t\n]*
+
+ Whenever GNU extensions are disabled or if ‘-r’ option is used, end
+ of lines are used; in this case, the default REGEXP is just:
+
+ \n
+
+ Using an empty REGEXP is equivalent to completely disabling end of
+ line or end of sentence recognition. In this case, the whole file
+ is considered to be a single big line or sentence. The user might
+ want to disallow all truncation flag generation as well, through
+ option ‘-F ""’. *Note Syntax of Regular Expressions:
+ (emacs)Regexps.
+
+ When the keywords happen to be near the beginning of the input line
+ or sentence, this often creates an unused area at the beginning of
+ the output context line; when the keywords happen to be near the
+ end of the input line or sentence, this often creates an unused
+ area at the end of the output context line. The program tries to
+ fill those unused areas by wrapping around context in them; the
+ tail of the input line or sentence is used to fill the unused area
+ on the left of the output line; the head of the input line or
+ sentence is used to fill the unused area on the right of the output
+ line.
+
+ As a matter of convenience to the user, many usual backslashed
+ escape sequences from the C language are recognized and converted
+ to the corresponding characters by ‘ptx’ itself.
+
+‘-W REGEXP’
+‘--word-regexp=REGEXP’
+
+ This option selects which regular expression will describe each
+ keyword. By default, if GNU extensions are enabled, a word is a
+ sequence of letters; the REGEXP used is ‘\w+’. When GNU extensions
+ are disabled, a word is by default anything which ends with a
+ space, a tab or a newline; the REGEXP used is ‘[^ \t\n]+’.
+
+ An empty REGEXP is equivalent to not using this option. *Note
+ Syntax of Regular Expressions: (emacs)Regexps.
+
+ As a matter of convenience to the user, many usual backslashed
+ escape sequences, as found in the C language, are recognized and
+ converted to the corresponding characters by ‘ptx’ itself.
+
+
+File: coreutils.info, Node: Output formatting in ptx, Next: Compatibility in ptx, Prev: Input processing in ptx, Up: ptx invocation
+
+7.5.4 Output formatting
+-----------------------
+
+Output format is mainly controlled by the ‘-O’ and ‘-T’ options
+described in the table below. When neither ‘-O’ nor ‘-T’ are selected,
+and if GNU extensions are enabled, the program chooses an output format
+suitable for a dumb terminal. Each keyword occurrence is output to the
+center of one line, surrounded by its left and right contexts. Each
+field is properly justified, so the concordance output can be readily
+observed. As a special feature, if automatic references are selected by
+option ‘-A’ and are output before the left context, that is, if option
+‘-R’ is _not_ selected, then a colon is added after the reference; this
+nicely interfaces with GNU Emacs ‘next-error’ processing. In this
+default output format, each white space character, like newline and tab,
+is merely changed to exactly one space, with no special attempt to
+compress consecutive spaces. This might change in the future. Except
+for those white space characters, every other character of the
+underlying set of 256 characters is transmitted verbatim.
+
+ Output format is further controlled by the following options.
+
+‘-g NUMBER’
+‘--gap-size=NUMBER’
+
+ Select the size of the minimum white space gap between the fields
+ on the output line.
+
+‘-w NUMBER’
+‘--width=NUMBER’
+
+ Select the maximum output width of each final line. If references
+ are used, they are included or excluded from the maximum output
+ width depending on the value of option ‘-R’. If this option is not
+ selected, that is, when references are output before the left
+ context, the maximum output width takes into account the maximum
+ length of all references. If this option is selected, that is,
+ when references are output after the right context, the maximum
+ output width does not take into account the space taken by
+ references, nor the gap that precedes them.
+
+‘-A’
+‘--auto-reference’
+
+ Select automatic references. Each input line will have an
+ automatic reference made up of the file name and the line ordinal,
+ with a single colon between them. However, the file name will be
+ empty when standard input is being read. If both ‘-A’ and ‘-r’ are
+ selected, then the input reference is still read and skipped, but
+ the automatic reference is used at output time, overriding the
+ input reference.
+
+‘-R’
+‘--right-side-refs’
+
+ In the default output format, when option ‘-R’ is not used, any
+ references produced by the effect of options ‘-r’ or ‘-A’ are
+ placed to the far right of output lines, after the right context.
+ With default output format, when the ‘-R’ option is specified,
+ references are rather placed at the beginning of each output line,
+ before the left context. For any other output format, option ‘-R’
+ is ignored, with one exception: with ‘-R’ the width of references
+ is _not_ taken into account in total output width given by ‘-w’.
+
+ This option is automatically selected whenever GNU extensions are
+ disabled.
+
+‘-F STRING’
+‘--flag-truncation=STRING’
+
+ This option will request that any truncation in the output be
+ reported using the string STRING. Most output fields theoretically
+ extend towards the beginning or the end of the current line, or
+ current sentence, as selected with option ‘-S’. But there is a
+ maximum allowed output line width, changeable through option ‘-w’,
+ which is further divided into space for various output fields.
+ When a field has to be truncated because it cannot extend beyond
+ the beginning or the end of the current line to fit in, then a
+ truncation occurs. By default, the string used is a single slash,
+ as in ‘-F /’.
+
+ STRING may have more than one character, as in ‘-F ...’. Also, in
+ the particular case when STRING is empty (‘-F ""’), truncation
+ flagging is disabled, and no truncation marks are appended in this
+ case.
+
+ As a matter of convenience to the user, many usual backslashed
+ escape sequences, as found in the C language, are recognized and
+ converted to the corresponding characters by ‘ptx’ itself.
+
+‘-M STRING’
+‘--macro-name=STRING’
+
+ Select another STRING to be used instead of ‘xx’, while generating
+ output suitable for ‘nroff’, ‘troff’ or TeX.
+
+‘-O’
+‘--format=roff’
+
+ Choose an output format suitable for ‘nroff’ or ‘troff’ processing.
+ Each output line will look like:
+
+ .xx "TAIL" "BEFORE" "KEYWORD_AND_AFTER" "HEAD" "REF"
+
+ so it will be possible to write a ‘.xx’ roff macro to take care of
+ the output typesetting. This is the default output format when GNU
+ extensions are disabled. Option ‘-M’ can be used to change ‘xx’ to
+ another macro name.
+
+ In this output format, each non-graphical character, like newline
+ and tab, is merely changed to exactly one space, with no special
+ attempt to compress consecutive spaces. Each quote character ‘"’
+ is doubled so it will be correctly processed by ‘nroff’ or ‘troff’.
+
+‘-T’
+‘--format=tex’
+
+ Choose an output format suitable for TeX processing. Each output
+ line will look like:
+
+ \xx {TAIL}{BEFORE}{KEYWORD}{AFTER}{HEAD}{REF}
+
+ so it will be possible to write a ‘\xx’ definition to take care of
+ the output typesetting. Note that when references are not being
+ produced, that is, neither option ‘-A’ nor option ‘-r’ is selected,
+ the last parameter of each ‘\xx’ call is inhibited. Option ‘-M’
+ can be used to change ‘xx’ to another macro name.
+
+ In this output format, some special characters, like ‘$’, ‘%’, ‘&’,
+ ‘#’ and ‘_’ are automatically protected with a backslash. Curly
+ brackets ‘{’, ‘}’ are protected with a backslash and a pair of
+ dollar signs (to force mathematical mode). The backslash itself
+ produces the sequence ‘\backslash{}’. Circumflex and tilde
+ diacritical marks produce the sequence ‘^\{ }’ and ‘~\{ }’
+ respectively. Other diacriticized characters of the underlying
+ character set produce an appropriate TeX sequence as far as
+ possible. The other non-graphical characters, like newline and
+ tab, and all other characters which are not part of ASCII, are
+ merely changed to exactly one space, with no special attempt to
+ compress consecutive spaces. Let me know how to improve this
+ special character processing for TeX.
+
+
+File: coreutils.info, Node: Compatibility in ptx, Prev: Output formatting in ptx, Up: ptx invocation
+
+7.5.5 The GNU extensions to ‘ptx’
+---------------------------------
+
+This version of ‘ptx’ contains a few features which do not exist in
+System V ‘ptx’. These extra features are suppressed by using the ‘-G’
+command line option, unless overridden by other command line options.
+Some GNU extensions cannot be recovered by overriding, so the simple
+rule is to avoid ‘-G’ if you care about GNU extensions. Here are the
+differences between this program and System V ‘ptx’.
+
+ • This program can read many input files at once, it always writes
+ the resulting concordance on standard output. On the other hand,
+ System V ‘ptx’ reads only one file and sends the result to standard
+ output or, if a second FILE parameter is given on the command, to
+ that FILE.
+
+ Having output parameters not introduced by options is a dangerous
+ practice which GNU avoids as far as possible. So, for using ‘ptx’
+ portably between GNU and System V, you should always use it with a
+ single input file, and always expect the result on standard output.
+ You might also want to automatically configure in a ‘-G’ option to
+ ‘ptx’ calls in products using ‘ptx’, if the configurator finds that
+ the installed ‘ptx’ accepts ‘-G’.
+
+ • The only options available in System V ‘ptx’ are options ‘-b’,
+ ‘-f’, ‘-g’, ‘-i’, ‘-o’, ‘-r’, ‘-t’ and ‘-w’. All other options are
+ GNU extensions and are not repeated in this enumeration. Moreover,
+ some options have a slightly different meaning when GNU extensions
+ are enabled, as explained below.
+
+ • By default, concordance output is not formatted for ‘troff’ or
+ ‘nroff’. It is rather formatted for a dumb terminal. ‘troff’ or
+ ‘nroff’ output may still be selected through option ‘-O’.
+
+ • Unless ‘-R’ option is used, the maximum reference width is
+ subtracted from the total output line width. With GNU extensions
+ disabled, width of references is not taken into account in the
+ output line width computations.
+
+ • All 256 bytes, even ASCII NUL bytes, are always read and processed
+ from input file with no adverse effect, even if GNU extensions are
+ disabled. However, System V ‘ptx’ does not accept 8-bit
+ characters, a few control characters are rejected, and the tilde
+ ‘~’ is also rejected.
+
+ • Input line length is only limited by available memory, even if GNU
+ extensions are disabled. However, System V ‘ptx’ processes only
+ the first 200 characters in each line.
+
+ • The break (non-word) characters default to be every character
+ except all letters of the underlying character set, diacriticized
+ or not. When GNU extensions are disabled, the break characters
+ default to space, tab and newline only.
+
+ • The program makes better use of output line width. If GNU
+ extensions are disabled, the program rather tries to imitate System
+ V ‘ptx’, but still, there are some slight disposition glitches this
+ program does not completely reproduce.
+
+ • The user can specify both an Ignore file and an Only file. This is
+ not allowed with System V ‘ptx’.
+
+
+File: coreutils.info, Node: tsort invocation, Prev: ptx invocation, Up: Operating on sorted files
+
+7.6 ‘tsort’: Topological sort
+=============================
+
+‘tsort’ performs a topological sort on the given FILE, or standard input
+if no input file is given or for a FILE of ‘-’. For more details and
+some history, see *note tsort background::. Synopsis:
+
+ tsort [OPTION] [FILE]
+
+ ‘tsort’ reads its input as pairs of strings, separated by blanks,
+indicating a partial ordering. The output is a total ordering that
+corresponds to the given partial ordering.
+
+ For example
+
+ tsort <<EOF
+ a b c
+ d
+ e f
+ b c d e
+ EOF
+
+will produce the output
+
+ a
+ b
+ c
+ d
+ e
+ f
+
+ Consider a more realistic example. You have a large set of functions
+all in one file, and they may all be declared static except one.
+Currently that one (say ‘main’) is the first function defined in the
+file, and the ones it calls directly follow it, followed by those they
+call, etc. Let’s say that you are determined to take advantage of
+prototypes, so you have to choose between declaring all of those
+functions (which means duplicating a lot of information from the
+definitions) and rearranging the functions so that as many as possible
+are defined before they are used. One way to automate the latter
+process is to get a list for each function of the functions it calls
+directly. Many programs can generate such lists. They describe a call
+graph. Consider the following list, in which a given line indicates
+that the function on the left calls the one on the right directly.
+
+ main parse_options
+ main tail_file
+ main tail_forever
+ tail_file pretty_name
+ tail_file write_header
+ tail_file tail
+ tail_forever recheck
+ tail_forever pretty_name
+ tail_forever write_header
+ tail_forever dump_remainder
+ tail tail_lines
+ tail tail_bytes
+ tail_lines start_lines
+ tail_lines dump_remainder
+ tail_lines file_lines
+ tail_lines pipe_lines
+ tail_bytes xlseek
+ tail_bytes start_bytes
+ tail_bytes dump_remainder
+ tail_bytes pipe_bytes
+ file_lines dump_remainder
+ recheck pretty_name
+
+ then you can use ‘tsort’ to produce an ordering of those functions
+that satisfies your requirement.
+
+ example$ tsort call-graph | tac
+ dump_remainder
+ start_lines
+ file_lines
+ pipe_lines
+ xlseek
+ start_bytes
+ pipe_bytes
+ tail_lines
+ tail_bytes
+ pretty_name
+ write_header
+ tail
+ recheck
+ parse_options
+ tail_file
+ tail_forever
+ main
+
+ ‘tsort’ detects any cycles in the input and writes the first cycle
+encountered to standard error.
+
+ Note that for a given partial ordering, generally there is no unique
+total ordering. In the context of the call graph above, the function
+‘parse_options’ may be placed anywhere in the list as long as it
+precedes ‘main’.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+* Menu:
+
+* tsort background:: Where tsort came from.
+
+
+File: coreutils.info, Node: tsort background, Up: tsort invocation
+
+7.6.1 ‘tsort’: Background
+-------------------------
+
+‘tsort’ exists because very early versions of the Unix linker processed
+an archive file exactly once, and in order. As ‘ld’ read each object in
+the archive, it decided whether it was needed in the program based on
+whether it defined any symbols which were undefined at that point in the
+link.
+
+ This meant that dependencies within the archive had to be handled
+specially. For example, ‘scanf’ probably calls ‘read’. That means that
+in a single pass through an archive, it was important for ‘scanf.o’ to
+appear before read.o, because otherwise a program which calls ‘scanf’
+but not ‘read’ might end up with an unexpected unresolved reference to
+‘read’.
+
+ The way to address this problem was to first generate a set of
+dependencies of one object file on another. This was done by a shell
+script called ‘lorder’. The GNU tools don’t provide a version of
+lorder, as far as I know, but you can still find it in BSD
+distributions.
+
+ Then you ran ‘tsort’ over the ‘lorder’ output, and you used the
+resulting sort to define the order in which you added objects to the
+archive.
+
+ This whole procedure has been obsolete since about 1980, because Unix
+archives now contain a symbol table (traditionally built by ‘ranlib’,
+now generally built by ‘ar’ itself), and the Unix linker uses the symbol
+table to effectively make multiple passes over an archive file.
+
+ Anyhow, that’s where tsort came from. To solve an old problem with
+the way the linker handled archive files, which has since been solved in
+different ways.
+
+
+File: coreutils.info, Node: Operating on fields, Next: Operating on characters, Prev: Operating on sorted files, Up: Top
+
+8 Operating on fields
+*********************
+
+* Menu:
+
+* cut invocation:: Print selected parts of lines.
+* paste invocation:: Merge lines of files.
+* join invocation:: Join lines on a common field.
+
+
+File: coreutils.info, Node: cut invocation, Next: paste invocation, Up: Operating on fields
+
+8.1 ‘cut’: Print selected parts of lines
+========================================
+
+‘cut’ writes to standard output selected parts of each line of each
+input file, or standard input if no files are given or for a file name
+of ‘-’. Synopsis:
+
+ cut OPTION... [FILE]...
+
+ In the table which follows, the BYTE-LIST, CHARACTER-LIST, and
+FIELD-LIST are one or more numbers or ranges (two numbers separated by a
+dash) separated by commas. Bytes, characters, and fields are numbered
+starting at 1. Incomplete ranges may be given: ‘-M’ means ‘1-M’; ‘N-’
+means ‘N’ through end of line or last field. The list elements can be
+repeated, can overlap, and can be specified in any order; but the
+selected input is written in the same order that it is read, and is
+written exactly once.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b BYTE-LIST’
+‘--bytes=BYTE-LIST’
+ Select for printing only the bytes in positions listed in
+ BYTE-LIST. Tabs and backspaces are treated like any other
+ character; they take up 1 byte. If an output delimiter is
+ specified, (see the description of ‘--output-delimiter’), then
+ output that string between ranges of selected bytes.
+
+‘-c CHARACTER-LIST’
+‘--characters=CHARACTER-LIST’
+ Select for printing only the characters in positions listed in
+ CHARACTER-LIST. The same as ‘-b’ for now, but internationalization
+ will change that. Tabs and backspaces are treated like any other
+ character; they take up 1 character. If an output delimiter is
+ specified, (see the description of ‘--output-delimiter’), then
+ output that string between ranges of selected bytes.
+
+‘-f FIELD-LIST’
+‘--fields=FIELD-LIST’
+ Select for printing only the fields listed in FIELD-LIST. Fields
+ are separated by a TAB character by default. Also print any line
+ that contains no delimiter character, unless the ‘--only-delimited’
+ (‘-s’) option is specified.
+
+ Note ‘awk’ supports more sophisticated field processing, like
+ reordering fields, and handling fields aligned with blank
+ characters. By default ‘awk’ uses (and discards) runs of blank
+ characters to separate fields, and ignores leading and trailing
+ blanks.
+ awk '{print $2}' # print the second field
+ awk '{print $(NF-1)}' # print the penultimate field
+ awk '{print $2,$1}' # reorder the first two fields
+ Note while ‘cut’ accepts field specifications in arbitrary order,
+ output is always in the order encountered in the file.
+
+ In the unlikely event that ‘awk’ is unavailable, one can use the
+ ‘join’ command, to process blank characters as ‘awk’ does above.
+ join -a1 -o 1.2 - /dev/null # print the second field
+ join -a1 -o 1.2,1.1 - /dev/null # reorder the first two fields
+
+‘-d INPUT_DELIM_BYTE’
+‘--delimiter=INPUT_DELIM_BYTE’
+ With ‘-f’, use the first byte of INPUT_DELIM_BYTE as the input
+ fields separator (default is TAB).
+
+‘-n’
+ Do not split multi-byte characters (no-op for now).
+
+‘-s’
+‘--only-delimited’
+ For ‘-f’, do not print lines that do not contain the field
+ separator character. Normally, any line without a field separator
+ is printed verbatim.
+
+‘--output-delimiter=OUTPUT_DELIM_STRING’
+ With ‘-f’, output fields are separated by OUTPUT_DELIM_STRING. The
+ default with ‘-f’ is to use the input delimiter. When using ‘-b’
+ or ‘-c’ to select ranges of byte or character offsets (as opposed
+ to ranges of fields), output OUTPUT_DELIM_STRING between
+ non-overlapping ranges of selected bytes.
+
+‘--complement’
+ This option is a GNU extension. Select for printing the complement
+ of the bytes, characters or fields selected with the ‘-b’, ‘-c’ or
+ ‘-f’ options. In other words, do _not_ print the bytes, characters
+ or fields specified via those options. This option is useful when
+ you have many fields and want to print all but a few of them.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: paste invocation, Next: join invocation, Prev: cut invocation, Up: Operating on fields
+
+8.2 ‘paste’: Merge lines of files
+=================================
+
+‘paste’ writes to standard output lines consisting of sequentially
+corresponding lines of each given file, separated by a TAB character.
+Standard input is used for a file name of ‘-’ or if no input files are
+given.
+
+ Synopsis:
+
+ paste [OPTION]... [FILE]...
+
+ For example, with:
+ $ cat num2
+ 1
+ 2
+ $ cat let3
+ a
+ b
+ c
+
+ Take lines sequentially from each file:
+ $ paste num2 let3
+ 1 a
+ 2 b
+ c
+
+ Duplicate lines from a file:
+ $ paste num2 let3 num2
+ 1 a 1
+ 2 b 2
+ c
+
+ Intermix lines from standard input:
+ $ paste - let3 - < num2
+ 1 a 2
+ b
+ c
+
+ Join consecutive lines with a space:
+ $ seq 4 | paste -d ' ' - -
+ 1 2
+ 3 4
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-s’
+‘--serial’
+ Paste the lines of one file at a time rather than one line from
+ each file. Using the above example data:
+
+ $ paste -s num2 let3
+ 1 2
+ a b c
+
+‘-d DELIM-LIST’
+‘--delimiters=DELIM-LIST’
+ Consecutively use the characters in DELIM-LIST instead of TAB to
+ separate merged lines. When DELIM-LIST is exhausted, start again
+ at its beginning. Using the above example data:
+
+ $ paste -d '%_' num2 let3 num2
+ 1%a_1
+ 2%b_2
+ %c_
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters).
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: join invocation, Prev: paste invocation, Up: Operating on fields
+
+8.3 ‘join’: Join lines on a common field
+========================================
+
+‘join’ writes to standard output a line for each pair of input lines
+that have identical join fields. Synopsis:
+
+ join [OPTION]... FILE1 FILE2
+
+ Either FILE1 or FILE2 (but not both) can be ‘-’, meaning standard
+input. FILE1 and FILE2 should be sorted on the join fields.
+
+ $ cat file1
+ a 1
+ b 2
+ e 5
+
+ $ cat file2
+ a X
+ e Y
+ f Z
+
+ $ join file1 file2
+ a 1 X
+ e 5 Y
+
+‘join’’s default behavior (when no options are given):
+ • the join field is the first field in each line;
+ • fields in the input are separated by one or more blanks, with
+ leading blanks on the line ignored;
+ • fields in the output are separated by a space;
+ • each output line consists of the join field, the remaining fields
+ from FILE1, then the remaining fields from FILE2.
+
+* Menu:
+
+* General options in join:: Options which affect general program behavior.
+* Sorting files for join:: Using ‘sort’ before ‘join’.
+* Working with fields:: Joining on different fields.
+* Paired and unpaired lines:: Controlling ‘join’’s field matching.
+* Header lines:: Working with header lines in files.
+* Set operations:: Union, Intersection and Difference of files.
+
+
+File: coreutils.info, Node: General options in join, Next: Sorting files for join, Up: join invocation
+
+8.3.1 General options
+---------------------
+
+The program accepts the following options. Also see *note Common
+options::.
+
+‘-a FILE-NUMBER’
+ Print a line for each unpairable line in file FILE-NUMBER (either
+ ‘1’ or ‘2’), in addition to the normal output.
+
+‘--check-order’
+ Fail with an error message if either input file is wrongly ordered.
+
+‘--nocheck-order’
+ Do not check that both input files are in sorted order. This is
+ the default.
+
+‘-e STRING’
+ Replace those output fields that are missing in the input with
+ STRING. I.e., missing fields specified with the ‘-12jo’ options.
+
+‘--header’
+ Treat the first line of each input file as a header line. The
+ header lines will be joined and printed as the first output line.
+ If ‘-o’ is used to specify output format, the header line will be
+ printed according to the specified format. The header lines will
+ not be checked for ordering even if ‘--check-order’ is specified.
+ Also if the header lines from each file do not match, the heading
+ fields from the first file will be used.
+
+‘-i’
+‘--ignore-case’
+ Ignore differences in case when comparing keys. With this option,
+ the lines of the input files must be ordered in the same way. Use
+ ‘sort -f’ to produce this ordering.
+
+‘-1 FIELD’
+ Join on field FIELD (a positive integer) of file 1.
+
+‘-2 FIELD’
+ Join on field FIELD (a positive integer) of file 2.
+
+‘-j FIELD’
+ Equivalent to ‘-1 FIELD -2 FIELD’.
+
+‘-o FIELD-LIST’
+‘-o auto’
+ If the keyword ‘auto’ is specified, infer the output format from
+ the first line in each file. This is the same as the default
+ output format but also ensures the same number of fields are output
+ for each line. Missing fields are replaced with the ‘-e’ option
+ and extra fields are discarded.
+
+ Otherwise, construct each output line according to the format in
+ FIELD-LIST. Each element in FIELD-LIST is either the single
+ character ‘0’ or has the form M.N where the file number, M, is ‘1’
+ or ‘2’ and N is a positive field number.
+
+ A field specification of ‘0’ denotes the join field. In most
+ cases, the functionality of the ‘0’ field spec may be reproduced
+ using the explicit M.N that corresponds to the join field.
+ However, when printing unpairable lines (using either of the ‘-a’
+ or ‘-v’ options), there is no way to specify the join field using
+ M.N in FIELD-LIST if there are unpairable lines in both files. To
+ give ‘join’ that functionality, POSIX invented the ‘0’ field
+ specification notation.
+
+ The elements in FIELD-LIST are separated by commas or blanks.
+ Blank separators typically need to be quoted for the shell. For
+ example, the commands ‘join -o 1.2,2.2’ and ‘join -o '1.2 2.2'’ are
+ equivalent.
+
+ All output lines – including those printed because of any ‘-a’ or
+ ‘-v’ option – are subject to the specified FIELD-LIST.
+
+‘-t CHAR’
+ Use character CHAR as the input and output field separator. Treat
+ as significant each occurrence of CHAR in the input file. Use
+ ‘sort -t CHAR’, without the ‘-b’ option of ‘sort’, to produce this
+ ordering. If ‘join -t ''’ is specified, the whole line is
+ considered, matching the default operation of sort. If ‘-t '\0'’
+ is specified then the ASCII NUL character is used to delimit the
+ fields.
+
+‘-v FILE-NUMBER’
+ Print a line for each unpairable line in file FILE-NUMBER (either
+ ‘1’ or ‘2’), instead of the normal output.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters). Note with
+ ‘-z’ the newline character is treated as a field separator.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ If the ‘--check-order’ option is given, unsorted inputs will cause a
+fatal error message. If the option ‘--nocheck-order’ is given, unsorted
+inputs will never cause an error message. If neither of these options
+is given, wrongly sorted inputs are diagnosed only if an input file is
+found to contain unpairable lines, and when both input files are non
+empty. If an input file is diagnosed as being unsorted, the ‘join’
+command will exit with a nonzero status (and the output should not be
+used).
+
+ Forcing ‘join’ to process wrongly sorted input files containing
+unpairable lines by specifying ‘--nocheck-order’ is not guaranteed to
+produce any particular output. The output will probably not correspond
+with whatever you hoped it would be.
+
+
+File: coreutils.info, Node: Sorting files for join, Next: Working with fields, Prev: General options in join, Up: join invocation
+
+8.3.2 Pre-sorting
+-----------------
+
+‘join’ requires sorted input files. Each input file should be sorted
+according to the key (=field/column number) used in ‘join’. The
+recommended sorting option is ‘sort -k 1b,1’ (assuming the desired key
+is in the first column).
+
+Typical usage:
+ $ sort -k 1b,1 file1 > file1.sorted
+ $ sort -k 1b,1 file2 > file2.sorted
+ $ join file1.sorted file2.sorted > file3
+
+ Normally, the sort order is that of the collating sequence specified
+by the ‘LC_COLLATE’ locale. Unless the ‘-t’ option is given, the sort
+comparison ignores blanks at the start of the join field, as in ‘sort
+-b’. If the ‘--ignore-case’ option is given, the sort comparison
+ignores the case of characters in the join field, as in ‘sort -f’:
+
+ $ sort -k 1bf,1 file1 > file1.sorted
+ $ sort -k 1bf,1 file2 > file2.sorted
+ $ join --ignore-case file1.sorted file2.sorted > file3
+
+ The ‘sort’ and ‘join’ commands should use consistent locales and
+options if the output of ‘sort’ is fed to ‘join’. You can use a command
+like ‘sort -k 1b,1’ to sort a file on its default join field, but if you
+select a non-default locale, join field, separator, or comparison
+options, then you should do so consistently between ‘join’ and ‘sort’.
+
+To avoid any locale-related issues, it is recommended to use the ‘C’
+locale for both commands:
+
+ $ LC_ALL=C sort -k 1b,1 file1 > file1.sorted
+ $ LC_ALL=C sort -k 1b,1 file2 > file2.sorted
+ $ LC_ALL=C join file1.sorted file2.sorted > file3
+
+
+File: coreutils.info, Node: Working with fields, Next: Paired and unpaired lines, Prev: Sorting files for join, Up: join invocation
+
+8.3.3 Working with fields
+-------------------------
+
+Use ‘-1’,‘-2’ to set the key fields for each of the input files. Ensure
+the preceding ‘sort’ commands operated on the same fields.
+
+The following example joins two files, using the values from seventh
+field of the first file and the third field of the second file:
+
+ $ sort -k 7b,7 file1 > file1.sorted
+ $ sort -k 3b,3 file2 > file2.sorted
+ $ join -1 7 -2 3 file1.sorted file2.sorted > file3
+
+If the field number is the same for both files, use ‘-j’:
+
+ $ sort -k4b,4 file1 > file1.sorted
+ $ sort -k4b,4 file2 > file2.sorted
+ $ join -j4 file1.sorted file2.sorted > file3
+
+Both ‘sort’ and ‘join’ operate of whitespace-delimited fields. To
+specify a different delimiter, use ‘-t’ in _both_:
+
+ $ sort -t, -k3b,3 file1 > file1.sorted
+ $ sort -t, -k3b,3 file2 > file2.sorted
+ $ join -t, -j3 file1.sorted file2.sorted > file3
+
+To specify a tab (ASCII 0x09) character instead of whitespace, use:(1)
+
+ $ sort -t$'\t' -k3b,3 file1 > file1.sorted
+ $ sort -t$'\t' -k3b,3 file2 > file2.sorted
+ $ join -t$'\t' -j3 file1.sorted file2.sorted > file3
+
+If ‘join -t ''’ is specified then the whole line is considered which
+matches the default operation of sort:
+
+ $ sort file1 > file1.sorted
+ $ sort file2 > file2.sorted
+ $ join -t '' file1.sorted file2.sorted > file3
+
+ ---------- Footnotes ----------
+
+ (1) the ‘$'\t'’ is supported in most modern shells. For older
+shells, use a literal tab.
+
+
+File: coreutils.info, Node: Paired and unpaired lines, Next: Header lines, Prev: Working with fields, Up: join invocation
+
+8.3.4 Controlling ‘join’’s field matching
+-----------------------------------------
+
+In this section the ‘sort’ commands are omitted for brevity. Sorting
+the files before joining is still required.
+
+ ‘join’’s default behavior is to print only lines common to both input
+files. Use ‘-a’ and ‘-v’ to print unpairable lines from one or both
+files.
+
+All examples below use the following two (pre-sorted) input files:
+
+ $ cat file1 $ cat file2
+ a 1 a A
+ b 2 c C
+
+Command Outcome
+
+--------------------------------------------------------------------------
+ $ join file1 file2 common lines (_intersection_)
+ a 1 A
+ $ join -a 1 file1 file2 common lines _and_ unpaired lines
+ a 1 A from the first file
+ b 2
+ $ join -a 2 file1 file2 common lines _and_ unpaired lines
+ a 1 A from the second file
+ c C
+ $ join -a 1 -a 2 file1 file2 all lines (paired and unpaired)
+ a 1 A from both files (_union_).
+ b 2 see note below regarding ‘-o
+ c C auto’.
+
+ $ join -v 1 file1 file2 unpaired lines from the first file
+ b 2 (_difference_)
+
+ $ join -v 2 file1 file2 unpaired lines from the second
+ c C file (_difference_)
+
+ $ join -v 1 -v 2 file1 file2 unpaired lines from both files,
+ b 2 omitting common lines (_symmetric
+ c C difference_).
+
+
+The ‘-o auto -e X’ options are useful when dealing with unpaired lines.
+The following example prints all lines (common and unpaired) from both
+files. Without ‘-o auto’ it is not easy to discern which fields
+originate from which file:
+
+ $ join -a 1 -a 2 file1 file2
+ a 1 A
+ b 2
+ c C
+
+ $ join -o auto -e X -a 1 -a 2 file1 file2
+ a 1 A
+ b 2 X
+ c X C
+
+ If the input has no unpairable lines, a GNU extension is available;
+the sort order can be any order that considers two fields to be equal if
+and only if the sort comparison described above considers them to be
+equal. For example:
+
+ $ cat file1
+ a a1
+ c c1
+ b b1
+
+ $ cat file2
+ a a2
+ c c2
+ b b2
+
+ $ join file1 file2
+ a a1 a2
+ c c1 c2
+ b b1 b2
+
+
+File: coreutils.info, Node: Header lines, Next: Set operations, Prev: Paired and unpaired lines, Up: join invocation
+
+8.3.5 Header lines
+------------------
+
+The ‘--header’ option can be used when the files to join have a header
+line which is not sorted:
+
+ $ cat file1
+ Name Age
+ Alice 25
+ Charlie 34
+
+ $ cat file2
+ Name Country
+ Alice France
+ Bob Spain
+
+ $ join --header -o auto -e NA -a1 -a2 file1 file2
+ Name Age Country
+ Alice 25 France
+ Bob NA Spain
+ Charlie 34 NA
+
+ To sort a file with a header line, use GNU ‘sed -u’. The following
+example sort the files but keeps the first line of each file in place:
+
+ $ ( sed -u 1q ; sort -k2b,2 ) < file1 > file1.sorted
+ $ ( sed -u 1q ; sort -k2b,2 ) < file2 > file2.sorted
+ $ join --header -o auto -e NA -a1 -a2 file1.sorted file2.sorted > file3
+
+
+File: coreutils.info, Node: Set operations, Prev: Header lines, Up: join invocation
+
+8.3.6 Union, Intersection and Difference of files
+-------------------------------------------------
+
+Combine ‘sort’, ‘uniq’ and ‘join’ to perform the equivalent of set
+operations on files:
+
+Command outcome
+--------------------------------------------------------------------------
+‘sort -u file1 file2’ Union of unsorted files
+
+‘sort file1 file2 | uniq -d’ Intersection of unsorted files
+
+‘sort file1 file1 file2 | uniq -u’ Difference of unsorted files
+
+‘sort file1 file2 | uniq -u’ Symmetric Difference of unsorted
+ files
+
+‘join -t '' -a1 -a2 file1 file2’ Union of sorted files
+
+‘join -t '' file1 file2’ Intersection of sorted files
+
+‘join -t '' -v2 file1 file2’ Difference of sorted files
+
+‘join -t '' -v1 -v2 file1 file2’ Symmetric Difference of sorted
+ files
+
+
+ All examples above operate on entire lines and not on specific
+fields: ‘sort’ without ‘-k’ and ‘join -t ''’ both consider entire lines
+as the key.
+
+
+File: coreutils.info, Node: Operating on characters, Next: Directory listing, Prev: Operating on fields, Up: Top
+
+9 Operating on characters
+*************************
+
+These commands operate on individual characters.
+
+* Menu:
+
+* tr invocation:: Translate, squeeze, and/or delete characters.
+* expand invocation:: Convert tabs to spaces.
+* unexpand invocation:: Convert spaces to tabs.
+
+
+File: coreutils.info, Node: tr invocation, Next: expand invocation, Up: Operating on characters
+
+9.1 ‘tr’: Translate, squeeze, and/or delete characters
+======================================================
+
+Synopsis:
+
+ tr [OPTION]... STRING1 [STRING2]
+
+ ‘tr’ copies standard input to standard output, performing one of the
+following operations:
+
+ • translate, and optionally squeeze repeated characters in the
+ result,
+ • squeeze repeated characters,
+ • delete characters,
+ • delete characters, then squeeze repeated characters from the
+ result.
+
+ The STRING1 and STRING2 operands define arrays of characters ARRAY1
+and ARRAY2. By default ARRAY1 lists input characters that ‘tr’ operates
+on, and ARRAY2 lists corresponding translations. In some cases the
+second operand is omitted.
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘-c’
+‘-C’
+‘--complement’
+ Instead of ARRAY1, use its complement (all characters not specified
+ by STRING1), in ascending order. Use this option with caution in
+ multibyte locales where its meaning is not always clear or
+ portable; see *note Character arrays::.
+
+‘-d’
+‘--delete’
+ Delete characters in ARRAY1; do not translate.
+
+‘-s’
+‘--squeeze-repeats’
+ Replace each sequence of a repeated character that is listed in the
+ last specified ARRAY, with a single occurrence of that character.
+
+‘-t’
+‘--truncate-set1’
+ Truncate ARRAY1 to the length of ARRAY2.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+* Menu:
+
+* Character arrays:: Specifying arrays of characters.
+* Translating:: Changing characters to other characters.
+* Squeezing and deleting:: Removing characters.
+
+
+File: coreutils.info, Node: Character arrays, Next: Translating, Up: tr invocation
+
+9.1.1 Specifying arrays of characters
+-------------------------------------
+
+The STRING1 and STRING2 operands are not regular expressions, even
+though they may look similar. Instead, they merely represent arrays of
+characters. As a GNU extension to POSIX, an empty string operand
+represents an empty array of characters.
+
+ The interpretation of STRING1 and STRING2 depends on locale. GNU
+‘tr’ fully supports only safe single-byte locales, where each possible
+input byte represents a single character. Unfortunately, this means GNU
+‘tr’ will not handle commands like ‘tr ö Ł’ the way you might expect,
+since (assuming a UTF-8 encoding) this is equivalent to ‘tr '\303\266'
+'\305\201'’ and GNU ‘tr’ will simply transliterate all ‘\303’ bytes to
+‘\305’ bytes, etc. POSIX does not clearly specify the behavior of ‘tr’
+in locales where characters are represented by byte sequences instead of
+by individual bytes, or where data might contain invalid bytes that are
+encoding errors. To avoid problems in this area, you can run ‘tr’ in a
+safe single-byte locale by using a shell command like ‘LC_ALL=C tr’
+instead of plain ‘tr’.
+
+ Although most characters simply represent themselves in STRING1 and
+STRING2, the strings can contain shorthands listed below, for
+convenience. Some shorthands can be used only in STRING1 or STRING2, as
+noted below.
+
+Backslash escapes
+
+ The following backslash escape sequences are recognized:
+
+ ‘\a’
+ Bell (BEL, Control-G).
+ ‘\b’
+ Backspace (BS, Control-H).
+ ‘\f’
+ Form feed (FF, Control-L).
+ ‘\n’
+ Newline (LF, Control-J).
+ ‘\r’
+ Carriage return (CR, Control-M).
+ ‘\t’
+ Tab (HT, Control-I).
+ ‘\v’
+ Vertical tab (VT, Control-K).
+ ‘\OOO’
+ The eight-bit byte with the value given by OOO, which is the
+ longest sequence of one to three octal digits following the
+ backslash. For portability, OOO should represent a value that
+ fits in eight bits. As a GNU extension to POSIX, if the value
+ would not fit, then only the first two digits of OOO are used,
+ e.g., ‘\400’ is equivalent to ‘\0400’ and represents a
+ two-byte sequence.
+ ‘\\’
+ A backslash.
+
+ It is an error if no character follows an unescaped backslash. As
+ a GNU extension, a backslash followed by a character not listed
+ above is interpreted as that character, removing any special
+ significance; this can be used to escape the characters ‘[’ and ‘-’
+ when they would otherwise be special.
+
+Ranges
+
+ The notation ‘M-N’ expands to the characters from M through N, in
+ ascending order. M should not collate after N; if it does, an
+ error results. As an example, ‘0-9’ is the same as ‘0123456789’.
+
+ GNU ‘tr’ does not support the System V syntax that uses square
+ brackets to enclose ranges. Translations specified in that format
+ sometimes work as expected, since the brackets are often
+ transliterated to themselves. However, they should be avoided
+ because they sometimes behave unexpectedly. For example, ‘tr -d
+ '[0-9]'’ deletes brackets as well as digits.
+
+ Many historically common and even accepted uses of ranges are not
+ fully portable. For example, on EBCDIC hosts using the ‘A-Z’ range
+ will not do what most would expect because ‘A’ through ‘Z’ are not
+ contiguous as they are in ASCII. One way to work around this is to
+ use character classes (see below). Otherwise, it is most portable
+ (and most ugly) to enumerate the members of the ranges.
+
+Repeated characters
+
+ The notation ‘[C*N]’ in STRING2 expands to N copies of character C.
+ Thus, ‘[y*6]’ is the same as ‘yyyyyy’. The notation ‘[C*]’ in
+ STRING2 expands to as many copies of C as are needed to make ARRAY2
+ as long as ARRAY1. If N begins with ‘0’, it is interpreted in
+ octal, otherwise in decimal. A zero-valued N is treated as if it
+ were absent.
+
+Character classes
+
+ The notation ‘[:CLASS:]’ expands to all characters in the
+ (predefined) class CLASS. When the ‘--delete’ (‘-d’) and
+ ‘--squeeze-repeats’ (‘-s’) options are both given, any character
+ class can be used in STRING2. Otherwise, only the character
+ classes ‘lower’ and ‘upper’ are accepted in STRING2, and then only
+ if the corresponding character class (‘upper’ and ‘lower’,
+ respectively) is specified in the same relative position in
+ STRING1. Doing this specifies case conversion. Except for case
+ conversion, a class’s characters appear in no particular order.
+ The class names are given below; an error results when an invalid
+ class name is given.
+
+ ‘alnum’
+ Letters and digits.
+ ‘alpha’
+ Letters.
+ ‘blank’
+ Horizontal whitespace.
+ ‘cntrl’
+ Control characters.
+ ‘digit’
+ Digits.
+ ‘graph’
+ Printable characters, not including space.
+ ‘lower’
+ Lowercase letters.
+ ‘print’
+ Printable characters, including space.
+ ‘punct’
+ Punctuation characters.
+ ‘space’
+ Horizontal or vertical whitespace.
+ ‘upper’
+ Uppercase letters.
+ ‘xdigit’
+ Hexadecimal digits.
+
+Equivalence classes
+
+ The syntax ‘[=C=]’ expands to all characters equivalent to C, in no
+ particular order. These equivalence classes are allowed in STRING2
+ only when ‘--delete’ (‘-d’) and ‘--squeeze-repeats’ ‘-s’ are both
+ given.
+
+ Although equivalence classes are intended to support non-English
+ alphabets, there seems to be no standard way to define them or
+ determine their contents. Therefore, they are not fully
+ implemented in GNU ‘tr’; each character’s equivalence class
+ consists only of that character, which is of no particular use.
+
+
+File: coreutils.info, Node: Translating, Next: Squeezing and deleting, Prev: Character arrays, Up: tr invocation
+
+9.1.2 Translating
+-----------------
+
+‘tr’ performs translation when STRING1 and STRING2 are both given and
+the ‘--delete’ (‘-d’) option is not given. ‘tr’ translates each
+character of its input that is in ARRAY1 to the corresponding character
+in ARRAY2. Characters not in ARRAY1 are passed through unchanged.
+
+ As a GNU extension to POSIX, when a character appears more than once
+in ARRAY1, only the final instance is used. For example, these two
+commands are equivalent:
+
+ tr aaa xyz
+ tr a z
+
+ A common use of ‘tr’ is to convert lowercase characters to uppercase.
+This can be done in many ways. Here are three of them:
+
+ tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ tr a-z A-Z
+ tr '[:lower:]' '[:upper:]'
+
+However, ranges like ‘a-z’ are not portable outside the C locale.
+
+ When ‘tr’ is performing translation, ARRAY1 and ARRAY2 typically have
+the same length. If ARRAY1 is shorter than ARRAY2, the extra characters
+at the end of ARRAY2 are ignored.
+
+ On the other hand, making ARRAY1 longer than ARRAY2 is not portable;
+POSIX says that the result is undefined. In this situation, BSD ‘tr’
+pads ARRAY2 to the length of ARRAY1 by repeating the last character of
+ARRAY2 as many times as necessary. System V ‘tr’ truncates ARRAY1 to
+the length of ARRAY2.
+
+ By default, GNU ‘tr’ handles this case like BSD ‘tr’. When the
+‘--truncate-set1’ (‘-t’) option is given, GNU ‘tr’ handles this case
+like the System V ‘tr’ instead. This option is ignored for operations
+other than translation.
+
+ Acting like System V ‘tr’ in this case breaks the relatively common
+BSD idiom:
+
+ tr -cs A-Za-z0-9 '\012'
+
+because it converts only zero bytes (the first element in the complement
+of ARRAY1), rather than all non-alphanumerics, to newlines.
+
+By the way, the above idiom is not portable because it uses ranges, and
+it assumes that the octal code for newline is 012. Here is a better way
+to write it:
+
+ tr -cs '[:alnum:]' '[\n*]'
+
+
+File: coreutils.info, Node: Squeezing and deleting, Prev: Translating, Up: tr invocation
+
+9.1.3 Squeezing repeats and deleting
+------------------------------------
+
+When given just the ‘--delete’ (‘-d’) option, ‘tr’ removes any input
+characters that are in ARRAY1.
+
+ When given just the ‘--squeeze-repeats’ (‘-s’) option and not
+translating, ‘tr’ replaces each input sequence of a repeated character
+that is in ARRAY1 with a single occurrence of that character.
+
+ When given both ‘--delete’ and ‘--squeeze-repeats’, ‘tr’ first
+performs any deletions using ARRAY1, then squeezes repeats from any
+remaining characters using ARRAY2.
+
+ The ‘--squeeze-repeats’ option may also be used when translating, in
+which case ‘tr’ first performs translation, then squeezes repeats from
+any remaining characters using ARRAY2.
+
+ Here are some examples to illustrate various combinations of options:
+
+ • Remove all zero bytes:
+
+ tr -d '\0'
+
+ • Put all words on lines by themselves. This converts all
+ non-alphanumeric characters to newlines, then squeezes each string
+ of repeated newlines into a single newline:
+
+ tr -cs '[:alnum:]' '[\n*]'
+
+ • Convert each sequence of repeated newlines to a single newline.
+ I.e., delete empty lines:
+
+ tr -s '\n'
+
+ • Find doubled occurrences of words in a document. For example,
+ people often write “the the” with the repeated words separated by a
+ newline. The Bourne shell script below works first by converting
+ each sequence of punctuation and blank characters to a single
+ newline. That puts each “word” on a line by itself. Next it maps
+ all uppercase characters to lower case, and finally it runs ‘uniq’
+ with the ‘-d’ option to print out only the words that were
+ repeated.
+
+ #!/bin/sh
+ cat -- "$@" \
+ | tr -s '[:punct:][:blank:]' '[\n*]' \
+ | tr '[:upper:]' '[:lower:]' \
+ | uniq -d
+
+ • Deleting a small set of characters is usually straightforward. For
+ example, to remove all ‘a’s, ‘x’s, and ‘M’s you would do this:
+
+ tr -d axM
+
+ However, when ‘-’ is one of those characters, it can be tricky
+ because ‘-’ has special meanings. Performing the same task as
+ above but also removing all ‘-’ characters, we might try ‘tr -d
+ -axM’, but that would fail because ‘tr’ would try to interpret ‘-a’
+ as a command-line option. Alternatively, we could try putting the
+ hyphen inside the string, ‘tr -d a-xM’, but that wouldn’t work
+ either because it would make ‘tr’ interpret ‘a-x’ as the range of
+ characters ‘a’...‘x’ rather than the three. One way to solve the
+ problem is to put the hyphen at the end of the list of characters:
+
+ tr -d axM-
+
+ Or you can use ‘--’ to terminate option processing:
+
+ tr -d -- -axM
+
+
+File: coreutils.info, Node: expand invocation, Next: unexpand invocation, Prev: tr invocation, Up: Operating on characters
+
+9.2 ‘expand’: Convert tabs to spaces
+====================================
+
+‘expand’ writes the contents of each given FILE, or standard input if
+none are given or for a FILE of ‘-’, to standard output, with tab
+characters converted to the appropriate number of spaces. Synopsis:
+
+ expand [OPTION]... [FILE]...
+
+ By default, ‘expand’ converts all tabs to spaces. It preserves
+backspace characters in the output; they decrement the column count for
+tab calculations. The default action is equivalent to ‘-t 8’ (set tabs
+every 8 columns).
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-t TAB1[,TAB2]...’
+‘--tabs=TAB1[,TAB2]...’
+ If only one tab stop is given, set the tabs TAB1 spaces apart
+ (default is 8). Otherwise, set the tabs at columns TAB1, TAB2, ...
+ (numbered from 0), and replace any tabs beyond the last tab stop
+ given with single spaces. Tab stops can be separated by blanks as
+ well as by commas.
+
+ As a GNU extension the last TAB specified can be prefixed with a
+ ‘/’ to indicate a tab size to use for remaining positions. For
+ example, ‘--tabs=2,4,/8’ will set tab stops at position 2 and 4,
+ and every multiple of 8 after that.
+
+ Also the last TAB specified can be prefixed with a ‘+’ to indicate
+ a tab size to use for remaining positions, offset from the final
+ explicitly specified tab stop. For example, to ignore the 1
+ character gutter present in diff output, one can specify a 1
+ character offset using ‘--tabs=1,+8’, which will set tab stops at
+ positions 1,9,17,...
+
+ For compatibility, GNU ‘expand’ also accepts the obsolete option
+ syntax, ‘-T1[,T2]...’. New scripts should use ‘-t T1[,T2]...’
+ instead.
+
+‘-i’
+‘--initial’
+ Only convert initial tabs (those that precede all non-space or
+ non-tab characters) on each line to spaces.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: unexpand invocation, Prev: expand invocation, Up: Operating on characters
+
+9.3 ‘unexpand’: Convert spaces to tabs
+======================================
+
+‘unexpand’ writes the contents of each given FILE, or standard input if
+none are given or for a FILE of ‘-’, to standard output, converting
+blanks at the beginning of each line into as many tab characters as
+needed. In the default POSIX locale, a “blank” is a space or a tab;
+other locales may specify additional blank characters. Synopsis:
+
+ unexpand [OPTION]... [FILE]...
+
+ By default, ‘unexpand’ converts only initial blanks (those that
+precede all non-blank characters) on each line. It preserves backspace
+characters in the output; they decrement the column count for tab
+calculations. By default, tabs are set at every 8th column.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-t TAB1[,TAB2]...’
+‘--tabs=TAB1[,TAB2]...’
+ If only one tab stop is given, set the tabs TAB1 columns apart
+ instead of the default 8. Otherwise, set the tabs at columns TAB1,
+ TAB2, ... (numbered from 0), and leave blanks beyond the tab stops
+ given unchanged. Tab stops can be separated by blanks as well as
+ by commas.
+
+ As a GNU extension the last TAB specified can be prefixed with a
+ ‘/’ to indicate a tab size to use for remaining positions. For
+ example, ‘--tabs=2,4,/8’ will set tab stops at position 2 and 4,
+ and every multiple of 8 after that.
+
+ Also the last TAB specified can be prefixed with a ‘+’ to indicate
+ a tab size to use for remaining positions, offset from the final
+ explicitly specified tab stop. For example, to ignore the 1
+ character gutter present in diff output, one can specify a 1
+ character offset using ‘--tabs=1,+8’, which will set tab stops at
+ positions 1,9,17,...
+
+ This option implies the ‘-a’ option.
+
+ For compatibility, GNU ‘unexpand’ supports the obsolete option
+ syntax, ‘-TAB1[,TAB2]...’, where tab stops must be separated by
+ commas. (Unlike ‘-t’, this obsolete option does not imply ‘-a’.)
+ New scripts should use ‘--first-only -t TAB1[,TAB2]...’ instead.
+
+‘-a’
+‘--all’
+ Also convert all sequences of two or more blanks just before a tab
+ stop, even if they occur after non-blank characters in a line.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Directory listing, Next: Basic operations, Prev: Operating on characters, Up: Top
+
+10 Directory listing
+********************
+
+This chapter describes the ‘ls’ command and its variants ‘dir’ and
+‘vdir’, which list information about files.
+
+* Menu:
+
+* ls invocation:: List directory contents.
+* dir invocation:: Briefly ls.
+* vdir invocation:: Verbosely ls.
+* dircolors invocation:: Color setup for ls, etc.
+
+
+File: coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory listing
+
+10.1 ‘ls’: List directory contents
+==================================
+
+The ‘ls’ program lists information about files (of any type, including
+directories). Options and file arguments can be intermixed arbitrarily,
+as usual. Later options override earlier options that are incompatible.
+
+ For non-option command-line arguments that are directories, by
+default ‘ls’ lists the contents of directories, not recursively, and
+omitting files with names beginning with ‘.’. For other non-option
+arguments, by default ‘ls’ lists just the file name. If no non-option
+argument is specified, ‘ls’ operates on the current directory, acting as
+if it had been invoked with a single argument of ‘.’.
+
+ By default, the output is sorted alphabetically, according to the
+locale settings in effect.(1) If standard output is a terminal, the
+output is in columns (sorted vertically) and control characters are
+output as question marks; otherwise, the output is listed one per line
+and control characters are output as-is.
+
+ Because ‘ls’ is such a fundamental program, it has accumulated many
+options over the years. They are described in the subsections below;
+within each section, options are listed alphabetically (ignoring case).
+The division of options into the subsections is not absolute, since some
+options affect more than one aspect of ‘ls’’s operation.
+
+ Exit status:
+
+ 0 success
+ 1 minor problems (e.g., failure to access a file or directory not
+ specified as a command line argument. This happens when listing a
+ directory in which entries are actively being removed or renamed.)
+ 2 serious trouble (e.g., memory exhausted, invalid option, failure
+ to access a file or directory specified as a command line argument
+ or a directory loop)
+
+ Also see *note Common options::.
+
+* Menu:
+
+* Which files are listed::
+* What information is listed::
+* Sorting the output::
+* General output formatting::
+* Formatting file timestamps::
+* Formatting the file names::
+
+ ---------- Footnotes ----------
+
+ (1) If you use a non-POSIX locale (e.g., by setting ‘LC_ALL’ to
+‘en_US’), then ‘ls’ may produce output that is sorted differently than
+you’re accustomed to. In that case, set the ‘LC_ALL’ environment
+variable to ‘C’.
+
+
+File: coreutils.info, Node: Which files are listed, Next: What information is listed, Up: ls invocation
+
+10.1.1 Which files are listed
+-----------------------------
+
+These options determine which files ‘ls’ lists information for. By
+default, ‘ls’ lists files and the contents of any directories on the
+command line, except that in directories it ignores files whose names
+start with ‘.’.
+
+‘-a’
+‘--all’
+ In directories, do not ignore file names that start with ‘.’.
+
+‘-A’
+‘--almost-all’
+ In directories, do not ignore all file names that start with ‘.’;
+ ignore only ‘.’ and ‘..’. The ‘--all’ (‘-a’) option overrides this
+ option.
+
+‘-B’
+‘--ignore-backups’
+ In directories, ignore files that end with ‘~’. This option is
+ equivalent to ‘--ignore='*~' --ignore='.*~'’.
+
+‘-d’
+‘--directory’
+ List just the names of directories, as with other types of files,
+ rather than listing their contents. Do not follow symbolic links
+ listed on the command line unless the ‘--dereference-command-line’
+ (‘-H’), ‘--dereference’ (‘-L’), or
+ ‘--dereference-command-line-symlink-to-dir’ options are specified.
+
+‘-H’
+‘--dereference-command-line’
+ If a command line argument specifies a symbolic link, show
+ information for the file the link references rather than for the
+ link itself.
+
+‘--dereference-command-line-symlink-to-dir’
+ Do not dereference symbolic links, with one exception: if a command
+ line argument specifies a symbolic link that refers to a directory,
+ show information for that directory rather than for the link
+ itself. This is the default behavior unless long format is being
+ used or any of the following options is in effect: ‘--classify’
+ (‘-F’), ‘--directory’ (‘-d’), ‘--dereference’ (‘-L’), or
+ ‘--dereference-command-line’ (‘-H’)).
+
+‘--group-directories-first’
+ Group all the directories before the files and then sort the
+ directories and the files separately using the selected sort key
+ (see ‘--sort’ option). That is, this option specifies a primary
+ sort key, and the ‘--sort’ option specifies a secondary key.
+ However, any use of ‘--sort=none’ (‘-U’) disables this option
+ altogether.
+
+‘--hide=PATTERN’
+ In directories, ignore files whose names match the shell pattern
+ PATTERN, unless the ‘--all’ (‘-a’) or ‘--almost-all’ (‘-A’) is also
+ given. This option acts like ‘--ignore=PATTERN’ except that it has
+ no effect if ‘--all’ (‘-a’) or ‘--almost-all’ (‘-A’) is also given.
+
+ This option can be useful in shell aliases. For example, if ‘lx’
+ is an alias for ‘ls --hide='*~'’ and ‘ly’ is an alias for ‘ls
+ --ignore='*~'’, then the command ‘lx -A’ lists the file ‘README~’
+ even though ‘ly -A’ would not.
+
+‘-I PATTERN’
+‘--ignore=PATTERN’
+ In directories, ignore files whose names match the shell pattern
+ (not regular expression) PATTERN. As in the shell, an initial ‘.’
+ in a file name does not match a wildcard at the start of PATTERN.
+ Sometimes it is useful to give this option several times. For
+ example,
+
+ $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
+
+ The first option ignores names of length 3 or more that start with
+ ‘.’, the second ignores all two-character names that start with ‘.’
+ except ‘..’, and the third ignores names that start with ‘#’.
+
+‘-L’
+‘--dereference’
+ When showing file information for a symbolic link, show information
+ for the file the link references rather than the link itself.
+ However, even with this option, ‘ls’ still prints the name of the
+ link itself, not the name of the file that the link points to.
+
+‘-R’
+‘--recursive’
+ List the contents of all directories recursively.
+
+
+File: coreutils.info, Node: What information is listed, Next: Sorting the output, Prev: Which files are listed, Up: ls invocation
+
+10.1.2 What information is listed
+---------------------------------
+
+These options affect the information that ‘ls’ displays. By default,
+only file names are shown.
+
+‘--author’
+ In long format, list each file’s author. In GNU/Hurd, file authors
+ can differ from their owners, but in other operating systems the
+ two are the same.
+
+‘-D’
+‘--dired’
+ Print an additional line after the main output:
+
+ //DIRED// BEG1 END1 BEG2 END2 ...
+
+ The BEGN and ENDN are unsigned integers that record the byte
+ position of the beginning and end of each file name in the output.
+ This makes it easy for Emacs to find the names, even when they
+ contain unusual characters such as space or newline, without fancy
+ searching.
+
+ If directories are being listed recursively via ‘--recursive’
+ (‘-R’), output a similar line with offsets for each subdirectory
+ name:
+
+ //SUBDIRED// BEG1 END1 ...
+
+ Finally, output a line of the form:
+
+ //DIRED-OPTIONS// --quoting-style=WORD
+
+ where WORD is the quoting style (*note Formatting the file
+ names::).
+
+ Here is an actual example:
+
+ $ mkdir -p a/sub/deeper a/sub2
+ $ touch a/f1 a/f2
+ $ touch a/sub/deeper/file
+ $ ls -gloRF --dired a
+ a:
+ total 8
+ -rw-r--r-- 1 0 Jun 10 12:27 f1
+ -rw-r--r-- 1 0 Jun 10 12:27 f2
+ drwxr-xr-x 3 4096 Jun 10 12:27 sub/
+ drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
+
+ a/sub:
+ total 4
+ drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
+
+ a/sub/deeper:
+ total 0
+ -rw-r--r-- 1 0 Jun 10 12:27 file
+
+ a/sub2:
+ total 0
+ //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
+ //SUBDIRED// 2 3 167 172 228 240 290 296
+ //DIRED-OPTIONS// --quoting-style=literal
+
+ The pairs of offsets on the ‘//DIRED//’ line above delimit these
+ names: ‘f1’, ‘f2’, ‘sub’, ‘sub2’, ‘deeper’, ‘file’. The offsets on
+ the ‘//SUBDIRED//’ line delimit the following directory names: ‘a’,
+ ‘a/sub’, ‘a/sub/deeper’, ‘a/sub2’.
+
+ Here is an example of how to extract the fifth entry name,
+ ‘deeper’, corresponding to the pair of offsets, 222 and 228:
+
+ $ ls -gloRF --dired a > out
+ $ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo
+ deeper
+
+ Although the listing above includes a trailing slash for the
+ ‘deeper’ entry, the offsets select the name without the trailing
+ slash. However, if you invoke ‘ls’ with ‘--dired’ (‘-D’) along
+ with an option like ‘--escape’ (‘-b’) and operate on a file whose
+ name contains special characters, the backslash _is_ included:
+
+ $ touch 'a b'
+ $ ls -blog --dired 'a b'
+ -rw-r--r-- 1 0 Jun 10 12:28 a\ b
+ //DIRED// 30 34
+ //DIRED-OPTIONS// --quoting-style=escape
+
+ If you use a quoting style like ‘--quoting-style=c’ (‘-Q’) that
+ adds quote marks, then the offsets include the quote marks. So
+ beware that the user may select the quoting style via the
+ environment variable ‘QUOTING_STYLE’. Hence, applications using
+ ‘--dired’ should either specify an explicit
+ ‘--quoting-style=literal’ (‘-N’) option on the command line, or
+ else be prepared to parse the escaped names.
+
+ The ‘--dired’ (‘-D’) option has well-defined behavior only when
+ long format is in effect and hyperlinks are disabled (e.g.,
+ ‘--hyperlink=none’).
+
+‘--full-time’
+ Produce long format, and list times in full. It is equivalent to
+ using ‘--format=long’ (‘-l’) with ‘--time-style=full-iso’ (*note
+ Formatting file timestamps::).
+
+‘-g’
+ Produce long format, but omit owner information.
+
+‘-G’
+‘--no-group’
+ Inhibit display of group information in long format. (This is the
+ default in some non-GNU versions of ‘ls’, so we provide this option
+ for compatibility.)
+
+‘-h’
+‘--human-readable’
+ Append a size letter to each size, such as ‘M’ for mebibytes.
+ Powers of 1024 are used, not 1000; ‘M’ stands for 1,048,576 bytes.
+ This option is equivalent to ‘--block-size=human-readable’. Use
+ the ‘--si’ option if you prefer powers of 1000.
+
+‘-i’
+‘--inode’
+ Print the inode number (also called the file serial number and
+ index number) of each file to the left of the file name. (This
+ number uniquely identifies each file within a particular file
+ system.)
+
+‘-l’
+‘--format=long’
+‘--format=verbose’
+ Produce long format. In addition to the name of each file, print
+ the file type, file mode bits, number of hard links, owner name,
+ group name, size, and timestamp (*note Formatting file
+ timestamps::), normally the modification timestamp (the mtime,
+ *note File timestamps::). If the owner or group name cannot be
+ determined, print the owner or group ID instead, right-justified as
+ a cue that it is a number rather than a textual name. Print
+ question marks for other information that cannot be determined.
+
+ Normally the size is printed as a byte count without punctuation,
+ but this can be overridden (*note Block size::). For example,
+ ‘--human-readable’ (‘-h’) prints an abbreviated, human-readable
+ count, and ‘--block-size="'1"’ prints a byte count with the
+ thousands separator of the current locale.
+
+ For each directory that is listed, preface the files with a line
+ ‘total BLOCKS’, where BLOCKS is the file system allocation for all
+ files in that directory. The block size currently defaults to 1024
+ bytes, but this can be overridden (*note Block size::). The BLOCKS
+ computed counts each hard link separately; this is arguably a
+ deficiency.
+
+ The file type is one of the following characters:
+
+ ‘-’
+ regular file
+ ‘b’
+ block special file
+ ‘c’
+ character special file
+ ‘C’
+ high performance (“contiguous data”) file
+ ‘d’
+ directory
+ ‘D’
+ door (Solaris)
+ ‘l’
+ symbolic link
+ ‘M’
+ off-line (“migrated”) file (Cray DMF)
+ ‘n’
+ network special file (HP-UX)
+ ‘p’
+ FIFO (named pipe)
+ ‘P’
+ port (Solaris)
+ ‘s’
+ socket
+ ‘?’
+ some other file type
+
+ The file mode bits listed are similar to symbolic mode
+ specifications (*note Symbolic Modes::). But ‘ls’ combines
+ multiple bits into the third character of each set of permissions
+ as follows:
+
+ ‘s’
+ If the set-user-ID or set-group-ID bit and the corresponding
+ executable bit are both set.
+
+ ‘S’
+ If the set-user-ID or set-group-ID bit is set but the
+ corresponding executable bit is not set.
+
+ ‘t’
+ If the restricted deletion flag or sticky bit, and the
+ other-executable bit, are both set. The restricted deletion
+ flag is another name for the sticky bit. *Note Mode
+ Structure::.
+
+ ‘T’
+ If the restricted deletion flag or sticky bit is set but the
+ other-executable bit is not set.
+
+ ‘x’
+ If the executable bit is set and none of the above apply.
+
+ ‘-’
+ Otherwise.
+
+ Following the file mode bits is a single character that specifies
+ whether an alternate access method such as an access control list
+ applies to the file. When the character following the file mode
+ bits is a space, there is no alternate access method. When it is a
+ printing character, then there is such a method.
+
+ GNU ‘ls’ uses a ‘.’ character to indicate a file with a security
+ context, but no other alternate access method.
+
+ A file with any other combination of alternate access methods is
+ marked with a ‘+’ character.
+
+‘-n’
+‘--numeric-uid-gid’
+ Produce long format, but display right-justified numeric user and
+ group IDs instead of left-justified owner and group names.
+
+‘-o’
+ Produce long format, but omit group information. It is equivalent
+ to using ‘--format=long’ (‘-l’) with ‘--no-group’ (‘-G’).
+
+‘-s’
+‘--size’
+ Print the file system allocation of each file to the left of the
+ file name. This is the amount of file system space used by the
+ file, which is usually a bit more than the file’s size, but it can
+ be less if the file has holes.
+
+ Normally the allocation is printed in units of 1024 bytes, but this
+ can be overridden (*note Block size::).
+
+ For files that are NFS-mounted from an HP-UX system to a BSD
+ system, this option reports sizes that are half the correct values.
+ On HP-UX systems, it reports sizes that are twice the correct
+ values for files that are NFS-mounted from BSD systems. This is
+ due to a flaw in HP-UX; it also affects the HP-UX ‘ls’ program.
+
+‘--si’
+ Append an SI-style abbreviation to each size, such as ‘M’ for
+ megabytes. Powers of 1000 are used, not 1024; ‘M’ stands for
+ 1,000,000 bytes. This option is equivalent to ‘--block-size=si’.
+ Use the ‘-h’ or ‘--human-readable’ option if you prefer powers of
+ 1024.
+
+‘-Z’
+‘--context’
+ Display the SELinux security context or ‘?’ if none is found. In
+ long format, print the security context to the left of the size
+ column.
+
+
+File: coreutils.info, Node: Sorting the output, Next: General output formatting, Prev: What information is listed, Up: ls invocation
+
+10.1.3 Sorting the output
+-------------------------
+
+These options change the order in which ‘ls’ sorts the information it
+outputs. By default, sorting is done by character code (e.g., ASCII
+order).
+
+‘-c’
+‘--time=ctime’
+‘--time=status’
+ In long format, print the status change timestamp (the ctime)
+ instead of the mtime. When sorting by time or when not using long
+ format, sort according to the ctime. *Note File timestamps::.
+
+‘-f’
+ Produce an unsorted directory listing. This is equivalent to the
+ combination of ‘--all’ (‘-a’), ‘--sort=none’ (‘-U’), ‘-1’,
+ ‘--color=none’, and ‘--hyperlink=none’, while also disabling any
+ previous use of ‘--size’ (‘-s’).
+
+‘-r’
+‘--reverse’
+ Reverse whatever the sorting method is – e.g., list files in
+ reverse alphabetical order, youngest first, smallest first, or
+ whatever. This option has no effect when ‘--sort=none’ (‘-U’) is
+ in effect.
+
+‘-S’
+‘--sort=size’
+ Sort by file size, largest first.
+
+‘-t’
+‘--sort=time’
+ Sort by modification timestamp (mtime) by default, newest first.
+ The timestamp to order by can be changed with the ‘--time’ option.
+ *Note File timestamps::.
+
+‘-u’
+‘--time=atime’
+‘--time=access’
+‘--time=use’
+ In long format, print the last access timestamp (the atime). When
+ sorting by time or when not using long format, sort according to
+ the atime. *Note File timestamps::.
+
+‘--time=mtime’
+‘--time=modification’
+ This is the default timestamp display and sorting mode. In long
+ format, print the last data modification timestamp (the mtime).
+ When sorting by time or when not using long format, sort according
+ to the mtime. *Note File timestamps::.
+
+‘--time=birth’
+‘--time=creation’
+ In long format, print the file creation timestamp if available,
+ falling back to the file modification timestamp (mtime) if not.
+ When sorting by time or when not using long format, sort according
+ to the birth time. *Note File timestamps::.
+
+‘-U’
+‘--sort=none’
+ Do not sort; list the files in whatever order they are stored in
+ the directory. (Do not do any of the other unrelated things that
+ ‘-f’ does.) This can be useful when listing large directories,
+ where sorting can take some time.
+
+‘-v’
+‘--sort=version’
+ Sort by version name and number, lowest first. It behaves like a
+ default sort, except that each sequence of decimal digits is
+ treated numerically as an index/version number. *Note Version sort
+ ordering::.
+
+‘--sort=width’
+ Sort by printed width of file names. This can be useful with the
+ ‘--format=vertical’ (‘-C’) output format, to most densely display
+ the listed files.
+
+‘-X’
+‘--sort=extension’
+ Sort directory contents alphabetically by file extension
+ (characters after the last ‘.’); files with no extension are sorted
+ first.
+
+
+File: coreutils.info, Node: General output formatting, Next: Formatting file timestamps, Prev: Sorting the output, Up: ls invocation
+
+10.1.4 General output formatting
+--------------------------------
+
+These options affect the appearance of the overall output.
+
+‘--format=single-column’
+ List one file name per line, with no other information. This is
+ the default for ‘ls’ when standard output is not a terminal. See
+ also the ‘--escape’ (‘-b’), ‘--hide-control-chars’ (‘-q’), and
+ ‘--zero’ options to disambiguate output of file names containing
+ newline characters.
+
+‘-1’
+ List one file per line. This is like ‘--format=single-column’
+ except that it has no effect if long format is also in effect.
+
+‘-C’
+‘--format=vertical’
+ List files in columns, sorted vertically, with no other
+ information. This is the default for ‘ls’ if standard output is a
+ terminal. It is always the default for the ‘dir’ program. GNU
+ ‘ls’ uses variable width columns to display as many files as
+ possible in the fewest lines.
+
+‘--color [=WHEN]’
+ Specify whether to use color for distinguishing file types; WHEN
+ may be omitted, or one of:
+ • none - Do not use color at all. This is the default.
+ • auto - Only use color if standard output is a terminal.
+ • always - Always use color.
+ Specifying ‘--color’ and no WHEN is equivalent to ‘--color=always’.
+ If piping a colored listing through a pager like ‘less’, use the
+ pager’s ‘-R’ option to pass the color codes to the terminal.
+
+ Using the ‘--color’ option may incur a noticeable performance
+ penalty when run in a large directory, because the default settings
+ require that ‘ls’ ‘stat’ every single file it lists. However, if
+ you would like most of the file-type coloring but can live without
+ the other coloring options (e.g., executable, orphan, sticky,
+ other-writable, capability), use ‘dircolors’ to set the ‘LS_COLORS’
+ environment variable like this,
+ eval $(dircolors -p | perl -pe \
+ 's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
+ and on a ‘dirent.d_type’-capable file system, ‘ls’ will perform
+ only one ‘stat’ call per command line argument.
+
+‘-F’
+‘--classify [=WHEN]’
+‘--indicator-style=classify’
+ Append a character to each file name indicating the file type.
+ Also, for regular files that are executable, append ‘*’. The file
+ type indicators are ‘/’ for directories, ‘@’ for symbolic links,
+ ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for
+ regular files. WHEN may be omitted, or one of:
+ • none - Do not classify. This is the default.
+ • auto - Only classify if standard output is a terminal.
+ • always - Always classify.
+ Specifying ‘--classify’ and no WHEN is equivalent to
+ ‘--classify=always’. Do not follow symbolic links listed on the
+ command line unless the ‘--dereference-command-line’ (‘-H’),
+ ‘--dereference’ (‘-L’), or
+ ‘--dereference-command-line-symlink-to-dir’ options are specified.
+
+‘--file-type’
+‘--indicator-style=file-type’
+ Append a character to each file name indicating the file type.
+ This is like ‘--classify’ (‘-F’, except that executables are not
+ marked.
+
+‘--hyperlink [=WHEN]’
+ Output codes recognized by some terminals to link to files using
+ the ‘file://’ URI format. WHEN may be omitted, or one of:
+ • none - Do not use hyperlinks at all. This is the default.
+ • auto - Only use hyperlinks if standard output is a terminal.
+ • always - Always use hyperlinks.
+ Specifying ‘--hyperlink’ and no WHEN is equivalent to
+ ‘--hyperlink=always’.
+
+‘--indicator-style=WORD’
+ Append a character indicator with style WORD to entry names, as
+ follows:
+
+ ‘none’
+ Do not append any character indicator; this is the default.
+ ‘slash’
+ Append ‘/’ for directories. This is the same as the ‘-p’
+ option.
+ ‘file-type’
+ Append ‘/’ for directories, ‘@’ for symbolic links, ‘|’ for
+ FIFOs, ‘=’ for sockets, and nothing for regular files. This
+ is the same as the ‘--file-type’ option.
+ ‘classify’
+ Append ‘*’ for executable regular files, otherwise behave as
+ for ‘file-type’. This is the same as the ‘--classify’ (‘-F’)
+ option.
+
+‘-k’
+‘--kibibytes’
+ Set the default block size to its normal value of 1024 bytes,
+ overriding any contrary specification in environment variables
+ (*note Block size::). If ‘--block-size’, ‘--human-readable’
+ (‘-h’), or ‘--si’ options are used, they take precedence even if
+ ‘--kibibytes’ (‘-k’) is placed after
+
+ The ‘--kibibytes’ (‘-k’) option affects the per-directory block
+ count written in long format, and the file system allocation
+ written by the ‘--size’ (‘-s’) option. It does not affect the file
+ size in bytes that is written in long format.
+
+‘-m’
+‘--format=commas’
+ List files horizontally, with as many as will fit on each line,
+ separated by ‘, ’ (a comma and a space), and with no other
+ information.
+
+‘-p’
+‘--indicator-style=slash’
+ Append a ‘/’ to directory names.
+
+‘-x’
+‘--format=across’
+‘--format=horizontal’
+ List the files in columns, sorted horizontally.
+
+‘-T COLS’
+‘--tabsize=COLS’
+ Assume that each tab stop is COLS columns wide. The default is 8.
+ ‘ls’ uses tabs where possible in the output, for efficiency. If
+ COLS is zero, do not use tabs at all.
+
+ Some terminal emulators might not properly align columns to the
+ right of a TAB following a non-ASCII byte. You can avoid that
+ issue by using the ‘-T0’ option or put ‘TABSIZE=0’ in your
+ environment, to tell ‘ls’ to align using spaces, not tabs.
+
+ If you set a terminal’s hardware tabs to anything other than the
+ default, you should also use a ‘--tabsize’ option or ‘TABSIZE’
+ environment variable either to match the hardware tabs, or to
+ disable the use of hardware tabs. Otherwise, the output of ‘ls’
+ may not line up. For example, if you run the shell command ‘tabs
+ -4’ to set hardware tabs to every four columns, you should also run
+ ‘export TABSIZE=4’ or ‘export TABSIZE=0’, or use the corresponding
+ ‘--tabsize’ options.
+
+‘-w COLS’
+‘--width=COLS’
+ Assume the screen is COLS columns wide. The default is taken from
+ the terminal settings if possible; otherwise the environment
+ variable ‘COLUMNS’ is used if it is set; otherwise the default is
+ 80. With a COLS value of ‘0’, there is no limit on the length of
+ the output line, and that single output line will be delimited with
+ spaces, not tabs.
+
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+ This option is incompatible with the ‘--dired’ (‘-D’) option. This
+ option also implies the options ‘--show-control-chars’, ‘-1’,
+ ‘--color=none’, and ‘--quoting-style=literal’ (‘-N’).
+
+
+File: coreutils.info, Node: Formatting file timestamps, Next: Formatting the file names, Prev: General output formatting, Up: ls invocation
+
+10.1.5 Formatting file timestamps
+---------------------------------
+
+By default, file timestamps are listed in abbreviated form, using a date
+like ‘Mar 30 2020’ for non-recent timestamps, and a date-without-year
+and time like ‘Mar 30 23:45’ for recent timestamps. This format can
+change depending on the current locale as detailed below.
+
+ A timestamp is considered to be “recent” if it is less than six
+months old, and is not dated in the future. If a timestamp dated today
+is not listed in recent form, the timestamp is in the future, which
+means you probably have clock skew problems which may break programs
+like ‘make’ that rely on file timestamps. *Note File timestamps::.
+
+ Timestamps are listed according to the time zone rules specified by
+the ‘TZ’ environment variable, or by the system default rules if ‘TZ’ is
+not set. *Note Specifying the Time Zone with ‘TZ’: (libc)TZ Variable.
+
+ The following option changes how file timestamps are printed.
+
+‘--time-style=STYLE’
+ List timestamps in style STYLE. The STYLE should be one of the
+ following:
+
+ ‘+FORMAT’
+ List timestamps using FORMAT, where FORMAT is interpreted like
+ the format argument of ‘date’ (*note date invocation::). For
+ example, ‘--time-style="+%Y-%m-%d %H:%M:%S"’ causes ‘ls’ to
+ list timestamps like ‘2020-03-30 23:45:56’. As with ‘date’,
+ FORMAT’s interpretation is affected by the ‘LC_TIME’ locale
+ category.
+
+ If FORMAT contains two format strings separated by a newline,
+ the former is used for non-recent files and the latter for
+ recent files; if you want output columns to line up, you may
+ need to insert spaces in one of the two formats.
+
+ ‘full-iso’
+ List timestamps in full using ISO 8601-like date, time, and
+ time zone components with nanosecond precision, e.g.,
+ ‘2020-07-21 23:45:56.477817180 -0400’. This style is
+ equivalent to ‘+%Y-%m-%d %H:%M:%S.%N %z’.
+
+ This is useful because the time output includes all the
+ information that is available from the operating system. For
+ example, this can help explain ‘make’’s behavior, since GNU
+ ‘make’ uses the full timestamp to determine whether a file is
+ out of date.
+
+ ‘long-iso’
+ List ISO 8601 date and time components with minute precision,
+ e.g., ‘2020-03-30 23:45’. These timestamps are shorter than
+ ‘full-iso’ timestamps, and are usually good enough for
+ everyday work. This style is equivalent to ‘+%Y-%m-%d %H:%M’.
+
+ ‘iso’
+ List ISO 8601 dates for non-recent timestamps (e.g.,
+ ‘2020-03-30 ’), and ISO 8601-like month, day, hour, and minute
+ for recent timestamps (e.g., ‘03-30 23:45’). These timestamps
+ are uglier than ‘long-iso’ timestamps, but they carry nearly
+ the same information in a smaller space and their brevity
+ helps ‘ls’ output fit within traditional 80-column output
+ lines. The following two ‘ls’ invocations are equivalent:
+
+ newline='
+ '
+ ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
+ ls -l --time-style="iso"
+
+ ‘locale’
+ List timestamps in a locale-dependent form. For example, a
+ French locale might list non-recent timestamps like ‘30
+ mars 2020’ and recent timestamps like ‘30 mars 23:45’.
+ Locale-dependent timestamps typically consume more space than
+ ‘iso’ timestamps and are harder for programs to parse because
+ locale conventions vary so widely, but they are easier for
+ many people to read.
+
+ The ‘LC_TIME’ locale category specifies the timestamp format.
+ The default POSIX locale uses timestamps like ‘Mar 30 2020’
+ and ‘Mar 30 23:45’; in this locale, the following two ‘ls’
+ invocations are equivalent:
+
+ newline='
+ '
+ ls -l --time-style="+%b %e %Y$newline%b %e %H:%M"
+ ls -l --time-style="locale"
+
+ Other locales behave differently. For example, in a German
+ locale, ‘--time-style="locale"’ might be equivalent to
+ ‘--time-style="+%e. %b %Y $newline%e. %b %H:%M"’ and might
+ generate timestamps like ‘30. Mär 2020 ’ and ‘30. Mär 23:45’.
+
+ ‘posix-STYLE’
+ List POSIX-locale timestamps if the ‘LC_TIME’ locale category
+ is POSIX, STYLE timestamps otherwise. For example, the
+ ‘posix-long-iso’ style lists timestamps like ‘Mar 30 2020’
+ and ‘Mar 30 23:45’ when in the POSIX locale, and like
+ ‘2020-03-30 23:45’ otherwise.
+
+ You can specify the default value of the ‘--time-style’ option with
+the environment variable ‘TIME_STYLE’; if ‘TIME_STYLE’ is not set the
+default style is ‘locale’. GNU Emacs 21.3 and later use the ‘--dired’
+option and therefore can parse any date format, but if you are using
+Emacs 21.1 or 21.2 and specify a non-POSIX locale you may need to set
+‘TIME_STYLE="posix-long-iso"’.
+
+ To avoid certain denial-of-service attacks, timestamps that would be
+longer than 1000 bytes may be treated as errors.
+
+
+File: coreutils.info, Node: Formatting the file names, Prev: Formatting file timestamps, Up: ls invocation
+
+10.1.6 Formatting the file names
+--------------------------------
+
+These options change how file names themselves are printed.
+
+‘-b’
+‘--escape’
+‘--quoting-style=escape’
+ Quote nongraphic characters in file names using alphabetic and
+ octal backslash sequences like those used in C.
+
+‘-N’
+‘--literal’
+‘--quoting-style=literal’
+ Do not quote file names. However, with ‘ls’ nongraphic characters
+ are still printed as question marks if the output is a terminal and
+ you do not specify the ‘--show-control-chars’ option.
+
+‘-q’
+‘--hide-control-chars’
+ Print question marks instead of nongraphic characters in file
+ names. This is the default if the output is a terminal and the
+ program is ‘ls’.
+
+‘-Q’
+‘--quote-name’
+‘--quoting-style=c’
+ Enclose file names in double quotes and quote nongraphic characters
+ as in C.
+
+‘--quoting-style=WORD’
+ Use style WORD to quote file names and other strings that may
+ contain arbitrary characters. The WORD should be one of the
+ following:
+
+ ‘literal’
+ Output strings as-is; this is the same as the ‘--literal’
+ (‘-N’) option.
+ ‘shell’
+ Quote strings for the shell if they contain shell
+ metacharacters or would cause ambiguous output. The quoting
+ is suitable for POSIX-compatible shells like ‘bash’, but it
+ does not always work for incompatible shells like ‘csh’.
+ ‘shell-always’
+ Quote strings for the shell, even if they would normally not
+ require quoting.
+ ‘shell-escape’
+ Like ‘shell’, but also quoting non-printable characters using
+ the POSIX proposed ‘$''’ syntax suitable for most shells.
+ ‘shell-escape-always’
+ Like ‘shell-escape’, but quote strings even if they would
+ normally not require quoting.
+ ‘c’
+ Quote strings as for C character string literals, including
+ the surrounding double-quote characters; this is the same as
+ the ‘--quote-name’ (‘-Q’) option.
+ ‘escape’
+ Quote strings as for C character string literals, except omit
+ the surrounding double-quote characters; this is the same as
+ the ‘--escape’ (‘-b’) option.
+ ‘clocale’
+ Quote strings as for C character string literals, except use
+ surrounding quotation marks appropriate for the locale.
+ ‘locale’
+ Quote strings as for C character string literals, except use
+ surrounding quotation marks appropriate for the locale, and
+ quote 'like this' instead of "like this" in the default C
+ locale. This looks nicer on many displays.
+
+ You can specify the default value of the ‘--quoting-style’ option
+ with the environment variable ‘QUOTING_STYLE’. If that environment
+ variable is not set, the default value is ‘shell-escape’ when the
+ output is a terminal, and ‘literal’ otherwise.
+
+‘--show-control-chars’
+ Print nongraphic characters as-is in file names. This is the
+ default unless the output is a terminal and the program is ‘ls’.
+
+
+File: coreutils.info, Node: dir invocation, Next: vdir invocation, Prev: ls invocation, Up: Directory listing
+
+10.2 ‘dir’: Briefly list directory contents
+===========================================
+
+‘dir’ is equivalent to ‘ls -C -b’; that is, by default files are listed
+in columns, sorted vertically, and special characters are represented by
+backslash escape sequences.
+
+ *Note ‘ls’: ls invocation.
+
+
+File: coreutils.info, Node: vdir invocation, Next: dircolors invocation, Prev: dir invocation, Up: Directory listing
+
+10.3 ‘vdir’: Verbosely list directory contents
+==============================================
+
+‘vdir’ is equivalent to ‘ls -l -b’; that is, by default files are listed
+in long format and special characters are represented by backslash
+escape sequences.
+
+ *Note ‘ls’: ls invocation.
+
+
+File: coreutils.info, Node: dircolors invocation, Prev: vdir invocation, Up: Directory listing
+
+10.4 ‘dircolors’: Color setup for ‘ls’
+======================================
+
+‘dircolors’ outputs a sequence of shell commands to set up the terminal
+for color output from ‘ls’ (and ‘dir’, etc.). Typical usage:
+
+ eval "$(dircolors [OPTION]... [FILE])"
+
+ If FILE is specified, ‘dircolors’ reads it to determine which colors
+to use for which file types and extensions. Otherwise, a precompiled
+database is used. For details on the format of these files, run
+‘dircolors --print-database’.
+
+ To make ‘dircolors’ read a ‘~/.dircolors’ file if it exists, you can
+put the following lines in your ‘~/.bashrc’ (or adapt them to your
+favorite shell):
+
+ d=.dircolors
+ test -r $d && eval "$(dircolors $d)"
+
+ The output is a shell command to set the ‘LS_COLORS’ environment
+variable. You can specify the shell syntax to use on the command line,
+or ‘dircolors’ will guess it from the value of the ‘SHELL’ environment
+variable.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--sh’
+‘--bourne-shell’
+ Output Bourne shell commands. This is the default if the ‘SHELL’
+ environment variable is set and does not end with ‘csh’ or ‘tcsh’.
+
+‘-c’
+‘--csh’
+‘--c-shell’
+ Output C shell commands. This is the default if ‘SHELL’ ends with
+ ‘csh’ or ‘tcsh’.
+
+‘-p’
+‘--print-database’
+ Print the (compiled-in) default color configuration database. This
+ output is itself a valid configuration file, and is fairly
+ descriptive of the possibilities.
+
+‘--print-ls-colors’
+ Print the LS_COLORS entries on separate lines, each colored as per
+ the color they represent.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Basic operations, Next: Special file types, Prev: Directory listing, Up: Top
+
+11 Basic operations
+*******************
+
+This chapter describes the commands for basic file manipulation:
+copying, moving (renaming), and deleting (removing).
+
+* Menu:
+
+* cp invocation:: Copy files.
+* dd invocation:: Convert and copy a file.
+* install invocation:: Copy files and set attributes.
+* mv invocation:: Move (rename) files.
+* rm invocation:: Remove files or directories.
+* shred invocation:: Remove files more securely.
+
+
+File: coreutils.info, Node: cp invocation, Next: dd invocation, Up: Basic operations
+
+11.1 ‘cp’: Copy files and directories
+=====================================
+
+‘cp’ copies files (or, optionally, directories). The copy is completely
+independent of the original. You can either copy one file to another,
+or copy arbitrarily many files to a destination directory. Synopses:
+
+ cp [OPTION]... [-T] SOURCE DEST
+ cp [OPTION]... SOURCE... DIRECTORY
+ cp [OPTION]... -t DIRECTORY SOURCE...
+
+ • If two file names are given, ‘cp’ copies the first file to the
+ second.
+
+ • If the ‘--target-directory’ (‘-t’) option is given, or failing that
+ if the last file is a directory and the ‘--no-target-directory’
+ (‘-T’) option is not given, ‘cp’ copies each SOURCE file to the
+ specified directory, using the SOURCEs’ names.
+
+ Generally, files are written just as they are read. For exceptions,
+see the ‘--sparse’ option below.
+
+ By default, ‘cp’ does not copy directories. However, the ‘-R’, ‘-a’,
+and ‘-r’ options cause ‘cp’ to copy recursively by descending into
+source directories and copying files to corresponding destination
+directories.
+
+ When copying from a symbolic link, ‘cp’ normally follows the link
+only when not copying recursively or when ‘--link’ (‘-l’) is used. This
+default can be overridden with the ‘--archive’ (‘-a’), ‘-d’,
+‘--dereference’ (‘-L’), ‘--no-dereference’ (‘-P’), and ‘-H’ options. If
+more than one of these options is specified, the last one silently
+overrides the others.
+
+ When copying to a symbolic link, ‘cp’ follows the link only when it
+refers to an existing regular file. However, when copying to a dangling
+symbolic link, ‘cp’ refuses by default, and fails with a diagnostic,
+since the operation is inherently dangerous. This behavior is contrary
+to historical practice and to POSIX. Set ‘POSIXLY_CORRECT’ to make ‘cp’
+attempt to create the target of a dangling destination symlink, in spite
+of the possible risk. Also, when an option like ‘--backup’ or ‘--link’
+acts to rename or remove the destination before copying, ‘cp’ renames or
+removes the symbolic link rather than the file it points to.
+
+ By default, ‘cp’ copies the contents of special files only when not
+copying recursively. This default can be overridden with the
+‘--copy-contents’ option.
+
+ ‘cp’ generally refuses to copy a file onto itself, with the following
+exception: if ‘--force --backup’ is specified with SOURCE and DEST
+identical, and referring to a regular file, ‘cp’ will make a backup
+file, either regular or numbered, as specified in the usual ways (*note
+Backup options::). This is useful when you simply want to make a backup
+of an existing file before changing it.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--archive’
+ Preserve as much as possible of the structure and attributes of the
+ original files in the copy (but do not attempt to preserve internal
+ directory structure; i.e., ‘ls -U’ may list the entries in a copied
+ directory in a different order). Try to preserve SELinux security
+ context and extended attributes (xattr), but ignore any failure to
+ do that and print no corresponding diagnostic. Equivalent to ‘-dR
+ --preserve=all’ with the reduced diagnostics.
+
+‘--attributes-only’
+ Copy only the specified attributes of the source file to the
+ destination. If the destination already exists, do not alter its
+ contents. See the ‘--preserve’ option for controlling which
+ attributes to copy.
+
+‘-b’
+‘--backup[=METHOD]’
+ *Note Backup options::. Make a backup of each file that would
+ otherwise be overwritten or removed. As a special case, ‘cp’ makes
+ a backup of SOURCE when the force and backup options are given and
+ SOURCE and DEST are the same name for an existing, regular file.
+ One useful application of this combination of options is this tiny
+ Bourne shell script:
+
+ #!/bin/sh
+ # Usage: backup FILE...
+ # Create a GNU-style backup of each listed FILE.
+ fail=0
+ for i; do
+ cp --backup --force --preserve=all -- "$i" "$i" || fail=1
+ done
+ exit $fail
+
+‘--copy-contents’
+ If copying recursively, copy the contents of any special files
+ (e.g., FIFOs and device files) as if they were regular files. This
+ means trying to read the data in each source file and writing it to
+ the destination. It is usually a mistake to use this option, as it
+ normally has undesirable effects on special files like FIFOs and
+ the ones typically found in the ‘/dev’ directory. In most cases,
+ ‘cp -R --copy-contents’ will hang indefinitely trying to read from
+ FIFOs and special files like ‘/dev/console’, and it will fill up
+ your destination file system if you use it to copy ‘/dev/zero’.
+ This option has no effect unless copying recursively, and it does
+ not affect the copying of symbolic links.
+
+‘-d’
+ Copy symbolic links as symbolic links rather than copying the files
+ that they point to, and preserve hard links between source files in
+ the copies. Equivalent to ‘--no-dereference --preserve=links’.
+
+‘--debug’
+ Print extra information to stdout, explaining how files are copied.
+ This option implies the ‘--verbose’ option.
+
+‘-f’
+‘--force’
+ When copying without this option and an existing destination file
+ cannot be opened for writing, the copy fails. However, with
+ ‘--force’, when a destination file cannot be opened, ‘cp’ then
+ tries to recreate the file by first removing it. Note ‘--force’
+ alone will not remove dangling symlinks. When this option is
+ combined with ‘--link’ (‘-l’) or ‘--symbolic-link’ (‘-s’), the
+ destination link is replaced, and unless ‘--backup’ (‘-b’) is also
+ given there is no brief moment when the destination does not exist.
+ Also see the description of ‘--remove-destination’.
+
+ This option is independent of the ‘--interactive’ or ‘-i’ option:
+ neither cancels the effect of the other.
+
+ This option is ignored when the ‘--no-clobber’ or ‘-n’ option is
+ also used.
+
+‘-H’
+ If a command line argument specifies a symbolic link, then copy the
+ file it points to rather than the symbolic link itself. However,
+ copy (preserving its nature) any symbolic link that is encountered
+ via recursive traversal.
+
+‘-i’
+‘--interactive’
+ When copying a file other than a directory, prompt whether to
+ overwrite an existing destination file, and fail if the response is
+ not affirmative. The ‘-i’ option overrides a previous ‘-n’ option.
+
+‘-l’
+‘--link’
+ Make hard links instead of copies of non-directories.
+
+‘-L’
+‘--dereference’
+ Follow symbolic links when copying from them. With this option,
+ ‘cp’ cannot create a symbolic link. For example, a symlink (to
+ regular file) in the source tree will be copied to a regular file
+ in the destination tree.
+
+‘-n’
+‘--no-clobber’
+ Do not overwrite an existing file; silently fail instead. This
+ option overrides a previous ‘-i’ option. This option is mutually
+ exclusive with ‘-b’ or ‘--backup’ option.
+
+‘-P’
+‘--no-dereference’
+ Copy symbolic links as symbolic links rather than copying the files
+ that they point to. This option affects only symbolic links in the
+ source; symbolic links in the destination are always followed if
+ possible.
+
+‘-p’
+‘--preserve[=ATTRIBUTE_LIST]’
+ Preserve the specified attributes of the original files. If
+ specified, the ATTRIBUTE_LIST must be a comma-separated list of one
+ or more of the following strings:
+
+ ‘mode’
+ Preserve attributes relevant to access permissions, including
+ file mode bits and (if possible) access control lists (ACLs).
+ ACL preservation is system-dependent, and ACLs are not
+ necessarily translated when the source and destination are on
+ file systems with different ACL formats (e.g., NFSv4 versus
+ POSIX formats).
+
+ ‘ownership’
+ Preserve the owner and group. On most modern systems, only
+ users with appropriate privileges may change the owner of a
+ file, and ordinary users may preserve the group ownership of a
+ file only if they happen to be a member of the desired group.
+ ‘timestamps’
+ Preserve the times of last access and last modification, when
+ possible. On older systems, it is not possible to preserve
+ these attributes when the affected file is a symbolic link.
+ However, many systems now provide the ‘utimensat’ function,
+ which makes it possible even for symbolic links.
+ ‘links’
+ Preserve in the destination files any links between
+ corresponding source files. Note that with ‘-L’ or ‘-H’, this
+ option can convert symbolic links to hard links. For example,
+ $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
+ 74161745 a
+ 74161745 b
+ Note the inputs: ‘b’ is a symlink to regular file ‘a’, yet the
+ files in destination directory, ‘c/’, are hard-linked. Since
+ ‘-a’ implies ‘--no-dereference’ it would copy the symlink, but
+ the later ‘-H’ tells ‘cp’ to dereference the command line
+ arguments where it then sees two files with the same inode
+ number. Then the ‘--preserve=links’ option also implied by
+ ‘-a’ will preserve the perceived hard link.
+
+ Here is a similar example that exercises ‘cp’’s ‘-L’ option:
+ $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
+ 74163295 a
+ 74163295 b
+
+ ‘context’
+ Preserve SELinux security context of the file, or fail with
+ full diagnostics.
+ ‘xattr’
+ Preserve extended attributes of the file, or fail with full
+ diagnostics. If ‘cp’ is built without xattr support, ignore
+ this option. If SELinux context, ACLs or Capabilities are
+ implemented using xattrs, they are preserved implicitly by
+ this option as well, i.e., even without specifying
+ ‘--preserve=mode’ or ‘--preserve=context’.
+ ‘all’
+ Preserve all file attributes. Equivalent to specifying all of
+ the above, but with the difference that failure to preserve
+ SELinux security context or extended attributes does not
+ change ‘cp’’s exit status. In contrast to ‘-a’, all but
+ ‘Operation not supported’ warnings are output.
+
+ Using ‘--preserve’ with no ATTRIBUTE_LIST is equivalent to
+ ‘--preserve=mode,ownership,timestamps’.
+
+ In the absence of this option, the permissions of existing
+ destination files are unchanged. Each new file is created with the
+ mode of the corresponding source file minus the set-user-ID,
+ set-group-ID, and sticky bits as the create mode; the operating
+ system then applies either the umask or a default ACL, possibly
+ resulting in a more restrictive file mode. *Note File
+ permissions::.
+
+‘--no-preserve=ATTRIBUTE_LIST’
+ Do not preserve the specified attributes. The ATTRIBUTE_LIST has
+ the same form as for ‘--preserve’.
+
+‘--parents’
+ Form the name of each destination file by appending to the target
+ directory a slash and the specified name of the source file. The
+ last argument given to ‘cp’ must be the name of an existing
+ directory. For example, the command:
+
+ cp --parents a/b/c existing_dir
+
+ copies the file ‘a/b/c’ to ‘existing_dir/a/b/c’, creating any
+ missing intermediate directories.
+
+‘-R’
+‘-r’
+‘--recursive’
+ Copy directories recursively. By default, do not follow symbolic
+ links in the source unless used together with the ‘--link’ (‘-l’)
+ option; see the ‘--archive’ (‘-a’), ‘-d’, ‘--dereference’ (‘-L’),
+ ‘--no-dereference’ (‘-P’), and ‘-H’ options. Special files are
+ copied by creating a destination file of the same type as the
+ source; see the ‘--copy-contents’ option. It is not portable to
+ use ‘-r’ to copy symbolic links or special files. On some non-GNU
+ systems, ‘-r’ implies the equivalent of ‘-L’ and ‘--copy-contents’
+ for historical reasons. Also, it is not portable to use ‘-R’ to
+ copy symbolic links unless you also specify ‘-P’, as POSIX allows
+ implementations that dereference symbolic links by default.
+
+‘--reflink[=WHEN]’
+ Perform a lightweight, copy-on-write (COW) copy, if supported by
+ the file system. Once it has succeeded, beware that the source and
+ destination files share the same data blocks as long as they remain
+ unmodified. Thus, if an I/O error affects data blocks of one of
+ the files, the other suffers the same fate.
+
+ The WHEN value can be one of the following:
+
+ ‘always’
+ If the copy-on-write operation is not supported then report
+ the failure for each file and exit with a failure status.
+ Plain ‘--reflink’ is equivalent to ‘--reflink=always’.
+
+ ‘auto’
+ If the copy-on-write operation is not supported then fall back
+ to the standard copy behavior. This is the default if no
+ ‘--reflink’ option is given.
+
+ ‘never’
+ Disable copy-on-write operation and use the standard copy
+ behavior.
+
+ This option is overridden by the ‘--link’, ‘--symbolic-link’ and
+ ‘--attributes-only’ options, thus allowing it to be used to
+ configure the default data copying behavior for ‘cp’.
+
+‘--remove-destination’
+ Remove each existing destination file before attempting to open it
+ (contrast with ‘-f’ above).
+
+‘--sparse=WHEN’
+ A “sparse file” contains “holes” – a sequence of zero bytes that
+ does not occupy any file system blocks; the ‘read’ system call
+ reads these as zeros. This can both save considerable space and
+ increase speed, since many binary files contain lots of consecutive
+ zero bytes. By default, ‘cp’ detects holes in input source files
+ via a crude heuristic and makes the corresponding output file
+ sparse as well. Only regular files may be sparse.
+
+ The WHEN value can be one of the following:
+
+ ‘auto’
+ The default behavior: if the input file is sparse, attempt to
+ make the output file sparse, too. However, if an output file
+ exists but refers to a non-regular file, then do not attempt
+ to make it sparse.
+
+ ‘always’
+ For each sufficiently long sequence of zero bytes in the input
+ file, attempt to create a corresponding hole in the output
+ file, even if the input file does not appear to be sparse.
+ This is useful when the input file resides on a file system
+ that does not support sparse files (for example, ‘efs’ file
+ systems in SGI IRIX 5.3 and earlier), but the output file is
+ on a type of file system that does support them. Holes may be
+ created only in regular files, so if the destination file is
+ of some other type, ‘cp’ does not even try to make it sparse.
+
+ ‘never’
+ Never make the output file sparse. This is useful in creating
+ a file for use with the ‘mkswap’ command, since such a file
+ must not have any holes.
+
+ For example, with the following alias, ‘cp’ will use the minimum
+ amount of space supported by the file system. (Older versions of
+ ‘cp’ can also benefit from ‘--reflink=auto’ here.)
+
+ alias cp='cp --sparse=always'
+
+‘--strip-trailing-slashes’
+ Remove any trailing slashes from each SOURCE argument. *Note
+ Trailing slashes::.
+
+‘-s’
+‘--symbolic-link’
+ Make symbolic links instead of copies of non-directories. All
+ source file names must be absolute (starting with ‘/’) unless the
+ destination files are in the current directory. This option merely
+ results in an error message on systems that do not support symbolic
+ links.
+
+‘-S SUFFIX’
+‘--suffix=SUFFIX’
+ Append SUFFIX to each backup file made with ‘-b’. *Note Backup
+ options::.
+
+‘-t DIRECTORY’
+‘--target-directory=DIRECTORY’
+ Specify the destination DIRECTORY. *Note Target directory::.
+
+‘-T’
+‘--no-target-directory’
+ Do not treat the last operand specially when it is a directory or a
+ symbolic link to a directory. *Note Target directory::.
+
+‘-u’
+‘--update[=WHICH]’
+ Do not copy a non-directory that has an existing destination with
+ the same or newer modification timestamp; instead, silently skip
+ the file without failing. If timestamps are being preserved, the
+ comparison is to the source timestamp truncated to the resolutions
+ of the destination file system and of the system calls used to
+ update timestamps; this avoids duplicate work if several ‘cp -pu’
+ commands are executed with the same source and destination. This
+ option is ignored if the ‘-n’ or ‘--no-clobber’ option is also
+ specified. Also, if ‘--preserve=links’ is also specified (like
+ with ‘cp -au’ for example), that will take precedence;
+ consequently, depending on the order that files are processed from
+ the source, newer files in the destination may be replaced, to
+ mirror hard links in the source.
+
+ WHICH gives more control over which existing files in the
+ destination are replaced, and its value can be one of the
+ following:
+
+ ‘all’
+ This is the default operation when an ‘--update’ option is not
+ specified, and results in all existing files in the
+ destination being replaced.
+
+ ‘none’
+ This is similar to the ‘--no-clobber’ option, in that no files
+ in the destination are replaced, but also skipping a file does
+ not induce a failure.
+
+ ‘older’
+ This is the default operation when ‘--update’ is specified,
+ and results in files being replaced if they’re older than the
+ corresponding source file.
+
+‘-v’
+‘--verbose’
+ Print the name of each file before copying it.
+
+‘-x’
+‘--one-file-system’
+ Skip subdirectories that are on different file systems from the one
+ that the copy started on. However, mount point directories _are_
+ copied.
+
+‘-Z’
+‘--context[=CONTEXT]’
+ Without a specified CONTEXT, adjust the SELinux security context
+ according to the system default type for destination files,
+ similarly to the ‘restorecon’ command. The long form of this
+ option with a specific context specified, will set the context for
+ newly created files only. With a specified context, if both
+ SELinux and SMACK are disabled, a warning is issued. This option
+ is mutually exclusive with the ‘--preserve=context’ option, and
+ overrides the ‘--preserve=all’ and ‘-a’ options.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: dd invocation, Next: install invocation, Prev: cp invocation, Up: Basic operations
+
+11.2 ‘dd’: Convert and copy a file
+==================================
+
+‘dd’ copies input to output with a changeable I/O block size, while
+optionally performing conversions on the data. Synopses:
+
+ dd [OPERAND]...
+ dd OPTION
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ By default, ‘dd’ copies standard input to standard output. To copy,
+‘dd’ repeatedly does the following steps in order:
+
+ 1. Read an input block.
+
+ 2. If converting via ‘sync’, pad as needed to meet the input block
+ size. Pad with spaces if converting via ‘block’ or ‘unblock’, NUL
+ bytes otherwise.
+
+ 3. If ‘bs=’ is given and no conversion mentioned in steps (4) or (5)
+ is given, output the data as a single block and skip all remaining
+ steps.
+
+ 4. If the ‘swab’ conversion is given, swap each pair of input bytes.
+ If the input data length is odd, preserve the last input byte
+ (since there is nothing to swap it with).
+
+ 5. If any of the conversions ‘swab’, ‘block’, ‘unblock’, ‘lcase’,
+ ‘ucase’, ‘ascii’, ‘ebcdic’ and ‘ibm’ are given, do these
+ conversions. These conversions operate independently of input
+ blocking, and might deal with records that span block boundaries.
+
+ 6. Aggregate the resulting data into output blocks of the specified
+ size, and output each output block in turn. Do not pad the last
+ output block; it can be shorter than usual.
+
+ ‘dd’ accepts the following operands, whose syntax was inspired by the
+DD (data definition) statement of OS/360 JCL.
+
+‘if=FILE’
+ Read from FILE instead of standard input.
+
+‘of=FILE’
+ Write to FILE instead of standard output. Unless ‘conv=notrunc’ is
+ given, truncate FILE before writing it.
+
+‘ibs=BYTES’
+ Set the input block size to BYTES. This makes ‘dd’ read BYTES per
+ block. The default is 512 bytes.
+
+‘obs=BYTES’
+ Set the output block size to BYTES. This makes ‘dd’ write BYTES
+ per block. The default is 512 bytes.
+
+‘bs=BYTES’
+ Set both input and output block sizes to BYTES. This makes ‘dd’
+ read and write BYTES per block, overriding any ‘ibs’ and ‘obs’
+ settings. In addition, if no data-transforming ‘conv’ operand is
+ specified, input is copied to the output as soon as it’s read, even
+ if it is smaller than the block size.
+
+‘cbs=BYTES’
+ Set the conversion block size to BYTES. When converting
+ variable-length records to fixed-length ones (‘conv=block’) or the
+ reverse (‘conv=unblock’), use BYTES as the fixed record length.
+
+‘skip=N’
+‘iseek=N’
+ Skip N ‘ibs’-byte blocks in the input file before copying. If N
+ ends in the letter ‘B’, interpret N as a byte count rather than a
+ block count. (‘B’ and the ‘iseek=’ spelling are GNU extensions to
+ POSIX.)
+
+‘seek=N’
+‘oseek=N’
+ Skip N ‘obs’-byte blocks in the output file before truncating or
+ copying. If N ends in the letter ‘B’, interpret N as a byte count
+ rather than a block count. (‘B’ and the ‘oseek=’ spelling are GNU
+ extensions to POSIX.)
+
+‘count=N’
+ Copy N ‘ibs’-byte blocks from the input file, instead of everything
+ until the end of the file. If N ends in the letter ‘B’, interpret
+ N as a byte count rather than a block count; this is a GNU
+ extension to POSIX. If short reads occur, as could be the case when
+ reading from a pipe for example, ‘iflag=fullblock’ ensures that
+ ‘count=’ counts complete input blocks rather than input read
+ operations. As an extension to POSIX, ‘count=0’ copies zero blocks
+ instead of copying all blocks.
+
+‘status=LEVEL’
+ Specify the amount of information printed. If this operand is
+ given multiple times, the last one takes precedence. The LEVEL
+ value can be one of the following:
+
+ ‘none’
+ Do not print any informational or warning messages to standard
+ error. Error messages are output as normal.
+
+ ‘noxfer’
+ Do not print the final transfer rate and volume statistics
+ that normally make up the last status line.
+
+ ‘progress’
+ Print the transfer rate and volume statistics on standard
+ error, when processing each input block. Statistics are
+ output on a single line at most once every second, but updates
+ can be delayed when waiting on I/O.
+
+ Transfer information is normally output to standard error upon
+ receipt of the ‘INFO’ signal or when ‘dd’ exits, and defaults to
+ the following form in the C locale:
+
+ 7287+1 records in
+ 116608+0 records out
+ 59703296 bytes (60 MB, 57 MiB) copied, 0.0427974 s, 1.4 GB/s
+
+ The notation ‘W+P’ stands for W whole blocks and P partial blocks.
+ A partial block occurs when a read or write operation succeeds but
+ transfers less data than the block size. An additional line like
+ ‘1 truncated record’ or ‘10 truncated records’ is output after the
+ ‘records out’ line if ‘conv=block’ processing truncated one or more
+ input records.
+
+ The ‘status=’ operand is a GNU extension to POSIX.
+
+‘conv=CONVERSION[,CONVERSION]...’
+ Convert the file as specified by the CONVERSION argument(s). (No
+ spaces around any comma(s).)
+
+ Conversions:
+
+ ‘ascii’
+ Convert EBCDIC to ASCII, using the conversion table specified
+ by POSIX. This provides a 1:1 translation for all 256 bytes.
+ This implies ‘conv=unblock’; input is converted to ASCII
+ before trailing spaces are deleted.
+
+ ‘ebcdic’
+ Convert ASCII to EBCDIC. This is the inverse of the ‘ascii’
+ conversion. This implies ‘conv=block’; trailing spaces are
+ added before being converted to EBCDIC.
+
+ ‘ibm’
+ This acts like ‘conv=ebcdic’, except it uses the alternate
+ conversion table specified by POSIX. This is not a 1:1
+ translation, but reflects common historical practice for ‘~’,
+ ‘[’, and ‘]’.
+
+ The ‘ascii’, ‘ebcdic’, and ‘ibm’ conversions are mutually
+ exclusive. If you use any of these conversions, you should
+ also use the ‘cbs=’ operand.
+
+ ‘block’
+ For each line in the input, output ‘cbs’ bytes, replacing the
+ input newline with a space and truncating or padding input
+ lines with spaces as necessary.
+
+ ‘unblock’
+ Remove any trailing spaces in each ‘cbs’-sized input block,
+ and append a newline.
+
+ The ‘block’ and ‘unblock’ conversions are mutually exclusive.
+ If you use either of these conversions, you should also use
+ the ‘cbs=’ operand.
+
+ ‘lcase’
+ Change uppercase letters to lowercase.
+
+ ‘ucase’
+ Change lowercase letters to uppercase.
+
+ The ‘lcase’ and ‘ucase’ conversions are mutually exclusive.
+
+ ‘sparse’
+ Try to seek rather than write NUL output blocks. On a file
+ system that supports sparse files, this will create sparse
+ output when extending the output file. Be careful when using
+ this conversion in conjunction with ‘conv=notrunc’ or
+ ‘oflag=append’. With ‘conv=notrunc’, existing data in the
+ output file corresponding to NUL blocks from the input, will
+ be untouched. With ‘oflag=append’ the seeks performed will be
+ ineffective. Similarly, when the output is a device rather
+ than a file, NUL input blocks are not copied, and therefore
+ this conversion is most useful with virtual or pre zeroed
+ devices.
+
+ The ‘sparse’ conversion is a GNU extension to POSIX.
+
+ ‘swab’
+ Swap every pair of input bytes.
+
+ ‘sync’
+ Pad every input block to size of ‘ibs’ with trailing zero
+ bytes. When used with ‘block’ or ‘unblock’, pad with spaces
+ instead of zero bytes.
+
+ The following “conversions” are really file flags and don’t affect
+ internal processing:
+
+ ‘excl’
+ Fail if the output file already exists; ‘dd’ must create the
+ output file itself.
+
+ ‘nocreat’
+ Do not create the output file; the output file must already
+ exist.
+
+ The ‘excl’ and ‘nocreat’ conversions are mutually exclusive,
+ and are GNU extensions to POSIX.
+
+ ‘notrunc’
+ Do not truncate the output file.
+
+ ‘noerror’
+ Continue after read errors.
+
+ ‘fdatasync’
+ Synchronize output data just before finishing, even if there
+ were write errors. This forces a physical write of output
+ data, so that even if power is lost the output data will be
+ preserved. If neither this nor ‘fsync’ are specified, output
+ is treated as usual with file systems, i.e., output data and
+ metadata may be cached in primary memory for some time before
+ the operating system physically writes it, and thus output
+ data and metadata may be lost if power is lost. *Note sync
+ invocation::. This conversion is a GNU extension to POSIX.
+
+ ‘fsync’
+ Synchronize output data and metadata just before finishing,
+ even if there were write errors. This acts like ‘fdatasync’
+ except it also preserves output metadata, such as the
+ last-modified time of the output file; for this reason it may
+ be a bit slower than ‘fdatasync’ although the performance
+ difference is typically insignificant for ‘dd’. This
+ conversion is a GNU extension to POSIX.
+
+‘iflag=FLAG[,FLAG]...’
+ Access the input file using the flags specified by the FLAG
+ argument(s). (No spaces around any comma(s).)
+
+‘oflag=FLAG[,FLAG]...’
+ Access the output file using the flags specified by the FLAG
+ argument(s). (No spaces around any comma(s).)
+
+ Here are the flags.
+
+ ‘append’
+ Write in append mode, so that even if some other process is
+ writing to this file, every ‘dd’ write will append to the
+ current contents of the file. This flag makes sense only for
+ output. If you combine this flag with the ‘of=FILE’ operand,
+ you should also specify ‘conv=notrunc’ unless you want the
+ output file to be truncated before being appended to.
+
+ ‘cio’
+ Use concurrent I/O mode for data. This mode performs direct
+ I/O and drops the POSIX requirement to serialize all I/O to
+ the same file. A file cannot be opened in CIO mode and with a
+ standard open at the same time.
+
+ ‘direct’
+ Use direct I/O for data, avoiding the buffer cache. Note that
+ the kernel may impose restrictions on read or write buffer
+ sizes. For example, with an ext4 destination file system and
+ a Linux-based kernel, using ‘oflag=direct’ will cause writes
+ to fail with ‘EINVAL’ if the output buffer size is not a
+ multiple of 512.
+
+ ‘directory’
+
+ Fail unless the file is a directory. Most operating systems
+ do not allow I/O to a directory, so this flag has limited
+ utility.
+
+ ‘dsync’
+ Use synchronized I/O for data. For the output file, this
+ forces a physical write of output data on each write. For the
+ input file, this flag can matter when reading from a remote
+ file that has been written to synchronously by some other
+ process. Metadata (e.g., last-access and last-modified time)
+ is not necessarily synchronized.
+
+ ‘sync’
+ Use synchronized I/O for both data and metadata.
+
+ ‘nocache’
+ Request to discard the system data cache for a file. When
+ count=0 all cached data for the file is specified, otherwise
+ the cache is dropped for the processed portion of the file.
+ Also when count=0, failure to discard the cache is diagnosed
+ and reflected in the exit status.
+
+ Note data that is not already persisted to storage will not be
+ discarded from cache, so note the use of the ‘sync’
+ conversions in the examples below, which are used to maximize
+ the effectiveness of the ‘nocache’ flag.
+
+ Here are some usage examples:
+
+ # Advise to drop cache for whole file
+ dd if=ifile iflag=nocache count=0
+
+ # Ensure drop cache for the whole file
+ dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
+
+ # Advise to drop cache for part of file
+ # Note the kernel will only consider complete and
+ # already persisted pages.
+ dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
+
+ # Stream data using just the read-ahead cache.
+ # See also the ‘direct’ flag.
+ dd if=ifile of=ofile iflag=nocache oflag=nocache,sync
+
+ ‘nonblock’
+ Use non-blocking I/O.
+
+ ‘noatime’
+ Do not update the file’s access timestamp. *Note File
+ timestamps::. Some older file systems silently ignore this
+ flag, so it is a good idea to test it on your files before
+ relying on it.
+
+ ‘noctty’
+ Do not assign the file to be a controlling terminal for ‘dd’.
+ This has no effect when the file is not a terminal. On many
+ hosts (e.g., GNU/Linux hosts), this flag has no effect at all.
+
+ ‘nofollow’
+ Do not follow symbolic links.
+
+ ‘nolinks’
+ Fail if the file has multiple hard links.
+
+ ‘binary’
+ Use binary I/O. This flag has an effect only on nonstandard
+ platforms that distinguish binary from text I/O.
+
+ ‘text’
+ Use text I/O. Like ‘binary’, this flag has no effect on
+ standard platforms.
+
+ ‘fullblock’
+ Accumulate full blocks from input. The ‘read’ system call may
+ return early if a full block is not available. When that
+ happens, continue calling ‘read’ to fill the remainder of the
+ block. This flag can be used only with ‘iflag’. This flag is
+ useful with pipes for example as they may return short reads.
+ In that case, this flag is needed to ensure that a ‘count=’
+ argument is interpreted as a block count rather than a count
+ of read operations.
+
+ These flags are all GNU extensions to POSIX. They are not supported
+ on all systems, and ‘dd’ rejects attempts to use them when they are
+ not supported. When reading from standard input or writing to
+ standard output, the ‘nofollow’ and ‘noctty’ flags should not be
+ specified, and the other flags (e.g., ‘nonblock’) can affect how
+ other processes behave with the affected file descriptors, even
+ after ‘dd’ exits.
+
+ The behavior of ‘dd’ is unspecified if operands other than ‘conv=’,
+‘iflag=’, ‘oflag=’, and ‘status=’ are specified more than once.
+
+ The numeric-valued strings above (N and BYTES) are unsigned decimal
+integers that can be followed by a multiplier: ‘b’=512, ‘c’=1, ‘w’=2,
+‘xM’=M, or any of the standard block size suffixes like ‘k’=1024 (*note
+Block size::). These multipliers are GNU extensions to POSIX, except
+that POSIX allows BYTES to be followed by ‘k’, ‘b’, and ‘xM’. Note ‘xM’
+can be used more than once in a number. Block sizes (i.e., specified by
+BYTES strings) must be nonzero.
+
+ Any block size you specify via ‘bs=’, ‘ibs=’, ‘obs=’, ‘cbs=’ should
+not be too large – values larger than a few megabytes are generally
+wasteful or (as in the gigabyte..exabyte case) downright
+counterproductive or error-inducing.
+
+ To process data with offset or size that is not a multiple of the I/O
+block size, you can use a numeric string N that ends in the letter ‘B’.
+For example, the following shell commands copy data in 1 MiB blocks
+between a flash drive and a tape, but do not save or restore a 512-byte
+area at the start of the flash drive:
+
+ flash=/dev/sda
+ tape=/dev/st0
+
+ # Copy all but the initial 512 bytes from flash to tape.
+ dd if=$flash iseek=512B bs=1MiB of=$tape
+
+ # Copy from tape back to flash, leaving initial 512 bytes alone.
+ dd if=$tape bs=1MiB of=$flash oseek=512B
+
+ For failing storage devices, other tools come with a great variety of
+extra functionality to ease the saving of as much data as possible
+before the device finally dies, e.g. GNU ‘ddrescue’
+(https://www.gnu.org/software/ddrescue/). However, in some cases such a
+tool is not available or the administrator feels more comfortable with
+the handling of ‘dd’. As a simple rescue method, call ‘dd’ as shown in
+the following example: the operand ‘conv=noerror,sync’ is used to
+continue after read errors and to pad out bad reads with NULs, while
+‘iflag=fullblock’ caters for short reads (which traditionally never
+occur on flash or similar devices):
+
+ # Rescue data from an (unmounted!) partition of a failing device.
+ dd conv=noerror,sync iflag=fullblock </dev/sda1 > /mnt/rescue.img
+
+ Sending an ‘INFO’ signal (or ‘USR1’ signal where that is unavailable)
+to a running ‘dd’ process makes it print I/O statistics to standard
+error and then resume copying. In the example below, ‘dd’ is run in the
+background to copy 5GB of data. The ‘kill’ command makes it output
+intermediate I/O statistics, and when ‘dd’ completes normally or is
+killed by the ‘SIGINT’ signal, it outputs the final statistics.
+
+ # Ignore the signal so we never inadvertently terminate the dd child.
+ # Note this is not needed when SIGINFO is available.
+ trap '' USR1
+
+ # Run dd with the fullblock iflag to avoid short reads
+ # which can be triggered by reception of signals.
+ dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$!
+
+ # Output stats every second.
+ while kill -s USR1 $pid 2>/dev/null; do sleep 1; done
+
+ The above script will output in the following format:
+
+ 3441325+0 records in
+ 3441325+0 records out
+ 3441325000 bytes (3.4 GB, 3.2 GiB) copied, 1.00036 s, 3.4 GB/s
+ 5000000+0 records in
+ 5000000+0 records out
+ 5000000000 bytes (5.0 GB, 4.7 GiB) copied, 1.44433 s, 3.5 GB/s
+
+ The ‘status=progress’ operand periodically updates the last line of
+the transfer statistics above.
+
+ On systems lacking the ‘INFO’ signal ‘dd’ responds to the ‘USR1’
+signal instead, unless the ‘POSIXLY_CORRECT’ environment variable is
+set.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: install invocation, Next: mv invocation, Prev: dd invocation, Up: Basic operations
+
+11.3 ‘install’: Copy files and set attributes
+=============================================
+
+‘install’ copies files while setting their file mode bits and, if
+possible, their owner and group. Synopses:
+
+ install [OPTION]... [-T] SOURCE DEST
+ install [OPTION]... SOURCE... DIRECTORY
+ install [OPTION]... -t DIRECTORY SOURCE...
+ install [OPTION]... -d DIRECTORY...
+
+ • If two file names are given, ‘install’ copies the first file to the
+ second.
+
+ • If the ‘--target-directory’ (‘-t’) option is given, or failing that
+ if the last file is a directory and the ‘--no-target-directory’
+ (‘-T’) option is not given, ‘install’ copies each SOURCE file to
+ the specified directory, using the SOURCEs’ names.
+
+ • If the ‘--directory’ (‘-d’) option is given, ‘install’ creates each
+ DIRECTORY and any missing parent directories. Parent directories
+ are created with mode ‘u=rwx,go=rx’ (755), regardless of the ‘-m’
+ option or the current umask. *Note Directory Setuid and Setgid::,
+ for how the set-user-ID and set-group-ID bits of parent directories
+ are inherited.
+
+ ‘install’ is similar to ‘cp’, but allows you to control the
+attributes of destination files. It is typically used in Makefiles to
+copy programs into their destination directories. It refuses to copy
+files onto themselves.
+
+ ‘install’ never preserves extended attributes (xattr).
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--backup[=METHOD]’
+ *Note Backup options::. Make a backup of each file that would
+ otherwise be overwritten or removed.
+
+‘-C’
+‘--compare’
+ Compare content of source and destination files, and if there would
+ be no change to the destination content, owner, group, permissions,
+ and possibly SELinux context, then do not modify the destination at
+ all. Note this option is best used in conjunction with ‘--user’,
+ ‘--group’ and ‘--mode’ options, lest ‘install’ incorrectly
+ determines the default attributes that installed files would have
+ (as it doesn’t consider setgid directories and POSIX default ACLs
+ for example). This could result in redundant copies or attributes
+ that are not reset to the correct defaults.
+
+‘-c’
+ Ignored; for compatibility with old Unix versions of ‘install’.
+
+‘-D’
+ Create any missing parent directories of DEST, then copy SOURCE to
+ DEST. Explicitly specifying the ‘--target-directory=DIR’ will
+ similarly ensure the presence of that hierarchy before copying
+ SOURCE arguments.
+
+‘-d’
+‘--directory’
+ Create any missing parent directories, giving them the default
+ attributes. Then create each given directory, setting their owner,
+ group and mode as given on the command line or to the defaults.
+
+‘--debug’
+ Print extra information to stdout, explaining how files are copied.
+ This option implies the ‘--verbose’ option.
+
+‘-g GROUP’
+‘--group=GROUP’
+ Set the group ownership of installed files or directories to GROUP.
+ The default is the process’s current group. GROUP may be either a
+ group name or a numeric group ID.
+
+‘-m MODE’
+‘--mode=MODE’
+ Set the file mode bits for the installed file or directory to MODE,
+ which can be either an octal number, or a symbolic mode as in
+ ‘chmod’, with ‘a=’ (no access allowed to anyone) as the point of
+ departure (*note File permissions::). The default mode is
+ ‘u=rwx,go=rx,a-s’ – read, write, and execute for the owner, read
+ and execute for group and other, and with set-user-ID and
+ set-group-ID disabled. This default is not quite the same as
+ ‘755’, since it disables instead of preserving set-user-ID and
+ set-group-ID on directories. *Note Directory Setuid and Setgid::.
+
+‘-o OWNER’
+‘--owner=OWNER’
+ If ‘install’ has appropriate privileges (is run as root), set the
+ ownership of installed files or directories to OWNER. The default
+ is ‘root’. OWNER may be either a user name or a numeric user ID.
+
+‘--preserve-context’
+ Preserve the SELinux security context of files and directories.
+ Failure to preserve the context in all of the files or directories
+ will result in an exit status of 1. If SELinux is disabled then
+ print a warning and ignore the option.
+
+‘-p’
+‘--preserve-timestamps’
+ Set the time of last access and the time of last modification of
+ each installed file to match those of each corresponding original
+ file. When a file is installed without this option, its last
+ access and last modification timestamps are both set to the time of
+ installation. This option is useful if you want to use the last
+ modification timestamps of installed files to keep track of when
+ they were last built as opposed to when they were last installed.
+
+‘-s’
+‘--strip’
+ Strip the symbol tables from installed binary executables.
+
+‘--strip-program=PROGRAM’
+ Program used to strip binaries.
+
+‘-S SUFFIX’
+‘--suffix=SUFFIX’
+ Append SUFFIX to each backup file made with ‘-b’. *Note Backup
+ options::.
+
+‘-t DIRECTORY’
+‘--target-directory=DIRECTORY’
+ Specify the destination DIRECTORY. *Note Target directory::. Also
+ specifying the ‘-D’ option will ensure the directory is present.
+
+‘-T’
+‘--no-target-directory’
+ Do not treat the last operand specially when it is a directory or a
+ symbolic link to a directory. *Note Target directory::.
+
+‘-v’
+‘--verbose’
+ Print the name of each file before copying it.
+
+‘-Z’
+‘--context[=CONTEXT]’
+ Without a specified CONTEXT, adjust the SELinux security context
+ according to the system default type for destination files,
+ similarly to the ‘restorecon’ command. The long form of this
+ option with a specific context specified, will set the context for
+ newly created files only. With a specified context, if both
+ SELinux and SMACK are disabled, a warning is issued. This option
+ is mutually exclusive with the ‘--preserve-context’ option.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: mv invocation, Next: rm invocation, Prev: install invocation, Up: Basic operations
+
+11.4 ‘mv’: Move (rename) files
+==============================
+
+‘mv’ moves or renames files (or directories). Synopses:
+
+ mv [OPTION]... [-T] SOURCE DEST
+ mv [OPTION]... SOURCE... DIRECTORY
+ mv [OPTION]... -t DIRECTORY SOURCE...
+
+ • If two file names are given, ‘mv’ moves the first file to the
+ second.
+
+ • If the ‘--target-directory’ (‘-t’) option is given, or failing that
+ if the last file is a directory and the ‘--no-target-directory’
+ (‘-T’) option is not given, ‘mv’ moves each SOURCE file to the
+ specified directory, using the SOURCEs’ names.
+
+ To move a file, ‘mv’ ordinarily simply renames it. However, if
+renaming does not work because the destination’s file system differs,
+‘mv’ falls back on copying as if by ‘cp -a’, then (assuming the copy
+succeeded) it removes the original. If the copy fails, then ‘mv’
+removes any partially created copy in the destination. If you were to
+copy three directories from one file system to another and the copy of
+the first directory succeeded, but the second didn’t, the first would be
+left on the destination file system and the second and third would be
+left on the original file system.
+
+ ‘mv’ always tries to copy extended attributes (xattr), which may
+include SELinux context, ACLs or Capabilities. Upon failure all but
+‘Operation not supported’ warnings are output.
+
+ If a destination file exists but is normally unwritable, standard
+input is a terminal, and the ‘-f’ or ‘--force’ option is not given, ‘mv’
+prompts the user for whether to replace the file. (You might own the
+file, or have write permission on its directory.) If the response is
+not affirmative, the file is skipped.
+
+ _Warning_: Avoid specifying a source name with a trailing slash, when
+it might be a symlink to a directory. Otherwise, ‘mv’ may do something
+very surprising, since its behavior depends on the underlying rename
+system call. On a system with a modern Linux-based kernel, it fails
+with ‘errno=ENOTDIR’. However, on other systems (at least FreeBSD 6.1
+and Solaris 10) it silently renames not the symlink but rather the
+directory referenced by the symlink. *Note Trailing slashes::.
+
+ _Note_: ‘mv’ will only replace empty directories in the destination.
+Conflicting populated directories are skipped with a diagnostic.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--backup[=METHOD]’
+ *Note Backup options::. Make a backup of each file that would
+ otherwise be overwritten or removed.
+
+‘--debug’
+ Print extra information to stdout, explaining how files are copied.
+ This option implies the ‘--verbose’ option.
+
+‘-f’
+‘--force’
+ Do not prompt the user before removing a destination file. If you
+ specify more than one of the ‘-i’, ‘-f’, ‘-n’ options, only the
+ final one takes effect.
+
+‘-i’
+‘--interactive’
+ Prompt whether to overwrite each existing destination file,
+ regardless of its permissions, and fail if the response is not
+ affirmative. If you specify more than one of the ‘-i’, ‘-f’, ‘-n’
+ options, only the final one takes effect.
+
+‘-n’
+‘--no-clobber’
+ Do not overwrite an existing file; silently fail instead. If you
+ specify more than one of the ‘-i’, ‘-f’, ‘-n’ options, only the
+ final one takes effect. This option is mutually exclusive with
+ ‘-b’ or ‘--backup’ option. See also the ‘--update=none’ option
+ which will skip existing files but not fail.
+
+‘--no-copy’
+ If a file cannot be renamed because the destination file system
+ differs, fail with a diagnostic instead of copying and then
+ removing the file.
+
+‘-u’
+‘--update’
+ Do not move a non-directory that has an existing destination with
+ the same or newer modification timestamp; instead, silently skip
+ the file without failing. If the move is across file system
+ boundaries, the comparison is to the source timestamp truncated to
+ the resolutions of the destination file system and of the system
+ calls used to update timestamps; this avoids duplicate work if
+ several ‘mv -u’ commands are executed with the same source and
+ destination. This option is ignored if the ‘-n’ or ‘--no-clobber’
+ option is also specified.
+
+ WHICH gives more control over which existing files in the
+ destination are replaced, and its value can be one of the
+ following:
+
+ ‘all’
+ This is the default operation when an ‘--update’ option is not
+ specified, and results in all existing files in the
+ destination being replaced.
+
+ ‘none’
+ This is similar to the ‘--no-clobber’ option, in that no files
+ in the destination are replaced, but also skipping a file does
+ not induce a failure.
+
+ ‘older’
+ This is the default operation when ‘--update’ is specified,
+ and results in files being replaced if they’re older than the
+ corresponding source file.
+
+‘-v’
+‘--verbose’
+ Print the name of each file before moving it.
+
+‘--strip-trailing-slashes’
+ Remove any trailing slashes from each SOURCE argument. *Note
+ Trailing slashes::.
+
+‘-S SUFFIX’
+‘--suffix=SUFFIX’
+ Append SUFFIX to each backup file made with ‘-b’. *Note Backup
+ options::.
+
+‘-t DIRECTORY’
+‘--target-directory=DIRECTORY’
+ Specify the destination DIRECTORY. *Note Target directory::.
+
+‘-T’
+‘--no-target-directory’
+ Do not treat the last operand specially when it is a directory or a
+ symbolic link to a directory. *Note Target directory::.
+
+‘-Z’
+‘--context’
+ This option functions similarly to the ‘restorecon’ command, by
+ adjusting the SELinux security context according to the system
+ default type for destination files and each created directory.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: rm invocation, Next: shred invocation, Prev: mv invocation, Up: Basic operations
+
+11.5 ‘rm’: Remove files or directories
+======================================
+
+‘rm’ removes each given FILE. By default, it does not remove
+directories. Synopsis:
+
+ rm [OPTION]... [FILE]...
+
+ If the ‘-I’ or ‘--interactive=once’ option is given, and there are
+more than three files or the ‘-r’, ‘-R’, or ‘--recursive’ are given,
+then ‘rm’ prompts the user for whether to proceed with the entire
+operation. If the response is not affirmative, the entire command is
+aborted.
+
+ Otherwise, if a file is unwritable, standard input is a terminal, and
+the ‘-f’ or ‘--force’ option is not given, or the ‘-i’ or
+‘--interactive=always’ option _is_ given, ‘rm’ prompts the user for
+whether to remove the file. If the response is not affirmative, the
+file is skipped.
+
+ Any attempt to remove a file whose last file name component is ‘.’ or
+‘..’ is rejected without any prompting, as mandated by POSIX.
+
+ _Warning_: If you use ‘rm’ to remove a file, it is usually possible
+to recover the contents of that file. If you want more assurance that
+the contents are unrecoverable, consider using ‘shred’.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-d’
+‘--dir’
+ Remove the listed directories if they are empty.
+
+‘-f’
+‘--force’
+ Ignore nonexistent files and missing operands, and never prompt the
+ user. Ignore any previous ‘--interactive’ (‘-i’) option.
+
+‘-i’
+ Prompt whether to remove each file. If the response is not
+ affirmative, silently skip the file without failing. Ignore any
+ previous ‘--force’ (‘-f’) option. Equivalent to
+ ‘--interactive=always’.
+
+‘-I’
+ Prompt once whether to proceed with the command, if more than three
+ files are named or if a recursive removal is requested. Ignore any
+ previous ‘--force’ (‘-f’) option. Equivalent to
+ ‘--interactive=once’.
+
+‘--interactive [=WHEN]’
+ Specify when to issue an interactive prompt. WHEN may be omitted,
+ or one of:
+ • never - Do not prompt at all.
+ • once - Prompt once if more than three files are named or if a
+ recursive removal is requested. Equivalent to ‘-I’.
+ • always - Prompt for every file being removed. Equivalent to
+ ‘-i’.
+ ‘--interactive’ with no WHEN is equivalent to
+ ‘--interactive=always’.
+
+‘--one-file-system’
+ When removing a hierarchy recursively, do not remove any directory
+ that is on a file system different from that of the corresponding
+ command line argument. This option is useful when removing a build
+ “chroot” hierarchy, which normally contains no valuable data.
+ However, it is not uncommon to bind-mount ‘/home’ into such a
+ hierarchy, to make it easier to use one’s start-up file. The catch
+ is that it’s easy to forget to unmount ‘/home’. Then, when you use
+ ‘rm -rf’ to remove your normally throw-away chroot, that command
+ will remove everything under ‘/home’, too. Use the
+ ‘--one-file-system’ option, and it will diagnose and skip
+ directories on other file systems. Of course, this will not save
+ your ‘/home’ if it and your chroot happen to be on the same file
+ system. See also ‘--preserve-root=all’ to protect command line
+ arguments themselves.
+
+‘--preserve-root [=all]’
+ Fail upon any attempt to remove the root directory, ‘/’, when used
+ with the ‘--recursive’ option. This is the default behavior.
+ *Note Treating / specially::. When ‘all’ is specified, reject any
+ command line argument that is not on the same file system as its
+ parent.
+
+‘--no-preserve-root’
+ Do not treat ‘/’ specially when removing recursively. This option
+ is not recommended unless you really want to remove all the files
+ on your computer. *Note Treating / specially::.
+
+‘-r’
+‘-R’
+‘--recursive’
+ Remove the listed directories and their contents recursively.
+
+‘-v’
+‘--verbose’
+ Print the name of each file before removing it.
+
+ One common question is how to remove files whose names begin with a
+‘-’. GNU ‘rm’, like every program that uses the ‘getopt’ function to
+parse its arguments, lets you use the ‘--’ option to indicate that all
+following arguments are non-options. To remove a file called ‘-f’ in
+the current directory, you could type either:
+
+ rm -- -f
+
+or:
+
+ rm ./-f
+
+ The Unix ‘rm’ program’s use of a single ‘-’ for this purpose predates
+the development of the ‘getopt’ standard syntax.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: shred invocation, Prev: rm invocation, Up: Basic operations
+
+11.6 ‘shred’: Remove files more securely
+========================================
+
+‘shred’ overwrites devices or files, to help prevent even extensive
+forensics from recovering the data.
+
+ Ordinarily when you remove a file (*note rm invocation::), its data
+and metadata are not actually destroyed. Only the file’s directory
+entry is removed, and the file’s storage is reclaimed only when no
+process has the file open and no other directory entry links to the
+file. And even if file’s data and metadata’s storage space is freed for
+further reuse, there are undelete utilities that will attempt to
+reconstruct the file from the data in freed storage, and that can bring
+the file back if the storage was not rewritten.
+
+ On a busy system with a nearly-full device, space can get reused in a
+few seconds. But there is no way to know for sure. And although the
+undelete utilities and already-existing processes require insider or
+superuser access, you may be wary of the superuser, of processes running
+on your behalf, or of attackers that can physically access the storage
+device. So if you have sensitive data, you may want to be sure that
+recovery is not possible by plausible attacks like these.
+
+ The best way to remove something irretrievably is to destroy the
+media it’s on with acid, melt it down, or the like. For cheap removable
+media this is often the preferred method. However, some storage devices
+are expensive or are harder to destroy, so the ‘shred’ utility tries to
+achieve a similar effect non-destructively, by overwriting the file with
+non-sensitive data.
+
+ *Please note* that ‘shred’ relies on a crucial assumption: that the
+file system and hardware overwrite data in place. Although this is
+common and is the traditional way to do things, many modern file system
+designs do not satisfy this assumption. Exceptions include:
+
+ • Log-structured or journaled file systems, such as ext3/ext4 (in
+ ‘data=journal’ mode), Btrfs, NTFS, ReiserFS, XFS, ZFS, file systems
+ supplied with AIX and Solaris, etc., when they are configured to
+ journal data.
+
+ • File systems that write redundant data and carry on even if some
+ writes fail, such as RAID-based file systems.
+
+ • File systems that make snapshots, such as Network Appliance’s NFS
+ server.
+
+ • File systems that cache in temporary locations, such as NFS version
+ 3 clients.
+
+ • Compressed file systems.
+
+ For ext3 and ext4 file systems, ‘shred’ is less effective when the
+file system is in ‘data=journal’ mode, which journals file data in
+addition to just metadata. In both the ‘data=ordered’ (default) and
+‘data=writeback’ modes, ‘shred’ works as usual. The ext3/ext4
+journaling modes can be changed by adding the ‘data=something’ option to
+the mount options for a particular file system in the ‘/etc/fstab’ file,
+as documented in the ‘mount’ man page (‘man mount’). Alternatively, if
+you know how large the journal is, you can shred the journal by
+shredding enough file data so that the journal cycles around and fills
+up with shredded data.
+
+ If you are not sure how your file system operates, then you should
+assume that it does not overwrite data in place, which means ‘shred’
+cannot reliably operate on regular files in your file system.
+
+ Generally speaking, it is more reliable to shred a device than a
+file, since this bypasses file system design issues mentioned above.
+However, devices are also problematic for shredding, for reasons such as
+the following:
+
+ • Solid-state storage devices (SSDs) typically do wear leveling to
+ prolong service life, and this means writes are distributed to
+ other blocks by the hardware, so “overwritten” data blocks are
+ still present in the underlying device.
+
+ • Most storage devices map out bad blocks invisibly to the
+ application; if the bad blocks contain sensitive data, ‘shred’
+ won’t be able to destroy it.
+
+ • With some obsolete storage technologies, it may be possible to take
+ (say) a floppy disk back to a laboratory and use a lot of sensitive
+ (and expensive) equipment to look for the faint “echoes” of the
+ original data underneath the overwritten data. With these older
+ technologies, if the file has been overwritten only once, it’s
+ reputedly not even that hard. Luckily, this kind of data recovery
+ has become difficult, and there is no public evidence that today’s
+ higher-density storage devices can be analyzed in this way.
+
+ The ‘shred’ command can use many overwrite passes, with data
+ patterns chosen to maximize the damage they do to the old data. By
+ default the patterns are designed for best effect on hard drives
+ using now-obsolete technology; for newer devices, a single pass
+ should suffice. For more details, see the source code and Peter
+ Gutmann’s paper ‘Secure Deletion of Data from Magnetic and
+ Solid-State Memory’
+ (https://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html), from
+ the proceedings of the Sixth USENIX Security Symposium (San Jose,
+ California, July 22–25, 1996).
+
+ ‘shred’ makes no attempt to detect or report these problems, just as
+it makes no attempt to do anything about backups. However, since it is
+more reliable to shred devices than files, ‘shred’ by default does not
+deallocate or remove the output file. This default is more suitable for
+devices, which typically cannot be deallocated and should not be
+removed.
+
+ Finally, consider the risk of backups and mirrors. File system
+backups and remote mirrors may contain copies of the file that cannot be
+removed, and that will allow a shredded file to be recovered later. So
+if you keep any data you may later want to destroy using ‘shred’, be
+sure that it is not backed up or mirrored.
+
+ shred [OPTION]... FILE[...]
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-f’
+‘--force’
+ Override file permissions if necessary to allow overwriting.
+
+‘-n NUMBER’
+‘--iterations=NUMBER’
+ By default, ‘shred’ uses 3 passes of overwrite. You can reduce
+ this to save time, or increase it if you think it’s appropriate.
+ After 25 passes all of the internal overwrite patterns will have
+ been used at least once.
+
+‘--random-source=FILE’
+ Use FILE as a source of random data used to overwrite and to choose
+ pass ordering. *Note Random sources::.
+
+‘-s BYTES’
+‘--size=BYTES’
+ Shred the first BYTES bytes of the file. The default is to shred
+ the whole file. BYTES can be followed by a size specification like
+ ‘K’, ‘M’, or ‘G’ to specify a multiple. *Note Block size::.
+
+‘-u’
+‘--remove[=HOW]’
+ After shredding a file, deallocate it (if possible) and then remove
+ it. If a file has multiple links, only the named links will be
+ removed. Often the file name is less sensitive than the file data,
+ in which case the optional HOW parameter, supported with the long
+ form option, gives control of how to more efficiently remove each
+ directory entry. The ‘unlink’ parameter will just use a standard
+ unlink call, ‘wipe’ will also first obfuscate bytes in the name,
+ and ‘wipesync’ will also sync each obfuscated byte in the name to
+ the file system. Note ‘wipesync’ is the default method, but can be
+ expensive, requiring a sync for every character in every file.
+ This can become significant with many files, or is redundant if
+ your file system provides synchronous metadata updates.
+
+‘-v’
+‘--verbose’
+ Display to standard error all status updates as sterilization
+ proceeds.
+
+‘-x’
+‘--exact’
+ By default, ‘shred’ rounds the size of a regular file up to the
+ next multiple of the file system block size to fully erase the
+ slack space in the last block of the file. This space may contain
+ portions of the current system memory on some systems for example.
+ Use ‘--exact’ to suppress that behavior. Thus, by default if you
+ shred a 10-byte regular file on a system with 512-byte blocks, the
+ resulting file will be 512 bytes long. With this option, shred
+ does not increase the apparent size of the file.
+
+‘-z’
+‘--zero’
+ Normally, the last pass that ‘shred’ writes is made up of random
+ data. If this would be conspicuous on your storage device (for
+ example, because it looks like encrypted data), or you just think
+ it’s tidier, the ‘--zero’ option adds an additional overwrite pass
+ with all zero bits. This is in addition to the number of passes
+ specified by the ‘--iterations’ option.
+
+ You might use the following command to erase the file system you
+created on a USB flash drive. This command typically takes several
+minutes, depending on the drive’s size and write speed. On modern
+storage devices a single pass should be adequate, and will take one
+third the time of the default three-pass approach.
+
+ shred -v -n 1 /dev/sdd1
+
+ Similarly, to erase all data on a selected partition of your device,
+you could give a command like the following.
+
+ # 1 pass, write pseudo-random data; 3x faster than the default
+ shred -v -n1 /dev/sda5
+
+ To be on the safe side, use at least one pass that overwrites using
+pseudo-random data. I.e., don’t be tempted to use ‘-n0 --zero’, in case
+some device controller optimizes the process of writing blocks of all
+zeros, and thereby does not clear all bytes in a block. Some SSDs may
+do just that.
+
+ A FILE of ‘-’ denotes standard output. The intended use of this is
+to shred a removed temporary file. For example:
+
+ i=$(mktemp)
+ exec 3<>"$i"
+ rm -- "$i"
+ echo "Hello, world" >&3
+ shred - >&3
+ exec 3>-
+
+ However, the command ‘shred - >file’ does not shred the contents of
+FILE, since the shell truncates FILE before invoking ‘shred’. Use the
+command ‘shred file’ or (if using a Bourne-compatible shell) the command
+‘shred - 1<>file’ instead.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Special file types, Next: Changing file attributes, Prev: Basic operations, Up: Top
+
+12 Special file types
+*********************
+
+This chapter describes commands which create special types of files (and
+‘rmdir’, which removes directories, one special file type).
+
+ Although Unix-like operating systems have markedly fewer special file
+types than others, not _everything_ can be treated only as the
+undifferentiated byte stream of “normal files”. For example, when a
+file is created or removed, the system must record this information,
+which it does in a “directory” – a special type of file. Although you
+can read directories as normal files, if you’re curious, in order for
+the system to do its job it must impose a structure, a certain order, on
+the bytes of the file. Thus it is a “special” type of file.
+
+ Besides directories, other special file types include named pipes
+(FIFOs), symbolic links, sockets, and so-called “special files”.
+
+* Menu:
+
+* link invocation:: Make a hard link via the link syscall
+* ln invocation:: Make links between files.
+* mkdir invocation:: Make directories.
+* mkfifo invocation:: Make FIFOs (named pipes).
+* mknod invocation:: Make block or character special files.
+* readlink invocation:: Print value of a symlink or canonical file name.
+* rmdir invocation:: Remove empty directories.
+* unlink invocation:: Remove files via the unlink syscall
+
+
+File: coreutils.info, Node: link invocation, Next: ln invocation, Up: Special file types
+
+12.1 ‘link’: Make a hard link via the link syscall
+==================================================
+
+‘link’ creates a single hard link at a time. It is a minimalist
+interface to the system-provided ‘link’ function. *Note (libc)Hard
+Links::. It avoids the bells and whistles of the more commonly-used
+‘ln’ command (*note ln invocation::). Synopsis:
+
+ link FILENAME LINKNAME
+
+ FILENAME must specify an existing file, and LINKNAME must specify a
+nonexistent entry in an existing directory. ‘link’ simply calls ‘link
+(FILENAME, LINKNAME)’ to create the link.
+
+ On a GNU system, this command acts like ‘ln --directory
+--no-target-directory FILENAME LINKNAME’. However, the ‘--directory’
+and ‘--no-target-directory’ options are not specified by POSIX, and the
+‘link’ command is more portable in practice.
+
+ If FILENAME is a symbolic link, it is unspecified whether LINKNAME
+will be a hard link to the symbolic link or to the target of the
+symbolic link. Use ‘ln -P’ or ‘ln -L’ to specify which behavior is
+desired.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: ln invocation, Next: mkdir invocation, Prev: link invocation, Up: Special file types
+
+12.2 ‘ln’: Make links between files
+===================================
+
+‘ln’ makes links between files. By default, it makes hard links; with
+the ‘-s’ option, it makes symbolic (or “soft”) links. Synopses:
+
+ ln [OPTION]... [-T] TARGET LINKNAME
+ ln [OPTION]... TARGET
+ ln [OPTION]... TARGET... DIRECTORY
+ ln [OPTION]... -t DIRECTORY TARGET...
+
+ • If two file names are given, ‘ln’ creates a link to the first file
+ from the second.
+
+ • If one TARGET is given, ‘ln’ creates a link to that file in the
+ current directory.
+
+ • If the ‘--target-directory’ (‘-t’) option is given, or failing that
+ if the last file is a directory and the ‘--no-target-directory’
+ (‘-T’) option is not given, ‘ln’ creates a link to each TARGET file
+ in the specified directory, using the TARGETs’ names.
+
+ Normally ‘ln’ does not replace existing files. Use the ‘--force’
+(‘-f’) option to replace them unconditionally, the ‘--interactive’
+(‘-i’) option to replace them conditionally, and the ‘--backup’ (‘-b’)
+option to rename them. Unless the ‘--backup’ (‘-b’) option is used
+there is no brief moment when the destination does not exist; this is an
+extension to POSIX.
+
+ A “hard link” is another name for an existing file; the link and the
+original are indistinguishable. Technically speaking, they share the
+same inode, and the inode contains all the information about a file –
+indeed, it is not incorrect to say that the inode _is_ the file. Most
+systems prohibit making a hard link to a directory; on those where it is
+allowed, only the super-user can do so (and with caution, since creating
+a cycle will cause problems to many other utilities). Hard links cannot
+cross file system boundaries. (These restrictions are not mandated by
+POSIX, however.)
+
+ “Symbolic links” (“symlinks” for short), on the other hand, are a
+special file type (which not all kernels support: System V release 3
+(and older) systems lack symlinks) in which the link file actually
+refers to a different file, by name. When most operations (opening,
+reading, writing, and so on) are passed the symbolic link file, the
+kernel automatically “dereferences” the link and operates on the target
+of the link. But some operations (e.g., removing) work on the link file
+itself, rather than on its target. The owner and group of a symlink are
+not significant to file access performed through the link, but do have
+implications on deleting a symbolic link from a directory with the
+restricted deletion bit set. On the GNU system, the mode of a symlink
+has no significance and cannot be changed, but on some BSD systems, the
+mode can be changed and will affect whether the symlink will be
+traversed in file name resolution. *Note (libc)Symbolic Links::.
+
+ Symbolic links can contain arbitrary strings; a “dangling symlink”
+occurs when the string in the symlink does not resolve to a file. There
+are no restrictions against creating dangling symbolic links. There are
+trade-offs to using absolute or relative symlinks. An absolute symlink
+always points to the same file, even if the directory containing the
+link is moved. However, if the symlink is visible from more than one
+machine (such as on a networked file system), the file pointed to might
+not always be the same. A relative symbolic link is resolved in
+relation to the directory that contains the link, and is often useful in
+referring to files on the same device without regards to what name that
+device is mounted on when accessed via networked machines.
+
+ When creating a relative symlink in a different location than the
+current directory, the resolution of the symlink will be different than
+the resolution of the same string from the current directory.
+Therefore, many users prefer to first change directories to the location
+where the relative symlink will be created, so that tab-completion or
+other file resolution will find the same target as what will be placed
+in the symlink.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-b’
+‘--backup[=METHOD]’
+ *Note Backup options::. Make a backup of each file that would
+ otherwise be overwritten or removed.
+
+‘-d’
+‘-F’
+‘--directory’
+ Allow users with appropriate privileges to attempt to make hard
+ links to directories. However, note that this will probably fail
+ due to system restrictions, even for the super-user.
+
+‘-f’
+‘--force’
+ Remove existing destination files.
+
+‘-i’
+‘--interactive’
+ Prompt whether to remove existing destination files, and fail if
+ the response is not affirmative.
+
+‘-L’
+‘--logical’
+ If ‘-s’ is not in effect, and the source file is a symbolic link,
+ create the hard link to the file referred to by the symbolic link,
+ rather than the symbolic link itself.
+
+‘-n’
+‘--no-dereference’
+ Do not treat the last operand specially when it is a symbolic link
+ to a directory. Instead, treat it as if it were a normal file.
+
+ When the destination is an actual directory (not a symlink to one),
+ there is no ambiguity. The link is created in that directory. But
+ when the specified destination is a symlink to a directory, there
+ are two ways to treat the user’s request. ‘ln’ can treat the
+ destination just as it would a normal directory and create the link
+ in it. On the other hand, the destination can be viewed as a
+ non-directory – as the symlink itself. In that case, ‘ln’ must
+ delete or backup that symlink before creating the new link. The
+ default is to treat a destination that is a symlink to a directory
+ just like a directory.
+
+ This option is weaker than the ‘--no-target-directory’ (‘-T’)
+ option, so it has no effect if both options are given.
+
+‘-P’
+‘--physical’
+ If ‘-s’ is not in effect, and the source file is a symbolic link,
+ create the hard link to the symbolic link itself. On platforms
+ where this is not supported by the kernel, this option creates a
+ symbolic link with identical contents; since symbolic link contents
+ cannot be edited, any file name resolution performed through either
+ link will be the same as if a hard link had been created.
+
+‘-r’
+‘--relative’
+ Make symbolic links relative to the link location. This option is
+ only valid with the ‘--symbolic’ option.
+
+ Example:
+
+ ln -srv /a/file /tmp
+ '/tmp/file' -> '../a/file'
+
+ Relative symbolic links are generated based on their canonicalized
+ containing directory, and canonicalized targets. I.e., all
+ symbolic links in these file names will be resolved. *Note
+ realpath invocation::, which gives greater control over relative
+ file name generation, as demonstrated in the following example:
+
+ ln--relative() {
+ test "$1" = --no-symlinks && { nosym=$1; shift; }
+ target="$1";
+ test -d "$2" && link="$2/." || link="$2"
+ rtarget="$(realpath $nosym -m "$target" \
+ --relative-to "$(dirname "$link")")"
+ ln -s -v "$rtarget" "$link"
+ }
+
+‘-s’
+‘--symbolic’
+ Make symbolic links instead of hard links. This option merely
+ produces an error message on systems that do not support symbolic
+ links.
+
+‘-S SUFFIX’
+‘--suffix=SUFFIX’
+ Append SUFFIX to each backup file made with ‘-b’. *Note Backup
+ options::.
+
+‘-t DIRECTORY’
+‘--target-directory=DIRECTORY’
+ Specify the destination DIRECTORY. *Note Target directory::.
+
+‘-T’
+‘--no-target-directory’
+ Do not treat the last operand specially when it is a directory or a
+ symbolic link to a directory. *Note Target directory::.
+
+‘-v’
+‘--verbose’
+ Print the name of each file after linking it successfully.
+
+ If ‘-L’ and ‘-P’ are both given, the last one takes precedence. If
+‘-s’ is also given, ‘-L’ and ‘-P’ are silently ignored. If neither
+option is given, then this implementation defaults to ‘-P’ if the system
+‘link’ supports hard links to symbolic links (such as the GNU system),
+and ‘-L’ if ‘link’ follows symbolic links (such as on BSD).
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ Bad Example:
+
+ # Create link ../a pointing to a in that directory.
+ # Not really useful because it points to itself.
+ ln -s a ..
+
+ Better Example:
+
+ # Change to the target before creating symlinks to avoid being confused.
+ cd ..
+ ln -s adir/a .
+
+ Bad Example:
+
+ # Hard coded file names don't move well.
+ ln -s $(pwd)/a /some/dir/
+
+ Better Example:
+
+ # Relative file names survive directory moves and also
+ # work across networked file systems.
+ ln -s afile anotherfile
+ ln -s ../adir/afile yetanotherfile
+
+
+File: coreutils.info, Node: mkdir invocation, Next: mkfifo invocation, Prev: ln invocation, Up: Special file types
+
+12.3 ‘mkdir’: Make directories
+==============================
+
+‘mkdir’ creates directories with the specified names. Synopsis:
+
+ mkdir [OPTION]... NAME...
+
+ ‘mkdir’ creates each directory NAME in the order given. It reports
+an error if NAME already exists, unless the ‘-p’ option is given and
+NAME is a directory.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-m MODE’
+‘--mode=MODE’
+ Set the file permission bits of created directories to MODE, which
+ uses the same syntax as in ‘chmod’ and uses ‘a=rwx’ (read, write
+ and execute allowed for everyone) for the point of the departure.
+ *Note File permissions::. This option affects only directories
+ given on the command line; it does not affect any parents that may
+ be created via the ‘-p’ option.
+
+ Normally the directory has the desired file mode bits at the moment
+ it is created. As a GNU extension, MODE may also mention special
+ mode bits, but in this case there may be a temporary window during
+ which the directory exists but its special mode bits are incorrect.
+ *Note Directory Setuid and Setgid::, for how the set-user-ID and
+ set-group-ID bits of directories are inherited unless overridden in
+ this way.
+
+‘-p’
+‘--parents’
+ Make any missing parent directories for each argument, setting
+ their file permission bits to ‘=rwx,u+wx’, that is, with the umask
+ modified by ‘u+wx’. Ignore existing parent directories, and do not
+ change their file permission bits.
+
+ If the ‘-m’ option is also given, it does not affect file
+ permission bits of any newly-created parent directories. To
+ control these bits, set the umask before invoking ‘mkdir’. For
+ example, if the shell command ‘(umask u=rwx,go=rx; mkdir -p P/Q)’
+ creates the parent ‘P’ it sets the parent’s file permission bits to
+ ‘u=rwx,go=rx’. (The umask must include ‘u=wx’ for this method to
+ work.) To set a parent’s special mode bits as well, you can invoke
+ ‘chmod’ after ‘mkdir’. *Note Directory Setuid and Setgid::, for
+ how the set-user-ID and set-group-ID bits of newly-created parent
+ directories are inherited.
+
+‘-v’
+‘--verbose’
+ Print a message for each created directory. This is most useful
+ with ‘--parents’.
+
+‘-Z’
+‘--context[=CONTEXT]’
+ Without a specified CONTEXT, adjust the SELinux security context
+ according to the system default type for destination files,
+ similarly to the ‘restorecon’ command. The long form of this
+ option with a specific context specified, will set the context for
+ newly created files only. With a specified context, if both
+ SELinux and SMACK are disabled, a warning is issued.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: mkfifo invocation, Next: mknod invocation, Prev: mkdir invocation, Up: Special file types
+
+12.4 ‘mkfifo’: Make FIFOs (named pipes)
+=======================================
+
+‘mkfifo’ creates FIFOs (also called “named pipes”) with the specified
+names. Synopsis:
+
+ mkfifo [OPTION] NAME...
+
+ A “FIFO” is a special file type that permits independent processes to
+communicate. One process opens the FIFO file for writing, and another
+for reading, after which data can flow as with the usual anonymous pipe
+in shells or elsewhere.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-m MODE’
+‘--mode=MODE’
+ Set the mode of created FIFOs to MODE, which is symbolic as in
+ ‘chmod’ and uses ‘a=rw’ (read and write allowed for everyone) for
+ the point of departure. MODE should specify only file permission
+ bits. *Note File permissions::.
+
+‘-Z’
+‘--context[=CONTEXT]’
+ Without a specified CONTEXT, adjust the SELinux security context
+ according to the system default type for destination files,
+ similarly to the ‘restorecon’ command. The long form of this
+ option with a specific context specified, will set the context for
+ newly created files only. With a specified context, if both
+ SELinux and SMACK are disabled, a warning is issued.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: mknod invocation, Next: readlink invocation, Prev: mkfifo invocation, Up: Special file types
+
+12.5 ‘mknod’: Make block or character special files
+===================================================
+
+‘mknod’ creates a FIFO, character special file, or block special file
+with the specified name. Synopsis:
+
+ mknod [OPTION]... NAME TYPE [MAJOR MINOR]
+
+ Unlike the phrase “special file type” above, the term “special file”
+has a technical meaning on Unix: something that can generate or receive
+data. Usually this corresponds to a physical piece of hardware, e.g., a
+printer or a flash drive. (These files are typically created at
+system-configuration time.) The ‘mknod’ command is what creates files
+of this type. Such devices can be read either a character at a time or
+a “block” (many characters) at a time, hence we say there are “block
+special” files and “character special” files.
+
+ Due to shell aliases and built-in ‘mknod’ functions, using an
+unadorned ‘mknod’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+mknod ...’) to avoid interference from the shell.
+
+ The arguments after NAME specify the type of file to make:
+
+‘p’
+ for a FIFO
+
+‘b’
+ for a block special file
+
+‘c’
+ for a character special file
+
+ When making a block or character special file, the major and minor
+device numbers must be given after the file type. If a major or minor
+device number begins with ‘0x’ or ‘0X’, it is interpreted as
+hexadecimal; otherwise, if it begins with ‘0’, as octal; otherwise, as
+decimal.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-m MODE’
+‘--mode=MODE’
+ Set the mode of created files to MODE, which is symbolic as in
+ ‘chmod’ and uses ‘a=rw’ as the point of departure. MODE should
+ specify only file permission bits. *Note File permissions::.
+
+‘-Z’
+‘--context[=CONTEXT]’
+ Without a specified CONTEXT, adjust the SELinux security context
+ according to the system default type for destination files,
+ similarly to the ‘restorecon’ command. The long form of this
+ option with a specific context specified, will set the context for
+ newly created files only. With a specified context, if both
+ SELinux and SMACK are disabled, a warning is issued.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: readlink invocation, Next: rmdir invocation, Prev: mknod invocation, Up: Special file types
+
+12.6 ‘readlink’: Print value of a symlink or canonical file name
+================================================================
+
+‘readlink’ may work in one of two supported modes:
+
+‘Readlink mode’
+
+ ‘readlink’ outputs the value of the given symbolic links. If
+ ‘readlink’ is invoked with an argument other than the name of a
+ symbolic link, it produces no output and exits with a nonzero exit
+ code.
+
+‘Canonicalize mode’
+
+ ‘readlink’ outputs the absolute name of the given files which
+ contain no ‘.’, ‘..’ components nor any repeated separators (‘/’)
+ or symbolic links. Note the ‘realpath’ command is the preferred
+ command to use for canonicalization. *Note realpath invocation::.
+
+ readlink [OPTION]... FILE...
+
+ By default, ‘readlink’ operates in readlink mode.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-f’
+‘--canonicalize’
+ Activate canonicalize mode. If any component of the file name
+ except the last one is missing or unavailable, ‘readlink’ produces
+ no output and exits with a nonzero exit code. A trailing slash is
+ ignored.
+
+‘-e’
+‘--canonicalize-existing’
+ Activate canonicalize mode. If any component is missing or
+ unavailable, ‘readlink’ produces no output and exits with a nonzero
+ exit code. A trailing slash requires that the name resolve to a
+ directory.
+
+‘-m’
+‘--canonicalize-missing’
+ Activate canonicalize mode. If any component is missing or
+ unavailable, ‘readlink’ treats it as a directory.
+
+‘-n’
+‘--no-newline’
+ Do not print the output delimiter, when a single FILE is specified.
+ Print a warning if specified along with multiple FILEs.
+
+‘-s’
+‘-q’
+‘--silent’
+‘--quiet’
+ Suppress most error messages. On by default.
+
+‘-v’
+‘--verbose’
+ Report error messages.
+
+‘-z’
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+ The ‘readlink’ utility first appeared in OpenBSD 2.1.
+
+ The ‘realpath’ command without options, operates like ‘readlink’ in
+canonicalize mode.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: rmdir invocation, Next: unlink invocation, Prev: readlink invocation, Up: Special file types
+
+12.7 ‘rmdir’: Remove empty directories
+======================================
+
+‘rmdir’ removes empty directories. Synopsis:
+
+ rmdir [OPTION]... DIRECTORY...
+
+ If any DIRECTORY argument does not refer to an existing empty
+directory, it is an error.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘--ignore-fail-on-non-empty’
+ Ignore each failure to remove a directory that is non-empty.
+
+‘-p’
+‘--parents’
+ Remove DIRECTORY, then try to remove each component of DIRECTORY.
+ So, for example, ‘rmdir -p a/b/c’ is similar to ‘rmdir a/b/c a/b
+ a’. As such, it fails if any of those directories turns out not to
+ be empty. Use the ‘--ignore-fail-on-non-empty’ option to make it
+ so such a failure does not evoke a diagnostic and does not cause
+ ‘rmdir’ to exit unsuccessfully.
+
+‘-v’
+‘--verbose’
+ Give a diagnostic for each successful removal. DIRECTORY is
+ removed.
+
+ *Note rm invocation::, for how to remove non-empty directories
+recursively.
+
+ To remove all empty directories under DIRNAME, including directories
+that become empty because other directories are removed, you can use
+either of the following commands:
+
+ # This uses GNU extensions.
+ find DIRNAME -type d -empty -delete
+
+ # This runs on any POSIX platform.
+ find DIRNAME -depth -type d -exec rmdir {} +
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: unlink invocation, Prev: rmdir invocation, Up: Special file types
+
+12.8 ‘unlink’: Remove files via the unlink syscall
+==================================================
+
+‘unlink’ deletes a single specified file name. It is a minimalist
+interface to the system-provided ‘unlink’ function. *Note
+(libc)Deleting Files::. Synopsis: It avoids the bells and whistles of
+the more commonly-used ‘rm’ command (*note rm invocation::).
+
+ unlink FILENAME
+
+ On some systems ‘unlink’ can be used to delete the name of a
+directory. On others, it can be used that way only by a privileged
+user. In the GNU system ‘unlink’ can never delete the name of a
+directory.
+
+ The ‘unlink’ command honors the ‘--help’ and ‘--version’ options. To
+remove a file whose name begins with ‘-’, prefix the name with ‘./’,
+e.g., ‘unlink ./--help’.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Changing file attributes, Next: File space usage, Prev: Special file types, Up: Top
+
+13 Changing file attributes
+***************************
+
+A file is not merely its contents, a name, and a file type (*note
+Special file types::). A file also has an owner (a user ID), a group (a
+group ID), permissions (what the owner can do with the file, what people
+in the group can do, and what everyone else can do), various timestamps,
+and other information. Collectively, we call these a file’s
+“attributes”.
+
+ These commands change file attributes.
+
+* Menu:
+
+* chown invocation:: Change file owners and groups.
+* chgrp invocation:: Change file groups.
+* chmod invocation:: Change access permissions.
+* touch invocation:: Change file timestamps.
+
+
+File: coreutils.info, Node: chown invocation, Next: chgrp invocation, Up: Changing file attributes
+
+13.1 ‘chown’: Change file owner and group
+=========================================
+
+‘chown’ changes the user and/or group ownership of each given FILE to
+NEW-OWNER or to the user and group of an existing reference file.
+Synopsis:
+
+ chown [OPTION]... {NEW-OWNER | --reference=REF_FILE} FILE...
+
+ If used, NEW-OWNER specifies the new owner and/or group as follows
+(with no embedded white space):
+
+ [OWNER] [ : [GROUP] ]
+
+ Specifically:
+
+OWNER
+ If only an OWNER (a user name or numeric user ID) is given, that
+ user is made the owner of each given file, and the files’ group is
+ not changed.
+
+OWNER‘:’GROUP
+ If the OWNER is followed by a colon and a GROUP (a group name or
+ numeric group ID), with no spaces between them, the group ownership
+ of the files is changed as well (to GROUP).
+
+OWNER‘:’
+ If a colon but no group name follows OWNER, that user is made the
+ owner of the files and the group of the files is changed to OWNER’s
+ login group.
+
+‘:’GROUP
+ If the colon and following GROUP are given, but the owner is
+ omitted, only the group of the files is changed; in this case,
+ ‘chown’ performs the same function as ‘chgrp’.
+
+‘:’
+ If only a colon is given, or if NEW-OWNER is empty, neither the
+ owner nor the group is changed.
+
+ If OWNER or GROUP is intended to represent a numeric user or group
+ID, then you may specify it with a leading ‘+’. *Note Disambiguating
+names and IDs::.
+
+ Some older scripts may still use ‘.’ in place of the ‘:’ separator.
+POSIX 1003.1-2001 (*note Standards conformance::) does not require
+support for that, but for backward compatibility GNU ‘chown’ supports
+‘.’ so long as no ambiguity results, although it issues a warning and
+support may be removed in future versions. New scripts should avoid the
+use of ‘.’ because it is not portable, and because it has undesirable
+results if the entire OWNER‘.’GROUP happens to identify a user whose
+name contains ‘.’.
+
+ It is system dependent whether a user can change the group to an
+arbitrary one, or the more portable behavior of being restricted to
+setting a group of which the user is a member.
+
+ The ‘chown’ command sometimes clears the set-user-ID or set-group-ID
+permission bits. This behavior depends on the policy and functionality
+of the underlying ‘chown’ system call, which may make system-dependent
+file mode modifications outside the control of the ‘chown’ command. For
+example, the ‘chown’ command might not affect those bits when invoked by
+a user with appropriate privileges, or when the bits signify some
+function other than executable permission (e.g., mandatory locking).
+When in doubt, check the underlying system behavior.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--changes’
+ Verbosely describe the action for each FILE whose ownership
+ actually changes.
+
+‘-f’
+‘--silent’
+‘--quiet’
+ Do not print error messages about files whose ownership cannot be
+ changed.
+
+‘--from=OLD-OWNER’
+ Change a FILE’s ownership only if it has current attributes
+ specified by OLD-OWNER. OLD-OWNER has the same form as NEW-OWNER
+ described above. This option is useful primarily from a security
+ standpoint in that it narrows considerably the window of potential
+ abuse. For example, to reflect a user ID numbering change for one
+ user’s files without an option like this, ‘root’ might run
+
+ find / -owner OLDUSER -print0 | xargs -0 chown -h NEWUSER
+
+ But that is dangerous because the interval between when the ‘find’
+ tests the existing file’s owner and when the ‘chown’ is actually
+ run may be quite large. One way to narrow the gap would be to
+ invoke chown for each file as it is found:
+
+ find / -owner OLDUSER -exec chown -h NEWUSER {} \;
+
+ But that is very slow if there are many affected files. With this
+ option, it is safer (the gap is narrower still) though still not
+ perfect:
+
+ chown -h -R --from=OLDUSER NEWUSER /
+
+‘--dereference’
+ Do not act on symbolic links themselves but rather on what they
+ point to. This is the default when not operating recursively.
+
+ Combining this dereferencing option with the ‘--recursive’ option
+ may create a security risk: During the traversal of the directory
+ tree, an attacker may be able to introduce a symlink to an
+ arbitrary target; when the tool reaches that, the operation will be
+ performed on the target of that symlink, possibly allowing the
+ attacker to escalate privileges.
+
+‘-h’
+‘--no-dereference’
+ Act on symbolic links themselves instead of what they point to.
+ This mode relies on the ‘lchown’ system call. On systems that do
+ not provide the ‘lchown’ system call, ‘chown’ fails when a file
+ specified on the command line is a symbolic link. By default, no
+ diagnostic is issued for symbolic links encountered during a
+ recursive traversal, but see ‘--verbose’.
+
+‘--preserve-root’
+ Fail upon any attempt to recursively change the root directory,
+ ‘/’. Without ‘--recursive’, this option has no effect. *Note
+ Treating / specially::.
+
+‘--no-preserve-root’
+ Cancel the effect of any preceding ‘--preserve-root’ option. *Note
+ Treating / specially::.
+
+‘--reference=REF_FILE’
+ Change the user and group of each FILE to be the same as those of
+ REF_FILE. If REF_FILE is a symbolic link, do not use the user and
+ group of the symbolic link, but rather those of the file it refers
+ to.
+
+‘-v’
+‘--verbose’
+ Output a diagnostic for every file processed. If a symbolic link
+ is encountered during a recursive traversal on a system without the
+ ‘lchown’ system call, and ‘--no-dereference’ is in effect, then
+ issue a diagnostic saying neither the symbolic link nor its
+ referent is being changed.
+
+‘-R’
+‘--recursive’
+ Recursively change ownership of directories and their contents.
+
+‘-H’
+ If ‘--recursive’ (‘-R’) is specified and a command line argument is
+ a symbolic link to a directory, traverse it. *Note Traversing
+ symlinks::.
+
+‘-L’
+ In a recursive traversal, traverse every symbolic link to a
+ directory that is encountered.
+
+ Combining this dereferencing option with the ‘--recursive’ option
+ may create a security risk: During the traversal of the directory
+ tree, an attacker may be able to introduce a symlink to an
+ arbitrary target; when the tool reaches that, the operation will be
+ performed on the target of that symlink, possibly allowing the
+ attacker to escalate privileges.
+
+ *Note Traversing symlinks::.
+
+‘-P’
+ Do not traverse any symbolic links. This is the default if none of
+ ‘-H’, ‘-L’, or ‘-P’ is specified. *Note Traversing symlinks::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Change the owner of /u to "root".
+ chown root /u
+
+ # Likewise, but also change its group to "staff".
+ chown root:staff /u
+
+ # Change the owner of /u and subfiles to "root".
+ chown -hR root /u
+
+
+File: coreutils.info, Node: chgrp invocation, Next: chmod invocation, Prev: chown invocation, Up: Changing file attributes
+
+13.2 ‘chgrp’: Change group ownership
+====================================
+
+‘chgrp’ changes the group ownership of each given FILE to GROUP (which
+can be either a group name or a numeric group ID) or to the group of an
+existing reference file. *Note chown invocation::. Synopsis:
+
+ chgrp [OPTION]... {GROUP | --reference=REF_FILE} FILE...
+
+ If GROUP is intended to represent a numeric group ID, then you may
+specify it with a leading ‘+’. *Note Disambiguating names and IDs::.
+
+ It is system dependent whether a user can change the group to an
+arbitrary one, or the more portable behavior of being restricted to
+setting a group of which the user is a member.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--changes’
+ Verbosely describe the action for each FILE whose group actually
+ changes.
+
+‘-f’
+‘--silent’
+‘--quiet’
+ Do not print error messages about files whose group cannot be
+ changed.
+
+‘--dereference’
+ Do not act on symbolic links themselves but rather on what they
+ point to. This is the default when not operating recursively.
+
+ Combining this dereferencing option with the ‘--recursive’ option
+ may create a security risk: During the traversal of the directory
+ tree, an attacker may be able to introduce a symlink to an
+ arbitrary target; when the tool reaches that, the operation will be
+ performed on the target of that symlink, possibly allowing the
+ attacker to escalate privileges.
+
+‘-h’
+‘--no-dereference’
+ Act on symbolic links themselves instead of what they point to.
+ This mode relies on the ‘lchown’ system call. On systems that do
+ not provide the ‘lchown’ system call, ‘chgrp’ fails when a file
+ specified on the command line is a symbolic link. By default, no
+ diagnostic is issued for symbolic links encountered during a
+ recursive traversal, but see ‘--verbose’.
+
+‘--preserve-root’
+ Fail upon any attempt to recursively change the root directory,
+ ‘/’. Without ‘--recursive’, this option has no effect. *Note
+ Treating / specially::.
+
+‘--no-preserve-root’
+ Cancel the effect of any preceding ‘--preserve-root’ option. *Note
+ Treating / specially::.
+
+‘--reference=REF_FILE’
+ Change the group of each FILE to be the same as that of REF_FILE.
+ If REF_FILE is a symbolic link, do not use the group of the
+ symbolic link, but rather that of the file it refers to.
+
+‘-v’
+‘--verbose’
+ Output a diagnostic for every file processed. If a symbolic link
+ is encountered during a recursive traversal on a system without the
+ ‘lchown’ system call, and ‘--no-dereference’ is in effect, then
+ issue a diagnostic saying neither the symbolic link nor its
+ referent is being changed.
+
+‘-R’
+‘--recursive’
+ Recursively change the group ownership of directories and their
+ contents.
+
+‘-H’
+ If ‘--recursive’ (‘-R’) is specified and a command line argument is
+ a symbolic link to a directory, traverse it. *Note Traversing
+ symlinks::.
+
+‘-L’
+ In a recursive traversal, traverse every symbolic link to a
+ directory that is encountered.
+
+ Combining this dereferencing option with the ‘--recursive’ option
+ may create a security risk: During the traversal of the directory
+ tree, an attacker may be able to introduce a symlink to an
+ arbitrary target; when the tool reaches that, the operation will be
+ performed on the target of that symlink, possibly allowing the
+ attacker to escalate privileges.
+
+ *Note Traversing symlinks::.
+
+‘-P’
+ Do not traverse any symbolic links. This is the default if none of
+ ‘-H’, ‘-L’, or ‘-P’ is specified. *Note Traversing symlinks::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Change the group of /u to "staff".
+ chgrp staff /u
+
+ # Change the group of /u and subfiles to "staff".
+ chgrp -hR staff /u
+
+
+File: coreutils.info, Node: chmod invocation, Next: touch invocation, Prev: chgrp invocation, Up: Changing file attributes
+
+13.3 ‘chmod’: Change access permissions
+=======================================
+
+‘chmod’ changes the access permissions of the named files. Synopsis:
+
+ chmod [OPTION]... {MODE | --reference=REF_FILE} FILE...
+
+ ‘chmod’ never changes the permissions of symbolic links, since the
+‘chmod’ system call cannot change their permissions. This is not a
+problem since the permissions of symbolic links are never used.
+However, for each symbolic link listed on the command line, ‘chmod’
+changes the permissions of the pointed-to file. In contrast, ‘chmod’
+ignores symbolic links encountered during recursive directory
+traversals.
+
+ Only a process whose effective user ID matches the user ID of the
+file, or a process with appropriate privileges, is permitted to change
+the file mode bits of a file.
+
+ A successful use of ‘chmod’ clears the set-group-ID bit of a regular
+file if the file’s group ID does not match the user’s effective group ID
+or one of the user’s supplementary group IDs, unless the user has
+appropriate privileges. Additional restrictions may cause the
+set-user-ID and set-group-ID bits of MODE or REF_FILE to be ignored.
+This behavior depends on the policy and functionality of the underlying
+‘chmod’ system call. When in doubt, check the underlying system
+behavior.
+
+ If used, MODE specifies the new file mode bits. For details, see the
+section on *note File permissions::. If you really want MODE to have a
+leading ‘-’, you should use ‘--’ first, e.g., ‘chmod -- -w file’.
+Typically, though, ‘chmod a-w file’ is preferable, and ‘chmod -w file’
+(without the ‘--’) complains if it behaves differently from what ‘chmod
+a-w file’ would do.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--changes’
+ Verbosely describe the action for each FILE whose permissions
+ actually change.
+
+‘-f’
+‘--silent’
+‘--quiet’
+ Do not print error messages about files whose permissions cannot be
+ changed.
+
+‘--preserve-root’
+ Fail upon any attempt to recursively change the root directory,
+ ‘/’. Without ‘--recursive’, this option has no effect. *Note
+ Treating / specially::.
+
+‘--no-preserve-root’
+ Cancel the effect of any preceding ‘--preserve-root’ option. *Note
+ Treating / specially::.
+
+‘-v’
+‘--verbose’
+ Verbosely describe the action or non-action taken for every FILE.
+
+‘--reference=REF_FILE’
+ Change the mode of each FILE to be the same as that of REF_FILE.
+ *Note File permissions::. If REF_FILE is a symbolic link, do not
+ use the mode of the symbolic link, but rather that of the file it
+ refers to.
+
+‘-R’
+‘--recursive’
+ Recursively change permissions of directories and their contents.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Change file permissions of FOO to be world readable
+ # and user writable, with no other permissions.
+ chmod 644 foo
+ chmod a=r,u+w foo
+
+ # Add user and group execute permissions to FOO.
+ chmod +110 file
+ chmod ug+x file
+
+ # Set file permissions of DIR and subsidiary files to
+ # be the umask default, assuming execute permissions for
+ # directories and for files already executable.
+ chmod -R a=,+rwX dir
+
+
+File: coreutils.info, Node: touch invocation, Prev: chmod invocation, Up: Changing file attributes
+
+13.4 ‘touch’: Change file timestamps
+====================================
+
+‘touch’ changes the access and/or modification timestamps of the
+specified files. Synopsis:
+
+ touch [OPTION]... FILE...
+
+ Any FILE argument that does not exist is created empty, unless option
+‘--no-create’ (‘-c’) or ‘--no-dereference’ (‘-h’) was in effect.
+
+ A FILE argument string of ‘-’ is handled specially and causes ‘touch’
+to change the times of the file associated with standard output.
+
+ By default, ‘touch’ sets file timestamps to the current time.
+Because ‘touch’ acts on its operands left to right, the resulting
+timestamps of earlier and later operands may disagree.
+
+ When setting file timestamps to the current time, ‘touch’ can change
+the timestamps for files that the user does not own but has write
+permission for. Otherwise, the user must own the files. Some older
+systems have a further restriction: the user must own the files unless
+both the access and modification timestamps are being set to the current
+time.
+
+ The ‘touch’ command cannot set a file’s status change timestamp to a
+user-specified value, and cannot change the file’s birth time (if
+supported) at all. Also, ‘touch’ has issues similar to those affecting
+all programs that update file timestamps. For example, ‘touch’ may set
+a file’s timestamp to a value that differs slightly from the requested
+time. *Note File timestamps::.
+
+ Timestamps assume the time zone rules specified by the ‘TZ’
+environment variable, or by the system default rules if ‘TZ’ is not set.
+*Note Specifying the Time Zone with ‘TZ’: (libc)TZ Variable. You can
+avoid ambiguities during daylight saving transitions by using UTC
+timestamps.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--time=atime’
+‘--time=access’
+‘--time=use’
+ Change the access timestamp only. *Note File timestamps::.
+
+‘-c’
+‘--no-create’
+ Do not warn about or create files that do not exist.
+
+‘-d TIME’
+‘--date=TIME’
+ Use TIME instead of the current time. It can contain month names,
+ time zones, ‘am’ and ‘pm’, ‘yesterday’, etc. For example,
+ ‘--date="2020-07-21 14:19:13.489392193 +0530"’ specifies the
+ instant of time that is 489,392,193 nanoseconds after July 21, 2020
+ at 2:19:13 PM in a time zone that is 5 hours and 30 minutes east of
+ UTC. *Note Date input formats::. File systems that do not support
+ high-resolution timestamps silently ignore any excess precision
+ here.
+
+‘-f’
+ Ignored; for compatibility with BSD versions of ‘touch’.
+
+‘-h’
+‘--no-dereference’
+ Attempt to change the timestamps of a symbolic link, rather than
+ what the link refers to. When using this option, empty files are
+ not created, but option ‘-c’ must also be used to avoid warning
+ about files that do not exist. Not all systems support changing
+ the timestamps of symlinks, since underlying system support for
+ this action was not required until POSIX 2008. Also, on some
+ systems, the mere act of examining a symbolic link changes the
+ access timestamp, such that only changes to the modification
+ timestamp will persist long enough to be observable. When coupled
+ with option ‘-r’, a reference timestamp is taken from a symbolic
+ link rather than the file it refers to.
+
+‘-m’
+‘--time=mtime’
+‘--time=modify’
+ Change the modification timestamp only.
+
+‘-r FILE’
+‘--reference=FILE’
+ Use the times of the reference FILE instead of the current time.
+ If this option is combined with the ‘--date=TIME’ (‘-d TIME’)
+ option, the reference FILE’s time is the origin for any relative
+ TIMEs given, but is otherwise ignored. For example, ‘-r foo -d '-5
+ seconds'’ specifies a timestamp equal to five seconds before the
+ corresponding timestamp for ‘foo’. If FILE is a symbolic link, the
+ reference timestamp is taken from the target of the symlink, unless
+ ‘-h’ was also in effect.
+
+‘-t [[CC]YY]MMDDHHMM[.SS]’
+ Use the argument (optional four-digit or two-digit years, months,
+ days, hours, minutes, optional seconds) instead of the current
+ time. If the year is specified with only two digits, then CC is 20
+ for years in the range 0 ... 68, and 19 for years in 69 ... 99. If
+ no digits of the year are specified, the argument is interpreted as
+ a date in the current year. On the atypical systems that support
+ leap seconds, SS may be ‘60’.
+
+ On systems predating POSIX 1003.1-2001, ‘touch’ supports an obsolete
+syntax, as follows. If no timestamp is given with any of the ‘-d’,
+‘-r’, or ‘-t’ options, and if there are two or more FILEs and the first
+FILE is of the form ‘MMDDHHMM[YY]’ and this would be a valid argument to
+the ‘-t’ option (if the YY, if any, were moved to the front), and if the
+represented year is in the range 1969–1999, that argument is interpreted
+as the time for the other files instead of as a file name. Although
+this obsolete behavior can be controlled with the ‘_POSIX2_VERSION’
+environment variable (*note Standards conformance::), portable scripts
+should avoid commands whose behavior depends on this variable. For
+example, use ‘touch ./12312359 main.c’ or ‘touch -t 12312359 main.c’
+rather than the ambiguous ‘touch 12312359 main.c’.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: File space usage, Next: Printing text, Prev: Changing file attributes, Up: Top
+
+14 File space usage
+*******************
+
+No file system can hold an infinite amount of data. These commands
+report how much storage is in use or available, report other file and
+file status information, and write buffers to file systems.
+
+* Menu:
+
+* df invocation:: Report file system space usage.
+* du invocation:: Estimate file space usage.
+* stat invocation:: Report file or file system status.
+* sync invocation:: Synchronize cached writes to persistent storage.
+* truncate invocation:: Shrink or extend the size of a file.
+
+
+File: coreutils.info, Node: df invocation, Next: du invocation, Up: File space usage
+
+14.1 ‘df’: Report file system space usage
+=========================================
+
+‘df’ reports the amount of space used and available on file systems.
+Synopsis:
+
+ df [OPTION]... [FILE]...
+
+ With no arguments, ‘df’ reports the space used and available on all
+currently mounted file systems (of all types). Otherwise, ‘df’ reports
+on the file system containing each argument FILE.
+
+ Normally the space is printed in units of 1024 bytes, but this can be
+overridden (*note Block size::). Non-integer quantities are rounded up
+to the next higher unit.
+
+ For bind mounts and without arguments, ‘df’ only outputs the
+statistics for that device with the shortest mount point name in the
+list of file systems (MTAB), i.e., it hides duplicate entries, unless
+the ‘-a’ option is specified.
+
+ With the same logic, ‘df’ elides a mount entry of a dummy pseudo
+device if there is another mount entry of a real block device for that
+mount point with the same device number, e.g. the early-boot pseudo
+file system ‘rootfs’ is not shown per default when already the real root
+device has been mounted.
+
+ If an argument FILE resolves to a special file containing a mounted
+file system, ‘df’ shows the space available on that file system rather
+than on the file system containing the device node. GNU ‘df’ does not
+attempt to determine the usage on unmounted file systems, because on
+most kinds of systems doing so requires extremely non-portable intimate
+knowledge of file system structures.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--all’
+ Include in the listing dummy, duplicate, or inaccessible file
+ systems, which are omitted by default. Dummy file systems are
+ typically special purpose pseudo file systems such as ‘/proc’, with
+ no associated storage. Duplicate file systems are local or remote
+ file systems that are mounted at separate locations in the local
+ file hierarchy, or bind mounted locations. Inaccessible file
+ systems are those which are mounted but subsequently over-mounted
+ by another file system at that point, or otherwise inaccessible due
+ to permissions of the mount point etc.
+
+‘-B SIZE’
+‘--block-size=SIZE’
+ Scale sizes by SIZE before printing them (*note Block size::). For
+ example, ‘-BG’ prints sizes in units of 1,073,741,824 bytes.
+
+‘-h’
+‘--human-readable’
+ Append a size letter to each size, such as ‘M’ for mebibytes.
+ Powers of 1024 are used, not 1000; ‘M’ stands for 1,048,576 bytes.
+ This option is equivalent to ‘--block-size=human-readable’. Use
+ the ‘--si’ option if you prefer powers of 1000.
+
+‘-H’
+ Equivalent to ‘--si’.
+
+‘-i’
+‘--inodes’
+ List inode usage information instead of block usage. An inode
+ (short for index node) contains information about a file such as
+ its owner, permissions, timestamps, and location on the file
+ system.
+
+‘-k’
+ Print sizes in 1024-byte blocks, overriding the default block size
+ (*note Block size::). This option is equivalent to
+ ‘--block-size=1K’.
+
+‘-l’
+‘--local’
+ Limit the listing to local file systems. By default, remote file
+ systems are also listed.
+
+‘--no-sync’
+ Do not invoke the ‘sync’ system call before getting any usage data.
+ This may make ‘df’ run significantly faster on systems with many
+ file systems, but on some systems (notably Solaris) the results may
+ be slightly out of date. This is the default.
+
+‘--output’
+‘--output[=FIELD_LIST]’
+ Use the output format defined by FIELD_LIST, or print all fields if
+ FIELD_LIST is omitted. In the latter case, the order of the
+ columns conforms to the order of the field descriptions below.
+
+ The use of the ‘--output’ together with each of the options ‘-i’,
+ ‘-P’, and ‘-T’ is mutually exclusive.
+
+ FIELD_LIST is a comma-separated list of columns to be included in
+ ‘df’’s output and therefore effectively controls the order of
+ output columns. Each field can thus be used at the place of
+ choice, but yet must only be used once.
+
+ Valid field names in the FIELD_LIST are:
+ ‘source’
+ The source of the mount point, usually a device.
+ ‘fstype’
+ File system type.
+
+ ‘itotal’
+ Total number of inodes.
+ ‘iused’
+ Number of used inodes.
+ ‘iavail’
+ Number of available inodes.
+ ‘ipcent’
+ Percentage of IUSED divided by ITOTAL.
+
+ ‘size’
+ Total number of blocks.
+ ‘used’
+ Number of used blocks.
+ ‘avail’
+ Number of available blocks.
+ ‘pcent’
+ Percentage of USED divided by SIZE.
+
+ ‘file’
+ The file name if specified on the command line.
+ ‘target’
+ The mount point.
+
+ The fields for block and inodes statistics are affected by the
+ scaling options like ‘-h’ as usual.
+
+ The definition of the FIELD_LIST can even be split among several
+ ‘--output’ uses.
+
+ #!/bin/sh
+ # Print the TARGET (i.e., the mount point) along with their percentage
+ # statistic regarding the blocks and the inodes.
+ df --out=target --output=pcent,ipcent
+
+ # Print all available fields.
+ df --o
+
+‘-P’
+‘--portability’
+ Use the POSIX output format. This is like the default format
+ except for the following:
+
+ 1. The information about each file system is always printed on
+ exactly one line; a mount device is never put on a line by
+ itself. This means that if the mount device name is more than
+ 20 characters long (e.g., for some network mounts), the
+ columns are misaligned.
+
+ 2. The labels in the header output line are changed to conform to
+ POSIX.
+
+ 3. The default block size and output format are unaffected by the
+ ‘DF_BLOCK_SIZE’, ‘BLOCK_SIZE’ and ‘BLOCKSIZE’ environment
+ variables. However, the default block size is still affected
+ by ‘POSIXLY_CORRECT’: it is 512 if ‘POSIXLY_CORRECT’ is set,
+ 1024 otherwise. *Note Block size::.
+
+‘--si’
+ Append an SI-style abbreviation to each size, such as ‘M’ for
+ megabytes. Powers of 1000 are used, not 1024; ‘M’ stands for
+ 1,000,000 bytes. This option is equivalent to ‘--block-size=si’.
+ Use the ‘-h’ or ‘--human-readable’ option if you prefer powers of
+ 1024.
+
+‘--sync’
+ Invoke the ‘sync’ system call before getting any usage data. On
+ some systems (notably Solaris), doing this yields more up to date
+ results, but in general this option makes ‘df’ much slower,
+ especially when there are many or very busy file systems.
+
+‘--total’
+ Print a grand total of all arguments after all arguments have been
+ processed. This can be used to find out the total size, usage and
+ available space of all listed devices. If no arguments are
+ specified df will try harder to elide file systems insignificant to
+ the total available space, by suppressing duplicate remote file
+ systems.
+
+ For the grand total line, ‘df’ prints ‘"total"’ into the SOURCE
+ column, and ‘"-"’ into the TARGET column. If there is no SOURCE
+ column (see ‘--output’), then ‘df’ prints ‘"total"’ into the TARGET
+ column, if present.
+
+‘-t FSTYPE’
+‘--type=FSTYPE’
+ Limit the listing to file systems of type FSTYPE. Multiple file
+ system types can be specified by giving multiple ‘-t’ options. By
+ default, nothing is omitted.
+
+‘-T’
+‘--print-type’
+ Print each file system’s type. The types printed here are the same
+ ones you can include or exclude with ‘-t’ and ‘-x’. The particular
+ types printed are whatever is supported by the system. Here are
+ some of the common names (this list is certainly not exhaustive):
+
+ ‘nfs’
+ An NFS file system, i.e., one mounted over a network from
+ another machine. This is the one type name which seems to be
+ used uniformly by all systems.
+
+ ‘ext2, ext3, ext4, xfs, btrfs...’
+ A file system on a locally-mounted device. (The system might
+ even support more than one type here; GNU/Linux does.)
+
+ ‘iso9660, cdfs’
+ A file system on a CD or DVD drive. HP-UX uses ‘cdfs’, most
+ other systems use ‘iso9660’.
+
+ ‘ntfs,fat’
+ File systems used by MS-Windows / MS-DOS.
+
+‘-x FSTYPE’
+‘--exclude-type=FSTYPE’
+ Limit the listing to file systems not of type FSTYPE. Multiple
+ file system types can be eliminated by giving multiple ‘-x’
+ options. By default, no file system types are omitted.
+
+‘-v’
+ Ignored; for compatibility with System V versions of ‘df’.
+
+ ‘df’ is installed only on systems that have usable mount tables, so
+portable scripts should not rely on its existence.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure. Failure includes the case where no output is
+generated, so you can inspect the exit status of a command like ‘df -t
+ext3 -t reiserfs DIR’ to test whether DIR is on a file system of type
+‘ext3’ or ‘reiserfs’.
+
+ Since the list of file systems (MTAB) is needed to determine the file
+system type, failure includes the cases when that list cannot be read
+and one or more of the options ‘-a’, ‘-l’, ‘-t’ or ‘-x’ is used together
+with a file name argument.
+
+
+File: coreutils.info, Node: du invocation, Next: stat invocation, Prev: df invocation, Up: File space usage
+
+14.2 ‘du’: Estimate file space usage
+====================================
+
+‘du’ reports the space needed to represent a set of files. Synopsis:
+
+ du [OPTION]... [FILE]...
+
+ With no arguments, ‘du’ reports the space needed to represent the
+files at or under the current directory. Normally the space is printed
+in units of 1024 bytes, but this can be overridden (*note Block size::).
+Non-integer quantities are rounded up to the next higher unit.
+
+ If two or more hard links point to the same file, only one of the
+hard links is counted. The FILE argument order affects which links are
+counted, and changing the argument order may change the numbers and
+entries that ‘du’ outputs.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-0’
+‘--null’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+‘-a’
+‘--all’
+ Show counts for all files, not just directories.
+
+‘--apparent-size’
+ Print apparent sizes, rather than file system usage. The apparent
+ size of a file is the number of bytes reported by ‘wc -c’ on
+ regular files, or more generally, ‘ls -l --block-size=1’ or ‘stat
+ --format=%s’. For example, a file containing the word ‘zoo’ with
+ no newline would, of course, have an apparent size of 3. Such a
+ small file may require anywhere from 0 to 16 KiB or more of file
+ system space, depending on the type and configuration of the file
+ system on which the file resides. However, a sparse file created
+ with this command:
+
+ dd bs=1 seek=2GiB if=/dev/null of=big
+
+ has an apparent size of 2 GiB, yet on most modern file systems, it
+ actually uses almost no space.
+
+ Apparent sizes are meaningful only for regular files and symbolic
+ links. Other file types do not contribute to apparent size.
+
+‘-B SIZE’
+‘--block-size=SIZE’
+ Scale sizes by SIZE before printing them (*note Block size::). For
+ example, ‘-BG’ prints sizes in units of 1,073,741,824 bytes.
+
+‘-b’
+‘--bytes’
+ Equivalent to ‘--apparent-size --block-size=1’.
+
+‘-c’
+‘--total’
+ Print a grand total of all arguments after all arguments have been
+ processed. This can be used to find out the total file system
+ usage of a given set of files or directories.
+
+‘-D’
+‘--dereference-args’
+ Dereference symbolic links that are command line arguments. Does
+ not affect other symbolic links. This is helpful for finding out
+ the file system usage of directories, such as ‘/usr/tmp’, which are
+ often symbolic links.
+
+‘-d DEPTH’
+‘--max-depth=DEPTH’
+ Show the total for each directory (and file if ‘--all’) that is at
+ most MAX_DEPTH levels down from the root of the hierarchy. The
+ root is at level 0, so ‘du --max-depth=0’ is equivalent to ‘du -s’.
+
+‘--files0-from=FILE’
+ Disallow processing files named on the command line, and instead
+ process those named in file FILE; each name being terminated by a
+ zero byte (ASCII NUL). This is useful when the list of file names
+ is so long that it may exceed a command line length limitation. In
+ such cases, running ‘du’ via ‘xargs’ is undesirable because it
+ splits the list into pieces and makes ‘du’ print with the ‘--total’
+ (‘-c’) option for each sublist rather than for the entire list.
+ One way to produce a list of ASCII NUL terminated file names is
+ with GNU ‘find’, using its ‘-print0’ predicate. If FILE is ‘-’
+ then the ASCII NUL terminated file names are read from standard
+ input.
+
+‘-H’
+ Equivalent to ‘--dereference-args’ (‘-D’).
+
+‘-h’
+‘--human-readable’
+ Append a size letter to each size, such as ‘M’ for mebibytes.
+ Powers of 1024 are used, not 1000; ‘M’ stands for 1,048,576 bytes.
+ This option is equivalent to ‘--block-size=human-readable’. Use
+ the ‘--si’ option if you prefer powers of 1000.
+
+‘--inodes’
+ List inode usage information instead of block usage. This option
+ is useful for finding directories which contain many files, and
+ therefore eat up most of the inodes space of a file system (see
+ ‘df’, option ‘--inodes’). It can well be combined with the options
+ ‘-a’, ‘-c’, ‘-h’, ‘-l’, ‘-s’, ‘-S’, ‘-t’ and ‘-x’; however, passing
+ other options regarding the block size, for example ‘-b’, ‘-m’ and
+ ‘--apparent-size’, is ignored.
+
+‘-k’
+ Print sizes in 1024-byte blocks, overriding the default block size
+ (*note Block size::). This option is equivalent to
+ ‘--block-size=1K’.
+
+‘-L’
+‘--dereference’
+ Dereference symbolic links (show the file system space used by the
+ file or directory that the link points to instead of the space used
+ by the link).
+
+‘-l’
+‘--count-links’
+ Count the size of all files, even if they have appeared already (as
+ a hard link).
+
+‘-m’
+ Print sizes in 1,048,576-byte blocks, overriding the default block
+ size (*note Block size::). This option is equivalent to
+ ‘--block-size=1M’.
+
+‘-P’
+‘--no-dereference’
+ For each symbolic link encountered by ‘du’, consider the file
+ system space used by the symbolic link itself.
+
+‘-S’
+‘--separate-dirs’
+ Normally, in the output of ‘du’ (when not using ‘--summarize’), the
+ size listed next to a directory name, D, represents the sum of
+ sizes of all entries beneath D as well as the size of D itself.
+ With ‘--separate-dirs’, the size reported for a directory name, D,
+ will exclude the size of any subdirectories.
+
+‘--si’
+ Append an SI-style abbreviation to each size, such as ‘M’ for
+ megabytes. Powers of 1000 are used, not 1024; ‘M’ stands for
+ 1,000,000 bytes. This option is equivalent to ‘--block-size=si’.
+ Use the ‘-h’ or ‘--human-readable’ option if you prefer powers of
+ 1024.
+
+‘-s’
+‘--summarize’
+ Display only a total for each argument.
+
+‘-t SIZE’
+‘--threshold=SIZE’
+ Exclude entries based on a given SIZE. The SIZE refers to used
+ blocks in normal mode (*note Block size::), or inodes count in
+ conjunction with the ‘--inodes’ option.
+
+ If SIZE is positive, then ‘du’ will only print entries with a size
+ greater than or equal to that.
+
+ If SIZE is negative, then ‘du’ will only print entries with a size
+ smaller than or equal to that.
+
+ Although GNU ‘find’ can be used to find files of a certain size,
+ ‘du’’s ‘--threshold’ option can be used to also filter directories
+ based on a given size.
+
+ When combined with the ‘--apparent-size’ option, the ‘--threshold’
+ option elides entries based on apparent size. When combined with
+ the ‘--inodes’ option, it elides entries based on inode counts.
+
+ Here’s how you would use ‘--threshold’ to find directories with a
+ size greater than or equal to 200 megabytes:
+
+ du --threshold=200MB
+
+ Here’s how you would use ‘--threshold’ to find directories and
+ files – note the ‘-a’ – with an apparent size smaller than or equal
+ to 500 bytes:
+
+ du -a -t -500 --apparent-size
+
+ Here’s how you would use ‘--threshold’ to find directories on the
+ root file system with more than 20000 inodes used in the directory
+ tree below:
+
+ du --inodes -x --threshold=20000 /
+
+‘--time’
+ Show the most recent modification timestamp (mtime) of any file in
+ the directory, or any of its subdirectories. *Note File
+ timestamps::.
+
+‘--time=ctime’
+‘--time=status’
+‘--time=use’
+ Show the most recent status change timestamp (ctime) of any file in
+ the directory, or any of its subdirectories. *Note File
+ timestamps::.
+
+‘--time=atime’
+‘--time=access’
+ Show the most recent access timestamp (atime) of any file in the
+ directory, or any of its subdirectories. *Note File timestamps::.
+
+‘--time-style=STYLE’
+ List timestamps in style STYLE. This option has an effect only if
+ the ‘--time’ option is also specified. The STYLE should be one of
+ the following:
+
+ ‘+FORMAT’
+ List timestamps using FORMAT, where FORMAT is interpreted like
+ the format argument of ‘date’ (*note date invocation::). For
+ example, ‘--time-style="+%Y-%m-%d %H:%M:%S"’ causes ‘du’ to
+ list timestamps like ‘2020-07-21 23:45:56’. As with ‘date’,
+ FORMAT’s interpretation is affected by the ‘LC_TIME’ locale
+ category.
+
+ ‘full-iso’
+ List timestamps in full using ISO 8601-like date, time, and
+ time zone components with nanosecond precision, e.g.,
+ ‘2020-07-21 23:45:56.477817180 -0400’. This style is
+ equivalent to ‘+%Y-%m-%d %H:%M:%S.%N %z’.
+
+ ‘long-iso’
+ List ISO 8601 date and time components with minute precision,
+ e.g., ‘2020-07-21 23:45’. These timestamps are shorter than
+ ‘full-iso’ timestamps, and are usually good enough for
+ everyday work. This style is equivalent to ‘+%Y-%m-%d %H:%M’.
+
+ ‘iso’
+ List ISO 8601 dates for timestamps, e.g., ‘2020-07-21’. This
+ style is equivalent to ‘+%Y-%m-%d’.
+
+ You can specify the default value of the ‘--time-style’ option with
+ the environment variable ‘TIME_STYLE’; if ‘TIME_STYLE’ is not set
+ the default style is ‘long-iso’. For compatibility with ‘ls’, if
+ ‘TIME_STYLE’ begins with ‘+’ and contains a newline, the newline
+ and any later characters are ignored; if ‘TIME_STYLE’ begins with
+ ‘posix-’ the ‘posix-’ is ignored; and if ‘TIME_STYLE’ is ‘locale’
+ it is ignored.
+
+‘-X FILE’
+‘--exclude-from=FILE’
+ Like ‘--exclude’, except take the patterns to exclude from FILE,
+ one per line. If FILE is ‘-’, take the patterns from standard
+ input.
+
+‘--exclude=PATTERN’
+ When recursing, skip subdirectories or files matching PATTERN. For
+ example, ‘du --exclude='*.o'’ excludes files whose names end in
+ ‘.o’.
+
+‘-x’
+‘--one-file-system’
+ Skip directories that are on different file systems from the one
+ that the argument being processed is on.
+
+ Since ‘du’ relies on information reported by the operating system,
+its output might not reflect the space consumed in the underlying
+devices. For example;
+
+ • Operating systems normally do not report device space consumed by
+ duplicate or backup blocks, error correction bits, and so forth.
+ This causes ‘du’ to underestimate the device space actually used.
+
+ • In file systems that use copy-on-write, if two distinct files share
+ space the output of ‘du’ typically counts the space that would be
+ consumed if all files’ non-holes were rewritten, not the space
+ currently consumed.
+
+ • In file systems that use compression, the operating system might
+ report the uncompressed space. (If it does report the compressed
+ space, that report might change after one merely overwrites
+ existing file data.)
+
+ • Networked file systems historically have had difficulty
+ communicating accurate file system information from server to
+ client.
+
+For these reasons ‘du’ might better be thought of as an estimate of the
+size of a ‘tar’ or other conventional backup for a set of files, rather
+than as a measure of space consumed in the underlying devices.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: stat invocation, Next: sync invocation, Prev: du invocation, Up: File space usage
+
+14.3 ‘stat’: Report file or file system status
+==============================================
+
+‘stat’ displays information about the specified file(s). Synopsis:
+
+ stat [OPTION]... [FILE]...
+
+ With no option, ‘stat’ reports all information about the given files.
+But it also can be used to report the information of the file systems
+the given files are located on. If the files are links, ‘stat’ can also
+give information about the files the links point to.
+
+ Due to shell aliases and built-in ‘stat’ functions, using an
+unadorned ‘stat’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+stat ...’) to avoid interference from the shell.
+
+‘-L’
+‘--dereference’
+ Change how ‘stat’ treats symbolic links. With this option, ‘stat’
+ acts on the file referenced by each symbolic link argument.
+ Without it, ‘stat’ acts on any symbolic link argument directly.
+
+‘-f’
+‘--file-system’
+ Report information about the file systems where the given files are
+ located instead of information about the files themselves. This
+ option implies the ‘-L’ option.
+
+‘--cached=MODE’
+ Control how attributes are read from the file system; if supported
+ by the system. This allows one to control the trade-off between
+ freshness and efficiency of attribute access, especially useful
+ with remote file systems. MODE can be:
+
+ ‘always’
+ Always read the already cached attributes if available.
+
+ ‘never’
+ Always synchronize with the latest file system attributes.
+ This also mounts automounted files.
+
+ ‘default’
+ Leave the caching behavior to the underlying file system.
+
+‘-c’
+‘--format=FORMAT’
+ Use FORMAT rather than the default format. FORMAT is automatically
+ newline-terminated, so running a command like the following with
+ two or more FILE operands produces a line of output for each
+ operand:
+ $ stat --format=%d:%i / /usr
+ 2050:2
+ 2057:2
+
+‘--printf=FORMAT’
+ Use FORMAT rather than the default format. Like ‘--format’, but
+ interpret backslash escapes, and do not output a mandatory trailing
+ newline. If you want a newline, include ‘\n’ in the FORMAT.
+ Here’s how you would use ‘--printf’ to print the device and inode
+ numbers of ‘/’ and ‘/usr’:
+ $ stat --printf='%d:%i\n' / /usr
+ 2050:2
+ 2057:2
+
+‘-t’
+‘--terse’
+ Print the information in terse form, suitable for parsing by other
+ programs.
+
+ The output of the following commands are identical and the
+ ‘--format’ also identifies the items printed (in fuller form) in
+ the default format. Note the format string would include another
+ ‘%C’ at the end with an active SELinux security context.
+ $ stat --format="%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" ...
+ $ stat --terse ...
+
+ The same illustrating terse output in ‘--file-system’ mode:
+ $ stat -f --format="%n %i %l %t %s %S %b %f %a %c %d" ...
+ $ stat -f --terse ...
+
+ The valid FORMAT directives for files with ‘--format’ and ‘--printf’
+are:
+
+ • %a – Permission bits in octal (note ‘#’ and ‘0’ printf flags)
+ • %A – Permission bits in symbolic form (similar to ‘ls -ld’)
+ • %b – Number of blocks allocated (see ‘%B’)
+ • %B – The size in bytes of each block reported by ‘%b’
+ • %C – The SELinux security context of a file, if available
+ • %d – Device number in decimal (st_dev)
+ • %D – Device number in hex (st_dev)
+ • %Hd – Major device number in decimal
+ • %Ld – Minor device number in decimal
+ • %f – Raw mode in hex
+ • %F – File type
+ • %g – Group ID of owner
+ • %G – Group name of owner
+ • %h – Number of hard links
+ • %i – Inode number
+ • %m – Mount point (See note below)
+ • %n – File name
+ • %N – Quoted file name with dereference if symbolic link (see below)
+ • %o – Optimal I/O transfer size hint
+ • %s – Total size, in bytes
+ • %r – Device type in decimal (st_rdev)
+ • %R – Device type in hex (st_rdev)
+ • %Hr – Major device type in decimal (see below)
+ • %Lr – Minor device type in decimal (see below)
+ • %t – Major device type in hex (see below)
+ • %T – Minor device type in hex (see below)
+ • %u – User ID of owner
+ • %U – User name of owner
+ • %w – Time of file birth, or ‘-’ if unknown
+ • %W – Time of file birth as seconds since Epoch, or ‘0’
+ • %x – Time of last access
+ • %X – Time of last access as seconds since Epoch
+ • %y – Time of last data modification
+ • %Y – Time of last data modification as seconds since Epoch
+ • %z – Time of last status change
+ • %Z – Time of last status change as seconds since Epoch
+
+ The ‘%a’ format prints the octal mode, and so it is useful to control
+the zero padding of the output with the ‘#’ and ‘0’ printf flags. For
+example to pad to at least 3 wide while making larger numbers
+unambiguously octal, you can use ‘%#03a’.
+
+ The ‘%N’ format can be set with the environment variable
+‘QUOTING_STYLE’. If that environment variable is not set, the default
+value is ‘shell-escape-always’. Valid quoting styles are:
+‘literal’
+ Output strings as-is; this is the same as the ‘--literal’ (‘-N’)
+ option.
+‘shell’
+ Quote strings for the shell if they contain shell metacharacters or
+ would cause ambiguous output. The quoting is suitable for
+ POSIX-compatible shells like ‘bash’, but it does not always work
+ for incompatible shells like ‘csh’.
+‘shell-always’
+ Quote strings for the shell, even if they would normally not
+ require quoting.
+‘shell-escape’
+ Like ‘shell’, but also quoting non-printable characters using the
+ POSIX proposed ‘$''’ syntax suitable for most shells.
+‘shell-escape-always’
+ Like ‘shell-escape’, but quote strings even if they would normally
+ not require quoting.
+‘c’
+ Quote strings as for C character string literals, including the
+ surrounding double-quote characters; this is the same as the
+ ‘--quote-name’ (‘-Q’) option.
+‘escape’
+ Quote strings as for C character string literals, except omit the
+ surrounding double-quote characters; this is the same as the
+ ‘--escape’ (‘-b’) option.
+‘clocale’
+ Quote strings as for C character string literals, except use
+ surrounding quotation marks appropriate for the locale.
+‘locale’
+ Quote strings as for C character string literals, except use
+ surrounding quotation marks appropriate for the locale, and quote
+ 'like this' instead of "like this" in the default C locale. This
+ looks nicer on many displays.
+
+ The ‘r’, ‘R’, ‘%t’, and ‘%T’ formats operate on the st_rdev member of
+the stat(2) structure, i.e., the represented device rather than the
+containing device, and so are only defined for character and block
+special files. On some systems or file types, st_rdev may be used to
+represent other quantities.
+
+ The ‘%W’, ‘%X’, ‘%Y’, and ‘%Z’ formats accept a precision preceded by
+a period to specify the number of digits to print after the decimal
+point. For example, ‘%.3X’ outputs the access timestamp to millisecond
+precision. If a period is given but no precision, ‘stat’ uses 9 digits,
+so ‘%.X’ is equivalent to ‘%.9X’. When discarding excess precision,
+timestamps are truncated toward minus infinity.
+
+ zero pad:
+ $ stat -c '[%015Y]' /usr
+ [000001288929712]
+ space align:
+ $ stat -c '[%15Y]' /usr
+ [ 1288929712]
+ $ stat -c '[%-15Y]' /usr
+ [1288929712 ]
+ precision:
+ $ stat -c '[%.3Y]' /usr
+ [1288929712.114]
+ $ stat -c '[%.Y]' /usr
+ [1288929712.114951834]
+
+ The mount point printed by ‘%m’ is similar to that output by ‘df’,
+except that:
+ • stat does not dereference symlinks by default (unless ‘-L’ is
+ specified)
+ • stat does not search for specified device nodes in the file system
+ list, instead operating on them directly
+ • stat outputs the alias for a bind mounted file, rather than the
+ initial mount point of its backing device. One can recursively
+ call stat until there is no change in output, to get the current
+ base mount point
+
+ When listing file system information (‘--file-system’ (‘-f’)), you
+must use a different set of FORMAT directives:
+
+ • %a – Free blocks available to non-super-user
+ • %b – Total data blocks in file system
+ • %c – Total file nodes in file system
+ • %d – Free file nodes in file system
+ • %f – Free blocks in file system
+ • %i – File System ID in hex
+ • %l – Maximum length of file names
+ • %n – File name
+ • %s – Block size (for faster transfers)
+ • %S – Fundamental block size (for block counts)
+ • %t – Type in hex
+ • %T – Type in human readable form
+
+ Timestamps are listed according to the time zone rules specified by
+the ‘TZ’ environment variable, or by the system default rules if ‘TZ’ is
+not set. *Note Specifying the Time Zone with ‘TZ’: (libc)TZ Variable.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: sync invocation, Next: truncate invocation, Prev: stat invocation, Up: File space usage
+
+14.4 ‘sync’: Synchronize cached writes to persistent storage
+============================================================
+
+‘sync’ synchronizes in memory files or file systems to persistent
+storage. Synopsis:
+
+ sync [OPTION] [FILE]...
+
+ ‘sync’ writes any data buffered in memory out to the storage device.
+This can include (but is not limited to) modified superblocks, modified
+inodes, and delayed reads and writes. This must be implemented by the
+kernel; The ‘sync’ program does nothing but exercise the ‘sync’,
+‘syncfs’, ‘fsync’, and ‘fdatasync’ system calls.
+
+ The kernel keeps data in memory to avoid doing (relatively slow)
+device reads and writes. This improves performance, but if the computer
+crashes, data may be lost or the file system corrupted as a result. The
+‘sync’ command instructs the kernel to write data in memory to
+persistent storage.
+
+ If any argument is specified then only those files will be
+synchronized using the fsync(2) syscall by default.
+
+ If at least one file is specified, it is possible to change the
+synchronization method with the following options. Also see *note
+Common options::.
+
+‘-d’
+‘--data’
+ Use fdatasync(2) to sync only the data for the file, and any
+ metadata required to maintain file system consistency.
+
+‘-f’
+‘--file-system’
+ Synchronize all the I/O waiting for the file systems that contain
+ the file, using the syscall syncfs(2). Note you would usually
+ _not_ specify this option if passing a device node like ‘/dev/sda’
+ for example, as that would sync the containing file system rather
+ than the referenced one. Note also that depending on the system,
+ passing individual device nodes or files may have different sync
+ characteristics than using no arguments. I.e., arguments passed to
+ fsync(2) may provide greater guarantees through write barriers,
+ than a global sync(2) used when no arguments are provided.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: truncate invocation, Prev: sync invocation, Up: File space usage
+
+14.5 ‘truncate’: Shrink or extend the size of a file
+====================================================
+
+‘truncate’ shrinks or extends the size of each FILE to the specified
+size. Synopsis:
+
+ truncate OPTION... FILE...
+
+ Any FILE that does not exist is created.
+
+ If a FILE is larger than the specified size, the extra data is lost.
+If a FILE is shorter, it is extended and the sparse extended part (or
+hole) reads as zero bytes.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--no-create’
+ Do not create files that do not exist.
+
+‘-o’
+‘--io-blocks’
+ Treat SIZE as number of I/O blocks of the FILE rather than bytes.
+
+‘-r RFILE’
+‘--reference=RFILE’
+ Base the size of each FILE on the size of RFILE.
+
+‘-s SIZE’
+‘--size=SIZE’
+ Set or adjust the size of each FILE according to SIZE. SIZE is in
+ bytes unless ‘--io-blocks’ is specified. SIZE may be, or may be an
+ integer optionally followed by, one of the following multiplicative
+ suffixes:
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+ SIZE may also be prefixed by one of the following to adjust the
+ size of each FILE based on its current size:
+ ‘+’ => extend by
+ ‘-’ => reduce by
+ ‘<’ => at most
+ ‘>’ => at least
+ ‘/’ => round down to multiple of
+ ‘%’ => round up to multiple of
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Printing text, Next: Conditions, Prev: File space usage, Up: Top
+
+15 Printing text
+****************
+
+This section describes commands that display text strings.
+
+* Menu:
+
+* echo invocation:: Print a line of text.
+* printf invocation:: Format and print data.
+* yes invocation:: Print a string until interrupted.
+
+
+File: coreutils.info, Node: echo invocation, Next: printf invocation, Up: Printing text
+
+15.1 ‘echo’: Print a line of text
+=================================
+
+‘echo’ writes each given STRING to standard output, with a space between
+each and a newline after the last one. Synopsis:
+
+ echo [OPTION]... [STRING]...
+
+ Due to shell aliases and built-in ‘echo’ functions, using an
+unadorned ‘echo’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+echo ...’) to avoid interference from the shell.
+
+ Due to historical and backwards compatibility reasons, certain bare
+option-like strings cannot be passed to ‘echo’ as non-option arguments.
+It is therefore not advisable to use ‘echo’ for printing unknown or
+variable arguments. The ‘printf’ command is recommended as a more
+portable and flexible replacement for tasks historically performed by
+‘echo’. *Note printf invocation::.
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands, and the normally-special
+argument ‘--’ has no special meaning and is treated like any other
+STRING.
+
+‘-n’
+ Do not output the trailing newline.
+
+‘-e’
+ Enable interpretation of the following backslash-escaped characters
+ in each STRING:
+
+ ‘\a’
+ alert (bell)
+ ‘\b’
+ backspace
+ ‘\c’
+ produce no further output
+ ‘\e’
+ escape
+ ‘\f’
+ form feed
+ ‘\n’
+ newline
+ ‘\r’
+ carriage return
+ ‘\t’
+ horizontal tab
+ ‘\v’
+ vertical tab
+ ‘\\’
+ backslash
+ ‘\0NNN’
+ the eight-bit value that is the octal number NNN (zero to
+ three octal digits), if NNN is a nine-bit value, the ninth bit
+ is ignored
+ ‘\NNN’
+ the eight-bit value that is the octal number NNN (one to three
+ octal digits), if NNN is a nine-bit value, the ninth bit is
+ ignored
+ ‘\xHH’
+ the eight-bit value that is the hexadecimal number HH (one or
+ two hexadecimal digits)
+
+‘-E’
+ Disable interpretation of backslash escapes in each STRING. This
+ is the default. If ‘-e’ and ‘-E’ are both specified, the last one
+ given takes effect.
+
+ If the ‘POSIXLY_CORRECT’ environment variable is set, then when
+‘echo’’s first argument is not ‘-n’ it outputs option-like arguments
+instead of treating them as options. For example, ‘echo -ne hello’
+outputs ‘-ne hello’ instead of plain ‘hello’. Also backslash escapes
+are always enabled. Note to echo the string ‘-n’, one of the characters
+can be escaped in either octal or hexadecimal representation. For
+example, ‘echo -e '\x2dn'’.
+
+ POSIX does not require support for any options, and says that the
+behavior of ‘echo’ is implementation-defined if any STRING contains a
+backslash or if the first argument is ‘-n’. Portable programs should
+use the ‘printf’ command instead. *Note printf invocation::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: printf invocation, Next: yes invocation, Prev: echo invocation, Up: Printing text
+
+15.2 ‘printf’: Format and print data
+====================================
+
+‘printf’ does formatted printing of text. Synopsis:
+
+ printf FORMAT [ARGUMENT]...
+
+ ‘printf’ prints the FORMAT string, interpreting ‘%’ directives and
+‘\’ escapes to format numeric and string arguments in a way that is
+mostly similar to the C ‘printf’ function. *Note ‘printf’ format
+directives: (libc)Output Conversion Syntax, for details. The
+differences are listed below.
+
+ Due to shell aliases and built-in ‘printf’ functions, using an
+unadorned ‘printf’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+printf ...’) to avoid interference from the shell.
+
+ • The FORMAT argument is reused as necessary to convert all the given
+ ARGUMENTs. For example, the command ‘printf %s a b’ outputs ‘ab’.
+
+ • Missing ARGUMENTs are treated as null strings or as zeros,
+ depending on whether the context expects a string or a number. For
+ example, the command ‘printf %sx%d’ prints ‘x0’.
+
+ • An additional escape, ‘\c’, causes ‘printf’ to produce no further
+ output. For example, the command ‘printf 'A%sC\cD%sF' B E’ prints
+ ‘ABC’.
+
+ • The hexadecimal escape sequence ‘\xHH’ has at most two digits, as
+ opposed to C where it can have an unlimited number of digits. For
+ example, the command ‘printf '\x07e'’ prints two bytes, whereas the
+ C statement ‘printf ("\x07e")’ prints just one.
+
+ • An additional directive ‘%b’, prints its argument string with ‘\’
+ escapes interpreted in the same way as in the FORMAT string, except
+ that octal escapes are of the form ‘\0OOO’ where OOO is 0 to 3
+ octal digits. If ‘\OOO’ is nine-bit value, ignore the ninth bit.
+ If a precision is also given, it limits the number of bytes printed
+ from the converted string.
+
+ • An additional directive ‘%q’, prints its argument string in a
+ format that can be reused as input by most shells. Non-printable
+ characters are escaped with the POSIX proposed ‘$''’ syntax, and
+ shell metacharacters are quoted appropriately. This is an
+ equivalent format to ‘ls --quoting=shell-escape’ output.
+
+ • Numeric arguments must be single C constants, possibly with leading
+ ‘+’ or ‘-’. For example, ‘printf %.4d -3’ outputs ‘-0003’.
+
+ • If the leading character of a numeric argument is ‘"’ or ‘'’ then
+ its value is the numeric value of the immediately following
+ character. Any remaining characters are silently ignored if the
+ ‘POSIXLY_CORRECT’ environment variable is set; otherwise, a warning
+ is printed. For example, ‘printf "%d" "'a"’ outputs ‘97’ on hosts
+ that use the ASCII character set, since ‘a’ has the numeric value
+ 97 in ASCII.
+
+ A floating point argument is interpreted according to the
+‘LC_NUMERIC’ category of either the current or the C locale, and is
+printed according to the current locale. For example, in a locale whose
+decimal point character is a comma, the command ‘printf '%g %g' 2,5 2.5’
+outputs ‘2,5 2,5’. *Note Floating point::.
+
+ ‘printf’ interprets ‘\OOO’ in FORMAT as an octal number (if OOO is 1
+to 3 octal digits) specifying a byte to print, and ‘\xHH’ as a
+hexadecimal number (if HH is 1 to 2 hex digits) specifying a character
+to print. Note however that when ‘\OOO’ specifies a number larger than
+255, ‘printf’ ignores the ninth bit. For example, ‘printf '\400'’ is
+equivalent to ‘printf '\0'’.
+
+ ‘printf’ interprets two syntax forms for specifying Unicode (ISO/IEC
+10646) characters. ‘\u’ for 16-bit Unicode characters, specified as
+four hexadecimal digits HHHH, and ‘\U’ for 32-bit Unicode characters,
+specified as eight hexadecimal digits HHHHHHHH. ‘printf’ outputs the
+Unicode characters according to the ‘LC_CTYPE’ locale. Unicode
+characters in the range U+D800...U+DFFF cannot be specified by this
+syntax. This syntax fully supports the universal character subset
+introduced in ISO C 99.
+
+ The processing of ‘\u’ and ‘\U’ requires a full-featured ‘iconv’
+facility. It is activated on systems with glibc 2.2 (or newer), or when
+‘libiconv’ is installed prior to this package. Otherwise ‘\u’ and ‘\U’
+will print as-is.
+
+ Unicode character syntax is useful for writing strings in a locale
+independent way. For example, a string containing the Euro currency
+symbol
+
+ $ env printf '\u20AC 14.95'
+
+will be output correctly in all locales supporting the Euro symbol
+(ISO-8859-15, UTF-8, and others). Similarly, a Chinese string
+
+ $ env printf '\u4e2d\u6587'
+
+will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8,
+etc).
+
+ Note that in these examples, the ‘printf’ command has been invoked
+via ‘env’ to ensure that we run the program found via your shell’s
+search path, and not a shell alias or a built-in function.
+
+ For larger strings, you don’t need to look up the hexadecimal code
+values of each character one by one. ASCII characters mixed with \u
+escape sequences is also known as the JAVA source file encoding. You
+can use GNU recode 3.5c (or newer) to convert strings to this encoding.
+Here is how to convert a piece of text into a shell script which will
+output this text in a locale-independent way:
+
+ $ LC_CTYPE=zh_TW.big5 env printf \
+ '\u4e2d\u6587\n' > sample.txt
+ $ recode BIG5..JAVA < sample.txt \
+ | sed -e "s|^|env printf '|" -e "s|%|%%|g" -e "s|$|\\\\n'|" \
+ > sample.sh
+
+ The only options are a lone ‘--help’ or ‘--version’. *Note Common
+options::. Options must precede operands.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: yes invocation, Prev: printf invocation, Up: Printing text
+
+15.3 ‘yes’: Print a string until interrupted
+============================================
+
+‘yes’ prints the command line arguments, separated by spaces and
+followed by a newline, forever until it is killed. If no arguments are
+given, it prints ‘y’ followed by a newline forever until killed.
+
+ Upon a write error, ‘yes’ exits with status ‘1’.
+
+ The only options are a lone ‘--help’ or ‘--version’. To output an
+argument that begins with ‘-’, precede it with ‘--’, e.g., ‘yes --
+--help’. *Note Common options::.
+
+
+File: coreutils.info, Node: Conditions, Next: Redirection, Prev: Printing text, Up: Top
+
+16 Conditions
+*************
+
+This section describes commands that are primarily useful for their exit
+status, rather than their output. Thus, they are often used as the
+condition of shell ‘if’ statements, or as the last command in a
+pipeline.
+
+* Menu:
+
+* false invocation:: Do nothing, unsuccessfully.
+* true invocation:: Do nothing, successfully.
+* test invocation:: Check file types and compare values.
+* expr invocation:: Evaluate expressions.
+
+
+File: coreutils.info, Node: false invocation, Next: true invocation, Up: Conditions
+
+16.1 ‘false’: Do nothing, unsuccessfully
+========================================
+
+‘false’ does nothing except return an exit status of 1, meaning
+“failure”. It can be used as a place holder in shell scripts where an
+unsuccessful command is needed. In most modern shells, ‘false’ is a
+built-in command, so when you use ‘false’ in a script, you’re probably
+using the built-in command, not the one documented here.
+
+ ‘false’ honors the ‘--help’ and ‘--version’ options.
+
+ This version of ‘false’ is implemented as a C program, and is thus
+more secure and faster than a shell script implementation, and may
+safely be used as a dummy shell for the purpose of disabling accounts.
+
+ Note that ‘false’ (unlike all other programs documented herein) exits
+unsuccessfully, even when invoked with ‘--help’ or ‘--version’.
+
+ Portable programs should not assume that the exit status of ‘false’
+is 1, as it is greater than 1 on some non-GNU hosts.
+
+
+File: coreutils.info, Node: true invocation, Next: test invocation, Prev: false invocation, Up: Conditions
+
+16.2 ‘true’: Do nothing, successfully
+=====================================
+
+‘true’ does nothing except return an exit status of 0, meaning
+“success”. It can be used as a place holder in shell scripts where a
+successful command is needed, although the shell built-in command ‘:’
+(colon) may do the same thing faster. In most modern shells, ‘true’ is
+a built-in command, so when you use ‘true’ in a script, you’re probably
+using the built-in command, not the one documented here.
+
+ ‘true’ honors the ‘--help’ and ‘--version’ options.
+
+ Note, however, that it is possible to cause ‘true’ to exit with
+nonzero status: with the ‘--help’ or ‘--version’ option, and with
+standard output already closed or redirected to a file that evokes an
+I/O error. For example, using a Bourne-compatible shell:
+
+ $ ./true --version >&-
+ ./true: write error: Bad file number
+ $ ./true --version > /dev/full
+ ./true: write error: No space left on device
+
+ This version of ‘true’ is implemented as a C program, and is thus
+more secure and faster than a shell script implementation, and may
+safely be used as a dummy shell for the purpose of disabling accounts.
+
+
+File: coreutils.info, Node: test invocation, Next: expr invocation, Prev: true invocation, Up: Conditions
+
+16.3 ‘test’: Check file types and compare values
+================================================
+
+‘test’ returns a status of 0 (true) or 1 (false) depending on the
+evaluation of the conditional expression EXPR. Each part of the
+expression must be a separate argument.
+
+ ‘test’ has file status checks, string operators, and numeric
+comparison operators.
+
+ ‘test’ has an alternate form that uses opening and closing square
+brackets instead a leading ‘test’. For example, instead of ‘test -d /’,
+you can write ‘[ -d / ]’. The square brackets must be separate
+arguments; for example, ‘[-d /]’ does not have the desired effect.
+Since ‘test EXPR’ and ‘[ EXPR ]’ have the same meaning, only the former
+form is discussed below.
+
+ Synopses:
+
+ test EXPRESSION
+ test
+ [ EXPRESSION ]
+ [ ]
+ [ OPTION
+
+ Due to shell aliases and built-in ‘test’ functions, using an
+unadorned ‘test’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+test ...’) to avoid interference from the shell.
+
+ If EXPRESSION is omitted, ‘test’ returns false. If EXPRESSION is a
+single argument, ‘test’ returns false if the argument is null and true
+otherwise. The argument can be any string, including strings like ‘-d’,
+‘-1’, ‘--’, ‘--help’, and ‘--version’ that most other programs would
+treat as options. To get help and version information, invoke the
+commands ‘[ --help’ and ‘[ --version’, without the usual closing
+brackets. *Note Common options::.
+
+ Exit status:
+
+ 0 if the expression is true,
+ 1 if the expression is false,
+ 2 if an error occurred.
+
+* Menu:
+
+* File type tests:: ‘-[bcdfhLpSt]’
+* Access permission tests:: ‘-[gkruwxOG]’
+* File characteristic tests:: ‘-e -s -nt -ot -ef’
+* String tests:: ‘-z -n = == !=’
+* Numeric tests:: ‘-eq -ne -lt -le -gt -ge’
+* Connectives for test:: ‘! -a -o’
+
+
+File: coreutils.info, Node: File type tests, Next: Access permission tests, Up: test invocation
+
+16.3.1 File type tests
+----------------------
+
+These options test for particular types of files. (Everything’s a file,
+but not all files are the same!)
+
+‘-b FILE’
+ True if FILE exists and is a block special device.
+
+‘-c FILE’
+ True if FILE exists and is a character special device.
+
+‘-d FILE’
+ True if FILE exists and is a directory.
+
+‘-f FILE’
+ True if FILE exists and is a regular file.
+
+‘-h FILE’
+‘-L FILE’
+ True if FILE exists and is a symbolic link. Unlike all other
+ file-related tests, this test does not dereference FILE if it is a
+ symbolic link.
+
+‘-p FILE’
+ True if FILE exists and is a named pipe.
+
+‘-S FILE’
+ True if FILE exists and is a socket.
+
+‘-t FD’
+ True if FD is a file descriptor that is associated with a terminal.
+
+
+File: coreutils.info, Node: Access permission tests, Next: File characteristic tests, Prev: File type tests, Up: test invocation
+
+16.3.2 Access permission tests
+------------------------------
+
+These options test for particular access permissions.
+
+‘-g FILE’
+ True if FILE exists and has its set-group-ID bit set.
+
+‘-k FILE’
+ True if FILE exists and has its “sticky” bit set.
+
+‘-r FILE’
+ True if FILE exists and the user has read access.
+
+‘-u FILE’
+ True if FILE exists and has its set-user-ID bit set.
+
+‘-w FILE’
+ True if FILE exists and the user has write access.
+
+‘-x FILE’
+ True if FILE exists and the user has execute access (or search
+ permission, if it is a directory).
+
+‘-O FILE’
+ True if FILE exists and is owned by the current effective user ID.
+
+‘-G FILE’
+ True if FILE exists and is owned by the current effective group ID.
+
+
+File: coreutils.info, Node: File characteristic tests, Next: String tests, Prev: Access permission tests, Up: test invocation
+
+16.3.3 File characteristic tests
+--------------------------------
+
+These options test other file characteristics.
+
+‘-e FILE’
+ True if FILE exists.
+
+‘-s FILE’
+ True if FILE exists and has a size greater than zero.
+
+‘FILE1 -nt FILE2’
+ True if FILE1 is newer (according to modification date) than FILE2,
+ or if FILE1 exists and FILE2 does not.
+
+‘FILE1 -ot FILE2’
+ True if FILE1 is older (according to modification date) than FILE2,
+ or if FILE2 exists and FILE1 does not.
+
+‘FILE1 -ef FILE2’
+ True if FILE1 and FILE2 have the same device and inode numbers,
+ i.e., if they are hard links to each other.
+
+‘-N FILE’
+ True if FILE exists and has been modified (mtime) since it was last
+ read (atime).
+
+
+File: coreutils.info, Node: String tests, Next: Numeric tests, Prev: File characteristic tests, Up: test invocation
+
+16.3.4 String tests
+-------------------
+
+These options test string characteristics. You may need to quote STRING
+arguments for the shell. For example:
+
+ test -n "$V"
+
+ The quotes here prevent the wrong arguments from being passed to
+‘test’ if ‘$V’ is empty or contains special characters.
+
+‘-z STRING’
+ True if the length of STRING is zero.
+
+‘-n STRING’
+‘STRING’
+ True if the length of STRING is nonzero.
+
+‘STRING1 = STRING2’
+ True if the strings are equal.
+
+‘STRING1 == STRING2’
+ True if the strings are equal (synonym for =). Note this form is
+ not as portable to other shells and systems.
+
+‘STRING1 != STRING2’
+ True if the strings are not equal.
+
+
+File: coreutils.info, Node: Numeric tests, Next: Connectives for test, Prev: String tests, Up: test invocation
+
+16.3.5 Numeric tests
+--------------------
+
+Numeric relational operators. The arguments must be entirely numeric
+(possibly negative), or the special expression ‘-l STRING’, which
+evaluates to the length of STRING.
+
+‘ARG1 -eq ARG2’
+‘ARG1 -ne ARG2’
+‘ARG1 -lt ARG2’
+‘ARG1 -le ARG2’
+‘ARG1 -gt ARG2’
+‘ARG1 -ge ARG2’
+ These arithmetic binary operators return true if ARG1 is equal,
+ not-equal, less-than, less-than-or-equal, greater-than, or
+ greater-than-or-equal than ARG2, respectively.
+
+ For example:
+
+ test -1 -gt -2 && echo yes
+ ⇒ yes
+ test -l abc -gt 1 && echo yes
+ ⇒ yes
+ test 0x100 -eq 1
+ error→ test: integer expression expected before -eq
+
+
+File: coreutils.info, Node: Connectives for test, Prev: Numeric tests, Up: test invocation
+
+16.3.6 Connectives for ‘test’
+-----------------------------
+
+Note it’s preferred to use shell logical primitives rather than these
+logical connectives internal to ‘test’, because an expression may become
+ambiguous depending on the expansion of its parameters.
+
+ For example, this becomes ambiguous when ‘$1’ is set to ‘'!'’ and
+‘$2’ to the empty string ‘''’:
+
+ test "$1" -a "$2"
+
+ and should be written as:
+
+ test "$1" && test "$2"
+
+ Note the shell logical primitives also benefit from short circuit
+operation, which can be significant for file attribute tests.
+
+‘! EXPR’
+ True if EXPR is false. ‘!’ has lower precedence than all parts of
+ EXPR. Note ‘!’ needs to be specified to the left of a binary
+ expression, I.e., ‘'!' 1 -gt 2’ rather than ‘1 '!' -gt 2’. Also
+ ‘!’ is often a shell special character and is best used quoted.
+
+‘EXPR1 -a EXPR2’
+ True if both EXPR1 and EXPR2 are true. ‘-a’ is left associative,
+ and has a higher precedence than ‘-o’.
+
+‘EXPR1 -o EXPR2’
+ True if either EXPR1 or EXPR2 is true. ‘-o’ is left associative.
+
+
+File: coreutils.info, Node: expr invocation, Prev: test invocation, Up: Conditions
+
+16.4 ‘expr’: Evaluate expressions
+=================================
+
+‘expr’ evaluates an expression and writes the result on standard output.
+Each token of the expression must be a separate argument.
+
+ Operands are either integers or strings. Integers consist of one or
+more decimal digits, with an optional leading ‘-’. ‘expr’ converts
+anything appearing in an operand position to an integer or a string
+depending on the operation being applied to it.
+
+ Strings are not quoted for ‘expr’ itself, though you may need to
+quote them to protect characters with special meaning to the shell,
+e.g., spaces. However, regardless of whether it is quoted, a string
+operand should not be a parenthesis or any of ‘expr’’s operators like
+‘+’, so you cannot safely pass an arbitrary string ‘$str’ to expr merely
+by quoting it to the shell. One way to work around this is to use the
+GNU extension ‘+’, (e.g., ‘+ "$str" = foo’); a more portable way is to
+use ‘" $str"’ and to adjust the rest of the expression to take the
+leading space into account (e.g., ‘" $str" = " foo"’).
+
+ You should not pass a negative integer or a string with leading ‘-’
+as ‘expr’’s first argument, as it might be misinterpreted as an option;
+this can be avoided by parenthesization. Also, portable scripts should
+not use a string operand that happens to take the form of an integer;
+this can be worked around by inserting leading spaces as mentioned
+above.
+
+ Operators may be given as infix symbols or prefix keywords.
+Parentheses may be used for grouping in the usual manner. You must
+quote parentheses and many operators to avoid the shell evaluating them,
+however.
+
+ Because ‘expr’ uses multiple-precision arithmetic, it works with
+integers wider than those of machine registers.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::. Options must precede operands.
+
+ Exit status:
+
+ 0 if the expression is neither null nor 0,
+ 1 if the expression is null or 0,
+ 2 if the expression is invalid,
+ 3 if an internal error occurred (e.g., arithmetic overflow).
+
+* Menu:
+
+* String expressions:: ‘+ : match substr index length’
+* Numeric expressions:: ‘+ - * / %’
+* Relations for expr:: ‘| & < <= = == != >= >’
+* Examples of expr:: Examples.
+
+
+File: coreutils.info, Node: String expressions, Next: Numeric expressions, Up: expr invocation
+
+16.4.1 String expressions
+-------------------------
+
+‘expr’ supports pattern matching and other string operators. These have
+higher precedence than both the numeric and relational operators (in the
+next sections).
+
+‘STRING : REGEX’
+ Perform pattern matching. The arguments are converted to strings
+ and the second is considered to be a (basic, a la GNU ‘grep’)
+ regular expression, with a ‘^’ implicitly prepended. The first
+ argument is then matched against this regular expression.
+
+ If REGEX does not use ‘\(’ and ‘\)’, the ‘:’ expression returns the
+ number of characters matched, or 0 if the match fails.
+
+ If REGEX uses ‘\(’ and ‘\)’, the ‘:’ expression returns the part of
+ STRING that matched the subexpression, or the null string if the
+ match failed or the subexpression did not contribute to the match.
+
+ Only the first ‘\( ... \)’ pair is relevant to the return value;
+ additional pairs are meaningful only for grouping the regular
+ expression operators.
+
+ In the regular expression, ‘\+’, ‘\?’, and ‘\|’ are operators which
+ respectively match one or more, zero or one, or separate
+ alternatives. These operators are GNU extensions. *Note Regular
+ Expressions: (grep)Regular Expressions, for details of regular
+ expression syntax. Some examples are in *note Examples of expr::.
+
+‘match STRING REGEX’
+ An alternative way to do pattern matching. This is the same as
+ ‘STRING : REGEX’.
+
+‘substr STRING POSITION LENGTH’
+ Returns the substring of STRING beginning at POSITION with length
+ at most LENGTH. If either POSITION or LENGTH is negative, zero, or
+ non-numeric, returns the null string.
+
+‘index STRING CHARSET’
+ Returns the first position in STRING where the first character in
+ CHARSET was found. If no character in CHARSET is found in STRING,
+ return 0.
+
+‘length STRING’
+ Returns the length of STRING.
+
+‘+ TOKEN’
+ Interpret TOKEN as a string, even if it is a keyword like MATCH or
+ an operator like ‘/’. This makes it possible to test ‘expr length
+ + "$x"’ or ‘expr + "$x" : '.*/\(.\)'’ and have it do the right
+ thing even if the value of $X happens to be (for example) ‘/’ or
+ ‘index’. This operator is a GNU extension. Portable shell scripts
+ should use ‘" $token" : ' \(.*\)'’ instead of ‘+ "$token"’.
+
+ To make ‘expr’ interpret keywords as strings, you must use the
+‘quote’ operator.
+
+
+File: coreutils.info, Node: Numeric expressions, Next: Relations for expr, Prev: String expressions, Up: expr invocation
+
+16.4.2 Numeric expressions
+--------------------------
+
+‘expr’ supports the usual numeric operators, in order of increasing
+precedence. These numeric operators have lower precedence than the
+string operators described in the previous section, and higher
+precedence than the connectives (next section).
+
+‘+ -’
+ Addition and subtraction. Both arguments are converted to
+ integers; an error occurs if this cannot be done.
+
+‘* / %’
+ Multiplication, division, remainder. Both arguments are converted
+ to integers; an error occurs if this cannot be done.
+
+
+File: coreutils.info, Node: Relations for expr, Next: Examples of expr, Prev: Numeric expressions, Up: expr invocation
+
+16.4.3 Relations for ‘expr’
+---------------------------
+
+‘expr’ supports the usual logical connectives and relations. These have
+lower precedence than the string and numeric operators (previous
+sections). Here is the list, lowest-precedence operator first.
+
+‘|’
+ Returns its first argument if that is neither null nor zero,
+ otherwise its second argument if it is neither null nor zero,
+ otherwise 0. It does not evaluate its second argument if its first
+ argument is neither null nor zero.
+
+‘&’
+ Return its first argument if neither argument is null or zero,
+ otherwise 0. It does not evaluate its second argument if its first
+ argument is null or zero.
+
+‘< <= = == != >= >’
+ Compare the arguments and return 1 if the relation is true, 0
+ otherwise. ‘==’ is a synonym for ‘=’. ‘expr’ first tries to
+ convert both arguments to integers and do a numeric comparison; if
+ either conversion fails, it does a lexicographic comparison using
+ the character collating sequence specified by the ‘LC_COLLATE’
+ locale.
+
+
+File: coreutils.info, Node: Examples of expr, Prev: Relations for expr, Up: expr invocation
+
+16.4.4 Examples of using ‘expr’
+-------------------------------
+
+Here are a few examples, including quoting for shell metacharacters.
+
+ To add 1 to the shell variable ‘foo’, in Bourne-compatible shells:
+
+ foo=$(expr $foo + 1)
+
+ To print the non-directory part of the file name stored in ‘$fname’,
+which need not contain a ‘/’:
+
+ expr $fname : '.*/\(.*\)' '|' $fname
+
+ An example showing that ‘\+’ is an operator:
+
+ expr aaa : 'a\+'
+ ⇒ 3
+
+ expr abc : 'a\(.\)c'
+ ⇒ b
+ expr index abcdef cz
+ ⇒ 3
+ expr index index a
+ error→ expr: syntax error
+ expr index + index a
+ ⇒ 0
+
+
+File: coreutils.info, Node: Redirection, Next: File name manipulation, Prev: Conditions, Up: Top
+
+17 Redirection
+**************
+
+Unix shells commonly provide several forms of “redirection” – ways to
+change the input source or output destination of a command. But one
+useful redirection is performed by a separate command, not by the shell;
+it’s described here.
+
+* Menu:
+
+* tee invocation:: Redirect output to multiple files or processes.
+
+
+File: coreutils.info, Node: tee invocation, Up: Redirection
+
+17.1 ‘tee’: Redirect output to multiple files or processes
+==========================================================
+
+The ‘tee’ command copies standard input to standard output and also to
+any files given as arguments. This is useful when you want not only to
+send some data down a pipe, but also to save a copy. Synopsis:
+
+ tee [OPTION]... [FILE]...
+
+ If a file being written to does not already exist, it is created. If
+a file being written to already exists, the data it previously contained
+is overwritten unless the ‘-a’ option is used.
+
+ In previous versions of GNU Coreutils (5.3.0–8.23), a FILE of ‘-’
+caused ‘tee’ to send another copy of input to standard output. However,
+as the interleaved output was not very useful, ‘tee’ now conforms to
+POSIX and treats ‘-’ as a file name.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--append’
+ Append standard input to the given files rather than overwriting
+ them.
+
+‘-i’
+‘--ignore-interrupts’
+ Ignore interrupt signals.
+
+‘-p’
+‘--output-error[=MODE]’
+ Adjust the behavior with errors on the outputs. In summary ‘-p’
+ allows ‘tee’ to operate in a more appropriate manner with pipes,
+ and to continue to process data to any remaining outputs, if any
+ pipe outputs exit early. The default operation when
+ ‘--output-error’ is _not_ specified is to exit immediately on error
+ writing to a pipe, and diagnose errors writing to a non-pipe. The
+ long form ‘--output-error’ option supports selection between the
+ following MODEs:
+
+ ‘warn’
+ Warn on error opening or writing any output, including pipes.
+ Writing is continued to still open files/pipes. Exit status
+ indicates failure if any output has an error.
+
+ ‘warn-nopipe’
+ This is the default MODE when not specified, or when the short
+ form ‘-p’ is used. Warn on error opening or writing any
+ output, except pipes. Writing is continued to still open
+ files/pipes. Exit immediately if all remaining outputs become
+ broken pipes. Exit status indicates failure if any non pipe
+ output had an error.
+
+ ‘exit’
+ Exit on error opening or writing any output, including pipes.
+
+ ‘exit-nopipe’
+ Exit on error opening or writing any output, except pipes.
+ Exit immediately if all remaining outputs become broken pipes.
+
+ The ‘tee’ command is useful when you happen to be transferring a
+large amount of data and also want to summarize that data without
+reading it a second time. For example, when you are downloading a DVD
+image, you often want to verify its signature or checksum right away.
+The inefficient way to do it is simply:
+
+ wget https://example.com/some.iso && sha1sum some.iso
+
+ One problem with the above is that it makes you wait for the download
+to complete before starting the time-consuming SHA1 computation.
+Perhaps even more importantly, the above requires reading the DVD image
+a second time (the first was from the network).
+
+ The efficient way to do it is to interleave the download and SHA1
+computation. Then, you’ll get the checksum for free, because the entire
+process parallelizes so well:
+
+ # slightly contrived, to demonstrate process substitution
+ wget -O - https://example.com/dvd.iso \
+ | tee >(sha1sum > dvd.sha1) > dvd.iso
+
+ That makes ‘tee’ write not just to the expected output file, but also
+to a pipe running ‘sha1sum’ and saving the final checksum in a file
+named ‘dvd.sha1’.
+
+ Note, however, that this example relies on a feature of modern shells
+called “process substitution” (the ‘>(command)’ syntax, above; *Note
+Process Substitution: (bash)Process Substitution.), so it works with
+‘zsh’, ‘bash’, and ‘ksh’, but not with ‘/bin/sh’. So if you write code
+like this in a shell script, be sure to start the script with
+‘#!/bin/bash’.
+
+ Note also that if any of the process substitutions (or piped standard
+output) might exit early without consuming all the data, the ‘-p’ option
+is needed to allow ‘tee’ to continue to process the input to any
+remaining outputs.
+
+ Since the above example writes to one file and one process, a more
+conventional and portable use of ‘tee’ is even better:
+
+ wget -O - https://example.com/dvd.iso \
+ | tee dvd.iso | sha1sum > dvd.sha1
+
+ You can extend this example to make ‘tee’ write to two processes,
+computing MD5 and SHA1 checksums in parallel. In this case, process
+substitution is required:
+
+ wget -O - https://example.com/dvd.iso \
+ | tee >(sha1sum > dvd.sha1) \
+ >(md5sum > dvd.md5) \
+ > dvd.iso
+
+ This technique is also useful when you want to make a _compressed_
+copy of the contents of a pipe. Consider a tool to graphically
+summarize file system usage data from ‘du -ak’. For a large hierarchy,
+‘du -ak’ can run for a long time, and can easily produce terabytes of
+data, so you won’t want to rerun the command unnecessarily. Nor will
+you want to save the uncompressed output.
+
+ Doing it the inefficient way, you can’t even start the GUI until
+after you’ve compressed all of the ‘du’ output:
+
+ du -ak | gzip -9 > /tmp/du.gz
+ gzip -d /tmp/du.gz | checkspace -a
+
+ With ‘tee’ and process substitution, you start the GUI right away and
+eliminate the decompression completely:
+
+ du -ak | tee >(gzip -9 > /tmp/du.gz) | checkspace -a
+
+ Finally, if you regularly create more than one type of compressed
+tarball at once, for example when ‘make dist’ creates both
+‘gzip’-compressed and ‘bzip2’-compressed tarballs, there may be a better
+way. Typical ‘automake’-generated ‘Makefile’ rules create the two
+compressed tar archives with commands in sequence, like this (slightly
+simplified):
+
+ tardir=your-pkg-M.N
+ tar chof - "$tardir" | gzip -9 -c > your-pkg-M.N.tar.gz
+ tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
+
+ However, if the hierarchy you are archiving and compressing is larger
+than a couple megabytes, and especially if you are using a
+multi-processor system with plenty of memory, then you can do much
+better by reading the directory contents only once and running the
+compression programs in parallel:
+
+ tardir=your-pkg-M.N
+ tar chof - "$tardir" \
+ | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
+ | bzip2 -9 -c > your-pkg-M.N.tar.bz2
+
+ If you want to further process the output from process substitutions,
+and those processes write atomically (i.e., write less than the system’s
+PIPE_BUF size at a time), that’s possible with a construct like:
+
+ tardir=your-pkg-M.N
+ tar chof - "$tardir" \
+ | tee >(md5sum --tag) > >(sha256sum --tag) \
+ | sort | gpg --clearsign > your-pkg-M.N.tar.sig
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: File name manipulation, Next: Working context, Prev: Redirection, Up: Top
+
+18 File name manipulation
+*************************
+
+This section describes commands that manipulate file names.
+
+* Menu:
+
+* basename invocation:: Strip directory and suffix from a file name.
+* dirname invocation:: Strip last file name component.
+* pathchk invocation:: Check file name validity and portability.
+* mktemp invocation:: Create temporary file or directory.
+* realpath invocation:: Print resolved file names.
+
+
+File: coreutils.info, Node: basename invocation, Next: dirname invocation, Up: File name manipulation
+
+18.1 ‘basename’: Strip directory and suffix from a file name
+============================================================
+
+‘basename’ removes any leading directory components from NAME.
+Synopsis:
+
+ basename NAME [SUFFIX]
+ basename OPTION... NAME...
+
+ If SUFFIX is specified and is identical to the end of NAME, it is
+removed from NAME as well. Note that since trailing slashes are removed
+prior to suffix matching, SUFFIX will do nothing if it contains slashes.
+‘basename’ prints the result on standard output.
+
+ Together, ‘basename’ and ‘dirname’ are designed such that if ‘ls
+"$name"’ succeeds, then the command sequence ‘cd "$(dirname "$name")";
+ls "$(basename "$name")"’ will, too. This works for everything except
+file names containing a trailing newline.
+
+ POSIX allows the implementation to define the results if NAME is
+empty or ‘//’. In the former case, GNU ‘basename’ returns the empty
+string. In the latter case, the result is ‘//’ on platforms where // is
+distinct from /, and ‘/’ on platforms where there is no difference.
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘-a’
+‘--multiple’
+ Support more than one argument. Treat every argument as a NAME.
+ With this, an optional SUFFIX must be specified using the ‘-s’
+ option.
+
+‘-s SUFFIX’
+‘--suffix=SUFFIX’
+ Remove a trailing SUFFIX. This option implies the ‘-a’ option.
+
+‘-z’
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Output "sort".
+ basename /usr/bin/sort
+
+ # Output "stdio".
+ basename include/stdio.h .h
+
+ # Output "stdio".
+ basename -s .h include/stdio.h
+
+ # Output "stdio" followed by "stdlib"
+ basename -a -s .h include/stdio.h include/stdlib.h
+
+
+File: coreutils.info, Node: dirname invocation, Next: pathchk invocation, Prev: basename invocation, Up: File name manipulation
+
+18.2 ‘dirname’: Strip last file name component
+==============================================
+
+‘dirname’ prints all but the final slash-delimited component of each
+NAME. Slashes on either side of the final component are also removed.
+If the string contains no slash, ‘dirname’ prints ‘.’ (meaning the
+current directory). Synopsis:
+
+ dirname [OPTION] NAME...
+
+ NAME need not be a file name, but if it is, this operation
+effectively lists the directory that contains the final component,
+including the case when the final component is itself a directory.
+
+ Together, ‘basename’ and ‘dirname’ are designed such that if ‘ls
+"$name"’ succeeds, then the command sequence ‘cd "$(dirname "$name")";
+ls "$(basename "$name")"’ will, too. This works for everything except
+file names containing a trailing newline.
+
+ POSIX allows the implementation to define the results if NAME is
+‘//’. With GNU ‘dirname’, the result is ‘//’ on platforms where // is
+distinct from /, and ‘/’ on platforms where there is no difference.
+
+ The program accepts the following option. Also see *note Common
+options::.
+
+‘-z’
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ Examples:
+
+ # Output "/usr/bin".
+ dirname /usr/bin/sort
+ dirname /usr/bin//.//
+
+ # Output "dir1" followed by "dir2"
+ dirname dir1/str dir2/str
+
+ # Output ".".
+ dirname stdio.h
+
+
+File: coreutils.info, Node: pathchk invocation, Next: mktemp invocation, Prev: dirname invocation, Up: File name manipulation
+
+18.3 ‘pathchk’: Check file name validity and portability
+========================================================
+
+‘pathchk’ checks validity and portability of file names. Synopsis:
+
+ pathchk [OPTION]... NAME...
+
+ For each NAME, ‘pathchk’ prints an error message if any of these
+conditions is true:
+
+ 1. One of the existing directories in NAME does not have search
+ (execute) permission,
+ 2. The length of NAME is larger than the maximum supported by the
+ operating system.
+ 3. The length of one component of NAME is longer than its file
+ system’s maximum.
+
+ A nonexistent NAME is not an error, so long as a file with that name
+could be created under the above conditions.
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘-p’
+ Instead of performing checks based on the underlying file system,
+ print an error message if any of these conditions is true:
+
+ 1. A file name is empty.
+
+ 2. A file name contains a character outside the POSIX portable
+ file name character set, namely, the ASCII letters and digits,
+ ‘.’, ‘_’, ‘-’, and ‘/’.
+
+ 3. The length of a file name or one of its components exceeds the
+ POSIX minimum limits for portability.
+
+‘-P’
+ Print an error message if a file name is empty, or if it contains a
+ component that begins with ‘-’.
+
+‘--portability’
+ Print an error message if a file name is not portable to all POSIX
+ hosts. This option is equivalent to ‘-p -P’.
+
+ Exit status:
+
+ 0 if all specified file names passed all checks,
+ 1 otherwise.
+
+
+File: coreutils.info, Node: mktemp invocation, Next: realpath invocation, Prev: pathchk invocation, Up: File name manipulation
+
+18.4 ‘mktemp’: Create temporary file or directory
+=================================================
+
+‘mktemp’ manages the creation of temporary files and directories.
+Synopsis:
+
+ mktemp [OPTION]... [TEMPLATE]
+
+ Safely create a temporary file or directory based on TEMPLATE, and
+print its name. If given, TEMPLATE must include at least three
+consecutive ‘X’s in the last component. If omitted, the template
+‘tmp.XXXXXXXXXX’ is used, and option ‘--tmpdir’ is implied. The final
+run of ‘X’s in the TEMPLATE will be replaced by alpha-numeric
+characters; thus, on a case-sensitive file system, and with a TEMPLATE
+including a run of N instances of ‘X’, there are ‘62**N’ potential file
+names.
+
+ Older scripts used to create temporary files by simply joining the
+name of the program with the process id (‘$$’) as a suffix. However,
+that naming scheme is easily predictable, and suffers from a race
+condition where the attacker can create an appropriately named symbolic
+link, such that when the script then opens a handle to what it thought
+was an unused file, it is instead modifying an existing file. Using the
+same scheme to create a directory is slightly safer, since the ‘mkdir’
+will fail if the target already exists, but it is still inferior because
+it allows for denial of service attacks. Therefore, modern scripts
+should use the ‘mktemp’ command to guarantee that the generated name
+will be unpredictable, and that knowledge of the temporary file name
+implies that the file was created by the current script and cannot be
+modified by other users.
+
+ When creating a file, the resulting file has read and write
+permissions for the current user, but no permissions for the group or
+others; these permissions are reduced if the current umask is more
+restrictive.
+
+ Here are some examples (although note that if you repeat them, you
+will most likely get different file names):
+
+ • Create a temporary file in the current directory.
+ $ mktemp file.XXXX
+ file.H47c
+
+ • Create a temporary file with a known suffix.
+ $ mktemp --suffix=.txt file-XXXX
+ file-H08W.txt
+ $ mktemp file-XXXX-XXXX.txt
+ file-XXXX-eI9L.txt
+
+ • Create a secure fifo relative to the user’s choice of ‘TMPDIR’, but
+ falling back to the current directory rather than ‘/tmp’. Note
+ that ‘mktemp’ does not create fifos, but can create a secure
+ directory in which the fifo can live. Exit the shell if the
+ directory or fifo could not be created.
+ $ dir=$(mktemp -p "${TMPDIR:-.}" -d dir-XXXX) || exit 1
+ $ fifo=$dir/fifo
+ $ mkfifo "$fifo" || { rmdir "$dir"; exit 1; }
+
+ • Create and use a temporary file if possible, but ignore failure.
+ The file will reside in the directory named by ‘TMPDIR’, if
+ specified, or else in ‘/tmp’.
+ $ file=$(mktemp -q) && {
+ > # Safe to use $file only within this block. Use quotes,
+ > # since $TMPDIR, and thus $file, may contain whitespace.
+ > echo ... > "$file"
+ > rm "$file"
+ > }
+
+ • Act as a semi-random character generator (it is not fully random,
+ since it is impacted by the contents of the current directory). To
+ avoid security holes, do not use the resulting names to create a
+ file.
+ $ mktemp -u XXX
+ Gb9
+ $ mktemp -u XXX
+ nzC
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-d’
+‘--directory’
+ Create a directory rather than a file. The directory will have
+ read, write, and search permissions for the current user, but no
+ permissions for the group or others; these permissions are reduced
+ if the current umask is more restrictive.
+
+‘-q’
+‘--quiet’
+ Suppress diagnostics about failure to create a file or directory.
+ The exit status will still reflect whether a file was created.
+
+‘-u’
+‘--dry-run’
+ Generate a temporary name that does not name an existing file,
+ without changing the file system contents. Using the output of
+ this command to create a new file is inherently unsafe, as there is
+ a window of time between generating the name and using it where
+ another process can create an object by the same name.
+
+‘-p DIR’
+‘--tmpdir[=DIR]’
+ Treat TEMPLATE relative to the directory DIR. If DIR is not
+ specified (only possible with the long option ‘--tmpdir’) or is the
+ empty string, use the value of ‘TMPDIR’ if available, otherwise use
+ ‘/tmp’. If this is specified, TEMPLATE must not be absolute.
+ However, TEMPLATE can still contain slashes, although intermediate
+ directories must already exist.
+
+‘--suffix=SUFFIX’
+ Append SUFFIX to the TEMPLATE. SUFFIX must not contain slash. If
+ ‘--suffix’ is specified, TEMPLATE must end in ‘X’; if it is not
+ specified, then an appropriate ‘--suffix’ is inferred by finding
+ the last ‘X’ in TEMPLATE. This option exists for use with the
+ default TEMPLATE and for the creation of a SUFFIX that starts with
+ ‘X’.
+
+‘-t’
+ Treat TEMPLATE as a single file relative to the value of ‘TMPDIR’
+ if available, or to the directory specified by ‘-p’, otherwise to
+ ‘/tmp’. TEMPLATE must not contain slashes. This option is
+ deprecated; the use of ‘-p’ without ‘-t’ offers better defaults (by
+ favoring the command line over ‘TMPDIR’) and more flexibility (by
+ allowing intermediate directories).
+
+ Exit status:
+
+ 0 if the file was created,
+ 1 otherwise.
+
+
+File: coreutils.info, Node: realpath invocation, Prev: mktemp invocation, Up: File name manipulation
+
+18.5 ‘realpath’: Print the resolved file name.
+==============================================
+
+‘realpath’ expands all symbolic links and resolves references to ‘/./’,
+‘/../’ and extra ‘/’ characters. By default, all but the last component
+of the specified files must exist. Synopsis:
+
+ realpath [OPTION]... FILE...
+
+ The file name canonicalization functionality overlaps with that of
+the ‘readlink’ command. This is the preferred command for
+canonicalization as it’s a more suitable and standard name. In addition
+this command supports relative file name processing functionality.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-e’
+‘--canonicalize-existing’
+ Ensure that all components of the specified file names exist. If
+ any component is missing or unavailable, ‘realpath’ will output a
+ diagnostic unless the ‘-q’ option is specified, and exit with a
+ nonzero exit code. A trailing slash requires that the name resolve
+ to a directory.
+
+‘-m’
+‘--canonicalize-missing’
+ If any component of a specified file name is missing or
+ unavailable, treat it as a directory.
+
+‘-L’
+‘--logical’
+ Symbolic links are resolved in the specified file names, but they
+ are resolved after any subsequent ‘..’ components are processed.
+
+‘-P’
+‘--physical’
+ Symbolic links are resolved in the specified file names, and they
+ are resolved before any subsequent ‘..’ components are processed.
+ This is the default mode of operation.
+
+‘-q’
+‘--quiet’
+ Suppress diagnostic messages for specified file names.
+
+‘--relative-to=DIR’
+ Print the resolved file names relative to the specified directory.
+ Note this option honors the ‘-m’ and ‘-e’ options pertaining to
+ file existence.
+
+‘--relative-base=DIR’
+ Print the resolved file names as relative _if_ the files are
+ descendants of DIR. Otherwise, print the resolved file names as
+ absolute. Note this option honors the ‘-m’ and ‘-e’ options
+ pertaining to file existence. For details about combining
+ ‘--relative-to’ and ‘--relative-base’, *note Realpath usage
+ examples::.
+
+‘-s’
+‘--strip’
+‘--no-symlinks’
+ Do not resolve symbolic links. Only resolve references to ‘/./’,
+ ‘/../’ and remove extra ‘/’ characters. When combined with the
+ ‘-m’ option, realpath operates only on the file name, and does not
+ touch any actual file.
+
+‘-z’
+‘--zero’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+ Exit status:
+
+ 0 if all file names were printed without issue.
+ 1 otherwise.
+
+* Menu:
+
+* Realpath usage examples:: Realpath usage examples.
+
+
+File: coreutils.info, Node: Realpath usage examples, Up: realpath invocation
+
+18.5.1 Realpath usage examples
+------------------------------
+
+By default, ‘realpath’ prints the absolute file name of given files
+(symlinks are resolved, ‘words’ is resolved to ‘american-english’):
+
+ cd /home/user
+ realpath /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
+ ⇒ /usr/bin/sort
+ ⇒ /tmp/foo
+ ⇒ /usr/share/dict/american-english
+ ⇒ /home/user/1.txt
+
+ With ‘--relative-to’, file names are printed relative to the given
+directory:
+
+ realpath --relative-to=/usr/bin \
+ /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
+ ⇒ sort
+ ⇒ ../../tmp/foo
+ ⇒ ../share/dict/american-english
+ ⇒ ../../home/user/1.txt
+
+ With ‘--relative-base’, relative file names are printed _if_ the
+resolved file name is below the given base directory. For files outside
+the base directory absolute file names are printed:
+
+ realpath --relative-base=/usr \
+ /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
+ ⇒ bin/sort
+ ⇒ /tmp/foo
+ ⇒ share/dict/american-english
+ ⇒ /home/user/1.txt
+
+ When both ‘--relative-to=DIR1’ and ‘--relative-base=DIR2’ are used,
+file names are printed relative to DIR1 _if_ they are located below
+DIR2. If the files are not below DIR2, they are printed as absolute
+file names:
+
+ realpath --relative-to=/usr/bin --relative-base=/usr \
+ /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
+ ⇒ sort
+ ⇒ /tmp/foo
+ ⇒ ../share/dict/american-english
+ ⇒ /home/user/1.txt
+
+ When both ‘--relative-to=DIR1’ and ‘--relative-base=DIR2’ are used,
+DIR1 _must_ be a subdirectory of DIR2. Otherwise, ‘realpath’ prints
+absolutes file names.
+
+
+File: coreutils.info, Node: Working context, Next: User information, Prev: File name manipulation, Up: Top
+
+19 Working context
+******************
+
+This section describes commands that display or alter the context in
+which you are working: the current directory, the terminal settings, and
+so forth. See also the user-related commands in the next section.
+
+* Menu:
+
+* pwd invocation:: Print working directory.
+* stty invocation:: Print or change terminal characteristics.
+* printenv invocation:: Print environment variables.
+* tty invocation:: Print file name of terminal on standard input.
+
+
+File: coreutils.info, Node: pwd invocation, Next: stty invocation, Up: Working context
+
+19.1 ‘pwd’: Print working directory
+===================================
+
+‘pwd’ prints the name of the current directory. Synopsis:
+
+ pwd [OPTION]...
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-L’
+‘--logical’
+ If the contents of the environment variable ‘PWD’ provide an
+ absolute name of the current directory with no ‘.’ or ‘..’
+ components, but possibly with symbolic links, then output those
+ contents. Otherwise, fall back to default ‘-P’ handling.
+
+‘-P’
+‘--physical’
+ Print a fully resolved name for the current directory. That is,
+ all components of the printed name will be actual directory names –
+ none will be symbolic links.
+
+ If ‘-L’ and ‘-P’ are both given, the last one takes precedence. If
+neither option is given, then this implementation uses ‘-P’ as the
+default unless the ‘POSIXLY_CORRECT’ environment variable is set.
+
+ Due to shell aliases and built-in ‘pwd’ functions, using an unadorned
+‘pwd’ interactively or in a script may get you different functionality
+than that described here. Invoke it via ‘env’ (i.e., ‘env pwd ...’) to
+avoid interference from the shell.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: stty invocation, Next: printenv invocation, Prev: pwd invocation, Up: Working context
+
+19.2 ‘stty’: Print or change terminal characteristics
+=====================================================
+
+‘stty’ prints or changes terminal characteristics, such as baud rate.
+Synopses:
+
+ stty [OPTION] [SETTING]...
+ stty [OPTION]
+
+ If given no line settings, ‘stty’ prints the baud rate, line
+discipline number (on systems that support it), and line settings that
+have been changed from the values set by ‘stty sane’. By default, mode
+reading and setting are performed on the tty line connected to standard
+input, although this can be modified by the ‘--file’ option.
+
+ ‘stty’ accepts many non-option arguments that change aspects of the
+terminal line operation, as described below.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--all’
+ Print all current settings in human-readable form. This option may
+ not be used in combination with any line settings.
+
+‘-F DEVICE’
+‘--file=DEVICE’
+ Set the line opened by the file name specified in DEVICE instead of
+ the tty line connected to standard input. This option is necessary
+ because opening a POSIX tty requires use of the ‘O_NONDELAY’ flag
+ to prevent a POSIX tty from blocking until the carrier detect line
+ is high if the ‘clocal’ flag is not set. Hence, it is not always
+ possible to allow the shell to open the device in the traditional
+ manner.
+
+‘-g’
+‘--save’
+ Print all current settings in a form that can be used as an
+ argument to another ‘stty’ command to restore the current settings.
+ This option may not be used in combination with any line settings.
+
+ Many settings can be turned off by preceding them with a ‘-’. Such
+arguments are marked below with “May be negated” in their description.
+The descriptions themselves refer to the positive case, that is, when
+_not_ negated (unless stated otherwise, of course).
+
+ Some settings are not available on all POSIX systems, since they use
+extensions. Such arguments are marked below with “Non-POSIX” in their
+description. On non-POSIX systems, those or other settings also may not
+be available, but it’s not feasible to document all the variations: just
+try it and see.
+
+ ‘stty’ is installed only on platforms with the POSIX terminal
+interface, so portable scripts should not rely on its existence on
+non-POSIX platforms.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+* Menu:
+
+* Control:: Control settings
+* Input:: Input settings
+* Output:: Output settings
+* Local:: Local settings
+* Combination:: Combination settings
+* Characters:: Special characters
+* Special:: Special settings
+
+
+File: coreutils.info, Node: Control, Next: Input, Up: stty invocation
+
+19.2.1 Control settings
+-----------------------
+
+Control settings:
+
+‘parenb’
+ Generate parity bit in output and expect parity bit in input. May
+ be negated.
+
+‘parodd’
+ Set odd parity (even if negated). May be negated.
+
+‘cmspar’
+ Use "stick" (mark/space) parity. If parodd is set, the parity bit
+ is always 1; if parodd is not set, the parity bit is always zero.
+ Non-POSIX. May be negated.
+
+‘cs5’
+‘cs6’
+‘cs7’
+‘cs8’
+ Set character size to 5, 6, 7, or 8 bits.
+
+‘hup’
+‘hupcl’
+ Send a hangup signal when the last process closes the tty. May be
+ negated.
+
+‘cstopb’
+ Use two stop bits per character (one if negated). May be negated.
+
+‘cread’
+ Allow input to be received. May be negated.
+
+‘clocal’
+ Disable modem control signals. May be negated.
+
+‘crtscts’
+ Enable RTS/CTS flow control. Non-POSIX. May be negated.
+
+‘cdtrdsr’
+ Enable DTR/DSR flow control. Non-POSIX. May be negated.
+
+
+File: coreutils.info, Node: Input, Next: Output, Prev: Control, Up: stty invocation
+
+19.2.2 Input settings
+---------------------
+
+These settings control operations on data received from the terminal.
+
+‘ignbrk’
+ Ignore break characters. May be negated.
+
+‘brkint’
+ Make breaks cause an interrupt signal. May be negated.
+
+‘ignpar’
+ Ignore characters with parity errors. May be negated.
+
+‘parmrk’
+ Mark parity errors (with a 255-0-character sequence). May be
+ negated.
+
+‘inpck’
+ Enable input parity checking. May be negated.
+
+‘istrip’
+ Clear high (8th) bit of input characters. May be negated.
+
+‘inlcr’
+ Translate newline to carriage return. May be negated.
+
+‘igncr’
+ Ignore carriage return. May be negated.
+
+‘icrnl’
+ Translate carriage return to newline. May be negated.
+
+‘iutf8’
+ Assume input characters are UTF-8 encoded. May be negated.
+
+‘ixon’
+ Enable XON/XOFF flow control (that is, ‘Ctrl-S’/‘Ctrl-Q’). May be
+ negated.
+
+‘ixoff’
+‘tandem’
+ Enable sending of ‘stop’ character when the system input buffer is
+ almost full, and ‘start’ character when it becomes almost empty
+ again. May be negated.
+
+‘iuclc’
+ Translate uppercase characters to lowercase. Non-POSIX. May be
+ negated. Note ilcuc is not implemented, as one would not be able
+ to issue almost any (lowercase) Unix command, after invoking it.
+
+‘ixany’
+ Allow any character to restart output (only the start character if
+ negated). Non-POSIX. May be negated.
+
+‘imaxbel’
+ Enable beeping and not flushing input buffer if a character arrives
+ when the input buffer is full. Non-POSIX. May be negated.
+
+
+File: coreutils.info, Node: Output, Next: Local, Prev: Input, Up: stty invocation
+
+19.2.3 Output settings
+----------------------
+
+These settings control operations on data sent to the terminal.
+
+‘opost’
+ Postprocess output. May be negated.
+
+‘olcuc’
+ Translate lowercase characters to uppercase. Non-POSIX. May be
+ negated. (Note ouclc is not currently implemented.)
+
+‘ocrnl’
+ Translate carriage return to newline. Non-POSIX. May be negated.
+
+‘onlcr’
+ Translate newline to carriage return-newline. Non-POSIX. May be
+ negated.
+
+‘onocr’
+ Do not print carriage returns in the first column. Non-POSIX. May
+ be negated.
+
+‘onlret’
+ Newline performs a carriage return. Non-POSIX. May be negated.
+
+‘ofill’
+ Use fill (padding) characters instead of timing for delays.
+ Non-POSIX. May be negated.
+
+‘ofdel’
+ Use ASCII DEL characters for fill instead of ASCII NUL characters.
+ Non-POSIX. May be negated.
+
+‘nl1’
+‘nl0’
+ Newline delay style. Non-POSIX.
+
+‘cr3’
+‘cr2’
+‘cr1’
+‘cr0’
+ Carriage return delay style. Non-POSIX.
+
+‘tab3’
+‘tab2’
+‘tab1’
+‘tab0’
+ Horizontal tab delay style. Non-POSIX.
+
+‘bs1’
+‘bs0’
+ Backspace delay style. Non-POSIX.
+
+‘vt1’
+‘vt0’
+ Vertical tab delay style. Non-POSIX.
+
+‘ff1’
+‘ff0’
+ Form feed delay style. Non-POSIX.
+
+
+File: coreutils.info, Node: Local, Next: Combination, Prev: Output, Up: stty invocation
+
+19.2.4 Local settings
+---------------------
+
+‘isig’
+ Enable ‘interrupt’, ‘quit’, and ‘suspend’ special characters. May
+ be negated.
+
+‘icanon’
+ Enable ‘erase’, ‘kill’, ‘werase’, and ‘rprnt’ special characters.
+ May be negated.
+
+‘iexten’
+ Enable non-POSIX special characters. May be negated.
+
+‘echo’
+ Echo input characters. May be negated.
+
+‘echoe’
+‘crterase’
+ Echo ‘erase’ characters as backspace-space-backspace. May be
+ negated.
+
+‘echok’
+ Echo a newline after a ‘kill’ character. May be negated.
+
+‘echonl’
+ Echo newline even if not echoing other characters. May be negated.
+
+‘noflsh’
+ Disable flushing after ‘interrupt’ and ‘quit’ special characters.
+ May be negated.
+
+‘xcase’
+ Enable input and output of uppercase characters by preceding their
+ lowercase equivalents with ‘\’, when ‘icanon’ is set. Non-POSIX.
+ May be negated.
+
+‘tostop’
+ Stop background jobs that try to write to the terminal. Non-POSIX.
+ May be negated.
+
+‘echoprt’
+‘prterase’
+ Echo erased characters backward, between ‘\’ and ‘/’. Non-POSIX.
+ May be negated.
+
+‘echoctl’
+‘ctlecho’
+ Echo control characters in hat notation (‘^C’) instead of
+ literally. Non-POSIX. May be negated.
+
+‘echoke’
+‘crtkill’
+ Echo the ‘kill’ special character by erasing each character on the
+ line as indicated by the ‘echoprt’ and ‘echoe’ settings, instead of
+ by the ‘echoctl’ and ‘echok’ settings. Non-POSIX. May be negated.
+
+‘extproc’
+ Enable ‘LINEMODE’, which is used to avoid echoing each character
+ over high latency links. See also Internet RFC 1116
+ (https://tools.ietf.org/search/rfc1116). Non-POSIX. May be
+ negated.
+
+‘flusho’
+ Discard output. Note this setting is currently ignored on
+ GNU/Linux systems. Non-POSIX. May be negated.
+
+
+File: coreutils.info, Node: Combination, Next: Characters, Prev: Local, Up: stty invocation
+
+19.2.5 Combination settings
+---------------------------
+
+Combination settings:
+
+‘evenp’
+‘parity’
+ Same as ‘parenb -parodd cs7’. May be negated. If negated, same as
+ ‘-parenb cs8’.
+
+‘oddp’
+ Same as ‘parenb parodd cs7’. May be negated. If negated, same as
+ ‘-parenb cs8’.
+
+‘nl’
+ Same as ‘-icrnl -onlcr’. May be negated. If negated, same as
+ ‘icrnl -inlcr -igncr onlcr -ocrnl -onlret’.
+
+‘ek’
+ Reset the ‘erase’ and ‘kill’ special characters to their default
+ values.
+
+‘sane’
+ Same as:
+
+ cread -ignbrk brkint -inlcr -igncr icrnl
+ icanon iexten echo echoe echok -echonl -noflsh
+ -ixoff -iutf8 -iuclc -ixany imaxbel -xcase -olcuc -ocrnl
+ opost -ofill onlcr -onocr -onlret nl0 cr0 tab0 bs0 vt0 ff0
+ isig -tostop -ofdel -echoprt echoctl echoke -extproc
+
+ and also sets all special characters to their default values.
+
+‘cooked’
+ Same as ‘brkint ignpar istrip icrnl ixon opost isig icanon’, plus
+ sets the ‘eof’ and ‘eol’ characters to their default values if they
+ are the same as the ‘min’ and ‘time’ characters. May be negated.
+ If negated, same as ‘raw’.
+
+‘raw’
+ Same as:
+
+ -ignbrk -brkint -ignpar -parmrk -inpck -istrip
+ -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost
+ -isig -iuclc -ixany -imaxbel -xcase min 1 time 0
+
+ May be negated. If negated, same as ‘cooked’.
+
+‘cbreak’
+ Same as ‘-icanon’. May be negated. If negated, same as ‘icanon’.
+
+‘pass8’
+ Same as ‘-parenb -istrip cs8’. May be negated. If negated, same
+ as ‘parenb istrip cs7’.
+
+‘litout’
+ Same as ‘-parenb -istrip -opost cs8’. May be negated. If negated,
+ same as ‘parenb istrip opost cs7’.
+
+‘decctlq’
+ Same as ‘-ixany’. Non-POSIX. May be negated.
+
+‘tabs’
+ Same as ‘tab0’. Non-POSIX. May be negated. If negated, same as
+ ‘tab3’.
+
+‘lcase’
+‘LCASE’
+ Same as ‘xcase iuclc olcuc’. Non-POSIX. May be negated. (Used
+ for terminals with uppercase characters only.)
+
+‘crt’
+ Same as ‘echoe echoctl echoke’.
+
+‘dec’
+ Same as ‘echoe echoctl echoke -ixany intr ^C erase ^? kill C-u’.
+
+
+File: coreutils.info, Node: Characters, Next: Special, Prev: Combination, Up: stty invocation
+
+19.2.6 Special characters
+-------------------------
+
+The special characters’ default values vary from system to system. They
+are set with the syntax ‘name value’, where the names are listed below
+and the value can be given either literally, in hat notation (‘^C’), or
+as an integer which may start with ‘0x’ to indicate hexadecimal, ‘0’ to
+indicate octal, or any other digit to indicate decimal.
+
+ For GNU stty, giving a value of ‘^-’ or ‘undef’ disables that special
+character. (This is incompatible with Ultrix ‘stty’, which uses a value
+of ‘u’ to disable a special character. GNU ‘stty’ treats a value ‘u’
+like any other, namely to set that special character to <U>.)
+
+‘intr’
+ Send an interrupt signal.
+
+‘quit’
+ Send a quit signal.
+
+‘erase’
+ Erase the last character typed.
+
+‘kill’
+ Erase the current line.
+
+‘eof’
+ Send an end of file (terminate the input).
+
+‘eol’
+ End the line.
+
+‘eol2’
+ Alternate character to end the line. Non-POSIX.
+
+‘discard’
+ Alternate character to toggle discarding of output. Non-POSIX.
+
+‘swtch’
+ Switch to a different shell layer. Non-POSIX.
+
+‘status’
+ Send an info signal. Not currently supported on GNU/Linux.
+ Non-POSIX.
+
+‘start’
+ Restart the output after stopping it.
+
+‘stop’
+ Stop the output.
+
+‘susp’
+ Send a terminal stop signal.
+
+‘dsusp’
+ Send a terminal stop signal after flushing the input. Non-POSIX.
+
+‘rprnt’
+ Redraw the current line. Non-POSIX.
+
+‘werase’
+ Erase the last word typed. Non-POSIX.
+
+‘lnext’
+ Enter the next character typed literally, even if it is a special
+ character. Non-POSIX.
+
+
+File: coreutils.info, Node: Special, Prev: Characters, Up: stty invocation
+
+19.2.7 Special settings
+-----------------------
+
+‘min N’
+ Set the minimum number of characters that will satisfy a read until
+ the time value has expired, when ‘-icanon’ is set.
+
+‘time N’
+ Set the number of tenths of a second before reads time out if the
+ minimum number of characters have not been read, when ‘-icanon’ is
+ set.
+
+‘ispeed N’
+ Set the input speed to N.
+
+‘ospeed N’
+ Set the output speed to N.
+
+‘rows N’
+ Tell the tty kernel driver that the terminal has N rows.
+ Non-POSIX.
+
+‘cols N’
+‘columns N’
+ Tell the kernel that the terminal has N columns. Non-POSIX.
+
+‘drain’
+ Apply settings after first waiting for pending output to be
+ transmitted. This is enabled by default for GNU ‘stty’. Note this
+ is treated as an option rather than a line setting, and will follow
+ the option processing rules described in the summary above. It is
+ useful to disable this option in cases where the system may be in a
+ state where serial transmission is not possible. For example, if
+ the system has received the ‘DC3’ character with ‘ixon’ (software
+ flow control) enabled, then ‘stty’ would block without ‘-drain’
+ being specified. May be negated. Non-POSIX.
+
+‘size’
+ Print the number of rows and columns that the kernel thinks the
+ terminal has. (Systems that don’t support rows and columns in the
+ kernel typically use the environment variables ‘LINES’ and
+ ‘COLUMNS’ instead; however, GNU ‘stty’ does not know anything about
+ them.) Non-POSIX.
+
+‘line N’
+ Use line discipline N. Non-POSIX.
+
+‘speed’
+ Print the terminal speed.
+
+‘N’
+ Set the input and output speeds to N. N can be one of: 0 50 75 110
+ 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200 38400
+ ‘exta’ ‘extb’. ‘exta’ is the same as 19200; ‘extb’ is the same as
+ 38400. Many systems, including GNU/Linux, support higher speeds.
+ The ‘stty’ command includes support for speeds of 57600, 115200,
+ 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000,
+ 2000000, 2500000, 3000000, 3500000, or 4000000 where the system
+ supports these. 0 hangs up the line if ‘-clocal’ is set.
+
+
+File: coreutils.info, Node: printenv invocation, Next: tty invocation, Prev: stty invocation, Up: Working context
+
+19.3 ‘printenv’: Print all or some environment variables
+========================================================
+
+‘printenv’ prints environment variable values. Synopsis:
+
+ printenv [OPTION] [VARIABLE]...
+
+ If no VARIABLEs are specified, ‘printenv’ prints the value of every
+environment variable. Otherwise, it prints the value of each VARIABLE
+that is set, and nothing for those that are not set.
+
+ The program accepts the following option. Also see *note Common
+options::.
+
+‘-0’
+‘--null’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+ Exit status:
+
+ 0 if all variables specified were found
+ 1 if at least one specified variable was not found
+ 2 if a write error occurred
+
+
+File: coreutils.info, Node: tty invocation, Prev: printenv invocation, Up: Working context
+
+19.4 ‘tty’: Print file name of terminal on standard input
+=========================================================
+
+‘tty’ prints the file name of the terminal connected to its standard
+input. It prints ‘not a tty’ if standard input is not a terminal.
+Synopsis:
+
+ tty [OPTION]...
+
+ The program accepts the following option. Also see *note Common
+options::.
+
+‘-s’
+‘--silent’
+‘--quiet’
+ Print nothing; only return an exit status.
+
+ Exit status:
+
+ 0 if standard input is a terminal
+ 1 if standard input is a non-terminal file
+ 2 if given incorrect arguments
+ 3 if a write error occurs
+
+
+File: coreutils.info, Node: User information, Next: System context, Prev: Working context, Up: Top
+
+20 User information
+*******************
+
+This section describes commands that print user-related information:
+logins, groups, and so forth.
+
+* Menu:
+
+* id invocation:: Print user identity.
+* logname invocation:: Print current login name.
+* whoami invocation:: Print effective user ID.
+* groups invocation:: Print group names a user is in.
+* users invocation:: Print login names of users currently logged in.
+* who invocation:: Print who is currently logged in.
+
+
+File: coreutils.info, Node: id invocation, Next: logname invocation, Up: User information
+
+20.1 ‘id’: Print user identity
+==============================
+
+‘id’ prints information about the given user, or the process running it
+if no user is specified. Synopsis:
+
+ id [OPTION]... [USER]...
+
+ USER can be either a user ID or a name, with name look-up taking
+precedence unless the ID is specified with a leading ‘+’. *Note
+Disambiguating names and IDs::.
+
+ By default, it prints the real user ID, real group ID, effective user
+ID if different from the real user ID, effective group ID if different
+from the real group ID, and supplemental group IDs. In addition, if
+SELinux is enabled and the ‘POSIXLY_CORRECT’ environment variable is not
+set, then print ‘context=C’, where C is the security context.
+
+ Each of these numeric values is preceded by an identifying string and
+followed by the corresponding user or group name in parentheses.
+
+ The options cause ‘id’ to print only part of the above information.
+Also see *note Common options::.
+
+‘-g’
+‘--group’
+ Print only the group ID.
+
+‘-G’
+‘--groups’
+ Print only the group ID and the supplementary groups.
+
+‘-n’
+‘--name’
+ Print the user or group name instead of the ID number. Requires
+ ‘-u’, ‘-g’, or ‘-G’.
+
+‘-r’
+‘--real’
+ Print the real, instead of effective, user or group ID. Requires
+ ‘-u’, ‘-g’, or ‘-G’.
+
+‘-u’
+‘--user’
+ Print only the user ID.
+
+‘-Z’
+‘--context’
+ Print only the security context of the process, which is generally
+ the user’s security context inherited from the parent process. If
+ neither SELinux or SMACK is enabled then print a warning and set
+ the exit status to 1.
+
+‘-z’
+‘--zero’
+ Delimit output items with ASCII NUL characters. This option is not
+ permitted when using the default format. When multiple users are
+ specified, and the ‘--groups’ option is also in effect, groups are
+ delimited with a single NUL character, while users are delimited
+ with two NUL characters.
+
+ Example:
+ $ id -Gn --zero
+ users <NUL> devs <NUL>
+
+ Primary and supplementary groups for a process are normally inherited
+from its parent and are usually unchanged since login. This means that
+if you change the group database after logging in, ‘id’ will not reflect
+your changes within your existing login session. Running ‘id’ with a
+user argument causes the user and group database to be consulted afresh,
+and so will give a different result.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: logname invocation, Next: whoami invocation, Prev: id invocation, Up: User information
+
+20.2 ‘logname’: Print current login name
+========================================
+
+‘logname’ prints the calling user’s name, as found in a
+system-maintained file (often ‘/var/run/utmp’ or ‘/etc/utmp’), and exits
+with a status of 0. If there is no entry for the calling process,
+‘logname’ prints an error message and exits with a status of 1.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: whoami invocation, Next: groups invocation, Prev: logname invocation, Up: User information
+
+20.3 ‘whoami’: Print effective user name
+========================================
+
+‘whoami’ prints the user name associated with the current effective user
+ID. It is equivalent to the command ‘id -un’.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: groups invocation, Next: users invocation, Prev: whoami invocation, Up: User information
+
+20.4 ‘groups’: Print group names a user is in
+=============================================
+
+‘groups’ prints the names of the primary and any supplementary groups
+for each given USERNAME, or the current process if no names are given.
+If more than one name is given, the name of each user is printed before
+the list of that user’s groups and the user name is separated from the
+group list by a colon. Synopsis:
+
+ groups [USERNAME]...
+
+ The group lists are equivalent to the output of the command ‘id -Gn’.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ Primary and supplementary groups for a process are normally inherited
+from its parent and are usually unchanged since login. This means that
+if you change the group database after logging in, ‘groups’ will not
+reflect your changes within your existing login session. Running
+‘groups’ with a list of users causes the user and group database to be
+consulted afresh, and so will give a different result.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: users invocation, Next: who invocation, Prev: groups invocation, Up: User information
+
+20.5 ‘users’: Print login names of users currently logged in
+============================================================
+
+‘users’ prints on a single line a blank-separated list of user names of
+users currently logged in to the current host. Each user name
+corresponds to a login session, so if a user has more than one login
+session, that user’s name will appear the same number of times in the
+output. Synopsis:
+
+ users [FILE]
+
+ With no FILE argument, ‘users’ extracts its information from a
+system-maintained file (often ‘/var/run/utmp’ or ‘/etc/utmp’). If a
+file argument is given, ‘users’ uses that file instead. A common choice
+is ‘/var/log/wtmp’.
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ The ‘users’ command is installed only on platforms with the POSIX
+‘<utmpx.h>’ include file or equivalent, so portable scripts should not
+rely on its existence on non-POSIX platforms.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: who invocation, Prev: users invocation, Up: User information
+
+20.6 ‘who’: Print who is currently logged in
+============================================
+
+‘who’ prints information about users who are currently logged on.
+Synopsis:
+
+ who [OPTION] [FILE] [am i]
+
+ If given no non-option arguments, ‘who’ prints the following
+information for each user currently logged on: login name, terminal
+line, login time, and remote hostname or X display.
+
+ If given one non-option argument, ‘who’ uses that instead of a
+default system-maintained file (often ‘/var/run/utmp’ or ‘/etc/utmp’) as
+the name of the file containing the record of users logged on.
+‘/var/log/wtmp’ is commonly given as an argument to ‘who’ to look at who
+has previously logged on.
+
+ If given two non-option arguments, ‘who’ prints only the entry for
+the user running it (determined from its standard input), preceded by
+the hostname. Traditionally, the two arguments given are ‘am i’, as in
+‘who am i’.
+
+ Timestamps are listed according to the time zone rules specified by
+the ‘TZ’ environment variable, or by the system default rules if ‘TZ’ is
+not set. *Note Specifying the Time Zone with ‘TZ’: (libc)TZ Variable.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--all’
+ Same as ‘-b -d --login -p -r -t -T -u’.
+
+‘-b’
+‘--boot’
+ Print the date and time of last system boot.
+
+‘-d’
+‘--dead’
+ Print information corresponding to dead processes.
+
+‘-H’
+‘--heading’
+ Print a line of column headings.
+
+‘-l’
+‘--login’
+ List only the entries that correspond to processes via which the
+ system is waiting for a user to login. The user name is always
+ ‘LOGIN’.
+
+‘--lookup’
+ Attempt to canonicalize hostnames found in utmp through a DNS
+ lookup. This is not the default because it can cause significant
+ delays on systems with automatic dial-up internet access.
+
+‘-m’
+ Same as ‘who am i’.
+
+‘-p’
+‘--process’
+ List active processes spawned by init.
+
+‘-q’
+‘--count’
+ Print only the login names and the number of users logged on.
+ Overrides all other options.
+
+‘-r’
+‘--runlevel’
+ Print the current (and maybe previous) run-level of the init
+ process.
+
+‘-s’
+ Ignored; for compatibility with other versions of ‘who’.
+
+‘-t’
+‘--time’
+ Print last system clock change.
+
+‘-u’
+ After the login time, print the number of hours and minutes that
+ the user has been idle. ‘.’ means the user was active in the last
+ minute. ‘old’ means the user has been idle for more than 24 hours.
+
+‘-w’
+‘-T’
+‘--mesg’
+‘--message’
+‘--writable’
+ After each login name print a character indicating the user’s
+ message status:
+
+ ‘+’ allowing ‘write’ messages
+ ‘-’ disallowing ‘write’ messages
+ ‘?’ cannot find terminal device
+
+ The ‘who’ command is installed only on platforms with the POSIX
+‘<utmpx.h>’ include file or equivalent, so portable scripts should not
+rely on its existence on non-POSIX platforms.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: System context, Next: SELinux context, Prev: User information, Up: Top
+
+21 System context
+*****************
+
+This section describes commands that print or change system-wide
+information.
+
+* Menu:
+
+* date invocation:: Print or set system date and time.
+* arch invocation:: Print machine hardware name.
+* nproc invocation:: Print the number of processors.
+* uname invocation:: Print system information.
+* hostname invocation:: Print or set system name.
+* hostid invocation:: Print numeric host identifier.
+* uptime invocation:: Print system uptime and load.
+
+
+File: coreutils.info, Node: date invocation, Next: arch invocation, Up: System context
+
+21.1 ‘date’: Print or set system date and time
+==============================================
+
+Synopses:
+
+ date [OPTION]... [+FORMAT]
+ date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ]
+
+ The ‘date’ command displays the date and time. With the ‘--set’
+(‘-s’) option, or with ‘MMDDhhmm[[CC]YY][.ss]’, it sets the date and
+time.
+
+ Invoking ‘date’ with no FORMAT argument is equivalent to invoking it
+with a default format that depends on the ‘LC_TIME’ locale category. In
+the default C locale, this format is ‘'+%a %b %e %H:%M:%S %Z %Y'’, so
+the output looks like ‘Thu Jul 9 17:00:00 EDT 2020’.
+
+ Normally, ‘date’ uses the time zone rules indicated by the ‘TZ’
+environment variable, or the system default rules if ‘TZ’ is not set.
+*Note Specifying the Time Zone with ‘TZ’: (libc)TZ Variable.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+* Menu:
+
+* Date format specifiers:: Used in ‘date '+...'’
+* Setting the time:: Changing the system clock.
+* Options for date:: Instead of the current time.
+* Date input formats:: Specifying date strings.
+* Examples of date:: Examples.
+
+
+File: coreutils.info, Node: Date format specifiers, Next: Setting the time, Up: date invocation
+
+21.1.1 Specifying the format of ‘date’ output
+---------------------------------------------
+
+If given an argument that starts with a ‘+’, ‘date’ prints the current
+date and time (or the date and time specified by the ‘--date’ option,
+see below) in the format defined by that argument, which is similar to
+that of the ‘strftime’ function. Except for conversion specifiers,
+which start with ‘%’, characters in the format string are printed
+unchanged. The conversion specifiers are described below.
+
+* Menu:
+
+* Time conversion specifiers:: %[HIklMNpPrRsSTXzZ]
+* Date conversion specifiers:: %[aAbBcCdDeFgGhjmuUVwWxyY]
+* Literal conversion specifiers:: %[%nt]
+* Padding and other flags:: Pad with zeros, spaces, etc.
+
+
+File: coreutils.info, Node: Time conversion specifiers, Next: Date conversion specifiers, Up: Date format specifiers
+
+21.1.1.1 Time conversion specifiers
+...................................
+
+‘date’ conversion specifiers related to times.
+
+‘%H’
+ hour (‘00’...‘23’)
+‘%I’
+ hour (‘01’...‘12’)
+‘%k’
+ hour, space padded (‘ 0’...‘23’); equivalent to ‘%_H’. This is a
+ GNU extension.
+‘%l’
+ hour, space padded (‘ 1’...‘12’); equivalent to ‘%_I’. This is a
+ GNU extension.
+‘%M’
+ minute (‘00’...‘59’)
+‘%N’
+ nanoseconds (‘000000000’...‘999999999’). This is a GNU extension.
+‘%p’
+ locale’s equivalent of either ‘AM’ or ‘PM’; blank in many locales.
+ Noon is treated as ‘PM’ and midnight as ‘AM’.
+‘%P’
+ like ‘%p’, except lower case. This is a GNU extension.
+‘%r’
+ locale’s 12-hour clock time (e.g., ‘11:11:04 PM’)
+‘%R’
+ 24-hour hour and minute. Same as ‘%H:%M’.
+‘%s’
+ seconds since the Epoch, i.e., since 1970-01-01 00:00 UTC. Leap
+ seconds are not counted unless leap second support is available.
+ *Note %s-examples::, for examples. This is a GNU extension.
+‘%S’
+ second (‘00’...‘60’). This may be ‘60’ if leap seconds are
+ supported.
+‘%T’
+ 24-hour hour, minute, and second. Same as ‘%H:%M:%S’.
+‘%X’
+ locale’s time representation (e.g., ‘23:13:48’)
+‘%z’
+ Four-digit numeric time zone, e.g., ‘-0600’ or ‘+0530’, or ‘-0000’
+ if no time zone is determinable. This value reflects the numeric
+ time zone appropriate for the current time, using the time zone
+ rules specified by the ‘TZ’ environment variable. A time zone is
+ not determinable if its numeric offset is zero and its abbreviation
+ begins with ‘-’. The time (and optionally, the time zone rules)
+ can be overridden by the ‘--date’ option.
+‘%:z’
+ Numeric time zone with ‘:’, e.g., ‘-06:00’ or ‘+05:30’), or
+ ‘-00:00’ if no time zone is determinable. This is a GNU extension.
+‘%::z’
+ Numeric time zone to the nearest second with ‘:’ (e.g., ‘-06:00:00’
+ or ‘+05:30:00’), or ‘-00:00:00’ if no time zone is determinable.
+ This is a GNU extension.
+‘%:::z’
+ Numeric time zone with ‘:’ using the minimum necessary precision
+ (e.g., ‘-06’, ‘+05:30’, or ‘-04:56:02’), or ‘-00’ if no time zone
+ is determinable. This is a GNU extension.
+‘%Z’
+ alphabetic time zone abbreviation (e.g., ‘EDT’), or nothing if no
+ time zone is determinable. See ‘%z’ for how it is determined.
+
+
+File: coreutils.info, Node: Date conversion specifiers, Next: Literal conversion specifiers, Prev: Time conversion specifiers, Up: Date format specifiers
+
+21.1.1.2 Date conversion specifiers
+...................................
+
+‘date’ conversion specifiers related to dates.
+
+‘%a’
+ locale’s abbreviated weekday name (e.g., ‘Sun’)
+‘%A’
+ locale’s full weekday name, variable length (e.g., ‘Sunday’)
+‘%b’
+ locale’s abbreviated month name (e.g., ‘Jan’)
+‘%B’
+ locale’s full month name, variable length (e.g., ‘January’)
+‘%c’
+ locale’s date and time (e.g., ‘Thu Mar 3 23:05:25 2020’)
+‘%C’
+ century. This is like ‘%Y’, except the last two digits are
+ omitted. For example, it is ‘20’ if ‘%Y’ is ‘2019’, and is ‘-0’ if
+ ‘%Y’ is ‘-001’. It is normally at least two characters, but it may
+ be more.
+‘%d’
+ day of month (e.g., ‘01’)
+‘%D’
+ date; same as ‘%m/%d/%y’
+‘%e’
+ day of month, space padded; same as ‘%_d’
+‘%F’
+ full date in ISO 8601 format; like ‘%+4Y-%m-%d’ except that any
+ flags or field width override the ‘+’ and (after subtracting 6) the
+ ‘4’. This is a good choice for a date format, as it is standard
+ and is easy to sort in the usual case where years are in the range
+ 0000...9999.
+‘%g’
+ year corresponding to the ISO week number, but without the century
+ (range ‘00’ through ‘99’). This has the same format and value as
+ ‘%y’, except that if the ISO week number (see ‘%V’) belongs to the
+ previous or next year, that year is used instead.
+‘%G’
+ year corresponding to the ISO week number. This has the same
+ format and value as ‘%Y’, except that if the ISO week number (see
+ ‘%V’) belongs to the previous or next year, that year is used
+ instead. It is normally useful only if ‘%V’ is also used; for
+ example, the format ‘%G-%m-%d’ is probably a mistake, since it
+ combines the ISO week number year with the conventional month and
+ day.
+‘%h’
+ same as ‘%b’
+‘%j’
+ day of year (‘001’...‘366’)
+‘%m’
+ month (‘01’...‘12’)
+‘%q’
+ quarter of year (‘1’...‘4’)
+‘%u’
+ day of week (‘1’...‘7’) with ‘1’ corresponding to Monday
+‘%U’
+ week number of year, with Sunday as the first day of the week
+ (‘00’...‘53’). Days in a new year preceding the first Sunday are
+ in week zero.
+‘%V’
+ ISO week number, that is, the week number of year, with Monday as
+ the first day of the week (‘01’...‘53’). If the week containing
+ January 1 has four or more days in the new year, then it is
+ considered week 1; otherwise, it is week 53 of the previous year,
+ and the next week is week 1. (See the ISO 8601 standard.)
+‘%w’
+ day of week (‘0’...‘6’) with 0 corresponding to Sunday
+‘%W’
+ week number of year, with Monday as first day of week
+ (‘00’...‘53’). Days in a new year preceding the first Monday are
+ in week zero.
+‘%x’
+ locale’s date representation (e.g., ‘12/31/99’)
+‘%y’
+ last two digits of year (‘00’...‘99’)
+‘%Y’
+ year. This is normally at least four characters, but it may be
+ more. Year ‘0000’ precedes year ‘0001’, and year ‘-001’ precedes
+ year ‘0000’.
+
+
+File: coreutils.info, Node: Literal conversion specifiers, Next: Padding and other flags, Prev: Date conversion specifiers, Up: Date format specifiers
+
+21.1.1.3 Literal conversion specifiers
+......................................
+
+‘date’ conversion specifiers that produce literal strings.
+
+‘%%’
+ a literal %
+‘%n’
+ a newline
+‘%t’
+ a horizontal tab
+
+
+File: coreutils.info, Node: Padding and other flags, Prev: Literal conversion specifiers, Up: Date format specifiers
+
+21.1.1.4 Padding and other flags
+................................
+
+Unless otherwise specified, ‘date’ normally pads numeric fields with
+zeros, so that, for example, numeric months are always output as two
+digits. Most numeric fields are padded on the left. However,
+nanoseconds are padded on the right since they are commonly used after
+decimal points in formats like ‘%s.%-N’. Also, seconds since the Epoch
+are not padded since there is no natural width for them.
+
+ The following optional flags can appear after the ‘%’:
+
+‘-’
+ (hyphen) Do not pad the field; useful if the output is intended for
+ human consumption. This is a GNU extension. As a special case,
+ ‘%-N’ outputs only enough trailing digits to not lose information,
+ assuming that the timestamp’s resolution is the same as the current
+ hardware clock. For example, if the hardware clock resolution is 1
+ microsecond, ‘%s.%-N’ outputs something like ‘1640890100.395710’.
+
+‘_’
+ (underscore) Pad with spaces; useful if you need a fixed number of
+ characters in the output, but zeros are too distracting. This is a
+ GNU extension.
+‘0’
+ (zero) Pad with zeros even if the conversion specifier would
+ normally pad with spaces.
+‘+’
+ Pad with zeros, like ‘0’. In addition, precede any year number
+ with ‘+’ if it exceeds 9999 or if its field width exceeds 4;
+ similarly, precede any century number with ‘+’ if it exceeds 99 or
+ if its field width exceeds 2. This supports ISO 8601 formats for
+ dates far in the future; for example, the command ‘date
+ --date=12019-02-25 +%+13F’ outputs the string ‘+012019-02-25’.
+‘^’
+ Use upper case characters if possible. This is a GNU extension.
+‘#’
+ Use opposite case characters if possible. A field that is normally
+ upper case becomes lower case, and vice versa. This is a GNU
+ extension.
+
+Here are some examples of padding:
+
+ date +%d/%m -d "Feb 1"
+ ⇒ 01/02
+ date +%-d/%-m -d "Feb 1"
+ ⇒ 1/2
+ date +%_d/%_m -d "Feb 1"
+ ⇒ 1/ 2
+
+ You can optionally specify the field width (after any flag, if
+present) as a decimal number. If the natural size of the output of the
+field has less than the specified number of characters, the result is
+normally written right adjusted and padded to the given size. For
+example, ‘%9B’ prints the right adjusted month name in a field of width
+9. Nanoseconds are left adjusted, and are truncated or padded to the
+field width.
+
+ An optional modifier can follow the optional flag and width
+specification. The modifiers are:
+
+‘E’
+ Use the locale’s alternate representation for date and time. This
+ modifier applies to the ‘%c’, ‘%C’, ‘%x’, ‘%X’, ‘%y’ and ‘%Y’
+ conversion specifiers. In a Japanese locale, for example, ‘%Ex’
+ might yield a date format based on the Japanese Emperors’ reigns.
+
+‘O’
+ Use the locale’s alternate numeric symbols for numbers. This
+ modifier applies only to numeric conversion specifiers.
+
+ If the format supports the modifier but no alternate representation
+is available, it is ignored.
+
+ POSIX specifies the behavior of flags and field widths only for ‘%C’,
+‘%F’, ‘%G’, and ‘%Y’ (all without modifiers), and requires a flag to be
+present if and only if a field width is also present. Other
+combinations of flags, field widths and modifiers are GNU extensions.
+
+
+File: coreutils.info, Node: Setting the time, Next: Options for date, Prev: Date format specifiers, Up: date invocation
+
+21.1.2 Setting the time
+-----------------------
+
+You must have appropriate privileges to set the system clock. For
+changes to persist across a reboot, the hardware clock may need to be
+updated from the system clock, which might not happen automatically on
+your system.
+
+ To set the clock, you can use the ‘--set’ (‘-s’) option (*note
+Options for date::). To set the clock without using GNU extensions, you
+can give ‘date’ an argument of the form ‘MMDDhhmm[[CC]YY][.ss]’ where
+each two-letter component stands for two digits with the following
+meanings:
+
+MM
+ month
+DD
+ day within month
+HH
+ hour
+MM
+ minute
+CC
+ first two digits of year (optional)
+YY
+ last two digits of year (optional)
+SS
+ second (optional)
+
+ Note, the ‘--date’ and ‘--set’ options may not be used with an
+argument in the above format. The ‘--universal’ option may be used with
+such an argument to indicate that the specified date and time are
+relative to Universal Time rather than to the local time zone.
+
+
+File: coreutils.info, Node: Options for date, Next: Examples of date, Prev: Setting the time, Up: date invocation
+
+21.1.3 Options for ‘date’
+-------------------------
+
+The program accepts the following options. Also see *note Common
+options::. Except for ‘-u’, these options are all GNU extensions to
+POSIX.
+
+ All options that specify the date to display are mutually exclusive.
+I.e.: ‘--date’, ‘--file’, ‘--reference’, ‘--resolution’.
+
+‘-d DATESTR’
+‘--date=DATESTR’
+ Display the date and time specified in DATESTR instead of the
+ current date and time. DATESTR can be in almost any common format.
+ It can contain month names, time zones, ‘am’ and ‘pm’, ‘yesterday’,
+ etc. For example, ‘--date="2020-07-21 14:19:13.489392193 +0530"’
+ specifies the instant of time that is 489,392,193 nanoseconds after
+ July 21, 2020 at 2:19:13 PM in a time zone that is 5 hours and 30
+ minutes east of UTC.
+ Note: input currently must be in locale independent format. E.g.,
+ the LC_TIME=C below is needed to print back the correct date in
+ many locales:
+ date -d "$(LC_TIME=C date)"
+ *Note Date input formats::.
+
+‘--debug’
+ Annotate the parsed date, display the effective time zone, and warn
+ about potential misuse.
+
+‘-f DATEFILE’
+‘--file=DATEFILE’
+ Parse each line in DATEFILE as with ‘-d’ and display the resulting
+ date and time. If DATEFILE is ‘-’, use standard input. This is
+ useful when you have many dates to process, because the system
+ overhead of starting up the ‘date’ executable many times can be
+ considerable.
+
+‘-I[TIMESPEC]’
+‘--iso-8601[=TIMESPEC]’
+ Display the date using an ISO 8601 format, ‘%Y-%m-%d’.
+
+ The argument TIMESPEC specifies the number of additional terms of
+ the time to include. It can be one of the following:
+ ‘auto’
+ Print just the date. This is the default if TIMESPEC is
+ omitted. This is like the format ‘%Y-%m-%d’.
+
+ ‘hours’
+ Also print hours and time zone. This is like the format
+ ‘%Y-%m-%dT%H%:z’.
+
+ ‘minutes’
+ Also print minutes. This is like the format
+ ‘%Y-%m-%dT%H:%M%:z’.
+
+ ‘seconds’
+ Also print seconds. This is like the format
+ ‘%Y-%m-%dT%H:%M:%S%:z’.
+
+ ‘ns’
+ Also print nanoseconds. This is like the format
+ ‘%Y-%m-%dT%H:%M:%S,%N%:z’.
+
+ This format is always suitable as input for the ‘--date’ (‘-d’) and
+ ‘--file’ (‘-f’) options, regardless of the current locale.
+
+‘-r FILE’
+‘--reference=FILE’
+ Display the date and time of the last modification of FILE, instead
+ of the current date and time.
+
+‘--resolution’
+ Display the timestamp resolution instead of the time. Current
+ clock timestamps that are output by ‘date’ are integer multiples of
+ the timestamp resolution. With this option, the format defaults to
+ ‘%s.%N’. For example, if the clock resolution is 1 millisecond,
+ the output is:
+
+ 0.001000000
+
+‘-R’
+‘--rfc-email’
+ Display the date and time using the format ‘%a, %d %b %Y %H:%M:%S
+ %z’, evaluated in the C locale so abbreviations are always in
+ English. For example:
+
+ Mon, 09 Jul 2020 17:00:00 -0400
+
+ This format conforms to Internet RFCs 5322
+ (https://tools.ietf.org/search/rfc5322), 2822
+ (https://tools.ietf.org/search/rfc2822) and 822
+ (https://tools.ietf.org/search/rfc822), the current and previous
+ standards for Internet email. For compatibility with older
+ versions of ‘date’, ‘--rfc-2822’ and ‘--rfc-822’ are aliases for
+ ‘--rfc-email’.
+
+‘--rfc-3339=TIMESPEC’
+ Display the date using a format specified by Internet RFC 3339
+ (https://tools.ietf.org/search/rfc3339). This is like
+ ‘--iso-8601’, except that a space rather than a ‘T’ separates dates
+ from times, and a period rather than a comma separates seconds from
+ subseconds. This format is always suitable as input for the
+ ‘--date’ (‘-d’) and ‘--file’ (‘-f’) options, regardless of the
+ current locale.
+
+ The argument TIMESPEC specifies how much of the time to include.
+ It can be one of the following:
+
+ ‘date’
+ Print just the full-date, e.g., ‘2020-07-21’. This is like
+ the format ‘%Y-%m-%d’.
+
+ ‘seconds’
+ Print the full-date and full-time separated by a space, e.g.,
+ ‘2020-07-21 04:30:37+05:30’. The output ends with a numeric
+ time-offset; here the ‘+05:30’ means that local time is five
+ hours and thirty minutes east of UTC. This is like the format
+ ‘%Y-%m-%d %H:%M:%S%:z’.
+
+ ‘ns’
+ Like ‘seconds’, but also print nanoseconds, e.g., ‘2020-07-21
+ 04:30:37.998458565+05:30’. This is like the format ‘%Y-%m-%d
+ %H:%M:%S.%N%:z’.
+
+‘-s DATESTR’
+‘--set=DATESTR’
+ Set the date and time to DATESTR. See ‘-d’ above. See also *note
+ Setting the time::.
+
+‘-u’
+‘--utc’
+‘--universal’
+ Use Universal Time by operating as if the ‘TZ’ environment variable
+ were set to the string ‘UTC0’. UTC stands for Coordinated
+ Universal Time, established in 1960. Universal Time is often
+ called “Greenwich Mean Time” (GMT) for historical reasons.
+ Typically, systems ignore leap seconds and thus implement an
+ approximation to UTC rather than true UTC.
+
+
+File: coreutils.info, Node: Examples of date, Prev: Options for date, Up: date invocation
+
+21.1.4 Examples of ‘date’
+-------------------------
+
+Here are a few examples. Also see the documentation for the ‘-d’ option
+in the previous section.
+
+ • To print the date of the day before yesterday:
+
+ date --date='2 days ago'
+
+ • To print the date of the day three months and one day hence:
+
+ date --date='3 months 1 day'
+
+ • To print the day of year of Christmas in the current year:
+
+ date --date='25 Dec' +%j
+
+ • To print the current full month name and the day of the month:
+
+ date '+%B %d'
+
+ But this may not be what you want because for the first nine days
+ of the month, the ‘%d’ expands to a zero-padded two-digit field,
+ for example ‘date -d 1may '+%B %d'’ will print ‘May 01’.
+
+ • To print a date without the leading zero for one-digit days of the
+ month, you can use the (GNU extension) ‘-’ flag to suppress the
+ padding altogether:
+
+ date -d 1may '+%B %-d'
+
+ • To print the current date and time in the format required by many
+ non-GNU versions of ‘date’ when setting the system clock:
+
+ date +%m%d%H%M%Y.%S
+
+ • To set the system clock forward by two minutes:
+
+ date --set='+2 minutes'
+
+ • To print the date in Internet RFC 5322 format, use ‘date
+ --rfc-email’. Here is some example output:
+
+ Tue, 09 Jul 2020 19:00:37 -0400
+
+ • To convert a date string to the number of seconds since the Epoch
+ (which is 1970-01-01 00:00 UTC), use the ‘--date’ option with the
+ ‘%s’ format. That can be useful in sorting and/or graphing and/or
+ comparing data by date. The following command outputs the number
+ of the seconds since the Epoch for the time two minutes after the
+ Epoch:
+
+ date --date='1970-01-01 00:02:00 +0000' +%s
+ 120
+
+ To convert a date string from one time zone FROM to another TO,
+ specify ‘TZ="FROM"’ in the environment and ‘TZ="TO"’ in the
+ ‘--date’ option. *Note Specifying time zone rules::. For example:
+
+ TZ="Asia/Tokyo" date --date='TZ="America/New_York" 2023-05-07 12:23'
+ Mon May 8 01:23:00 JST 2023
+
+ If you do not specify time zone information in the date string,
+ ‘date’ uses your computer’s idea of the time zone when interpreting
+ the string. For example, if your computer’s time zone is that of
+ Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000
+ seconds) behind UTC:
+
+ # local time zone used
+ date --date='1970-01-01 00:02:00' +%s
+ 18120
+
+ • If you’re sorting or graphing dated data, your raw date values may
+ be represented as seconds since the Epoch. But few people can look
+ at the date ‘1577836800’ and casually note “Oh, that’s the first
+ second of the year 2020 in Greenwich, England.”
+
+ date --date='2020-01-01 UTC' +%s
+ 1577836800
+
+ An alternative is to use the ‘--utc’ (‘-u’) option. Then you may
+ omit ‘UTC’ from the date string. Although this produces the same
+ result for ‘%s’ and many other format sequences, with a time zone
+ offset different from zero, it would give a different result for
+ zone-dependent formats like ‘%z’.
+
+ date -u --date=2020-07-21 +%s
+ 1595289600
+
+ To convert such an unwieldy number of seconds back to a more
+ readable form, use a command like this:
+
+ date -d @1595289600 +"%F %T %z"
+ 2020-07-20 20:00:00 -0400
+
+ Often it is better to output UTC-relative date and time:
+
+ date -u -d @1595289600 +"%F %T %z"
+ 2020-07-21 00:00:00 +0000
+
+ • Typically the seconds count omits leap seconds, but some systems
+ are exceptions. Because leap seconds are not predictable, the
+ mapping between the seconds count and a future timestamp is not
+ reliable on the atypical systems that include leap seconds in their
+ counts.
+
+ Here is how the two kinds of systems handle the leap second at the
+ end of the year 2016:
+
+ # Typical systems ignore leap seconds:
+ date --date='2016-12-31 23:59:59 +0000' +%s
+ 1483228799
+ date --date='2016-12-31 23:59:60 +0000' +%s
+ date: invalid date '2016-12-31 23:59:60 +0000'
+ date --date='2017-01-01 00:00:00 +0000' +%s
+ 1483228800
+
+ # Atypical systems count leap seconds:
+ date --date='2016-12-31 23:59:59 +0000' +%s
+ 1483228825
+ date --date='2016-12-31 23:59:60 +0000' +%s
+ 1483228826
+ date --date='2017-01-01 00:00:00 +0000' +%s
+ 1483228827
+
+
+File: coreutils.info, Node: arch invocation, Next: nproc invocation, Prev: date invocation, Up: System context
+
+21.2 ‘arch’: Print machine hardware name
+========================================
+
+‘arch’ prints the machine hardware name, and is equivalent to ‘uname
+-m’. Synopsis:
+
+ arch [OPTION]
+
+ The program accepts the *note Common options:: only.
+
+ ‘arch’ is not installed by default, so portable scripts should not
+rely on its existence.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: nproc invocation, Next: uname invocation, Prev: arch invocation, Up: System context
+
+21.3 ‘nproc’: Print the number of available processors
+======================================================
+
+Print the number of processing units available to the current process,
+which may be less than the number of online processors. If this
+information is not accessible, then print the number of processors
+installed. If the ‘OMP_NUM_THREADS’ or ‘OMP_THREAD_LIMIT’ environment
+variables are set, then they will determine the minimum and maximum
+returned value respectively. The result is guaranteed to be greater
+than zero. Synopsis:
+
+ nproc [OPTION]
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘--all’
+ Print the number of installed processors on the system, which may
+ be greater than the number online or available to the current
+ process. The ‘OMP_NUM_THREADS’ or ‘OMP_THREAD_LIMIT’ environment
+ variables are not honored in this case.
+
+‘--ignore=NUMBER’
+ If possible, exclude this NUMBER of processing units.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: uname invocation, Next: hostname invocation, Prev: nproc invocation, Up: System context
+
+21.4 ‘uname’: Print system information
+======================================
+
+‘uname’ prints information about the machine and operating system it is
+run on. If no options are given, ‘uname’ acts as if the ‘-s’ option
+were given. Synopsis:
+
+ uname [OPTION]...
+
+ If multiple options or ‘-a’ are given, the selected information is
+printed in this order:
+
+ KERNEL-NAME NODENAME KERNEL-RELEASE KERNEL-VERSION
+ MACHINE PROCESSOR HARDWARE-PLATFORM OPERATING-SYSTEM
+
+ The information may contain internal spaces, so such output cannot be
+parsed reliably. In the following example, KERNEL-VERSION is ‘#1 SMP
+Fri Jul 17 17:18:38 UTC 2020’:
+
+ uname -a
+ ⇒ Linux dumdum.example.org 5.9.16-200.fc33.x86_64 #1 SMP Mon Dec 21 14:08:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-a’
+‘--all’
+ Print all of the below information, except omit the processor type
+ and the hardware platform name if they are unknown.
+
+‘-i’
+‘--hardware-platform’
+ Print the hardware platform name (sometimes called the hardware
+ implementation). Print ‘unknown’ if this information is not
+ available. Note this is non-portable (even across GNU/Linux
+ distributions).
+
+‘-m’
+‘--machine’
+ Print the machine hardware name (sometimes called the hardware
+ class or hardware type).
+
+‘-n’
+‘--nodename’
+ Print the network node hostname.
+
+‘-p’
+‘--processor’
+ Print the processor type (sometimes called the instruction set
+ architecture or ISA). Print ‘unknown’ if this information is not
+ available. Note this is non-portable (even across GNU/Linux
+ distributions).
+
+‘-o’
+‘--operating-system’
+ Print the name of the operating system.
+
+‘-r’
+‘--kernel-release’
+ Print the kernel release.
+
+‘-s’
+‘--kernel-name’
+ Print the kernel name. POSIX 1003.1-2001 (*note Standards
+ conformance::) calls this “the implementation of the operating
+ system”, because the POSIX specification itself has no notion of
+ “kernel”. The kernel name might be the same as the operating
+ system name printed by the ‘-o’ or ‘--operating-system’ option, but
+ it might differ. Some operating systems (e.g., FreeBSD, HP-UX)
+ have the same name as their underlying kernels; others (e.g.,
+ GNU/Linux, Solaris) do not.
+
+‘-v’
+‘--kernel-version’
+ Print the kernel version.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: hostname invocation, Next: hostid invocation, Prev: uname invocation, Up: System context
+
+21.5 ‘hostname’: Print or set system name
+=========================================
+
+With no arguments, ‘hostname’ prints the name of the current host
+system. With one argument, it sets the current host name to the
+specified string. You must have appropriate privileges to set the host
+name. Synopsis:
+
+ hostname [NAME]
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ ‘hostname’ is not installed by default, and other packages also
+supply a ‘hostname’ command, so portable scripts should not rely on its
+existence or on the exact behavior documented above.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: hostid invocation, Next: uptime invocation, Prev: hostname invocation, Up: System context
+
+21.6 ‘hostid’: Print numeric host identifier
+============================================
+
+‘hostid’ prints the numeric identifier of the current host in
+hexadecimal. This command accepts no arguments. The only options are
+‘--help’ and ‘--version’. *Note Common options::.
+
+ For example, here’s what it prints on one system I use:
+
+ $ hostid
+ 1bac013d
+
+ On that system, the 32-bit quantity happens to be closely related to
+the system’s Internet address, but that isn’t always the case.
+
+ ‘hostid’ is installed only on systems that have the ‘gethostid’
+function, so portable scripts should not rely on its existence.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: uptime invocation, Prev: hostid invocation, Up: System context
+
+21.7 ‘uptime’: Print system uptime and load
+===========================================
+
+‘uptime’ prints the current time, the system’s uptime, the number of
+logged-in users and the current load average.
+
+ If an argument is specified, it is used as the file to be read to
+discover how many users are logged in. If no argument is specified, a
+system default is used (‘uptime --help’ indicates the default setting).
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ For example, here’s what it prints right now on one system I use:
+
+ $ uptime
+ 14:07 up 3:35, 3 users, load average: 1.39, 1.15, 1.04
+
+ The precise method of calculation of load average varies somewhat
+between systems. Some systems calculate it as the average number of
+runnable processes over the last 1, 5 and 15 minutes, but some systems
+also include processes in the uninterruptible sleep state (that is,
+those processes which are waiting for device I/O). The Linux kernel
+includes uninterruptible processes.
+
+ ‘uptime’ is installed only on platforms with infrastructure for
+obtaining the boot time, and other packages also supply an ‘uptime’
+command, so portable scripts should not rely on its existence or on the
+exact behavior documented above.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: SELinux context, Next: Modified command invocation, Prev: System context, Up: Top
+
+22 SELinux context
+******************
+
+This section describes commands for operations with SELinux contexts.
+
+* Menu:
+
+* chcon invocation:: Change SELinux context of file
+* runcon invocation:: Run a command in specified SELinux context
+
+
+File: coreutils.info, Node: chcon invocation, Next: runcon invocation, Up: SELinux context
+
+22.1 ‘chcon’: Change SELinux context of file
+============================================
+
+‘chcon’ changes the SELinux security context of the selected files.
+Synopses:
+
+ chcon [OPTION]... CONTEXT FILE...
+ chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
+ chcon [OPTION]... --reference=RFILE FILE...
+
+ Change the SELinux security context of each FILE to CONTEXT. With
+‘--reference’, change the security context of each FILE to that of
+RFILE.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘--dereference’
+ Do not affect symbolic links but what they refer to; this is the
+ default.
+
+‘-h’
+‘--no-dereference’
+ Affect the symbolic links themselves instead of any referenced
+ file.
+
+‘--reference=RFILE’
+ Use RFILE’s security context rather than specifying a CONTEXT
+ value.
+
+‘-R’
+‘--recursive’
+ Operate on files and directories recursively.
+
+‘--preserve-root’
+ Refuse to operate recursively on the root directory, ‘/’, when used
+ together with the ‘--recursive’ option. *Note Treating /
+ specially::.
+
+‘--no-preserve-root’
+ Do not treat the root directory, ‘/’, specially when operating
+ recursively; this is the default. *Note Treating / specially::.
+
+‘-H’
+ If ‘--recursive’ (‘-R’) is specified and a command line argument is
+ a symbolic link to a directory, traverse it. *Note Traversing
+ symlinks::.
+
+‘-L’
+ In a recursive traversal, traverse every symbolic link to a
+ directory that is encountered. *Note Traversing symlinks::.
+
+‘-P’
+ Do not traverse any symbolic links. This is the default if none of
+ ‘-H’, ‘-L’, or ‘-P’ is specified. *Note Traversing symlinks::.
+
+‘-v’
+‘--verbose’
+ Output a diagnostic for every file processed.
+
+‘-u USER’
+‘--user=USER’
+ Set user USER in the target security context.
+
+‘-r ROLE’
+‘--role=ROLE’
+ Set role ROLE in the target security context.
+
+‘-t TYPE’
+‘--type=TYPE’
+ Set type TYPE in the target security context.
+
+‘-l RANGE’
+‘--range=RANGE’
+ Set range RANGE in the target security context.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: runcon invocation, Prev: chcon invocation, Up: SELinux context
+
+22.2 ‘runcon’: Run a command in specified SELinux context
+=========================================================
+
+‘runcon’ runs file in specified SELinux security context.
+
+ Synopses:
+ runcon CONTEXT COMMAND [ARGS]
+ runcon [ -c ] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [ARGS]
+
+ Run COMMAND with completely-specified CONTEXT, or with current or
+transitioned security context modified by one or more of LEVEL, ROLE,
+TYPE and USER.
+
+ If none of ‘-c’, ‘-t’, ‘-u’, ‘-r’, or ‘-l’ is specified, the first
+argument is used as the complete context. Any additional arguments
+after COMMAND are interpreted as arguments to the command.
+
+ With neither CONTEXT nor COMMAND, print the current security context.
+
+ Note also the ‘setpriv’ command which can be used to set the
+NO_NEW_PRIVS bit using ‘setpriv --no-new-privs runcon ...’, thus
+disallowing usage of a security context with more privileges than the
+process would normally have.
+
+ ‘runcon’ accepts the following options. Also see *note Common
+options::.
+
+‘-c’
+‘--compute’
+ Compute process transition context before modifying.
+
+‘-u USER’
+‘--user=USER’
+ Set user USER in the target security context.
+
+‘-r ROLE’
+‘--role=ROLE’
+ Set role ROLE in the target security context.
+
+‘-t TYPE’
+‘--type=TYPE’
+ Set type TYPE in the target security context.
+
+‘-l RANGE’
+‘--range=RANGE’
+ Set range RANGE in the target security context.
+
+ Exit status:
+
+ 125 if ‘runcon’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+
+File: coreutils.info, Node: Modified command invocation, Next: Process control, Prev: SELinux context, Up: Top
+
+23 Modified command invocation
+******************************
+
+This section describes commands that run other commands in some context
+different than the current one: a modified environment, as a different
+user, etc.
+
+* Menu:
+
+* chroot invocation:: Modify the root directory.
+* env invocation:: Modify environment variables.
+* nice invocation:: Modify niceness.
+* nohup invocation:: Immunize to hangups.
+* stdbuf invocation:: Modify buffering of standard streams.
+* timeout invocation:: Run with time limit.
+
+
+File: coreutils.info, Node: chroot invocation, Next: env invocation, Up: Modified command invocation
+
+23.1 ‘chroot’: Run a command with a different root directory
+============================================================
+
+‘chroot’ runs a command with a specified root directory. On many
+systems, only the super-user can do this.(1). Synopses:
+
+ chroot OPTION NEWROOT [COMMAND [ARGS]...]
+ chroot OPTION
+
+ Ordinarily, file names are looked up starting at the root of the
+directory structure, i.e., ‘/’. ‘chroot’ changes the root to the
+directory NEWROOT (which must exist), then changes the working directory
+to ‘/’, and finally runs COMMAND with optional ARGS. If COMMAND is not
+specified, the default is the value of the ‘SHELL’ environment variable
+or ‘/bin/sh’ if not set, invoked with the ‘-i’ option. COMMAND must not
+be a special built-in utility (*note Special built-in utilities::).
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘--groups=GROUPS’
+ Use this option to override the supplementary GROUPS to be used by
+ the new process. The items in the list (names or numeric IDs) must
+ be separated by commas. Use ‘--groups=''’ to disable the
+ supplementary group look-up implicit in the ‘--userspec’ option.
+
+‘--userspec=USER[:GROUP]’
+ By default, COMMAND is run with the same credentials as the
+ invoking process. Use this option to run it as a different USER
+ and/or with a different primary GROUP. If a USER is specified then
+ the supplementary groups are set according to the system defined
+ list for that user, unless overridden with the ‘--groups’ option.
+
+‘--skip-chdir’
+ Use this option to not change the working directory to ‘/’ after
+ changing the root directory to NEWROOT, i.e., inside the chroot.
+ This option is only permitted when NEWROOT is the old ‘/’
+ directory, and therefore is mostly useful together with the
+ ‘--groups’ and ‘--userspec’ options to retain the previous working
+ directory.
+
+ The user and group name look-up performed by the ‘--userspec’ and
+‘--groups’ options, is done both outside and inside the chroot, with
+successful look-ups inside the chroot taking precedence. If the
+specified user or group items are intended to represent a numeric ID,
+then a name to ID resolving step is avoided by specifying a leading ‘+’.
+*Note Disambiguating names and IDs::.
+
+ Here are a few tips to help avoid common problems in using chroot.
+To start with a simple example, make COMMAND refer to a statically
+linked binary. If you were to use a dynamically linked executable, then
+you’d have to arrange to have the shared libraries in the right place
+under your new root directory.
+
+ For example, if you create a statically linked ‘ls’ executable, and
+put it in ‘/tmp/empty’, you can run this command as root:
+
+ $ chroot /tmp/empty /ls -Rl /
+
+ Then you’ll see output like this:
+
+ /:
+ total 1023
+ -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
+
+ If you want to use a dynamically linked executable, say ‘bash’, then
+first run ‘ldd bash’ to see what shared objects it needs. Then, in
+addition to copying the actual binary, also copy the listed files to the
+required positions under your intended new root directory. Finally, if
+the executable requires any other files (e.g., data, state, device
+files), copy them into place, too.
+
+ ‘chroot’ is installed only on systems that have the ‘chroot’
+function, so portable scripts should not rely on its existence.
+
+ Exit status:
+
+ 125 if ‘chroot’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+ ---------- Footnotes ----------
+
+ (1) However, some systems (e.g., FreeBSD) can be configured to allow
+certain regular users to use the ‘chroot’ system call, and hence to run
+this program. Also, on Cygwin, anyone can run the ‘chroot’ command,
+because the underlying function is non-privileged due to lack of support
+in MS-Windows. Furthermore, the ‘chroot’ command avoids the ‘chroot’
+system call when NEWROOT is identical to the old ‘/’ directory for
+consistency with systems where this is allowed for non-privileged users.
+
+
+File: coreutils.info, Node: env invocation, Next: nice invocation, Prev: chroot invocation, Up: Modified command invocation
+
+23.2 ‘env’: Run a command in a modified environment
+===================================================
+
+‘env’ runs a command with a modified environment. Synopses:
+
+ env [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...]
+ env -[v]S'[OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...]'
+ env
+
+ ‘env’ is commonly used on first line of scripts (shebang line):
+ #!/usr/bin/env COMMAND
+ #!/usr/bin/env -[v]S[OPTION]... [NAME=VALUE]... COMMAND [ARGS]...
+
+ Operands of the form ‘VARIABLE=VALUE’ set the environment variable
+VARIABLE to value VALUE. VALUE may be empty (‘VARIABLE=’). Setting a
+variable to an empty value is different from unsetting it. These
+operands are evaluated left-to-right, so if two operands mention the
+same variable the earlier is ignored.
+
+ Environment variable names can be empty, and can contain any
+characters other than ‘=’ and ASCII NUL. However, it is wise to limit
+yourself to names that consist solely of underscores, digits, and ASCII
+letters, and that begin with a non-digit, as applications like the shell
+do not work well with other names.
+
+ The first operand that does not contain the character ‘=’ specifies
+the program to invoke; it is searched for according to the ‘PATH’
+environment variable. Any remaining arguments are passed as arguments
+to that program. The program should not be a special built-in utility
+(*note Special built-in utilities::).
+
+ Modifications to ‘PATH’ take effect prior to searching for COMMAND.
+Use caution when reducing ‘PATH’; behavior is not portable when ‘PATH’
+is undefined or omits key directories such as ‘/bin’.
+
+ In the rare case that a utility contains a ‘=’ in the name, the only
+way to disambiguate it from a variable assignment is to use an
+intermediate command for COMMAND, and pass the problematic program name
+via ARGS. For example, if ‘./prog=’ is an executable in the current
+‘PATH’:
+
+ env prog= true # runs 'true', with prog= in environment
+ env ./prog= true # runs 'true', with ./prog= in environment
+ env -- prog= true # runs 'true', with prog= in environment
+ env sh -c '\prog= true' # runs 'prog=' with argument 'true'
+ env sh -c 'exec "$@"' sh prog= true # also runs 'prog='
+
+ If no command name is specified following the environment
+specifications, the resulting environment is printed. This is like
+specifying the ‘printenv’ program.
+
+ For some examples, suppose the environment passed to ‘env’ contains
+‘LOGNAME=rms’, ‘EDITOR=emacs’, and ‘PATH=.:/gnubin:/hacks’:
+
+ • Output the current environment.
+ $ env | LC_ALL=C sort
+ EDITOR=emacs
+ LOGNAME=rms
+ PATH=.:/gnubin:/hacks
+
+ • Run ‘foo’ with a reduced environment, preserving only the original
+ ‘PATH’ to avoid problems in locating ‘foo’.
+ env - PATH="$PATH" foo
+
+ • Run ‘foo’ with the environment containing ‘LOGNAME=rms’,
+ ‘EDITOR=emacs’, and ‘PATH=.:/gnubin:/hacks’, and guarantees that
+ ‘foo’ was found in the file system rather than as a shell built-in.
+ env foo
+
+ • Run ‘nemacs’ with the environment containing ‘LOGNAME=foo’,
+ ‘EDITOR=emacs’, ‘PATH=.:/gnubin:/hacks’, and ‘DISPLAY=gnu:0’.
+ env DISPLAY=gnu:0 LOGNAME=foo nemacs
+
+ • Attempt to run the program ‘/energy/--’ (as that is the only
+ possible path search result); if the command exists, the
+ environment will contain ‘LOGNAME=rms’ and ‘PATH=/energy’, and the
+ arguments will be ‘e=mc2’, ‘bar’, and ‘baz’.
+ env -u EDITOR PATH=/energy -- e=mc2 bar baz
+
+23.2.1 General options
+----------------------
+
+The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘-0’
+‘--null’
+ Output a zero byte (ASCII NUL) at the end of each line, rather than
+ a newline. This option enables other programs to parse the output
+ even when that output would contain data with embedded newlines.
+
+‘-u NAME’
+‘--unset=NAME’
+ Remove variable NAME from the environment, if it was in the
+ environment.
+
+‘-’
+‘-i’
+‘--ignore-environment’
+ Start with an empty environment, ignoring the inherited
+ environment.
+
+‘-C DIR’
+‘--chdir=DIR’
+ Change the working directory to DIR before invoking COMMAND. This
+ differs from the shell built-in ‘cd’ in that it starts COMMAND as a
+ subprocess rather than altering the shell’s own working directory;
+ this allows it to be chained with other commands that run commands
+ in a different context. For example:
+
+ # Run 'true' with /chroot as its root directory and /srv as its working
+ # directory.
+ chroot /chroot env --chdir=/srv true
+ # Run 'true' with /build as its working directory, FOO=bar in its
+ # environment, and a time limit of five seconds.
+ env --chdir=/build FOO=bar timeout 5 true
+
+‘--default-signal[=SIG]’
+ Unblock and reset signal SIG to its default signal handler.
+ Without SIG all known signals are unblocked and reset to their
+ defaults. Multiple signals can be comma-separated. An empty SIG
+ argument is a no-op. The following command runs ‘seq’ with SIGINT
+ and SIGPIPE set to their default (which is to terminate the
+ program):
+
+ env --default-signal=PIPE,INT seq 1000 | head -n1
+
+ In the following example, we see how this is not possible to do
+ with traditional shells. Here the first trap command sets SIGPIPE
+ to ignore. The second trap command ostensibly sets it back to its
+ default, but POSIX mandates that the shell must not change
+ inherited state of the signal – so it is a no-op.
+
+ trap '' PIPE && sh -c 'trap - PIPE ; seq inf | head -n1'
+
+ Using ‘--default-signal=PIPE’ we can ensure the signal handling is
+ set to its default behavior:
+
+ trap '' PIPE && sh -c 'env --default-signal=PIPE seq inf | head -n1'
+
+‘--ignore-signal[=SIG]’
+ Ignore signal SIG when running a program. Without SIG all known
+ signals are set to ignore. Multiple signals can be
+ comma-separated. An empty SIG argument is a no-op. The following
+ command runs ‘seq’ with SIGINT set to be ignored – pressing
+ ‘Ctrl-C’ will not terminate it:
+
+ env --ignore-signal=INT seq inf > /dev/null
+
+ ‘SIGCHLD’ is special, in that ‘--ignore-signal=CHLD’ might have no
+ effect (POSIX says it’s unspecified).
+
+ Most operating systems do not allow ignoring ‘SIGKILL’, ‘SIGSTOP’
+ (and possibly other signals). Attempting to ignore these signals
+ will fail.
+
+ Multiple (and contradictory) ‘--default-signal=SIG’ and
+ ‘--ignore-signal=SIG’ options are processed left-to-right, with the
+ latter taking precedence. In the following example, ‘SIGPIPE’ is
+ set to default while ‘SIGINT’ is ignored:
+
+ env --default-signal=INT,PIPE --ignore-signal=INT
+
+‘--block-signal[=SIG]’
+ Block signal(s) SIG from being delivered. Without SIG all known
+ signals are set to blocked. Multiple signals can be
+ comma-separated. An empty SIG argument is a no-op.
+
+‘--list-signal-handling’
+ List blocked or ignored signals to standard error, before executing
+ a command.
+
+‘-v’
+‘--debug’
+ Show verbose information for each processing step.
+
+ $ env -v -uTERM A=B uname -s
+ unset: TERM
+ setenv: A=B
+ executing: uname
+ arg[0]= 'uname'
+ arg[1]= '-s'
+ Linux
+
+ When combined with ‘-S’ it is recommended to list ‘-v’ first, e.g.
+ ‘env -vS'string'’.
+
+‘-S STRING’
+‘--split-string=STRING’
+ process and split STRING into separate arguments used to pass
+ multiple arguments on shebang lines. ‘env’ supports FreeBSD’s
+ syntax of several escape sequences and environment variable
+ expansions. See below for details and examples.
+
+ Exit status:
+
+ 0 if no COMMAND is specified and the environment is output
+ 125 if ‘env’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+23.2.2 ‘-S’/‘--split-string’ usage in scripts
+---------------------------------------------
+
+The ‘-S’/‘--split-string’ option enables use of multiple arguments on
+the first line of scripts (the shebang line, ‘#!’).
+
+ When a script’s interpreter is in a known location, scripts typically
+contain the absolute file name in their first line:
+
+Shell script: #!/bin/sh
+ echo hello
+
+Perl script: #!/usr/bin/perl
+ print "hello\n";
+
+Python script: #!/usr/bin/python3
+ print("hello")
+
+
+ When a script’s interpreter is in a non-standard location in the
+‘PATH’ environment variable, it is recommended to use ‘env’ on the first
+line of the script to find the executable and run it:
+
+Shell script: #!/usr/bin/env bash
+ echo hello
+
+Perl script: #!/usr/bin/env perl
+ print "hello\n";
+
+Python script: #!/usr/bin/env python3
+ print("hello")
+
+
+ Most operating systems (e.g. GNU/Linux, BSDs) treat all text after
+the first space as a single argument. When using ‘env’ in a script it
+is thus not possible to specify multiple arguments.
+
+ In the following example:
+ #!/usr/bin/env perl -T -w
+ print "hello\n";
+
+ The operating system treats ‘perl -T -w’ as one argument (the
+program’s name), and executing the script fails with:
+
+ /usr/bin/env: 'perl -T -w': No such file or directory
+
+ The ‘-S’ option instructs ‘env’ to split the single string into
+multiple arguments. The following example works as expected:
+
+ $ cat hello.pl
+ #!/usr/bin/env -S perl -T -w
+ print "hello\n";
+
+ $ chmod a+x hello.pl
+ $ ./hello.pl
+ hello
+
+ And is equivalent to running ‘perl -T -w hello.pl’ on the command
+line prompt.
+
+Testing and troubleshooting
+...........................
+
+To test ‘env -S’ on the command line, use single quotes for the ‘-S’
+string to emulate a single parameter. Single quotes are not needed when
+using ‘env -S’ in a shebang line on the first line of a script (the
+operating system already treats it as one argument).
+
+ The following command is equivalent to the ‘hello.pl’ script above:
+
+ $ env -S'perl -T -w' hello.pl
+
+ To troubleshoot ‘-S’ usage add the ‘-v’ as the first argument (before
+‘-S’).
+
+ Using ‘-vS’ on a shebang line in a script:
+
+ $ cat hello-debug.pl
+ #!/usr/bin/env -vS perl -T -w
+ print "hello\n";
+
+ $ chmod a+x hello-debug.pl
+ $ ./hello-debug.pl
+ split -S: 'perl -T -w'
+ into: 'perl'
+ & '-T'
+ & '-w'
+ executing: perl
+ arg[0]= 'perl'
+ arg[1]= '-T'
+ arg[2]= '-w'
+ arg[3]= './hello-debug.pl'
+ hello
+
+ Using ‘-vS’ on the command line prompt (adding single quotes):
+
+ $ env -vS'perl -T -w' hello-debug.pl
+ split -S: 'perl -T -w'
+ into: 'perl'
+ & '-T'
+ & '-w'
+ executing: perl
+ arg[0]= 'perl'
+ arg[1]= '-T'
+ arg[2]= '-w'
+ arg[3]= 'hello-debug.pl'
+ hello
+
+23.2.3 ‘-S’/‘--split-string’ syntax
+-----------------------------------
+
+Splitting arguments by whitespace
+.................................
+
+Running ‘env -Sstring’ splits the STRING into arguments based on
+unquoted spaces or tab characters. (Newlines, carriage returns,
+vertical tabs and form feeds are treated like spaces and tabs.)
+
+ In the following contrived example the ‘awk’ variable ‘OFS’ will be
+‘<space>xyz<space>’ as these spaces are inside double quotes. The other
+space characters are used as argument separators:
+
+ $ cat one.awk
+ #!/usr/bin/env -S awk -v OFS=" xyz " -f
+ BEGIN {print 1,2,3}
+
+ $ chmod a+x one.awk
+ $ ./one.awk
+ 1 xyz 2 xyz 3
+
+ When using ‘-S’ on the command line prompt, remember to add single
+quotes around the entire string:
+
+ $ env -S'awk -v OFS=" xyz " -f' one.awk
+ 1 xyz 2 xyz 3
+
+Escape sequences
+................
+
+‘env’ supports several escape sequences. These sequences are processed
+when unquoted or inside double quotes (unless otherwise noted). Single
+quotes disable escape sequences except ‘\'’ and ‘\\’.
+
+‘\c’ Ignore the remaining characters in the string. Cannot be used
+ inside double quotes.
+
+‘\f’ form-feed character (ASCII 0x0C)
+
+‘\n’ new-line character (ASCII 0x0A)
+
+‘\r’ carriage-return character (ASCII 0x0D)
+
+‘\t’ tab character (ASCII 0x09)
+
+‘\v’ vertical tab character (ASCII 0x0B)
+
+‘\#’ A hash ‘#’ character. Used when a ‘#’ character is needed as
+ the first character of an argument (see ’comments’ section
+ below).
+
+‘\$’ A dollar-sign character ‘$’. Unescaped ‘$’ characters are used
+ to expand environment variables (see ’variables’ section
+ below).
+
+‘\_’ Inside double-quotes, replaced with a single space character.
+ Outside quotes, treated as an argument separator. ‘\_’ can be
+ used to avoid space characters in a shebang line (see examples
+ below).
+
+‘\"’ A double-quote character.
+
+‘\'’ A single-quote character. This escape sequence works inside
+ single-quoted strings.
+
+‘\\’ A backslash character. This escape sequence works inside
+ single-quoted strings.
+
+
+ The following ‘awk’ script will use tab character as input and output
+field separator (instead of spaces and tabs):
+
+ $ cat tabs.awk
+ #!/usr/bin/env -S awk -v FS="\t" -v OFS="\t" -f
+ ...
+
+Comments
+........
+
+The escape sequence ‘\c’ (used outside single/double quotes) causes
+‘env’ to ignore the rest of the string.
+
+ The ‘#’ character causes ‘env’ to ignore the rest of the string when
+it appears as the first character of an argument. Use ‘\#’ to reverse
+this behavior.
+
+ $ env -S'printf %s\n A B C'
+ A
+ B
+ C
+
+ $ env -S'printf %s\n A# B C'
+ A#
+ B
+ C
+
+ $ env -S'printf %s\n A #B C'
+ A
+
+ $ env -S'printf %s\n A \#B C'
+ A
+ #B
+ C
+
+ $ env -S'printf %s\n A\cB C'
+ A
+
+ NOTE: The above examples use single quotes as they are executed on
+the command-line.
+
+Environment variable expansion
+..............................
+
+The pattern ‘${VARNAME}’ is used to substitute a value from the
+environment variable. The pattern must include the curly braces
+(‘{’,‘}’). Without them ‘env’ will reject the string. Special shell
+variables (such as ‘$@’, ‘$*’, ‘$$’) are not supported.
+
+ If the environment variable is empty or not set, the pattern will be
+replaced by an empty string. The value of ‘${VARNAME}’ will be that of
+the executed ‘env’, before any modifications using
+‘-i’/‘--ignore-environment’/‘-u’/‘--unset’ or setting new values using
+‘VAR=VALUE’.
+
+ The following python script prepends ‘/opt/custom/modules’ to the
+python module search path environment variable (‘PYTHONPATH’):
+
+ $ cat custom.py
+ #!/usr/bin/env -S PYTHONPATH=/opt/custom/modules/:${PYTHONPATH} python
+ print "hello"
+ ...
+
+ The expansion of ‘${PYTHONPATH}’ is performed by ‘env’, not by a
+shell. If the curly braces are omitted, ‘env’ will fail:
+
+ $ cat custom.py
+ #!/usr/bin/env -S PYTHONPATH=/opt/custom/modules/:$PYTHONPATH python
+ print "hello"
+ ...
+
+ $ chmod a+x custom.py
+ $ custom.py
+ /usr/bin/env: only ${VARNAME} expansion is supported, error at: $PYTHONPATH python
+
+ Environment variable expansion happens before clearing the
+environment (with ‘-i’) or unsetting specific variables (with ‘-u’):
+
+ $ env -S'-i OLDUSER=${USER} env'
+ OLDUSER=gordon
+
+ Use ‘-v’ to diagnose the operations step-by-step:
+
+ $ env -vS'-i OLDUSER=${USER} env'
+ expanding ${USER} into 'gordon'
+ split -S: '-i OLDUSER=${USER} env'
+ into: '-i'
+ & 'OLDUSER=gordon'
+ & 'env'
+ cleaning environ
+ setenv: OLDUSER=gordon
+ executing: env
+ arg[0]= 'env'
+ OLDUSER=gordon
+
+
+File: coreutils.info, Node: nice invocation, Next: nohup invocation, Prev: env invocation, Up: Modified command invocation
+
+23.3 ‘nice’: Run a command with modified niceness
+=================================================
+
+‘nice’ prints a process’s “niceness”, or runs a command with modified
+niceness. “niceness” affects how favorably the process is scheduled in
+the system. Synopsis:
+
+ nice [OPTION]... [COMMAND [ARG]...]
+
+ If no arguments are given, ‘nice’ prints the current niceness.
+Otherwise, ‘nice’ runs the given COMMAND with its niceness adjusted. By
+default, its niceness is incremented by 10.
+
+ Niceness values range at least from −20 (process has high priority
+and gets more resources, thus slowing down other processes) through 19
+(process has lower priority and runs slowly itself, but has less impact
+on the speed of other running processes). Some systems may have a wider
+range of niceness values; conversely, other systems may enforce more
+restrictive limits. An attempt to set the niceness outside the
+supported range is treated as an attempt to use the minimum or maximum
+supported value.
+
+ A niceness should not be confused with a scheduling priority, which
+lets applications determine the order in which threads are scheduled to
+run. Unlike a priority, a niceness is merely advice to the scheduler,
+which the scheduler is free to ignore. Also, as a point of terminology,
+POSIX defines the behavior of ‘nice’ in terms of a “nice value”, which
+is the non-negative difference between a niceness and the minimum
+niceness. Though ‘nice’ conforms to POSIX, its documentation and
+diagnostics use the term “niceness” for compatibility with historical
+practice.
+
+ COMMAND must not be a special built-in utility (*note Special
+built-in utilities::).
+
+ Due to shell aliases and built-in ‘nice’ functions, using an
+unadorned ‘nice’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+nice ...’) to avoid interference from the shell.
+
+ Note to change the “niceness” of an existing process, one needs to
+use the ‘renice’ command.
+
+ The program accepts the following option. Also see *note Common
+options::. Options must precede operands.
+
+‘-n ADJUSTMENT’
+‘--adjustment=ADJUSTMENT’
+ Add ADJUSTMENT instead of 10 to the command’s niceness. If
+ ADJUSTMENT is negative and you lack appropriate privileges, ‘nice’
+ issues a warning but otherwise acts as if you specified a zero
+ adjustment.
+
+ For compatibility ‘nice’ also supports an obsolete option syntax
+ ‘-ADJUSTMENT’. New scripts should use ‘-n ADJUSTMENT’ instead.
+
+ ‘nice’ is installed only on systems that have the POSIX ‘setpriority’
+function, so portable scripts should not rely on its existence on
+non-POSIX platforms.
+
+ Exit status:
+
+ 0 if no COMMAND is specified and the niceness is output
+ 125 if ‘nice’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+ It is sometimes useful to run a non-interactive program with reduced
+niceness.
+
+ $ nice factor 4611686018427387903
+
+ Since ‘nice’ prints the current niceness, you can invoke it through
+itself to demonstrate how it works.
+
+ The default behavior is to increase the niceness by ‘10’:
+
+ $ nice
+ 0
+ $ nice nice
+ 10
+ $ nice -n 10 nice
+ 10
+
+ The ADJUSTMENT is relative to the current niceness. In the next
+example, the first ‘nice’ invocation runs the second one with niceness
+10, and it in turn runs the final one with a niceness that is 3 more:
+
+ $ nice nice -n 3 nice
+ 13
+
+ Specifying a niceness larger than the supported range is the same as
+specifying the maximum supported value:
+
+ $ nice -n 10000000000 nice
+ 19
+
+ Only a privileged user may run a process with lower niceness:
+
+ $ nice -n -1 nice
+ nice: cannot set niceness: Permission denied
+ 0
+ $ sudo nice -n -1 nice
+ -1
+
+
+File: coreutils.info, Node: nohup invocation, Next: stdbuf invocation, Prev: nice invocation, Up: Modified command invocation
+
+23.4 ‘nohup’: Run a command immune to hangups
+=============================================
+
+‘nohup’ runs the given COMMAND with hangup signals ignored, so that the
+command can continue running in the background after you log out.
+Synopsis:
+
+ nohup COMMAND [ARG]...
+
+ If standard input is a terminal, redirect it so that terminal
+sessions do not mistakenly consider the terminal to be used by the
+command. Make the substitute file descriptor unreadable, so that
+commands that mistakenly attempt to read from standard input can report
+an error. This redirection is a GNU extension; programs intended to be
+portable to non-GNU hosts can use ‘nohup COMMAND [ARG]... 0>/dev/null’
+instead.
+
+ If standard output is a terminal, the command’s standard output is
+appended to the file ‘nohup.out’; if that cannot be written to, it is
+appended to the file ‘$HOME/nohup.out’; and if that cannot be written
+to, the command is not run. Any ‘nohup.out’ or ‘$HOME/nohup.out’ file
+created by ‘nohup’ is made readable and writable only to the user,
+regardless of the current umask settings.
+
+ If standard error is a terminal, it is normally redirected to the
+same file descriptor as the (possibly-redirected) standard output.
+However, if standard output is closed, standard error terminal output is
+instead appended to the file ‘nohup.out’ or ‘$HOME/nohup.out’ as above.
+
+ To capture the command’s output to a file other than ‘nohup.out’ you
+can redirect it. For example, to capture the output of ‘make’:
+
+ nohup make > make.log
+
+ ‘nohup’ does not automatically put the command it runs in the
+background; you must do that explicitly, by ending the command line with
+an ‘&’. Also, ‘nohup’ does not alter the niceness of COMMAND; use
+‘nice’ for that, e.g., ‘nohup nice COMMAND’.
+
+ COMMAND must not be a special built-in utility (*note Special
+built-in utilities::).
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::. Options must precede operands.
+
+ Exit status:
+
+ 125 if ‘nohup’ itself fails, and ‘POSIXLY_CORRECT’ is not set
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+ If ‘POSIXLY_CORRECT’ is set, internal failures give status 127
+instead of 125.
+
+
+File: coreutils.info, Node: stdbuf invocation, Next: timeout invocation, Prev: nohup invocation, Up: Modified command invocation
+
+23.5 ‘stdbuf’: Run a command with modified I/O stream buffering
+===============================================================
+
+‘stdbuf’ allows one to modify the buffering operations of the three
+standard I/O streams associated with a program. Synopsis:
+
+ stdbuf OPTION... COMMAND
+
+ COMMAND must start with the name of a program that
+ 1. uses the ISO C ‘FILE’ streams for input/output (note the programs
+ ‘dd’ and ‘cat’ don’t do that),
+
+ 2. does not adjust the buffering of its standard streams (note the
+ program ‘tee’ is not in this category).
+
+ Any additional ARGs are passed as additional arguments to the
+COMMAND.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-i MODE’
+‘--input=MODE’
+ Adjust the standard input stream buffering.
+
+‘-o MODE’
+‘--output=MODE’
+ Adjust the standard output stream buffering.
+
+‘-e MODE’
+‘--error=MODE’
+ Adjust the standard error stream buffering.
+
+ The MODE can be specified as follows:
+
+‘L’
+ Set the stream to line buffered mode. In this mode data is
+ coalesced until a newline is output or input is read from any
+ stream attached to a terminal device. This option is invalid with
+ standard input.
+
+‘0’
+ Disable buffering of the selected stream. In this mode, data is
+ output immediately and only the amount of data requested is read
+ from input. Note the difference in function for input and output.
+ Disabling buffering for input will not influence the responsiveness
+ or blocking behavior of the stream input functions. For example
+ ‘fread’ will still block until ‘EOF’ or error, even if the
+ underlying ‘read’ returns less data than requested.
+
+‘SIZE’
+ Specify the size of the buffer to use in fully buffered mode. SIZE
+ may be, or may be an integer optionally followed by, one of the
+ following multiplicative suffixes:
+ ‘KB’ => 1000 (KiloBytes)
+ ‘K’ => 1024 (KibiBytes)
+ ‘MB’ => 1000*1000 (MegaBytes)
+ ‘M’ => 1024*1024 (MebiBytes)
+ ‘GB’ => 1000*1000*1000 (GigaBytes)
+ ‘G’ => 1024*1024*1024 (GibiBytes)
+ and so on for ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘R’, and ‘Q’. Binary
+ prefixes can be used, too: ‘KiB’=‘K’, ‘MiB’=‘M’, and so on.
+
+ ‘stdbuf’ is installed only on platforms that use the Executable and
+Linkable Format (ELF) and support the ‘constructor’ attribute, so
+portable scripts should not rely on its existence.
+
+ Exit status:
+
+ 125 if ‘stdbuf’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ the exit status of COMMAND otherwise
+
+
+File: coreutils.info, Node: timeout invocation, Prev: stdbuf invocation, Up: Modified command invocation
+
+23.6 ‘timeout’: Run a command with a time limit
+===============================================
+
+‘timeout’ runs the given COMMAND and kills it if it is still running
+after the specified time interval. Synopsis:
+
+ timeout [OPTION] DURATION COMMAND [ARG]...
+
+ COMMAND must not be a special built-in utility (*note Special
+built-in utilities::).
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘--preserve-status’
+ Return the exit status of the managed COMMAND on timeout, rather
+ than a specific exit status indicating a timeout. This is useful
+ if the managed COMMAND supports running for an indeterminate amount
+ of time.
+
+‘--foreground’
+ Don’t create a separate background program group, so that the
+ managed COMMAND can use the foreground TTY normally. This is
+ needed to support two situations when timing out commands, when not
+ invoking ‘timeout’ from an interactive shell.
+ 1. COMMAND is interactive and needs to read from the terminal for
+ example
+ 2. the user wants to support sending signals directly to COMMAND
+ from the terminal (like Ctrl-C for example)
+
+ Note in this mode of operation, any children of COMMAND will not be
+ timed out. Also SIGCONT will not be sent to COMMAND, as it’s
+ generally not needed with foreground processes, and can cause
+ intermittent signal delivery issues with programs that are monitors
+ themselves (like GDB for example).
+
+‘-k DURATION’
+‘--kill-after=DURATION’
+ Ensure the monitored COMMAND is killed by also sending a ‘KILL’
+ signal.
+
+ The specified DURATION starts from the point in time when ‘timeout’
+ sends the initial signal to COMMAND, i.e., not from the beginning
+ when the COMMAND is started.
+
+ This option has no effect if either the main DURATION of the
+ ‘timeout’ command, or the DURATION specified to this option, is 0.
+
+ This option may be useful if the selected signal did not kill the
+ COMMAND, either because the signal was blocked or ignored, or if
+ the COMMAND takes too long (e.g. for cleanup work) to terminate
+ itself within a certain amount of time.
+
+‘-s SIGNAL’
+‘--signal=SIGNAL’
+ Send this SIGNAL to COMMAND on timeout, rather than the default
+ ‘TERM’ signal. SIGNAL may be a name like ‘HUP’ or a number. *Note
+ Signal specifications::.
+
+‘-v’
+‘--verbose’
+ Diagnose to standard error, any signal sent upon timeout.
+
+ DURATION is a floating point number in either the current or the C
+locale (*note Floating point::) followed by an optional unit:
+ ‘s’ for seconds (the default)
+ ‘m’ for minutes
+ ‘h’ for hours
+ ‘d’ for days
+ A duration of 0 disables the associated timeout. Note that the
+actual timeout duration is dependent on system conditions, which should
+be especially considered when specifying sub-second timeouts.
+
+ Exit status:
+
+ 124 if COMMAND times out, and ‘--preserve-status’ is not specified
+ 125 if ‘timeout’ itself fails
+ 126 if COMMAND is found but cannot be invoked
+ 127 if COMMAND cannot be found
+ 137 if COMMAND or ‘timeout’ is sent the KILL(9) signal (128+9)
+ the exit status of COMMAND otherwise
+
+ In the case of the ‘KILL(9)’ signal, ‘timeout’ returns with exit
+status 137, regardless of whether that signal is sent to COMMAND or to
+‘timeout’ itself, i.e., these cases cannot be distinguished. In the
+latter case, the COMMAND process may still be alive after ‘timeout’ has
+forcefully been terminated.
+
+ Examples:
+
+ # Send the default TERM signal after 20s to a short-living 'sleep 1'.
+ # As that terminates long before the given duration, 'timeout' returns
+ # with the same exit status as the command, 0 in this case.
+ timeout 20 sleep 1
+
+ # Send the INT signal after 5s to the 'sleep' command. Returns after
+ # 5 seconds with exit status 124 to indicate the sending of the signal.
+ timeout -s INT 5 sleep 20
+
+ # Likewise, but the command ignoring the INT signal due to being started
+ # via 'env --ignore-signal'. Thus, 'sleep' terminates regularly after
+ # the full 20 seconds, still 'timeout' returns with exit status 124.
+ timeout -s INT 5s env --ignore-signal=INT sleep 20
+
+ # Likewise, but sending the KILL signal 3 seconds after the initial
+ # INT signal. Hence, 'sleep' is forcefully terminated after about
+ # 8 seconds (5+3), and 'timeout' returns with an exit status of 137.
+ timeout -s INT -k 3s 5s env --ignore-signal=INT sleep 20
+
+
+File: coreutils.info, Node: Process control, Next: Delaying, Prev: Modified command invocation, Up: Top
+
+24 Process control
+******************
+
+* Menu:
+
+* kill invocation:: Sending a signal to processes.
+
+
+File: coreutils.info, Node: kill invocation, Up: Process control
+
+24.1 ‘kill’: Send a signal to processes
+=======================================
+
+The ‘kill’ command sends a signal to processes, causing them to
+terminate or otherwise act upon receiving the signal in some way.
+Alternatively, it lists information about signals. Synopses:
+
+ kill [-s SIGNAL | --signal SIGNAL | -SIGNAL] PID...
+ kill [-l | --list | -t | --table] [SIGNAL]...
+
+ Due to shell aliases and built-in ‘kill’ functions, using an
+unadorned ‘kill’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+kill ...’) to avoid interference from the shell.
+
+ The first form of the ‘kill’ command sends a signal to all PID
+arguments. The default signal to send if none is specified is ‘TERM’.
+The special signal number ‘0’ does not denote a valid signal, but can be
+used to test whether the PID arguments specify processes to which a
+signal could be sent.
+
+ If PID is positive, the signal is sent to the process with the
+process ID PID. If PID is zero, the signal is sent to all processes in
+the process group of the current process. If PID is −1, the signal is
+sent to all processes for which the user has permission to send a
+signal. If PID is less than −1, the signal is sent to all processes in
+the process group that equals the absolute value of PID.
+
+ If PID is not positive, a system-dependent set of system processes is
+excluded from the list of processes to which the signal is sent.
+
+ If a negative PID argument is desired as the first one, it should be
+preceded by ‘--’. However, as a common extension to POSIX, ‘--’ is not
+required with ‘kill -SIGNAL -PID’. The following commands are
+equivalent:
+
+ kill -15 -1
+ kill -TERM -1
+ kill -s TERM -- -1
+ kill -- -1
+
+ The first form of the ‘kill’ command succeeds if every PID argument
+specifies at least one process that the signal was sent to.
+
+ The second form of the ‘kill’ command lists signal information.
+Either the ‘-l’ or ‘--list’ option, or the ‘-t’ or ‘--table’ option must
+be specified. Without any SIGNAL argument, all supported signals are
+listed. The output of ‘-l’ or ‘--list’ is a list of the signal names,
+one per line; if SIGNAL is already a name, the signal number is printed
+instead. The output of ‘-t’ or ‘--table’ is a table of signal numbers,
+names, and descriptions. This form of the ‘kill’ command succeeds if
+all SIGNAL arguments are valid and if there is no output error.
+
+ The ‘kill’ command also supports the ‘--help’ and ‘--version’
+options. *Note Common options::.
+
+ A SIGNAL may be a signal name like ‘HUP’, or a signal number like
+‘1’, or an exit status of a process terminated by the signal. A signal
+name can be given in canonical form or prefixed by ‘SIG’. The case of
+the letters is ignored, except for the ‘-SIGNAL’ option which must use
+upper case to avoid ambiguity with lower case option letters. *Note
+Signal specifications::, for a list of supported signal names and
+numbers.
+
+
+File: coreutils.info, Node: Delaying, Next: Numeric operations, Prev: Process control, Up: Top
+
+25 Delaying
+***********
+
+* Menu:
+
+* sleep invocation:: Delay for a specified time.
+
+
+File: coreutils.info, Node: sleep invocation, Up: Delaying
+
+25.1 ‘sleep’: Delay for a specified time
+========================================
+
+‘sleep’ pauses for an amount of time specified by the sum of the values
+of the command line arguments. Synopsis:
+
+ sleep NUMBER[smhd]...
+
+ Each argument is a non-negative number followed by an optional unit;
+the default is seconds. The units are:
+
+‘s’
+ seconds
+‘m’
+ minutes
+‘h’
+ hours
+‘d’
+ days
+
+ Although portable POSIX scripts must give ‘sleep’ a single
+non-negative integer argument without a suffix, GNU ‘sleep’ also accepts
+two or more arguments, unit suffixes, and floating-point numbers in
+either the current or the C locale. *Note Floating point::.
+
+ For instance, the following could be used to ‘sleep’ for 1 second,
+234 milli-, 567 micro- and 890 nanoseconds:
+
+ sleep 1234e-3 567.89e-6
+
+ Also one could sleep indefinitely like:
+
+ sleep inf
+
+ The only options are ‘--help’ and ‘--version’. *Note Common
+options::.
+
+ Due to shell aliases and built-in ‘sleep’ functions, using an
+unadorned ‘sleep’ interactively or in a script may get you different
+functionality than that described here. Invoke it via ‘env’ (i.e., ‘env
+sleep ...’) to avoid interference from the shell.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: Numeric operations, Next: File permissions, Prev: Delaying, Up: Top
+
+26 Numeric operations
+*********************
+
+These programs do numerically-related operations.
+
+* Menu:
+
+* factor invocation:: Show factors of numbers.
+* numfmt invocation:: Reformat numbers.
+* seq invocation:: Print sequences of numbers.
+
+
+File: coreutils.info, Node: factor invocation, Next: numfmt invocation, Up: Numeric operations
+
+26.1 ‘factor’: Print prime factors
+==================================
+
+‘factor’ prints prime factors. Synopsis:
+
+ factor [OPTION]... [NUMBER]...
+
+ If no NUMBER is specified on the command line, ‘factor’ reads numbers
+from standard input, delimited by newlines, tabs, or spaces.
+
+ The program accepts the following options. Also see *note Common
+options::.
+
+‘-h’
+‘--exponents’
+ print factors in the form p^e, rather than repeating the prime ‘p’,
+ ‘e’ times. If the exponent ‘e’ is 1, then it is omitted.
+
+ $ factor --exponents 3000
+ 3000: 2^3 3 5^3
+
+ If the number to be factored is small (less than 2^{127} on typical
+machines), ‘factor’ uses a faster algorithm. For example, on a
+circa-2017 Intel Xeon Silver 4116, factoring the product of the eighth
+and ninth Mersenne primes (approximately 2^{92}) takes about 4 ms of CPU
+time:
+
+ $ M8=$(echo 2^31-1 | bc)
+ $ M9=$(echo 2^61-1 | bc)
+ $ n=$(echo "$M8 * $M9" | bc)
+ $ bash -c "time factor $n"
+ 4951760154835678088235319297: 2147483647 2305843009213693951
+
+ real 0m0.004s
+ user 0m0.004s
+ sys 0m0.000s
+
+ For larger numbers, ‘factor’ uses a slower algorithm. On the same
+platform, factoring the eighth Fermat number 2^{256} + 1 takes about 14
+seconds, and the slower algorithm would have taken about 750 ms to
+factor 2^{127} - 3 instead of the 50 ms needed by the faster algorithm.
+
+ Factoring large numbers is, in general, hard. The Pollard-Brent rho
+algorithm used by ‘factor’ is particularly effective for numbers with
+relatively small factors. If you wish to factor large numbers which do
+not have small factors (for example, numbers which are the product of
+two large primes), other methods are far better.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: numfmt invocation, Next: seq invocation, Prev: factor invocation, Up: Numeric operations
+
+26.2 ‘numfmt’: Reformat numbers
+===============================
+
+‘numfmt’ reads numbers in various representations and reformats them as
+requested. The most common usage is converting numbers to/from _human_
+representation (e.g. ‘4G’ ↦ ‘4,000,000,000’).
+
+ numfmt [OPTION]... [NUMBER]
+
+ ‘numfmt’ converts each NUMBER on the command-line according to the
+specified options (see below). If no NUMBERs are given, it reads
+numbers from standard input. ‘numfmt’ can optionally extract numbers
+from specific columns, maintaining proper line padding and alignment.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+ See ‘--invalid’ for additional information regarding exit status.
+
+26.2.1 General options
+----------------------
+
+The program accepts the following options. Also see *note Common
+options::.
+
+‘--debug’
+ Print (to standard error) warning messages about possible erroneous
+ usage.
+
+‘-d D’
+‘--delimiter=D’
+ Use the character D as input field separator (default: whitespace).
+ _Note_: Using non-default delimiter turns off automatic padding.
+
+‘--field=FIELDS’
+ Convert the number in input field FIELDS (default: 1). FIELDS
+ supports ‘cut’ style field ranges:
+
+ N N'th field, counted from 1
+ N- from N'th field, to end of line
+ N-M from N'th to M'th field (inclusive)
+ -M from first to M'th field (inclusive)
+ - all fields
+
+‘--format=FORMAT’
+ Use printf-style floating FORMAT string. The FORMAT string must
+ contain one ‘%f’ directive, optionally with ‘'’, ‘-’, ‘0’, width or
+ precision modifiers. The ‘'’ modifier will enable ‘--grouping’,
+ the ‘-’ modifier will enable left-aligned ‘--padding’ and the width
+ modifier will enable right-aligned ‘--padding’. The ‘0’ width
+ modifier (without the ‘-’ modifier) will generate leading zeros on
+ the number, up to the specified width. A precision specification
+ like ‘%.1f’ will override the precision determined from the input
+ data or set due to ‘--to’ option auto scaling.
+
+‘--from=UNIT’
+ Auto-scales input numbers according to UNIT. See UNITS below. The
+ default is no scaling, meaning suffixes (e.g. ‘M’, ‘G’) will
+ trigger an error.
+
+‘--from-unit=N’
+ Specify the input unit size (instead of the default 1). Use this
+ option when the input numbers represent other units (e.g. if the
+ input number ‘10’ represents 10 units of 512 bytes, use
+ ‘--from-unit=512’). Suffixes are handled as with ‘--from=auto’.
+
+‘--grouping’
+ Group digits in output numbers according to the current locale’s
+ grouping rules (e.g _Thousands Separator_ character, commonly ‘.’
+ (dot) or ‘,’ comma). This option has no effect in ‘POSIX/C’
+ locale.
+
+‘--header[=N]’
+ Print the first N (default: 1) lines without any conversion.
+
+‘--invalid=MODE’
+ The default action on input errors is to exit immediately with
+ status code 2. ‘--invalid=‘abort’’ explicitly specifies this
+ default mode. With a MODE of ‘fail’, print a warning for _each_
+ conversion error, and exit with status 2. With a MODE of ‘warn’,
+ exit with status 0, even in the presence of conversion errors, and
+ with a MODE of ‘ignore’ do not even print diagnostics.
+
+‘--padding=N’
+ Pad the output numbers to N characters, by adding spaces. If N is
+ a positive number, numbers will be right-aligned. If N is a
+ negative number, numbers will be left-aligned. By default, numbers
+ are automatically aligned based on the input line’s width (only
+ with the default delimiter).
+
+‘--round=METHOD’
+ When converting number representations, round the number according
+ to METHOD, which can be ‘up’, ‘down’, ‘from-zero’ (the default),
+ ‘towards-zero’, ‘nearest’.
+
+‘--suffix=SUFFIX’
+ Add ‘SUFFIX’ to the output numbers, and accept optional ‘SUFFIX’ in
+ input numbers.
+
+‘--to=UNIT’
+ Auto-scales output numbers according to UNIT. See _Units_ below.
+ The default is no scaling, meaning all the digits of the number are
+ printed.
+
+‘--to-unit=N’
+ Specify the output unit size (instead of the default 1). Use this
+ option when the output numbers represent other units (e.g. to
+ represent ‘4,000,000’ bytes in blocks of 1KB, use ‘--to=si
+ --to-unit=1000’). Suffixes are handled as with ‘--from=auto’.
+
+‘-z’
+‘--zero-terminated’
+ Delimit items with a zero byte rather than a newline (ASCII LF).
+ I.e., treat input as items separated by ASCII NUL and terminate
+ output items with ASCII NUL. This option can be useful in
+ conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which
+ do the same in order to reliably handle arbitrary file names (even
+ those containing blanks or other special characters). Note with
+ ‘-z’ the newline character is treated as a field separator.
+
+26.2.2 Possible UNITs:
+----------------------
+
+The following are the possible UNIT options with ‘--from=UNITS’ and
+‘--to=UNITS’:
+
+NONE
+ No scaling is performed. For input numbers, no suffixes are
+ accepted, and any trailing characters following the number will
+ trigger an error. For output numbers, all digits of the numbers
+ will be printed.
+
+SI
+ Auto-scale numbers according to the _International System of Units
+ (SI)_ standard. For input numbers, accept one of the following
+ suffixes. For output numbers, values larger than 1000 will be
+ rounded, and printed with one of the following suffixes:
+
+ ‘K’ => 1000^1 = 10^3 (Kilo)
+ ‘M’ => 1000^2 = 10^6 (Mega)
+ ‘G’ => 1000^3 = 10^9 (Giga)
+ ‘T’ => 1000^4 = 10^{12} (Tera)
+ ‘P’ => 1000^5 = 10^{15} (Peta)
+ ‘E’ => 1000^6 = 10^{18} (Exa)
+ ‘Z’ => 1000^7 = 10^{21} (Zetta)
+ ‘Y’ => 1000^8 = 10^{24} (Yotta)
+ ‘R’ => 1000^9 = 10^{27} (Ronna)
+ ‘Q’ => 1000^{10} = 10^{30} (Quetta)
+
+IEC
+ Auto-scale numbers according to the _International Electrotechnical
+ Commission (IEC)_ standard. For input numbers, accept one of the
+ following suffixes. For output numbers, values larger than 1024
+ will be rounded, and printed with one of the following suffixes:
+
+ ‘K’ => 1024^1 = 2^{10} (Kibi)
+ ‘M’ => 1024^2 = 2^{20} (Mebi)
+ ‘G’ => 1024^3 = 2^{30} (Gibi)
+ ‘T’ => 1024^4 = 2^{40} (Tebi)
+ ‘P’ => 1024^5 = 2^{50} (Pebi)
+ ‘E’ => 1024^6 = 2^{60} (Exbi)
+ ‘Z’ => 1024^7 = 2^{70} (Zebi)
+ ‘Y’ => 1024^8 = 2^{80} (Yobi)
+ ‘R’ => 1024^9 = 2^{90} (Robi)
+ ‘Q’ => 1024^{10} = 2^{100} (Quebi)
+
+ The ‘iec’ option uses a single letter suffix (e.g. ‘G’), which is
+ not fully standard, as the _iec_ standard recommends a two-letter
+ symbol (e.g ‘Gi’) – but in practice, this method is common.
+ Compare with the ‘iec-i’ option.
+
+IEC-I
+ Auto-scale numbers according to the _International Electrotechnical
+ Commission (IEC)_ standard. For input numbers, accept one of the
+ following suffixes. For output numbers, values larger than 1024
+ will be rounded, and printed with one of the following suffixes:
+
+ ‘Ki’ => 1024^1 = 2^{10} (Kibi)
+ ‘Mi’ => 1024^2 = 2^{20} (Mebi)
+ ‘Gi’ => 1024^3 = 2^{30} (Gibi)
+ ‘Ti’ => 1024^4 = 2^{40} (Tebi)
+ ‘Pi’ => 1024^5 = 2^{50} (Pebi)
+ ‘Ei’ => 1024^6 = 2^{60} (Exbi)
+ ‘Zi’ => 1024^7 = 2^{70} (Zebi)
+ ‘Yi’ => 1024^8 = 2^{80} (Yobi)
+ ‘Ri’ => 1024^9 = 2^{90} (Robi)
+ ‘Qi’ => 1024^{10} = 2^{100} (Quebi)
+
+ The ‘iec-i’ option uses a two-letter suffix symbol (e.g. ‘Gi’), as
+ the _iec_ standard recommends, but this is not always common in
+ practice. Compare with the ‘iec’ option.
+
+AUTO
+ ‘auto’ can only be used with ‘--from’. With this method, numbers
+ with single-letter suffixes like ‘K’ suffixes are interpreted as
+ _SI_ values, and numbers with two-letter suffixes like ‘Ki’ are
+ interpreted as _IEC_ values.
+
+26.2.3 Examples of using ‘numfmt’
+---------------------------------
+
+Converting a single number from/to _human_ representation:
+ $ numfmt --to=si 500000
+ 500K
+
+ $ numfmt --to=iec 500000
+ 489K
+
+ $ numfmt --to=iec-i 500000
+ 489Ki
+
+ $ numfmt --from=si 1M
+ 1000000
+
+ $ numfmt --from=iec 1M
+ 1048576
+
+ # with '--from=auto', M=Mega, Mi=Mebi
+ $ numfmt --from=auto 1M
+ 1000000
+ $ numfmt --from=auto 1Mi
+ 1048576
+
+ Converting from ‘SI’ to ‘IEC’ scales (e.g. when a drive’s capacity
+is advertised as ‘1TB’, while checking the drive’s capacity gives lower
+values):
+
+ $ numfmt --from=si --to=iec 1T
+ 932G
+
+ With both input and output scales specified, the largest defined
+prefixes are supported:
+
+ $ numfmt --from=si --to=iec-i 2000R
+ 1.6Qi
+
+ Converting a single field from an input file / piped input (these
+contrived examples are for demonstration purposes only, as both ‘ls’ and
+‘df’ support the ‘--human-readable’ option to output sizes in
+human-readable format):
+
+ # Third field (file size) will be shown in SI representation
+ $ ls -log | numfmt --field 3 --header --to=si | head -n4
+ -rw-r--r-- 1 94K Aug 23 2011 ABOUT-NLS
+ -rw-r--r-- 1 3.7K Jan 7 16:15 AUTHORS
+ -rw-r--r-- 1 36K Jun 1 2011 COPYING
+ -rw-r--r-- 1 0 Jan 7 15:15 ChangeLog
+
+ # Second field (size) will be shown in IEC representation
+ $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
+ File system 1B-blocks Used Available Use% Mounted on
+ rootfs 132G 104741408 26554036 80% /
+ tmpfs 794M 7580 804960 1% /run/shm
+ /dev/sdb1 694G 651424756 46074696 94% /home
+
+ Output can be tweaked using ‘--padding’ or ‘--format’:
+
+ # Pad to 10 characters, right-aligned
+ $ du -s * | numfmt --to=si --padding=10
+ 2.5K config.log
+ 108 config.status
+ 1.7K configure
+ 20 configure.ac
+
+ # Pad to 10 characters, left-aligned
+ $ du -s * | numfmt --to=si --padding=-10
+ 2.5K config.log
+ 108 config.status
+ 1.7K configure
+ 20 configure.ac
+
+ # Pad to 10 characters, left-aligned, using 'format'
+ $ du -s * | numfmt --to=si --format="%10f"
+ 2.5K config.log
+ 108 config.status
+ 1.7K configure
+ 20 configure.ac
+
+ # Pad to 10 characters, left-aligned, using 'format'
+ $ du -s * | numfmt --to=si --padding="%-10f"
+ 2.5K config.log
+ 108 config.status
+ 1.7K configure
+ 20 configure.ac
+
+ With locales that support grouping digits, using ‘--grouping’ or
+‘--format’ enables grouping. In ‘POSIX’ locale, grouping is silently
+ignored:
+
+ $ LC_ALL=C numfmt --from=iec --grouping 2G
+ 2147483648
+
+ $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
+ 2,147,483,648
+
+ $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
+ 2,14,74,83,648
+
+ $ LC_ALL=C numfmt --from=iec --format="==%'15f==" 2G
+ == 2147483648==
+
+ $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'15f==" 2G
+ == 2,147,483,648==
+
+ $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'-15f==" 2G
+ ==2,147,483,648 ==
+
+ $ LC_ALL=ta_IN numfmt --from=iec --format="==%'15f==" 2G
+ == 2,14,74,83,648==
+
+
+File: coreutils.info, Node: seq invocation, Prev: numfmt invocation, Up: Numeric operations
+
+26.3 ‘seq’: Print numeric sequences
+===================================
+
+‘seq’ prints a sequence of numbers to standard output. Synopses:
+
+ seq [OPTION]... LAST
+ seq [OPTION]... FIRST LAST
+ seq [OPTION]... FIRST INCREMENT LAST
+
+ ‘seq’ prints the numbers from FIRST to LAST by INCREMENT. By
+default, each number is printed on a separate line. When INCREMENT is
+not specified, it defaults to ‘1’, even when FIRST is larger than LAST.
+FIRST also defaults to ‘1’. So ‘seq 1’ prints ‘1’, but ‘seq 0’ and ‘seq
+10 5’ produce no output. The sequence of numbers ends when the sum of
+the current number and INCREMENT would become greater than LAST, so ‘seq
+1 10 10’ only produces ‘1’. INCREMENT must not be ‘0’; use the tool
+‘yes’ to get repeated output of a constant number. FIRST, INCREMENT and
+LAST must not be ‘NaN’, but ‘inf’ is supported. Floating-point numbers
+may be specified in either the current or the C locale. *Note Floating
+point::.
+
+ The program accepts the following options. Also see *note Common
+options::. Options must precede operands.
+
+‘-f FORMAT’
+‘--format=FORMAT’
+ Print all numbers using FORMAT. FORMAT must contain exactly one of
+ the ‘printf’-style floating point conversion specifications ‘%a’,
+ ‘%e’, ‘%f’, ‘%g’, ‘%A’, ‘%E’, ‘%F’, ‘%G’. The ‘%’ may be followed
+ by zero or more flags taken from the set ‘-+#0 '’, then an optional
+ width containing one or more digits, then an optional precision
+ consisting of a ‘.’ followed by zero or more digits. FORMAT may
+ also contain any number of ‘%%’ conversion specifications. All
+ conversion specifications have the same meaning as with ‘printf’.
+
+ The default format is derived from FIRST, STEP, and LAST. If these
+ all use a fixed point decimal representation, the default format is
+ ‘%.Pf’, where P is the minimum precision that can represent the
+ output numbers exactly. Otherwise, the default format is ‘%g’.
+
+‘-s STRING’
+‘--separator=STRING’
+ Separate numbers with STRING; default is a newline. The output
+ always terminates with a newline.
+
+‘-w’
+‘--equal-width’
+ Print all numbers with the same width, by padding with leading
+ zeros. FIRST, STEP, and LAST should all use a fixed point decimal
+ representation. (To have other kinds of padding, use ‘--format’).
+
+ You can get finer-grained control over output with ‘-f’:
+
+ $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
+ (-9.00E+05)
+ ( 2.00E+05)
+ ( 1.30E+06)
+
+ If you want hexadecimal integer output, you can use ‘printf’ to
+perform the conversion:
+
+ $ printf '%x\n' $(seq 1048575 1024 1050623)
+ fffff
+ 1003ff
+ 1007ff
+
+ For very long lists of numbers, use xargs to avoid system limitations
+on the length of an argument list:
+
+ $ seq 1000000 | xargs printf '%x\n' | tail -n 3
+ f423e
+ f423f
+ f4240
+
+ To generate octal output, use the printf ‘%o’ format instead of ‘%x’.
+
+ On most systems, seq can produce whole-number output for values up to
+at least 2^{53}. Larger integers are approximated. The details differ
+depending on your floating-point implementation. *Note Floating
+point::. A common case is that ‘seq’ works with integers through
+2^{64}, and larger integers may not be numerically correct:
+
+ $ seq 50000000000000000000 2 50000000000000000004
+ 50000000000000000000
+ 50000000000000000000
+ 50000000000000000004
+
+ However, note that when limited to non-negative whole numbers, an
+increment of less than 200, and no format-specifying option, seq can
+print arbitrarily large numbers. Therefore ‘seq inf’ can be used to
+generate an infinite sequence of numbers.
+
+ Be careful when using ‘seq’ with outlandish values: otherwise you may
+see surprising results, as ‘seq’ uses floating point internally. For
+example, on the x86 platform, where the internal representation uses a
+64-bit fraction, the command:
+
+ seq 1 0.0000000000000000001 1.0000000000000000009
+
+ outputs 1.0000000000000000007 twice and skips 1.0000000000000000008.
+
+ An exit status of zero indicates success, and a nonzero value
+indicates failure.
+
+
+File: coreutils.info, Node: File permissions, Next: File timestamps, Prev: Numeric operations, Up: Top
+
+27 File permissions
+*******************
+
+Each file has a set of “file mode bits” that control the kinds of access
+that users have to that file. They can be represented either in
+symbolic form or as an octal number.
+
+* Menu:
+
+* Mode Structure:: Structure of file mode bits.
+* Symbolic Modes:: Mnemonic representation of file mode bits.
+* Numeric Modes:: File mode bits as octal numbers.
+* Operator Numeric Modes:: ANDing, ORing, and setting modes octally.
+* Directory Setuid and Setgid:: Set-user-ID and set-group-ID on directories.
+
+
+File: coreutils.info, Node: Mode Structure, Next: Symbolic Modes, Up: File permissions
+
+27.1 Structure of File Mode Bits
+================================
+
+The file mode bits have two parts: the “file permission bits”, which
+control ordinary access to the file, and “special mode bits”, which
+affect only some files.
+
+ There are three kinds of permissions that a user can have for a file:
+
+ 1. permission to read the file. For directories, this means
+ permission to list the contents of the directory.
+ 2. permission to write to (change) the file. For directories, this
+ means permission to create and remove files in the directory.
+ 3. permission to execute the file (run it as a program). For
+ directories, this means permission to access files in the
+ directory.
+
+ There are three categories of users who may have different
+permissions to perform any of the above operations on a file:
+
+ 1. the file’s owner;
+ 2. other users who are in the file’s group;
+ 3. everyone else.
+
+ Files are given an owner and group when they are created. Usually
+the owner is the current user and the group is the group of the
+directory the file is in, but this varies with the operating system, the
+file system the file is created on, and the way the file is created.
+You can change the owner and group of a file by using the ‘chown’ and
+‘chgrp’ commands.
+
+ In addition to the three sets of three permissions listed above, the
+file mode bits have three special components, which affect only
+executable files (programs) and, on most systems, directories:
+
+The “set-user-ID bit” (“setuid bit”).
+ On execution, set the process’s effective user ID to that of the
+ file. For directories on a few systems, give files created in the
+ directory the same owner as the directory, no matter who creates
+ them, and set the set-user-ID bit of newly-created subdirectories.
+
+The “set-group-ID bit” (“setgid bit”).
+ On execution, set the process’s effective group ID to that of the
+ file. For directories on most systems, give files created in the
+ directory the same group as the directory, no matter what group the
+ user who creates them is in, and set the set-group-ID bit of
+ newly-created subdirectories.
+
+The “restricted deletion flag” or “sticky bit”.
+ Prevent unprivileged users from removing or renaming a file in a
+ directory unless they own the file or the directory; this is
+ commonly found on world-writable directories like ‘/tmp’. For
+ regular files on some older systems, save the program’s text image
+ on the swap device so it will load more quickly when run, so that
+ the image is “sticky”.
+
+ In addition to the file mode bits listed above, there may be file
+attributes specific to the file system, e.g., access control lists
+(ACLs), whether a file is compressed, whether a file can be modified
+(immutability), and whether a file can be dumped. These are usually set
+using programs specific to the file system. For example:
+
+ext2
+ On GNU and GNU/Linux the file attributes specific to the ext2 file
+ system are set using ‘chattr’.
+
+FFS
+ On FreeBSD the file flags specific to the FFS file system are set
+ using ‘chflags’.
+
+ Even if a file’s mode bits allow an operation on that file, that
+operation may still fail, because:
+
+ • the file-system-specific attributes or flags do not permit it; or
+
+ • the file system is mounted as read-only.
+
+ For example, if the immutable attribute is set on a file, it cannot
+be modified, regardless of the fact that you may have just run ‘chmod
+a+w FILE’.
+
+
+File: coreutils.info, Node: Symbolic Modes, Next: Numeric Modes, Prev: Mode Structure, Up: File permissions
+
+27.2 Symbolic Modes
+===================
+
+“Symbolic modes” represent changes to files’ mode bits as operations on
+single-character symbols. They allow you to modify either all or
+selected parts of files’ mode bits, optionally based on their previous
+values, and perhaps on the current ‘umask’ as well (*note Umask and
+Protection::).
+
+ The format of symbolic modes is:
+
+ [ugoa...][-+=]PERMS...[,...]
+
+where PERMS is either zero or more letters from the set ‘rwxXst’, or a
+single letter from the set ‘ugo’.
+
+ The following sections describe the operators and other details of
+symbolic modes.
+
+* Menu:
+
+* Setting Permissions:: Basic operations on permissions.
+* Copying Permissions:: Copying existing permissions.
+* Changing Special Mode Bits:: Special mode bits.
+* Conditional Executability:: Conditionally affecting executability.
+* Multiple Changes:: Making multiple changes.
+* Umask and Protection:: The effect of the umask.
+
+
+File: coreutils.info, Node: Setting Permissions, Next: Copying Permissions, Up: Symbolic Modes
+
+27.2.1 Setting Permissions
+--------------------------
+
+The basic symbolic operations on a file’s permissions are adding,
+removing, and setting the permission that certain users have to read,
+write, and execute or search the file. These operations have the
+following format:
+
+ USERS OPERATION PERMISSIONS
+
+The spaces between the three parts above are shown for readability only;
+symbolic modes cannot contain spaces.
+
+ The USERS part tells which users’ access to the file is changed. It
+consists of one or more of the following letters (or it can be empty;
+*note Umask and Protection::, for a description of what happens then).
+When more than one of these letters is given, the order that they are in
+does not matter.
+
+‘u’
+ the user who owns the file;
+‘g’
+ other users who are in the file’s group;
+‘o’
+ all other users;
+‘a’
+ all users; the same as ‘ugo’.
+
+ The OPERATION part tells how to change the affected users’ access to
+the file, and is one of the following symbols:
+
+‘+’
+ to add the PERMISSIONS to whatever permissions the USERS already
+ have for the file;
+‘-’
+ to remove the PERMISSIONS from whatever permissions the USERS
+ already have for the file;
+‘=’
+ to make the PERMISSIONS the only permissions that the USERS have
+ for the file.
+
+ The PERMISSIONS part tells what kind of access to the file should be
+changed; it is normally zero or more of the following letters. As with
+the USERS part, the order does not matter when more than one letter is
+given. Omitting the PERMISSIONS part is useful only with the ‘=’
+operation, where it gives the specified USERS no access at all to the
+file.
+
+‘r’
+ the permission the USERS have to read the file;
+‘w’
+ the permission the USERS have to write to the file;
+‘x’
+ the permission the USERS have to execute the file, or search it if
+ it is a directory.
+
+ For example, to give everyone permission to read and write a regular
+file, but not to execute it, use:
+
+ a=rw
+
+ To remove write permission for all users other than the file’s owner,
+use:
+
+ go-w
+
+The above command does not affect the access that the owner of the file
+has to it, nor does it affect whether other users can read or execute
+the file.
+
+ To give everyone except a file’s owner no permission to do anything
+with that file, use the mode below. Other users could still remove the
+file, if they have write permission on the directory it is in.
+
+ go=
+
+Another way to specify the same thing is:
+
+ og-rwx
+
+
+File: coreutils.info, Node: Copying Permissions, Next: Changing Special Mode Bits, Prev: Setting Permissions, Up: Symbolic Modes
+
+27.2.2 Copying Existing Permissions
+-----------------------------------
+
+You can base a file’s permissions on its existing permissions. To do
+this, instead of using a series of ‘r’, ‘w’, or ‘x’ letters after the
+operator, you use the letter ‘u’, ‘g’, or ‘o’. For example, the mode
+
+ o+g
+
+adds the permissions for users who are in a file’s group to the
+permissions that other users have for the file. Thus, if the file
+started out as mode 664 (‘rw-rw-r--’), the above mode would change it to
+mode 666 (‘rw-rw-rw-’). If the file had started out as mode 741
+(‘rwxr----x’), the above mode would change it to mode 745 (‘rwxr--r-x’).
+The ‘-’ and ‘=’ operations work analogously.
+
+
+File: coreutils.info, Node: Changing Special Mode Bits, Next: Conditional Executability, Prev: Copying Permissions, Up: Symbolic Modes
+
+27.2.3 Changing Special Mode Bits
+---------------------------------
+
+In addition to changing a file’s read, write, and execute/search
+permissions, you can change its special mode bits. *Note Mode
+Structure::, for a summary of these special mode bits.
+
+ To change the file mode bits to set the user ID on execution, use ‘u’
+in the USERS part of the symbolic mode and ‘s’ in the PERMISSIONS part.
+
+ To change the file mode bits to set the group ID on execution, use
+‘g’ in the USERS part of the symbolic mode and ‘s’ in the PERMISSIONS
+part.
+
+ To set both user and group ID on execution, omit the USERS part of
+the symbolic mode (or use ‘a’) and use ‘s’ in the PERMISSIONS part.
+
+ To change the file mode bits to set the restricted deletion flag or
+sticky bit, omit the USERS part of the symbolic mode (or use ‘a’) and
+use ‘t’ in the PERMISSIONS part.
+
+ For example, to set the set-user-ID mode bit of a program, you can
+use the mode:
+
+ u+s
+
+ To remove both set-user-ID and set-group-ID mode bits from it, you
+can use the mode:
+
+ a-s
+
+ To set the restricted deletion flag or sticky bit, you can use the
+mode:
+
+ +t
+
+ The combination ‘o+s’ has no effect. On GNU systems the combinations
+‘u+t’ and ‘g+t’ have no effect, and ‘o+t’ acts like plain ‘+t’.
+
+ The ‘=’ operator is not very useful with special mode bits. For
+example, the mode:
+
+ o=t
+
+does set the restricted deletion flag or sticky bit, but it also removes
+all read, write, and execute/search permissions that users not in the
+file’s group might have had for it.
+
+ *Note Directory Setuid and Setgid::, for additional rules concerning
+set-user-ID and set-group-ID bits and directories.
+
+
+File: coreutils.info, Node: Conditional Executability, Next: Multiple Changes, Prev: Changing Special Mode Bits, Up: Symbolic Modes
+
+27.2.4 Conditional Executability
+--------------------------------
+
+There is one more special type of symbolic permission: if you use ‘X’
+instead of ‘x’, execute/search permission is affected only if the file
+is a directory or already had execute permission.
+
+ For example, this mode:
+
+ a+X
+
+gives all users permission to search directories, or to execute files if
+anyone could execute them before.
+
+
+File: coreutils.info, Node: Multiple Changes, Next: Umask and Protection, Prev: Conditional Executability, Up: Symbolic Modes
+
+27.2.5 Making Multiple Changes
+------------------------------
+
+The format of symbolic modes is actually more complex than described
+above (*note Setting Permissions::). It provides two ways to make
+multiple changes to files’ mode bits.
+
+ The first way is to specify multiple OPERATION and PERMISSIONS parts
+after a USERS part in the symbolic mode.
+
+ For example, the mode:
+
+ og+rX-w
+
+gives users other than the owner of the file read permission and, if it
+is a directory or if someone already had execute permission to it, gives
+them execute/search permission; and it also denies them write permission
+to the file. It does not affect the permission that the owner of the
+file has for it. The above mode is equivalent to the two modes:
+
+ og+rX
+ og-w
+
+ The second way to make multiple changes is to specify more than one
+simple symbolic mode, separated by commas. For example, the mode:
+
+ a+r,go-w
+
+gives everyone permission to read the file and removes write permission
+on it for all users except its owner. Another example:
+
+ u=rwx,g=rx,o=
+
+sets all of the permission bits for the file explicitly. (It gives
+users who are not in the file’s group no permission at all for it.)
+
+ The two methods can be combined. The mode:
+
+ a+r,g+x-w
+
+gives all users permission to read the file, and gives users who are in
+the file’s group permission to execute/search it as well, but not
+permission to write to it. The above mode could be written in several
+different ways; another is:
+
+ u+r,g+rx,o+r,g-w
+
+
+File: coreutils.info, Node: Umask and Protection, Prev: Multiple Changes, Up: Symbolic Modes
+
+27.2.6 The Umask and Protection
+-------------------------------
+
+If the USERS part of a symbolic mode is omitted, it defaults to ‘a’
+(affect all users), except that any permissions that are _set_ in the
+system variable ‘umask’ are _not affected_. The value of ‘umask’ can be
+set using the ‘umask’ command. Its default value varies from system to
+system.
+
+ Omitting the USERS part of a symbolic mode is generally not useful
+with operations other than ‘+’. It is useful with ‘+’ because it allows
+you to use ‘umask’ as an easily customizable protection against giving
+away more permission to files than you intended to.
+
+ As an example, if ‘umask’ has the value 2, which removes write
+permission for users who are not in the file’s group, then the mode:
+
+ +w
+
+adds permission to write to the file to its owner and to other users who
+are in the file’s group, but _not_ to other users. In contrast, the
+mode:
+
+ a+w
+
+ignores ‘umask’, and _does_ give write permission for the file to all
+users.
+
+
+File: coreutils.info, Node: Numeric Modes, Next: Operator Numeric Modes, Prev: Symbolic Modes, Up: File permissions
+
+27.3 Numeric Modes
+==================
+
+As an alternative to giving a symbolic mode, you can give an octal (base
+8) number that represents the mode.
+
+ The permissions granted to the user, to other users in the file’s
+group, and to other users not in the file’s group each require three
+bits: one bit for read, one for write, and one for execute/search
+permission. These three bits are represented as one octal digit; for
+example, if all three are present, the resulting 111 (in binary) is
+represented as the digit 7 (in octal). The three special mode bits also
+require one bit each, and they are as a group represented as another
+octal digit. Here is how the bits are arranged, starting with the
+highest valued bit:
+
+ Value in Corresponding
+ Mode Mode Bit
+
+ Special mode bits:
+ 4000 Set user ID
+ 2000 Set group ID
+ 1000 Restricted deletion flag or sticky bit
+
+ The file's owner:
+ 400 Read
+ 200 Write
+ 100 Execute/search
+
+ Other users in the file's group:
+ 40 Read
+ 20 Write
+ 10 Execute/search
+
+ Other users not in the file's group:
+ 4 Read
+ 2 Write
+ 1 Execute/search
+
+ For example, numeric mode ‘4751’ corresponds to symbolic mode
+‘u=srwx,g=rx,o=x’, and numeric mode ‘664’ corresponds to symbolic mode
+‘ug=rw,o=r’. Numeric mode ‘0’ corresponds to symbolic mode ‘a=’.
+
+ A numeric mode is usually shorter than the corresponding symbolic
+mode, but it is limited in that normally it cannot take into account the
+previous file mode bits; it can only set them absolutely. The
+set-user-ID and set-group-ID bits of directories are an exception to
+this general limitation. *Note Directory Setuid and Setgid::. Also,
+operator numeric modes can take previous file mode bits into account.
+*Note Operator Numeric Modes::.
+
+ Numeric modes are always interpreted in octal; you do not have to add
+a leading ‘0’, as you do in C. Mode ‘0055’ is the same as mode ‘55’.
+However, modes of five digits or more, such as ‘00055’, are sometimes
+special (*note Directory Setuid and Setgid::).
+
+
+File: coreutils.info, Node: Operator Numeric Modes, Next: Directory Setuid and Setgid, Prev: Numeric Modes, Up: File permissions
+
+27.4 Operator Numeric Modes
+===========================
+
+An operator numeric mode is a numeric mode that is prefixed by a ‘-’,
+‘+’, or ‘=’ operator, which has the same interpretation as in symbolic
+modes. For example, ‘+440’ enables read permission for the file’s owner
+and group, ‘-1’ disables execute permission for other users, and ‘=600’
+clears all permissions except for enabling read-write permissions for
+the file’s owner. Operator numeric modes can be combined with symbolic
+modes by separating them with a comma; for example, ‘=0,u+r’ clears all
+permissions except for enabling read permission for the file’s owner.
+
+ The commands ‘chmod =755 DIR’ and ‘chmod 755 DIR’ differ in that the
+former clears the directory DIR’s setuid and setgid bits, whereas the
+latter preserves them. *Note Directory Setuid and Setgid::.
+
+ Operator numeric modes are a GNU extension.
+
+
+File: coreutils.info, Node: Directory Setuid and Setgid, Prev: Operator Numeric Modes, Up: File permissions
+
+27.5 Directories and the Set-User-ID and Set-Group-ID Bits
+==========================================================
+
+On most systems, if a directory’s set-group-ID bit is set, newly created
+subfiles inherit the same group as the directory, and newly created
+subdirectories inherit the set-group-ID bit of the parent directory. On
+a few systems, a directory’s set-user-ID bit has a similar effect on the
+ownership of new subfiles and the set-user-ID bits of new
+subdirectories. These mechanisms let users share files more easily, by
+lessening the need to use ‘chmod’ or ‘chown’ to share new files.
+
+ These convenience mechanisms rely on the set-user-ID and set-group-ID
+bits of directories. If commands like ‘chmod’ and ‘mkdir’ routinely
+cleared these bits on directories, the mechanisms would be less
+convenient and it would be harder to share files. Therefore, a command
+like ‘chmod’ does not affect the set-user-ID or set-group-ID bits of a
+directory unless the user specifically mentions them in a symbolic mode,
+or uses an operator numeric mode such as ‘=755’, or sets them in a
+numeric mode, or clears them in a numeric mode that has five or more
+octal digits. For example, on systems that support set-group-ID
+inheritance:
+
+ # These commands leave the set-user-ID and
+ # set-group-ID bits of the subdirectories alone,
+ # so that they retain their default values.
+ mkdir A B C
+ chmod 755 A
+ chmod 0755 B
+ chmod u=rwx,go=rx C
+ mkdir -m 755 D
+ mkdir -m 0755 E
+ mkdir -m u=rwx,go=rx F
+
+ If you want to try to set these bits, you must mention them
+explicitly in the symbolic or numeric modes, e.g.:
+
+ # These commands try to set the set-user-ID
+ # and set-group-ID bits of the subdirectories.
+ mkdir G
+ chmod 6755 G
+ chmod +6000 G
+ chmod u=rwx,go=rx,a+s G
+ mkdir -m 6755 H
+ mkdir -m +6000 I
+ mkdir -m u=rwx,go=rx,a+s J
+
+ If you want to try to clear these bits, you must mention them
+explicitly in a symbolic mode, or use an operator numeric mode, or
+specify a numeric mode with five or more octal digits, e.g.:
+
+ # These commands try to clear the set-user-ID
+ # and set-group-ID bits of the directory D.
+ chmod a-s D
+ chmod -6000 D
+ chmod =755 D
+ chmod 00755 D
+
+ This behavior is a GNU extension. Portable scripts should not rely
+on requests to set or clear these bits on directories, as POSIX allows
+implementations to ignore these requests. The GNU behavior with numeric
+modes of four or fewer digits is intended for scripts portable to
+systems that preserve these bits; the behavior with numeric modes of
+five or more digits is for scripts portable to systems that do not
+preserve the bits.
+
+
+File: coreutils.info, Node: File timestamps, Next: Date input formats, Prev: File permissions, Up: Top
+
+28 File timestamps
+******************
+
+Standard POSIX files have three timestamps: the access timestamp (atime)
+of the last read, the modification timestamp (mtime) of the last write,
+and the status change timestamp (ctime) of the last change to the file’s
+meta-information. Some file systems support a fourth time: the birth
+timestamp (birthtime) of when the file was created; by definition,
+birthtime never changes.
+
+ One common example of a ctime change is when the permissions of a
+file change. Changing the permissions doesn’t access the file, so atime
+doesn’t change, nor does it modify the file, so the mtime doesn’t
+change. Yet, something about the file itself has changed, and this must
+be noted somewhere. This is the job of the ctime field. This is
+necessary, so that, for example, a backup program can make a fresh copy
+of the file, including the new permissions value. Another operation
+that modifies a file’s ctime without affecting the others is renaming.
+
+ Naively, a file’s atime, mtime, and ctime are set to the current time
+whenever you read, write, or change the attributes of the file
+respectively, and searching a directory counts as reading it. A file’s
+atime and mtime can also be set directly, via the ‘touch’ command (*note
+touch invocation::). In practice, though, timestamps are not updated
+quite that way.
+
+ For efficiency reasons, many systems are lazy about updating atimes:
+when a program accesses a file, they may delay updating the file’s
+atime, or may not update the file’s atime if the file has been accessed
+recently, or may not update the atime at all. Similar laziness, though
+typically not quite so extreme, applies to mtimes and ctimes.
+
+ Some systems emulate timestamps instead of supporting them directly,
+and these emulations may disagree with the naive interpretation. For
+example, a system may fake an atime or ctime by using the mtime.
+
+ The determination of what time is “current” depends on the platform.
+Platforms with network file systems often use different clocks for the
+operating system and for file systems; because updates typically uses
+file systems’ clocks by default, clock skew can cause the resulting file
+timestamps to appear to be in a program’s “future” or “past”.
+
+ When the system updates a file timestamp to a desired time T (which
+is either the current time, or a time specified via the ‘touch’
+command), there are several reasons the file’s timestamp may be set to a
+value that differs from T. First, T may have a higher resolution than
+supported. Second, a file system may use different resolutions for
+different types of times. Third, file timestamps may use a different
+resolution than operating system timestamps. Fourth, the operating
+system primitives used to update timestamps may employ yet a different
+resolution. For example, in theory a file system might use
+10-microsecond resolution for access timestamp and 100-nanosecond
+resolution for modification timestamp, and the operating system might
+use nanosecond resolution for the current time and microsecond
+resolution for the primitive that ‘touch’ uses to set a file’s timestamp
+to an arbitrary value.
+
+
+File: coreutils.info, Node: Date input formats, Next: Version sort ordering, Prev: File timestamps, Up: Top
+
+29 Date input formats
+*********************
+
+First, a quote:
+
+ Our units of temporal measurement, from seconds on up to months,
+ are so complicated, asymmetrical and disjunctive so as to make
+ coherent mental reckoning in time all but impossible. Indeed, had
+ some tyrannical god contrived to enslave our minds to time, to make
+ it all but impossible for us to escape subjection to sodden
+ routines and unpleasant surprises, he could hardly have done better
+ than handing down our present system. It is like a set of
+ trapezoidal building blocks, with no vertical or horizontal
+ surfaces, like a language in which the simplest thought demands
+ ornate constructions, useless particles and lengthy
+ circumlocutions. Unlike the more successful patterns of language
+ and science, which enable us to face experience boldly or at least
+ level-headedly, our system of temporal calculation silently and
+ persistently encourages our terror of time.
+
+ ... It is as though architects had to measure length in feet, width
+ in meters and height in ells; as though basic instruction manuals
+ demanded a knowledge of five different languages. It is no wonder
+ then that we often look into our own immediate past or future, last
+ Tuesday or a week from Sunday, with feelings of helpless confusion.
+ ...
+
+ —Robert Grudin, ‘Time and the Art of Living’.
+
+ This section describes the textual date representations that GNU
+programs accept. These are the strings you, as a user, can supply as
+arguments to the various programs. The C interface (via the
+‘parse_datetime’ function) is not described here.
+
+* Menu:
+
+* General date syntax:: Common rules
+* Calendar date items:: ‘14 Nov 2022’
+* Time of day items:: ‘9:02pm’
+* Time zone items:: ‘UTC’, ‘-0700’, ‘+0900’, ...
+* Combined date and time of day items:: ‘2022-11-14T21:02:42,000000-0500’
+* Day of week items:: ‘Monday’ and others
+* Relative items in date strings:: ‘next tuesday, 2 years ago’
+* Pure numbers in date strings:: ‘20221114’, ‘2102’
+* Seconds since the Epoch:: ‘@1668477762’
+* Specifying time zone rules:: ‘TZ="America/New_York"’, ‘TZ="UTC0"’
+* Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+
+
+File: coreutils.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats
+
+29.1 General date syntax
+========================
+
+A “date” is a string, possibly empty, containing many items separated by
+whitespace. The whitespace may be omitted when no ambiguity arises.
+The empty string means the beginning of today (i.e., midnight). Order
+of the items is immaterial. A date string may contain many flavors of
+items:
+
+ • calendar date items
+ • time of day items
+ • time zone items
+ • combined date and time of day items
+ • day of the week items
+ • relative items
+ • pure numbers.
+
+We describe each of these item types in turn, below.
+
+ A few ordinal numbers may be written out in words in some contexts.
+This is most useful for specifying day of the week items or relative
+items (see below). Among the most commonly used ordinal numbers, the
+word ‘last’ stands for -1, ‘this’ stands for 0, and ‘first’ and ‘next’
+both stand for 1. Because the word ‘second’ stands for the unit of time
+there is no way to write the ordinal number 2, but for convenience
+‘third’ stands for 3, ‘fourth’ for 4, ‘fifth’ for 5, ‘sixth’ for 6,
+‘seventh’ for 7, ‘eighth’ for 8, ‘ninth’ for 9, ‘tenth’ for 10,
+‘eleventh’ for 11 and ‘twelfth’ for 12.
+
+ When a month is written this way, it is still considered to be
+written numerically, instead of being “spelled in full”; this changes
+the allowed strings.
+
+ In the current implementation, only English is supported for words
+and abbreviations like ‘AM’, ‘DST’, ‘EST’, ‘first’, ‘January’, ‘Sunday’,
+‘tomorrow’, and ‘year’.
+
+ The output of the ‘date’ command is not always acceptable as a date
+string, not only because of the language problem, but also because there
+is no standard meaning for time zone items like ‘IST’. When using
+‘date’ to generate a date string intended to be parsed later, specify a
+date format that is independent of language and that does not use time
+zone items other than ‘UTC’ and ‘Z’. Here are some ways to do this:
+
+ $ LC_ALL=C TZ=UTC0 date
+ Tue Nov 15 02:02:42 UTC 2022
+ $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
+ 2022-11-15 02:02:42Z
+ $ date --rfc-3339=ns # --rfc-3339 is a GNU extension.
+ 2022-11-14 21:02:42.000000000-05:00
+ $ date --rfc-email # a GNU extension
+ Mon, 14 Nov 2022 21:02:42 -0500
+ $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
+ 2022-11-14 21:02:42 -0500
+ $ date +'@%s.%N' # %s and %N are GNU extensions.
+ @1668477762.692722128
+
+ Alphabetic case is completely ignored in dates. Comments may be
+introduced between round parentheses, as long as included parentheses
+are properly nested. Hyphens not followed by a digit are currently
+ignored. Leading zeros on numbers are ignored.
+
+ Invalid dates like ‘2022-02-29’ or times like ‘24:00’ are rejected.
+In the typical case of a host that does not support leap seconds, a time
+like ‘23:59:60’ is rejected even if it corresponds to a valid leap
+second.
+
+
+File: coreutils.info, Node: Calendar date items, Next: Time of day items, Prev: General date syntax, Up: Date input formats
+
+29.2 Calendar date items
+========================
+
+A “calendar date item” specifies a day of the year. It is specified
+differently, depending on whether the month is specified numerically or
+literally. All these strings specify the same calendar date:
+
+ 2022-11-14 # ISO 8601.
+ 22-11-14 # Assume 19xx for 69 through 99,
+ # 20xx for 00 through 68 (not recommended).
+ 11/14/2022 # Common U.S. writing.
+ 14 November 2022
+ 14 Nov 2022 # Three-letter abbreviations always allowed.
+ November 14, 2022
+ 14-nov-2022
+ 14nov2022
+
+ The year can also be omitted. In this case, the last specified year
+is used, or the current year if none. For example:
+
+ 11/14
+ nov 14
+
+ Here are the rules.
+
+ For numeric months, the ISO 8601 format ‘YEAR-MONTH-DAY’ is allowed,
+where YEAR is any positive number, MONTH is a number between 01 and 12,
+and DAY is a number between 01 and 31. A leading zero must be present
+if a number is less than ten. If YEAR is 68 or smaller, then 2000 is
+added to it; otherwise, if YEAR is less than 100, then 1900 is added to
+it. The construct ‘MONTH/DAY/YEAR’, popular in the United States, is
+accepted. Also ‘MONTH/DAY’, omitting the year.
+
+ Literal months may be spelled out in full: ‘January’, ‘February’,
+‘March’, ‘April’, ‘May’, ‘June’, ‘July’, ‘August’, ‘September’,
+‘October’, ‘November’ or ‘December’. Literal months may be abbreviated
+to their first three letters, possibly followed by an abbreviating dot.
+It is also permitted to write ‘Sept’ instead of ‘September’.
+
+ When months are written literally, the calendar date may be given as
+any of the following:
+
+ DAY MONTH YEAR
+ DAY MONTH
+ MONTH DAY YEAR
+ DAY-MONTH-YEAR
+
+ Or, omitting the year:
+
+ MONTH DAY
+
+
+File: coreutils.info, Node: Time of day items, Next: Time zone items, Prev: Calendar date items, Up: Date input formats
+
+29.3 Time of day items
+======================
+
+A “time of day item” in date strings specifies the time on a given day.
+Here are some examples, all of which represent the same time:
+
+ 20:02:00.000000
+ 20:02
+ 8:02pm
+ 20:02-0500 # In EST (U.S. Eastern Standard Time).
+
+ More generally, the time of day may be given as ‘HOUR:MINUTE:SECOND’,
+where HOUR is a number between 0 and 23, MINUTE is a number between 0
+and 59, and SECOND is a number between 0 and 59 possibly followed by ‘.’
+or ‘,’ and a fraction containing one or more digits. Alternatively,
+‘:SECOND’ can be omitted, in which case it is taken to be zero. On the
+rare hosts that support leap seconds, SECOND may be 60.
+
+ If the time is followed by ‘am’ or ‘pm’ (or ‘a.m.’ or ‘p.m.’), HOUR
+is restricted to run from 1 to 12, and ‘:MINUTE’ may be omitted (taken
+to be zero). ‘am’ indicates the first half of the day, ‘pm’ indicates
+the second half of the day. In this notation, 12 is the predecessor of
+1: midnight is ‘12am’ while noon is ‘12pm’. (This is the zero-oriented
+interpretation of ‘12am’ and ‘12pm’, as opposed to the old tradition
+derived from Latin which uses ‘12m’ for noon and ‘12pm’ for midnight.)
+
+ The time may alternatively be followed by a time zone correction,
+expressed as ‘SHHMM’, where S is ‘+’ or ‘-’, HH is a number of zone
+hours and MM is a number of zone minutes. The zone minutes term, MM,
+may be omitted, in which case the one- or two-digit correction is
+interpreted as a number of hours. You can also separate HH from MM with
+a colon. When a time zone correction is given this way, it forces
+interpretation of the time relative to Coordinated Universal Time (UTC),
+overriding any previous specification for the time zone or the local
+time zone. For example, ‘+0530’ and ‘+05:30’ both stand for the time
+zone 5.5 hours ahead of UTC (e.g., India). This is the best way to
+specify a time zone correction by fractional parts of an hour. The
+maximum zone correction is 24 hours.
+
+ Either ‘am’/‘pm’ or a time zone correction may be specified, but not
+both.
+
+
+File: coreutils.info, Node: Time zone items, Next: Combined date and time of day items, Prev: Time of day items, Up: Date input formats
+
+29.4 Time zone items
+====================
+
+A “time zone item” specifies an international time zone, indicated by a
+small set of letters, e.g., ‘UTC’ or ‘Z’ for Coordinated Universal Time.
+Any included periods are ignored. By following a non-daylight-saving
+time zone by the string ‘DST’ in a separate word (that is, separated by
+some white space), the corresponding daylight saving time zone may be
+specified. Alternatively, a non-daylight-saving time zone can be
+followed by a time zone correction, to add the two values. This is
+normally done only for ‘UTC’; for example, ‘UTC+05:30’ is equivalent to
+‘+05:30’.
+
+ Time zone items other than ‘UTC’ and ‘Z’ are obsolescent and are not
+recommended, because they are ambiguous; for example, ‘EST’ has a
+different meaning in Australia than in the United States, and ‘A’ has
+different meaning as a military time zone than as an obsolete RFC 822
+time zone. Instead, it’s better to use unambiguous numeric time zone
+corrections like ‘-0500’, as described in the previous section.
+
+ If neither a time zone item nor a time zone correction is supplied,
+timestamps are interpreted using the rules of the default time zone
+(*note Specifying time zone rules::).
+
+
+File: coreutils.info, Node: Combined date and time of day items, Next: Day of week items, Prev: Time zone items, Up: Date input formats
+
+29.5 Combined date and time of day items
+========================================
+
+The ISO 8601 date and time of day extended format consists of an ISO
+8601 date, a ‘T’ character separator, and an ISO 8601 time of day. This
+format is also recognized if the ‘T’ is replaced by a space.
+
+ In this format, the time of day should use 24-hour notation.
+Fractional seconds are allowed, with either comma or period preceding
+the fraction. ISO 8601 fractional minutes and hours are not supported.
+Typically, hosts support nanosecond timestamp resolution; excess
+precision is silently discarded.
+
+ Here are some examples:
+
+ 2022-09-24T20:02:00.052-05:00
+ 2022-12-31T23:59:59,999999999+11:00
+ 1970-01-01 00:00Z
+
+
+File: coreutils.info, Node: Day of week items, Next: Relative items in date strings, Prev: Combined date and time of day items, Up: Date input formats
+
+29.6 Day of week items
+======================
+
+The explicit mention of a day of the week will forward the date (only if
+necessary) to reach that day of the week in the future.
+
+ Days of the week may be spelled out in full: ‘Sunday’, ‘Monday’,
+‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’ or ‘Saturday’. Days may be
+abbreviated to their first three letters, optionally followed by a
+period. The special abbreviations ‘Tues’ for ‘Tuesday’, ‘Wednes’ for
+‘Wednesday’ and ‘Thur’ or ‘Thurs’ for ‘Thursday’ are also allowed.
+
+ A number may precede a day of the week item to move forward
+supplementary weeks. It is best used in expression like ‘third monday’.
+In this context, ‘last DAY’ or ‘next DAY’ is also acceptable; they move
+one week before or after the day that DAY by itself would represent.
+
+ A comma following a day of the week item is ignored.
+
+
+File: coreutils.info, Node: Relative items in date strings, Next: Pure numbers in date strings, Prev: Day of week items, Up: Date input formats
+
+29.7 Relative items in date strings
+===================================
+
+“Relative items” adjust a date (or the current date if none) forward or
+backward. The effects of relative items accumulate. Here are some
+examples:
+
+ 1 year
+ 1 year ago
+ 3 years
+ 2 days
+
+ The unit of time displacement may be selected by the string ‘year’ or
+‘month’ for moving by whole years or months. These are fuzzy units, as
+years and months are not all of equal duration. More precise units are
+‘fortnight’ which is worth 14 days, ‘week’ worth 7 days, ‘day’ worth 24
+hours, ‘hour’ worth 60 minutes, ‘minute’ or ‘min’ worth 60 seconds, and
+‘second’ or ‘sec’ worth one second. An ‘s’ suffix on these units is
+accepted and ignored.
+
+ The unit of time may be preceded by a multiplier, given as an
+optionally signed number. Unsigned numbers are taken as positively
+signed. No number at all implies 1 for a multiplier. Following a
+relative item by the string ‘ago’ is equivalent to preceding the unit by
+a multiplier with value -1.
+
+ The string ‘tomorrow’ is worth one day in the future (equivalent to
+‘day’), the string ‘yesterday’ is worth one day in the past (equivalent
+to ‘day ago’).
+
+ The strings ‘now’ or ‘today’ are relative items corresponding to
+zero-valued time displacement, these strings come from the fact a
+zero-valued time displacement represents the current time when not
+otherwise changed by previous items. They may be used to stress other
+items, like in ‘12:00 today’. The string ‘this’ also has the meaning of
+a zero-valued time displacement, but is preferred in date strings like
+‘this thursday’.
+
+ When a relative item causes the resulting date to cross a boundary
+where the clocks were adjusted, typically for daylight saving time, the
+resulting date and time are adjusted accordingly.
+
+ The fuzz in units can cause problems with relative items. For
+example, ‘2022-12-31 -1 month’ might evaluate to 2022-12-01, because
+2022-11-31 is an invalid date. To determine the previous month more
+reliably, you can ask for the month before the 15th of the current
+month. For example:
+
+ $ date -R
+ Thu, 31 Dec 2022 13:02:39 -0400
+ $ date --date='-1 month' +'Last month was %B?'
+ Last month was December?
+ $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
+ Last month was November!
+
+ Also, take care when manipulating dates around clock changes such as
+daylight saving leaps. In a few cases these have added or subtracted as
+much as 24 hours from the clock, so it is often wise to adopt universal
+time by setting the ‘TZ’ environment variable to ‘UTC0’ before embarking
+on calendrical calculations.
+
+
+File: coreutils.info, Node: Pure numbers in date strings, Next: Seconds since the Epoch, Prev: Relative items in date strings, Up: Date input formats
+
+29.8 Pure numbers in date strings
+=================================
+
+The precise interpretation of a pure decimal number depends on the
+context in the date string.
+
+ If the decimal number is of the form YYYYMMDD and no other calendar
+date item (*note Calendar date items::) appears before it in the date
+string, then YYYY is read as the year, MM as the month number and DD as
+the day of the month, for the specified calendar date.
+
+ If the decimal number is of the form HHMM and no other time of day
+item appears before it in the date string, then HH is read as the hour
+of the day and MM as the minute of the hour, for the specified time of
+day. MM can also be omitted.
+
+ If both a calendar date and a time of day appear to the left of a
+number in the date string, but no relative item, then the number
+overrides the year.
+
+
+File: coreutils.info, Node: Seconds since the Epoch, Next: Specifying time zone rules, Prev: Pure numbers in date strings, Up: Date input formats
+
+29.9 Seconds since the Epoch
+============================
+
+If you precede a number with ‘@’, it represents an internal timestamp as
+a count of seconds. The number can contain an internal decimal point
+(either ‘.’ or ‘,’); any excess precision not supported by the internal
+representation is truncated toward minus infinity. Such a number cannot
+be combined with any other date item, as it specifies a complete
+timestamp.
+
+ Internally, computer times are represented as a count of seconds
+since an Epoch—a well-defined point of time. On GNU and POSIX systems,
+the Epoch is 1970-01-01 00:00:00 UTC, so ‘@0’ represents this time, ‘@1’
+represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other
+POSIX-compliant systems support such times as an extension to POSIX,
+using negative counts, so that ‘@-1’ represents 1969-12-31 23:59:59 UTC.
+
+ Most modern systems count seconds with 64-bit two’s-complement
+integers of seconds with nanosecond subcounts, which is a range that
+includes the known lifetime of the universe with nanosecond resolution.
+Some obsolescent systems count seconds with 32-bit two’s-complement
+integers and can represent times from 1901-12-13 20:45:52 through
+2038-01-19 03:14:07 UTC. A few systems sport other time ranges.
+
+ On most hosts, these counts ignore the presence of leap seconds. For
+example, on most hosts ‘@1483228799’ represents 2016-12-31 23:59:59 UTC,
+‘@1483228800’ represents 2017-01-01 00:00:00 UTC, and there is no way to
+represent the intervening leap second 2016-12-31 23:59:60 UTC.
+
+
+File: coreutils.info, Node: Specifying time zone rules, Next: Authors of parse_datetime, Prev: Seconds since the Epoch, Up: Date input formats
+
+29.10 Specifying time zone rules
+================================
+
+Normally, dates are interpreted using the rules of the current time
+zone, which in turn are specified by the ‘TZ’ environment variable, or
+by a system default if ‘TZ’ is not set. To specify a different set of
+default time zone rules that apply just to one date, start the date with
+a string of the form ‘TZ="RULE"’. The two quote characters (‘"’) must
+be present in the date, and any quotes or backslashes within RULE must
+be escaped by a backslash.
+
+ For example, with the GNU ‘date’ command you can answer the question
+“What time is it in New York when a Paris clock shows 6:30am on October
+31, 2022?” by using a date beginning with ‘TZ="Europe/Paris"’ as shown
+in the following shell transcript:
+
+ $ export TZ="America/New_York"
+ $ date --date='TZ="Europe/Paris" 2022-10-31 06:30'
+ Mon Oct 31 01:30:00 EDT 2022
+
+ In this example, the ‘--date’ operand begins with its own ‘TZ’
+setting, so the rest of that operand is processed according to
+‘Europe/Paris’ rules, treating the string ‘2022-11-14 06:30’ as if it
+were in Paris. However, since the output of the ‘date’ command is
+processed according to the overall time zone rules, it uses New York
+time. (Paris was normally six hours ahead of New York in 2022, but this
+example refers to a brief Halloween period when the gap was five hours.)
+
+ A ‘TZ’ value is a rule that typically names a location in the ‘tz’
+database (https://www.iana.org/time-zones). A recent catalog of
+location names appears in the TWiki Date and Time Gateway
+(https://twiki.org/cgi-bin/xtra/tzdatepick.html). A few non-GNU hosts
+require a colon before a location name in a ‘TZ’ setting, e.g.,
+‘TZ=":America/New_York"’.
+
+ The ‘tz’ database includes a wide variety of locations ranging from
+‘Africa/Abidjan’ to ‘Pacific/Tongatapu’, but if you are at sea and have
+your own private time zone, or if you are using a non-GNU host that does
+not support the ‘tz’ database, you may need to use a POSIX rule instead.
+The previously-mentioned POSIX rule ‘UTC0’ says that the time zone
+abbreviation is ‘UTC’, the zone is zero hours away from Greenwich, and
+there is no daylight saving time. POSIX rules can also specify nonzero
+Greenwich offsets. For example, the following shell transcript answers
+the question “What time is it five and a half hours east of Greenwich
+when a clock seven hours west of Greenwich shows 9:50pm on July 12,
+2022?”
+
+ $ TZ="<+0530>-5:30" date --date='TZ="<-07>+7" 2022-07-12 21:50'
+ Wed Jul 13 10:20:00 +0530 2022
+
+This example uses the somewhat-confusing POSIX convention for rules.
+‘TZ="<-07>+7"’ says that the time zone abbreviation is ‘-07’ and the
+time zone is 7 hours west of Greenwich, and ‘TZ="<+0530>-5:30"’ says
+that the time zone abbreviation is ‘+0530’ and the time zone is 5 hours
+30 minutes east of Greenwich. (One should never use a setting like
+‘TZ="UTC-5"’, since this would incorrectly imply that local time is five
+hours east of Greenwich and the time zone is called “UTC”.) Although
+trickier POSIX ‘TZ’ settings like ‘TZ="<-05>+5<-04>,M3.2.0/2,M11.1.0/2"’
+can specify some daylight saving regimes, location-based settings like
+‘TZ="America/New_York"’ are typically simpler and more accurate
+historically. *Note Specifying the Time Zone with ‘TZ’: (libc)TZ
+Variable.
+
+
+File: coreutils.info, Node: Authors of parse_datetime, Prev: Specifying time zone rules, Up: Date input formats
+
+29.11 Authors of ‘parse_datetime’
+=================================
+
+‘parse_datetime’ started life as ‘getdate’, as originally implemented by
+Steven M. Bellovin (<smb@research.att.com>) while at the University of
+North Carolina at Chapel Hill. The code was later tweaked by a couple
+of people on Usenet, then completely overhauled by Rich $alz
+(<rsalz@bbn.com>) and Jim Berets (<jberets@bbn.com>) in August, 1990.
+Various revisions for the GNU system were made by David MacKenzie, Jim
+Meyering, Paul Eggert and others, including renaming it to ‘get_date’ to
+avoid a conflict with the alternative Posix function ‘getdate’, and a
+later rename to ‘parse_datetime’. The Posix function ‘getdate’ can
+parse more locale-specific dates using ‘strptime’, but relies on an
+environment variable and external file, and lacks the thread-safety of
+‘parse_datetime’.
+
+ This chapter was originally produced by François Pinard
+(<pinard@iro.umontreal.ca>) from the ‘parse_datetime.y’ source code, and
+then edited by K. Berry (<kb@cs.umb.edu>).
+
+
+File: coreutils.info, Node: Version sort ordering, Next: Opening the software toolbox, Prev: Date input formats, Up: Top
+
+30 Version sort ordering
+************************
+
+* Menu:
+
+* Version sort overview::
+* Version sort implementation::
+* Differences from Debian version sort::
+* Advanced version sort topics::
+
+
+File: coreutils.info, Node: Version sort overview, Next: Version sort implementation, Up: Version sort ordering
+
+30.1 Version sort overview
+==========================
+
+“Version sort” puts items such as file names and lines of text in an
+order that feels natural to people, when the text contains a mixture of
+letters and digits.
+
+ Lexicographic sorting usually does not produce the order that one
+expects because comparisons are made on a character-by-character basis.
+
+ Compare the sorting of the following items:
+
+ Lexicographic sort: Version Sort:
+
+ a1 a1
+ a120 a2
+ a13 a13
+ a2 a120
+
+ Version sort functionality in GNU Coreutils is available in the ‘ls
+-v’, ‘ls --sort=version’, ‘sort -V’, and ‘sort --version-sort’ commands.
+
+* Menu:
+
+* Using version sort in GNU Coreutils::
+* Version sort and natural sort::
+* Variations in version sort order::
+
+
+File: coreutils.info, Node: Using version sort in GNU Coreutils, Next: Version sort and natural sort, Up: Version sort overview
+
+30.1.1 Using version sort in GNU Coreutils
+------------------------------------------
+
+Two GNU Coreutils programs use version sort: ‘ls’ and ‘sort’.
+
+ To list files in version sort order, use ‘ls’ with the ‘-v’ or
+‘--sort=version’ option:
+
+ default sort: version sort:
+
+ $ ls -1 $ ls -1 -v
+ a1 a1
+ a100 a1.4
+ a1.13 a1.13
+ a1.4 a1.40
+ a1.40 a2
+ a2 a100
+
+ To sort text files in version sort order, use ‘sort’ with the ‘-V’ or
+‘--version-sort’ option:
+
+ $ cat input
+ b3
+ b11
+ b1
+ b20
+
+
+ lexicographic order: version sort order:
+
+ $ sort input $ sort -V input
+ b1 b1
+ b11 b3
+ b20 b11
+ b3 b20
+
+ To sort a specific field in a file, use ‘-k/--key’ with ‘V’ type
+sorting, which is often combined with ‘b’ to ignore leading blanks in
+the field:
+
+ $ cat input2
+ 100 b3 apples
+ 2000 b11 oranges
+ 3000 b1 potatoes
+ 4000 b20 bananas
+ $ sort -k 2bV,2 input2
+ 3000 b1 potatoes
+ 100 b3 apples
+ 2000 b11 oranges
+ 4000 b20 bananas
+
+
+File: coreutils.info, Node: Version sort and natural sort, Next: Variations in version sort order, Prev: Using version sort in GNU Coreutils, Up: Version sort overview
+
+30.1.2 Version sort and natural sort
+------------------------------------
+
+In GNU Coreutils, the name “version sort” was chosen because it is based
+on Debian GNU/Linux’s algorithm of sorting packages’ versions.
+
+ Its goal is to answer questions like “Which package is newer,
+‘firefox-60.7.2’ or ‘firefox-60.12.3’?”
+
+ In Coreutils this algorithm was slightly modified to work on more
+general input such as textual strings and file names (see *note
+Differences from Debian version sort::).
+
+ In other contexts, such as other programs and other programming
+languages, a similar sorting functionality is called natural sort
+(https://en.wikipedia.org/wiki/Natural_sort_order).
+
+
+File: coreutils.info, Node: Variations in version sort order, Prev: Version sort and natural sort, Up: Version sort overview
+
+30.1.3 Variations in version sort order
+---------------------------------------
+
+Currently there is no standard for version sort.
+
+ That is: there is no one correct way or universally agreed-upon way
+to order items. Each program and each programming language can decide
+its own ordering algorithm and call it “version sort”, “natural sort”,
+or other names.
+
+ See *note Other version/natural sort implementations:: for many
+examples of differing sorting possibilities, each with its own rules and
+variations.
+
+ If you find a bug in the Coreutils implementation of version-sort,
+please report it. *Note Reporting version sort bugs::.
+
+
+File: coreutils.info, Node: Version sort implementation, Next: Differences from Debian version sort, Prev: Version sort overview, Up: Version sort ordering
+
+30.2 Version sort implementation
+================================
+
+GNU Coreutils version sort is based on the “upstream version” part of
+Debian’s versioning scheme
+(https://www.debian.org/doc/debian-policy/ch-controlfields.html#version).
+
+ This section describes the GNU Coreutils sort ordering rules.
+
+ The next section (*note Differences from Debian version sort::)
+describes some differences between GNU Coreutils and Debian version
+sort.
+
+* Menu:
+
+* Version-sort ordering rules::
+* Version sort is not the same as numeric sort::
+* Version sort punctuation::
+* Punctuation vs letters::
+* The tilde ~::
+* Version sort ignores locale::
+
+
+File: coreutils.info, Node: Version-sort ordering rules, Next: Version sort is not the same as numeric sort, Up: Version sort implementation
+
+30.2.1 Version-sort ordering rules
+----------------------------------
+
+The version sort ordering rules are:
+
+ 1. The strings are compared from left to right.
+
+ 2. First the initial part of each string consisting entirely of
+ non-digit bytes is determined.
+
+ A. These two parts (either of which may be empty) are compared
+ lexically. If a difference is found it is returned.
+
+ B. The lexical comparison is a lexicographic comparison of byte
+ strings, except that:
+
+ a. ASCII letters sort before other bytes.
+ b. A tilde sorts before anything, even an empty string.
+
+ 3. Then the initial part of the remainder of each string that contains
+ all the leading digits is determined. The numerical values
+ represented by these two parts are compared, and any difference
+ found is returned as the result of the comparison.
+
+ A. For these purposes an empty string (which can only occur at
+ the end of one or both version strings being compared) counts
+ as zero.
+
+ B. Because the numerical value is used, non-identical strings can
+ compare equal. For example, ‘123’ compares equal to ‘00123’,
+ and the empty string compares equal to ‘0’.
+
+ 4. These two steps (comparing and removing initial non-digit strings
+ and initial digit strings) are repeated until a difference is found
+ or both strings are exhausted.
+
+ Consider the version-sort comparison of two file names: ‘foo07.7z’
+and ‘foo7a.7z’. The two strings will be broken down to the following
+parts, and the parts compared respectively from each string:
+
+ foo vs foo (rule 2, non-digits)
+ 07 vs 7 (rule 3, digits)
+ . vs a. (rule 2)
+ 7 vs 7 (rule 3)
+ z vs z (rule 2)
+
+ Comparison flow based on above algorithm:
+
+ 1. The first parts (‘foo’) are identical.
+
+ 2. The second parts (‘07’ and ‘7’) are compared numerically, and
+ compare equal.
+
+ 3. The third parts (‘.’ vs ‘a.’) are compared lexically by ASCII value
+ (rule 2.B).
+
+ 4. The first byte of the first string (‘.’) is compared to the first
+ byte of the second string (‘a’).
+
+ 5. Rule 2.B.a says letters sorts before non-letters. Hence, ‘a’ comes
+ before ‘.’.
+
+ 6. The returned result is that ‘foo7a.7z’ comes before ‘foo07.7z’.
+
+ Result when using sort:
+
+ $ cat input3
+ foo07.7z
+ foo7a.7z
+ $ sort -V input3
+ foo7a.7z
+ foo07.7z
+
+ See *note Differences from Debian version sort:: for additional rules
+that extend the Debian algorithm in Coreutils.
+
+
+File: coreutils.info, Node: Version sort is not the same as numeric sort, Next: Version sort punctuation, Prev: Version-sort ordering rules, Up: Version sort implementation
+
+30.2.2 Version sort is not the same as numeric sort
+---------------------------------------------------
+
+Consider the following text file:
+
+ $ cat input4
+ 8.10
+ 8.5
+ 8.1
+ 8.01
+ 8.010
+ 8.100
+ 8.49
+
+ Numerical Sort: Version Sort:
+
+ $ sort -n input4 $ sort -V input4
+ 8.01 8.01
+ 8.010 8.1
+ 8.1 8.5
+ 8.10 8.010
+ 8.100 8.10
+ 8.49 8.49
+ 8.5 8.100
+
+ Numeric sort (‘sort -n’) treats the entire string as a single numeric
+value, and compares it to other values. For example, ‘8.1’, ‘8.10’ and
+‘8.100’ are numerically equivalent, and are ordered together.
+Similarly, ‘8.49’ is numerically less than ‘8.5’, and appears before
+first.
+
+ Version sort (‘sort -V’) first breaks down the string into digit and
+non-digit parts, and only then compares each part (see annotated example
+in *note Version-sort ordering rules::).
+
+ Comparing the string ‘8.1’ to ‘8.01’, first the ‘8’s are compared
+(and are identical), then the dots (‘.’) are compared and are identical,
+and lastly the remaining digits are compared numerically (‘1’ and ‘01’)
+– which are numerically equal. Hence, ‘8.01’ and ‘8.1’ are grouped
+together.
+
+ Similarly, comparing ‘8.5’ to ‘8.49’ – the ‘8’ and ‘.’ parts are
+identical, then the numeric values ‘5’ and ‘49’ are compared. The
+resulting ‘5’ appears before ‘49’.
+
+ This sorting order (where ‘8.5’ comes before ‘8.49’) is common when
+assigning versions to computer programs (while perhaps not intuitive or
+“natural” for people).
+
+
+File: coreutils.info, Node: Version sort punctuation, Next: Punctuation vs letters, Prev: Version sort is not the same as numeric sort, Up: Version sort implementation
+
+30.2.3 Version sort punctuation
+-------------------------------
+
+Punctuation is sorted by ASCII order (rule 2.B).
+
+ $ touch 1.0.5_src.tar.gz 1.0_src.tar.gz
+ $ ls -v -1
+ 1.0.5_src.tar.gz
+ 1.0_src.tar.gz
+
+ Why is ‘1.0.5_src.tar.gz’ listed before ‘1.0_src.tar.gz’?
+
+ Based on the version-sort ordering rules, the strings are broken down
+into the following parts:
+
+ 1 vs 1 (rule 3, all digits)
+ . vs . (rule 2, all non-digits)
+ 0 vs 0 (rule 3)
+ . vs _src.tar.gz (rule 2)
+ 5 vs empty string (no more bytes in the file name)
+ _src.tar.gz vs empty string
+
+ The fourth parts (‘.’ and ‘_src.tar.gz’) are compared lexically by
+ASCII order. The ‘.’ (ASCII value 46) is less than ‘_’ (ASCII value 95)
+– and should be listed before it.
+
+ Hence, ‘1.0.5_src.tar.gz’ is listed first.
+
+ If a different byte appears instead of the underscore (for example,
+percent sign ‘%’ ASCII value 37, which is less than dot’s ASCII value of
+46), that file will be listed first:
+
+ $ touch 1.0.5_src.tar.gz 1.0%zzzzz.gz
+ 1.0%zzzzz.gz
+ 1.0.5_src.tar.gz
+
+ The same reasoning applies to the following example, as ‘.’ with
+ASCII value 46 is less than ‘/’ with ASCII value 47:
+
+ $ cat input5
+ 3.0/
+ 3.0.5
+ $ sort -V input5
+ 3.0.5
+ 3.0/
+
+
+File: coreutils.info, Node: Punctuation vs letters, Next: The tilde ~, Prev: Version sort punctuation, Up: Version sort implementation
+
+30.2.4 Punctuation vs letters
+-----------------------------
+
+Rule 2.B.a says letters sort before non-letters (after breaking down a
+string to digit and non-digit parts).
+
+ $ cat input6
+ a%
+ az
+ $ sort -V input6
+ az
+ a%
+
+ The input strings consist entirely of non-digits, and based on the
+above algorithm have only one part, all non-digits (‘a%’ vs ‘az’).
+
+ Each part is then compared lexically, byte-by-byte; ‘a’ compares
+identically in both strings.
+
+ Rule 2.B.a says a letter like ‘z’ sorts before a non-letter like ‘%’
+– hence ‘az’ appears first (despite ‘z’ having ASCII value of 122, much
+larger than ‘%’ with ASCII value 37).
+
+
+File: coreutils.info, Node: The tilde ~, Next: Version sort ignores locale, Prev: Punctuation vs letters, Up: Version sort implementation
+
+30.2.5 The tilde ‘~’
+--------------------
+
+Rule 2.B.b says the tilde ‘~’ (ASCII 126) sorts before other bytes, and
+before an empty string.
+
+ $ cat input7
+ 1
+ 1%
+ 1.2
+ 1~
+ ~
+ $ sort -V input7
+ ~
+ 1~
+ 1
+ 1%
+ 1.2
+
+ The sorting algorithm starts by breaking down the string into
+non-digit (rule 2) and digit parts (rule 3).
+
+ In the above input file, only the last line in the input file starts
+with a non-digit (‘~’). This is the first part. All other lines in the
+input file start with a digit – their first non-digit part is empty.
+
+ Based on rule 2.B.b, tilde ‘~’ sorts before other bytes and before
+the empty string – hence it comes before all other strings, and is
+listed first in the sorted output.
+
+ The remaining lines (‘1’, ‘1%’, ‘1.2’, ‘1~’) follow similar logic:
+The digit part is extracted (1 for all strings) and compares equal. The
+following extracted parts for the remaining input lines are: empty part,
+‘%’, ‘.’, ‘~’.
+
+ Tilde sorts before all others, hence the line ‘1~’ appears next.
+
+ The remaining lines (‘1’, ‘1%’, ‘1.2’) are sorted based on previously
+explained rules.
+
+
+File: coreutils.info, Node: Version sort ignores locale, Prev: The tilde ~, Up: Version sort implementation
+
+30.2.6 Version sort ignores locale
+----------------------------------
+
+In version sort, Unicode characters are compared byte-by-byte according
+to their binary representation, ignoring their Unicode value or the
+current locale.
+
+ Most commonly, Unicode characters are encoded as UTF-8 bytes; for
+example, GREEK SMALL LETTER ALPHA (U+03B1, ‘α’) is encoded as the UTF-8
+sequence ‘0xCE 0xB1’). The encoding is compared byte-by-byte, e.g.,
+first ‘0xCE’ (decimal value 206) then ‘0xB1’ (decimal value 177).
+
+ $ touch aa az "a%" "aα"
+ $ ls -1 -v
+ aa
+ az
+ a%
+ aα
+
+ Ignoring the first letter (‘a’) which is identical in all strings,
+the compared values are:
+
+ ‘a’ and ‘z’ are letters, and sort before all other non-digits.
+
+ Then, percent sign ‘%’ (ASCII value 37) is compared to the first byte
+of the UTF-8 sequence of ‘α’, which is 0xCE or 206). The value 37 is
+smaller, hence ‘a%’ is listed before ‘aα’.
+
+
+File: coreutils.info, Node: Differences from Debian version sort, Next: Advanced version sort topics, Prev: Version sort implementation, Up: Version sort ordering
+
+30.3 Differences from Debian version sort
+=========================================
+
+GNU Coreutils version sort differs slightly from the official Debian
+algorithm, in order to accommodate more general usage and file name
+listing.
+
+* Menu:
+
+* Hyphen-minus and colon::
+* Special priority in GNU Coreutils version sort::
+* Special handling of file extensions::
+* Comparing two strings using Debian's algorithm::
+
+
+File: coreutils.info, Node: Hyphen-minus and colon, Next: Special priority in GNU Coreutils version sort, Up: Differences from Debian version sort
+
+30.3.1 Hyphen-minus ‘-’ and colon ‘:’
+-------------------------------------
+
+In Debian’s version string syntax the version consists of three parts:
+ [epoch:]upstream_version[-debian_revision]
+ The ‘epoch’ and ‘debian_revision’ parts are optional.
+
+ Example of such version strings:
+
+ 60.7.2esr-1~deb9u1
+ 52.9.0esr-1~deb9u1
+ 1:2.3.4-1+b2
+ 327-2
+ 1:1.0.13-3
+ 2:1.19.2-1+deb9u5
+
+ If the ‘debian_revision part’ is not present, hyphens ‘-’ are not
+allowed. If epoch is not present, colons ‘:’ are not allowed.
+
+ If these parts are present, hyphen and/or colons can appear only once
+in valid Debian version strings.
+
+ In GNU Coreutils, such restrictions are not reasonable (a file name
+can have many hyphens, a line of text can have many colons).
+
+ As a result, in GNU Coreutils hyphens and colons are treated exactly
+like all other punctuation, i.e., they are sorted after letters. *Note
+Version sort punctuation::.
+
+ In Debian, these characters are treated differently than in
+Coreutils: a version string with hyphen will sort before similar strings
+without hyphens.
+
+ Compare:
+
+ $ touch 1ab-cd 1abb
+ $ ls -v -1
+ 1abb
+ 1ab-cd
+ $ if dpkg --compare-versions 1abb lt 1ab-cd
+ > then echo sorted
+ > else echo out of order
+ > fi
+ out of order
+
+ For further details, see *note Comparing two strings using Debian's
+algorithm:: and GNU Bug 35939 (https://bugs.gnu.org/35939).
+
+
+File: coreutils.info, Node: Special priority in GNU Coreutils version sort, Next: Special handling of file extensions, Prev: Hyphen-minus and colon, Up: Differences from Debian version sort
+
+30.3.2 Special priority in GNU Coreutils version sort
+-----------------------------------------------------
+
+In GNU Coreutils version sort, the following items have special priority
+and sort before all other strings (listed in order):
+
+ 1. The empty string
+
+ 2. The string ‘.’ (a single dot, ASCII 46)
+
+ 3. The string ‘..’ (two dots)
+
+ 4. Strings starting with dot (‘.’) sort before strings starting with
+ any other byte.
+
+ Example:
+
+ $ printf '%s\n' a "" b "." c ".." ".d20" ".d3" | sort -V
+ .
+ ..
+ .d3
+ .d20
+ a
+ b
+ c
+
+ These priorities make perfect sense for ‘ls -v’: The special files
+dot ‘.’ and dot-dot ‘..’ will be listed first, followed by any hidden
+files (files starting with a dot), followed by non-hidden files.
+
+ For ‘sort -V’ these priorities might seem arbitrary. However,
+because the sorting code is shared between the ‘ls’ and ‘sort’ program,
+the ordering rules are the same.
+
+
+File: coreutils.info, Node: Special handling of file extensions, Next: Comparing two strings using Debian's algorithm, Prev: Special priority in GNU Coreutils version sort, Up: Differences from Debian version sort
+
+30.3.3 Special handling of file extensions
+------------------------------------------
+
+GNU Coreutils version sort implements specialized handling of strings
+that look like file names with extensions. This enables slightly more
+natural ordering of file names.
+
+ The following additional rules apply when comparing two strings where
+both begin with non-‘.’. They also apply when comparing two strings
+where both begin with ‘.’ but neither is ‘.’ or ‘..’.
+
+ 1. A suffix (i.e., a file extension) is defined as: a dot, followed by
+ an ASCII letter or tilde, followed by zero or more ASCII letters,
+ digits, or tildes; all repeated zero or more times, and ending at
+ string end. This is equivalent to matching the extended regular
+ expression ‘(\.[A-Za-z~][A-Za-z0-9~]*)*$’ in the C locale. The
+ longest such match is used, except that a suffix is not allowed to
+ match an entire nonempty string.
+
+ 2. The suffixes are temporarily removed, and the strings are compared
+ without them, using version sort (see *note Version-sort ordering
+ rules::) without special priority (see *note Special priority in
+ GNU Coreutils version sort::).
+
+ 3. If the suffix-less strings do not compare equal, this comparison
+ result is used and the suffixes are effectively ignored.
+
+ 4. If the suffix-less strings compare equal, the suffixes are restored
+ and the entire strings are compared using version sort.
+
+ Examples for rule 1:
+
+ • ‘hello-8.txt’: the suffix is ‘.txt’
+
+ • ‘hello-8.2.txt’: the suffix is ‘.txt’ (‘.2’ is not included because
+ the dot is not followed by a letter)
+
+ • ‘hello-8.0.12.tar.gz’: the suffix is ‘.tar.gz’ (‘.0.12’ is not
+ included)
+
+ • ‘hello-8.2’: no suffix (suffix is an empty string)
+
+ • ‘hello.foobar65’: the suffix is ‘.foobar65’
+
+ • ‘gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2’: the suffix is ‘.fc9.tar.bz2’
+ (‘.7rc2’ is not included as it begins with a digit)
+
+ • ‘.autom4te.cfg’: the suffix is the entire string.
+
+ Examples for rule 2:
+
+ • Comparing ‘hello-8.txt’ to ‘hello-8.2.12.txt’, the ‘.txt’ suffix is
+ temporarily removed from both strings.
+
+ • Comparing ‘foo-10.3.tar.gz’ to ‘foo-10.tar.xz’, the suffixes
+ ‘.tar.gz’ and ‘.tar.xz’ are temporarily removed from the strings.
+
+ Example for rule 3:
+
+ • Comparing ‘hello.foobar65’ to ‘hello.foobar4’, the suffixes
+ (‘.foobar65’ and ‘.foobar4’) are temporarily removed. The
+ remaining strings are identical (‘hello’). The suffixes are then
+ restored, and the entire strings are compared (‘hello.foobar4’
+ comes first).
+
+ Examples for rule 4:
+
+ • When comparing the strings ‘hello-8.2.txt’ and ‘hello-8.10.txt’,
+ the suffixes (‘.txt’) are temporarily removed. The remaining
+ strings (‘hello-8.2’ and ‘hello-8.10’) are compared as previously
+ described (‘hello-8.2’ comes first). (In this case the suffix
+ removal algorithm does not have a noticeable effect on the
+ resulting order.)
+
+ How does the suffix-removal algorithm effect ordering results?
+
+ Consider the comparison of hello-8.txt and hello-8.2.txt.
+
+ Without the suffix-removal algorithm, the strings will be broken down
+to the following parts:
+
+ hello- vs hello- (rule 2, all non-digits)
+ 8 vs 8 (rule 3, all digits)
+ .txt vs . (rule 2)
+ empty vs 2
+ empty vs .txt
+
+ The comparison of the third parts (‘.’ vs ‘.txt’) will determine that
+the shorter string comes first – resulting in ‘hello-8.2.txt’ appearing
+first.
+
+ Indeed this is the order in which Debian’s ‘dpkg’ compares the
+strings.
+
+ A more natural result is that ‘hello-8.txt’ should come before
+‘hello-8.2.txt’, and this is where the suffix-removal comes into play:
+
+ The suffixes (‘.txt’) are removed, and the remaining strings are
+broken down into the following parts:
+
+ hello- vs hello- (rule 2, all non-digits)
+ 8 vs 8 (rule 3, all digits)
+ empty vs . (rule 2)
+ empty vs 2
+
+ As empty strings sort before non-empty strings, the result is
+‘hello-8’ being first.
+
+ A real-world example would be listing files such as:
+‘gcc_10.fc9.tar.gz’ and ‘gcc_10.8.12.7rc2.fc9.tar.bz2’: Debian’s
+algorithm would list ‘gcc_10.8.12.7rc2.fc9.tar.bz2’ first, while ‘ls -v’
+will list ‘gcc_10.fc9.tar.gz’ first.
+
+ These priorities make sense for ‘ls -v’: Versioned files will be
+listed in a more natural order.
+
+ For ‘sort -V’ these priorities might seem arbitrary. However,
+because the sorting code is shared between the ‘ls’ and ‘sort’ program,
+the ordering rules are the same.
+
+
+File: coreutils.info, Node: Comparing two strings using Debian's algorithm, Prev: Special handling of file extensions, Up: Differences from Debian version sort
+
+30.3.4 Comparing two strings using Debian’s algorithm
+-----------------------------------------------------
+
+The Debian program ‘dpkg’ (available on all Debian and Ubuntu
+installations) can compare two strings using the ‘--compare-versions’
+option.
+
+ To use it, create a helper shell function (simply copy & paste the
+following snippet to your shell command-prompt):
+
+ compver() {
+ if dpkg --compare-versions "$1" lt "$2"
+ then printf '%s\n' "$1" "$2"
+ else printf '%s\n' "$2" "$1"
+ fi
+ }
+
+ Then compare two strings by calling ‘compver’:
+
+ $ compver 8.49 8.5
+ 8.5
+ 8.49
+
+ Note that ‘dpkg’ will warn if the strings have invalid syntax:
+
+ $ compver "foo07.7z" "foo7a.7z"
+ dpkg: warning: version 'foo07.7z' has bad syntax:
+ version number does not start with digit
+ dpkg: warning: version 'foo7a.7z' has bad syntax:
+ version number does not start with digit
+ foo7a.7z
+ foo07.7z
+ $ compver "3.0/" "3.0.5"
+ dpkg: warning: version '3.0/' has bad syntax:
+ invalid character in version number
+ 3.0.5
+ 3.0/
+
+ To illustrate the different handling of hyphens between Debian and
+Coreutils algorithms (see *note Hyphen-minus and colon::):
+
+ $ compver abb ab-cd 2>/dev/null $ printf 'abb\nab-cd\n' | sort -V
+ ab-cd abb
+ abb ab-cd
+
+ To illustrate the different handling of file extension: (see *note
+Special handling of file extensions::):
+
+ $ compver hello-8.txt hello-8.2.txt 2>/dev/null
+ hello-8.2.txt
+ hello-8.txt
+ $ printf '%s\n' hello-8.txt hello-8.2.txt | sort -V
+ hello-8.txt
+ hello-8.2.txt
+
+
+File: coreutils.info, Node: Advanced version sort topics, Prev: Differences from Debian version sort, Up: Version sort ordering
+
+30.4 Advanced Topics
+====================
+
+* Menu:
+
+* Reporting version sort bugs::
+* Other version/natural sort implementations::
+* Related source code::
+
+
+File: coreutils.info, Node: Reporting version sort bugs, Next: Other version/natural sort implementations, Up: Advanced version sort topics
+
+30.4.1 Reporting version sort bugs
+----------------------------------
+
+If you suspect a bug in GNU Coreutils version sort (i.e., in the output
+of ‘ls -v’ or ‘sort -V’), please first check the following:
+
+ 1. Is the result consistent with Debian’s own ordering (using ‘dpkg’,
+ see *note Comparing two strings using Debian's algorithm::)? If it
+ is, then this is not a bug – please do not report it.
+
+ 2. If the result differs from Debian’s, is it explained by one of the
+ sections in *note Differences from Debian version sort::? If it
+ is, then this is not a bug – please do not report it.
+
+ 3. If you have a question about specific ordering which is not
+ explained here, please write to <coreutils@gnu.org>, and provide a
+ concise example that will help us diagnose the issue.
+
+ 4. If you still suspect a bug which is not explained by the above,
+ please write to <bug-coreutils@gnu.org> with a concrete example of
+ the suspected incorrect output, with details on why you think it is
+ incorrect.
+
+
+File: coreutils.info, Node: Other version/natural sort implementations, Next: Related source code, Prev: Reporting version sort bugs, Up: Advanced version sort topics
+
+30.4.2 Other version/natural sort implementations
+-------------------------------------------------
+
+As previously mentioned, there are multiple variations on
+version/natural sort, each with its own rules. Some examples are:
+
+ • Natural Sorting variants in Rosetta Code
+ (https://rosettacode.org/wiki/Natural_sorting).
+
+ • Python’s natsort package (https://pypi.org/project/natsort/)
+ (includes detailed description of their sorting rules: natsort –
+ how it works
+ (https://natsort.readthedocs.io/en/master/howitworks.html)).
+
+ • Ruby’s version_sorter (https://github.com/github/version_sorter).
+
+ • Perl has multiple packages for natural and version sorts (each
+ likely with its own rules and nuances): Sort::Naturally
+ (https://metacpan.org/pod/Sort::Naturally), Sort::Versions
+ (https://metacpan.org/pod/Sort::Versions), CPAN::Version
+ (https://metacpan.org/pod/CPAN::Version).
+
+ • PHP has a built-in function natsort
+ (https://www.php.net/manual/en/function.natsort.php).
+
+ • NodeJS’s natural-sort package
+ (https://www.npmjs.com/package/natural-sort).
+
+ • In zsh, the glob modifier
+ (http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Qualifiers)
+ ‘*(n)’ will expand to files in natural sort order.
+
+ • When writing C programs, the GNU libc library (‘glibc’) provides
+ the strverscmp(3)
+ (https://man7.org/linux/man-pages/man3/strverscmp.3.html) function
+ to compare two strings, and versionsort(3)
+ (https://man7.org/linux/man-pages/man3/versionsort.3.html) function
+ to compare two directory entries (despite the names, they are not
+ identical to GNU Coreutils version sort ordering).
+
+ • Using Debian’s sorting algorithm in:
+
+ • python: Stack Overflow Example #4957741
+ (https://stackoverflow.com/a/4957741).
+
+ • NodeJS: deb-version-compare
+ (https://www.npmjs.com/package/deb-version-compare).
+
+
+File: coreutils.info, Node: Related source code, Prev: Other version/natural sort implementations, Up: Advanced version sort topics
+
+30.4.3 Related source code
+--------------------------
+
+ • Debian’s code which splits a version string into
+ ‘epoch/upstream_version/debian_revision’ parts:
+ parsehelp.c:parseversion()
+ (https://git.dpkg.org/cgit/dpkg/dpkg.git/tree/lib/dpkg/parsehelp.c#n191).
+
+ • Debian’s code which performs the ‘upstream_version’ comparison:
+ version.c
+ (https://git.dpkg.org/cgit/dpkg/dpkg.git/tree/lib/dpkg/version.c#n140).
+
+ • Gnulib code (used by GNU Coreutils) which performs the version
+ comparison: filevercmp.c
+ (https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/filevercmp.c).
+
+
+File: coreutils.info, Node: Opening the software toolbox, Next: GNU Free Documentation License, Prev: Version sort ordering, Up: Top
+
+31 Opening the Software Toolbox
+*******************************
+
+An earlier version of this chapter appeared in the ‘What’s GNU?’ column
+of the June 1994 ‘Linux Journal’
+(https://www.linuxjournal.com/article.php?sid=2762). It was written by
+Arnold Robbins.
+
+* Menu:
+
+* Toolbox introduction:: Toolbox introduction
+* I/O redirection:: I/O redirection
+* The who command:: The ‘who’ command
+* The cut command:: The ‘cut’ command
+* The sort command:: The ‘sort’ command
+* The uniq command:: The ‘uniq’ command
+* Putting the tools together:: Putting the tools together
+
+
+File: coreutils.info, Node: Toolbox introduction, Next: I/O redirection, Up: Opening the software toolbox
+
+Toolbox Introduction
+====================
+
+This month’s column is only peripherally related to the GNU Project, in
+that it describes a number of the GNU tools on your GNU/Linux system and
+how they might be used. What it’s really about is the “Software Tools”
+philosophy of program development and usage.
+
+ The software tools philosophy was an important and integral concept
+in the initial design and development of Unix (of which GNU/Linux and
+GNU are essentially clones). Unfortunately, in the modern day press of
+Internetworking and flashy GUIs, it seems to have fallen by the wayside.
+This is a shame, since it provides a powerful mental model for solving
+many kinds of problems.
+
+ Many people carry a Swiss Army knife around in their pants pockets
+(or purse). A Swiss Army knife is a handy tool to have: it has several
+knife blades, a screwdriver, tweezers, toothpick, nail file, corkscrew,
+and perhaps a number of other things on it. For the everyday, small
+miscellaneous jobs where you need a simple, general purpose tool, it’s
+just the thing.
+
+ On the other hand, an experienced carpenter doesn’t build a house
+using a Swiss Army knife. Instead, he has a toolbox chock full of
+specialized tools – a saw, a hammer, a screwdriver, a plane, and so on.
+And he knows exactly when and where to use each tool; you won’t catch
+him hammering nails with the handle of his screwdriver.
+
+ The Unix developers at Bell Labs were all professional programmers
+and trained computer scientists. They had found that while a
+one-size-fits-all program might appeal to a user because there’s only
+one program to use, in practice such programs are
+
+ a. difficult to write,
+
+ b. difficult to maintain and debug, and
+
+ c. difficult to extend to meet new situations.
+
+ Instead, they felt that programs should be specialized tools. In
+short, each program “should do one thing well.” No more and no less.
+Such programs are simpler to design, write, and get right – they only do
+one thing.
+
+ Furthermore, they found that with the right machinery for hooking
+programs together, that the whole was greater than the sum of the parts.
+By combining several special purpose programs, you could accomplish a
+specific task that none of the programs was designed for, and accomplish
+it much more quickly and easily than if you had to write a special
+purpose program. We will see some (classic) examples of this further on
+in the column. (An important additional point was that, if necessary,
+take a detour and build any software tools you may need first, if you
+don’t already have something appropriate in the toolbox.)
+
+
+File: coreutils.info, Node: I/O redirection, Next: The who command, Prev: Toolbox introduction, Up: Opening the software toolbox
+
+I/O Redirection
+===============
+
+Hopefully, you are familiar with the basics of I/O redirection in the
+shell, in particular the concepts of “standard input,” “standard
+output,” and “standard error”. Briefly, “standard input” is a data
+source, where data comes from. A program should not need to either know
+or care if the data source is a regular file, a keyboard, a magnetic
+tape, or even a punched card reader. Similarly, “standard output” is a
+data sink, where data goes to. The program should neither know nor care
+where this might be. Programs that only read their standard input, do
+something to the data, and then send it on, are called “filters”, by
+analogy to filters in a water pipeline.
+
+ With the Unix shell, it’s very easy to set up data pipelines:
+
+ program_to_create_data | filter1 | ... | filterN > final.pretty.data
+
+ We start out by creating the raw data; each filter applies some
+successive transformation to the data, until by the time it comes out of
+the pipeline, it is in the desired form.
+
+ This is fine and good for standard input and standard output. Where
+does the standard error come in to play? Well, think about ‘filter1’ in
+the pipeline above. What happens if it encounters an error in the data
+it sees? If it writes an error message to standard output, it will just
+disappear down the pipeline into ‘filter2’’s input, and the user will
+probably never see it. So programs need a place where they can send
+error messages so that the user will notice them. This is standard
+error, and it is usually connected to your console or window, even if
+you have redirected standard output of your program away from your
+screen.
+
+ For filter programs to work together, the format of the data has to
+be agreed upon. The most straightforward and easiest format to use is
+simply lines of text. Unix data files are generally just streams of
+bytes, with lines delimited by the ASCII LF (Line Feed) character,
+conventionally called a “newline” in the Unix literature. (This is
+‘'\n'’ if you’re a C programmer.) This is the format used by all the
+traditional filtering programs. (Many earlier operating systems had
+elaborate facilities and special purpose programs for managing binary
+data. Unix has always shied away from such things, under the philosophy
+that it’s easiest to simply be able to view and edit your data with a
+text editor.)
+
+ OK, enough introduction. Let’s take a look at some of the tools, and
+then we’ll see how to hook them together in interesting ways. In the
+following discussion, we will only present those command line options
+that interest us. As you should always do, double check your system
+documentation for the full story.
+
+
+File: coreutils.info, Node: The who command, Next: The cut command, Prev: I/O redirection, Up: Opening the software toolbox
+
+The ‘who’ Command
+=================
+
+The first program is the ‘who’ command. By itself, it generates a list
+of the users who are currently logged in. Although I’m writing this on
+a single-user system, we’ll pretend that several people are logged in:
+
+ $ who
+ ⊣ arnold console Jan 22 19:57
+ ⊣ miriam ttyp0 Jan 23 14:19(:0.0)
+ ⊣ bill ttyp1 Jan 21 09:32(:0.0)
+ ⊣ arnold ttyp2 Jan 23 20:48(:0.0)
+
+ Here, the ‘$’ is the usual shell prompt, at which I typed ‘who’.
+There are three people logged in, and I am logged in twice. On
+traditional Unix systems, user names are never more than eight
+characters long. This little bit of trivia will be useful later. The
+output of ‘who’ is nice, but the data is not all that exciting.
+
+
+File: coreutils.info, Node: The cut command, Next: The sort command, Prev: The who command, Up: Opening the software toolbox
+
+The ‘cut’ Command
+=================
+
+The next program we’ll look at is the ‘cut’ command. This program cuts
+out columns or fields of input data. For example, we can tell it to
+print just the login name and full name from the ‘/etc/passwd’ file.
+The ‘/etc/passwd’ file has seven fields, separated by colons:
+
+ arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
+
+ To get the first and fifth fields, we would use ‘cut’ like this:
+
+ $ cut -d: -f1,5 /etc/passwd
+ ⊣ root:Operator
+ ...
+ ⊣ arnold:Arnold D. Robbins
+ ⊣ miriam:Miriam A. Robbins
+ ...
+
+ With the ‘-c’ option, ‘cut’ will cut out specific characters (i.e.,
+columns) in the input lines. This is useful for input data that has
+fixed width fields, and does not have a field separator. For example,
+list the Monday dates for the current month:
+
+ $ cal | cut -c 3-5
+ ⊣Mo
+ ⊣
+ ⊣ 6
+ ⊣ 13
+ ⊣ 20
+ ⊣ 27
+
+
+File: coreutils.info, Node: The sort command, Next: The uniq command, Prev: The cut command, Up: Opening the software toolbox
+
+The ‘sort’ Command
+==================
+
+Next we’ll look at the ‘sort’ command. This is one of the most powerful
+commands on a Unix-style system; one that you will often find yourself
+using when setting up fancy data plumbing.
+
+ The ‘sort’ command reads and sorts each file named on the command
+line. It then merges the sorted data and writes it to standard output.
+It will read standard input if no files are given on the command line
+(thus making it into a filter). The sort is based on the character
+collating sequence or based on user-supplied ordering criteria.
+
+
+File: coreutils.info, Node: The uniq command, Next: Putting the tools together, Prev: The sort command, Up: Opening the software toolbox
+
+The ‘uniq’ Command
+==================
+
+Finally (at least for now), we’ll look at the ‘uniq’ program. When
+sorting data, you will often end up with duplicate lines, lines that are
+identical. Usually, all you need is one instance of each line. This is
+where ‘uniq’ comes in. The ‘uniq’ program reads its standard input. It
+prints only one copy of each repeated line. It does have several
+options. Later on, we’ll use the ‘-c’ option, which prints each unique
+line, preceded by a count of the number of times that line occurred in
+the input.
+
+
+File: coreutils.info, Node: Putting the tools together, Prev: The uniq command, Up: Opening the software toolbox
+
+Putting the Tools Together
+==========================
+
+Now, let’s suppose this is a large ISP server system with dozens of
+users logged in. The management wants the system administrator to write
+a program that will generate a sorted list of logged in users.
+Furthermore, even if a user is logged in multiple times, his or her name
+should only show up in the output once.
+
+ The administrator could sit down with the system documentation and
+write a C program that did this. It would take perhaps a couple of
+hundred lines of code and about two hours to write it, test it, and
+debug it. However, knowing the software toolbox, the administrator can
+instead start out by generating just a list of logged on users:
+
+ $ who | cut -c1-8
+ ⊣ arnold
+ ⊣ miriam
+ ⊣ bill
+ ⊣ arnold
+
+ Next, sort the list:
+
+ $ who | cut -c1-8 | sort
+ ⊣ arnold
+ ⊣ arnold
+ ⊣ bill
+ ⊣ miriam
+
+ Finally, run the sorted list through ‘uniq’, to weed out duplicates:
+
+ $ who | cut -c1-8 | sort | uniq
+ ⊣ arnold
+ ⊣ bill
+ ⊣ miriam
+
+ The ‘sort’ command actually has a ‘-u’ option that does what ‘uniq’
+does. However, ‘uniq’ has other uses for which one cannot substitute
+‘sort -u’.
+
+ The administrator puts this pipeline into a shell script, and makes
+it available for all the users on the system (‘#’ is the system
+administrator, or ‘root’, prompt):
+
+ # cat > /usr/local/bin/listusers
+ who | cut -c1-8 | sort | uniq
+ ^D
+ # chmod +x /usr/local/bin/listusers
+
+ There are four major points to note here. First, with just four
+programs, on one command line, the administrator was able to save about
+two hours worth of work. Furthermore, the shell pipeline is just about
+as efficient as the C program would be, and it is much more efficient in
+terms of programmer time. People time is much more expensive than
+computer time, and in our modern “there’s never enough time to do
+everything” society, saving two hours of programmer time is no mean
+feat.
+
+ Second, it is also important to emphasize that with the _combination_
+of the tools, it is possible to do a special purpose job never imagined
+by the authors of the individual programs.
+
+ Third, it is also valuable to build up your pipeline in stages, as we
+did here. This allows you to view the data at each stage in the
+pipeline, which helps you acquire the confidence that you are indeed
+using these tools correctly.
+
+ Finally, by bundling the pipeline in a shell script, other users can
+use your command, without having to remember the fancy plumbing you set
+up for them. In terms of how you run them, shell scripts and compiled
+programs are indistinguishable.
+
+ After the previous warm-up exercise, we’ll look at two additional,
+more complicated pipelines. For them, we need to introduce two more
+tools.
+
+ The first is the ‘tr’ command, which stands for “transliterate.” The
+‘tr’ command works on a character-by-character basis, changing
+characters. Normally it is used for things like mapping upper case to
+lower case:
+
+ $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
+ ⊣ this example has mixed case!
+
+ There are several options of interest:
+
+‘-c’
+ work on the complement of the listed characters, i.e., operations
+ apply to characters not in the given set
+
+‘-d’
+ delete characters in the first set from the output
+
+‘-s’
+ squeeze repeated characters in the output into just one character.
+
+ We will be using all three options in a moment.
+
+ The other command we’ll look at is ‘comm’. The ‘comm’ command takes
+two sorted input files as input data, and prints out the files’ lines in
+three columns. The output columns are the data lines unique to the
+first file, the data lines unique to the second file, and the data lines
+that are common to both. The ‘-1’, ‘-2’, and ‘-3’ command line options
+_omit_ the respective columns. (This is non-intuitive and takes a
+little getting used to.) For example:
+
+ $ cat f1
+ ⊣ 11111
+ ⊣ 22222
+ ⊣ 33333
+ ⊣ 44444
+ $ cat f2
+ ⊣ 00000
+ ⊣ 22222
+ ⊣ 33333
+ ⊣ 55555
+ $ comm f1 f2
+ ⊣ 00000
+ ⊣ 11111
+ ⊣ 22222
+ ⊣ 33333
+ ⊣ 44444
+ ⊣ 55555
+
+ The file name ‘-’ tells ‘comm’ to read standard input instead of a
+regular file.
+
+ Now we’re ready to build a fancy pipeline. The first application is
+a word frequency counter. This helps an author determine if he or she
+is over-using certain words.
+
+ The first step is to change the case of all the letters in our input
+file to one case. “The” and “the” are the same word when doing
+counting.
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
+
+ The next step is to get rid of punctuation. Quoted words and
+unquoted words should be treated identically; it’s easiest to just get
+the punctuation out of the way.
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
+
+ The second ‘tr’ command operates on the complement of the listed
+characters, which are all the letters, the digits, the underscore, and
+the blank. The ‘\n’ represents the newline character; it has to be left
+alone. (The ASCII tab character should also be included for good
+measure in a production script.)
+
+ At this point, we have data consisting of words separated by blank
+space. The words only contain alphanumeric characters (and the
+underscore). The next step is break the data apart so that we have one
+word per line. This makes the counting operation much easier, as we
+will see shortly.
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
+ > tr -s ' ' '\n' | ...
+
+ This command turns blanks into newlines. The ‘-s’ option squeezes
+multiple newline characters in the output into just one, removing blank
+lines. (The ‘>’ is the shell’s “secondary prompt.” This is what the
+shell prints when it notices you haven’t finished typing in all of a
+command.)
+
+ We now have data consisting of one word per line, no punctuation, all
+one case. We’re ready to count each word:
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
+ > tr -s ' ' '\n' | sort | uniq -c | ...
+
+ At this point, the data might look something like this:
+
+ 60 a
+ 2 able
+ 6 about
+ 1 above
+ 2 accomplish
+ 1 acquire
+ 1 actually
+ 2 additional
+
+ The output is sorted by word, not by count! What we want is the most
+frequently used words first. Fortunately, this is easy to accomplish,
+with the help of two more ‘sort’ options:
+
+‘-n’
+ do a numeric sort, not a textual one
+
+‘-r’
+ reverse the order of the sort
+
+ The final pipeline looks like this:
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
+ > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
+ ⊣ 156 the
+ ⊣ 60 a
+ ⊣ 58 to
+ ⊣ 51 of
+ ⊣ 51 and
+ ...
+
+ Whew! That’s a lot to digest. Yet, the same principles apply. With
+six commands, on two lines (really one long one split for convenience),
+we’ve created a program that does something interesting and useful, in
+much less time than we could have written a C program to do the same
+thing.
+
+ A minor modification to the above pipeline can give us a simple
+spelling checker! To determine if you’ve spelled a word correctly, all
+you have to do is look it up in a dictionary. If it is not there, then
+chances are that your spelling is incorrect. So, we need a dictionary.
+The conventional location for a dictionary is ‘/usr/share/dict/words’.
+
+ Now, how to compare our file with the dictionary? As before, we
+generate a sorted list of words, one per line:
+
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
+ > tr -s ' ' '\n' | sort -u | ...
+
+ Now, all we need is a list of words that are _not_ in the dictionary.
+Here is where the ‘comm’ command comes in. Unfortunately ‘comm’
+operates on sorted input and ‘/usr/share/dict/words’ is not sorted the
+way that ‘sort’ and ‘comm’ normally use, so we first create a
+properly-sorted copy of the dictionary and then run a pipeline that uses
+the copy.
+
+ $ sort /usr/share/dict/words > sorted-words
+ $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
+ > tr -s ' ' '\n' | sort -u |
+ > comm -23 - sorted-words
+
+ The ‘-2’ and ‘-3’ options eliminate lines that are only in the
+dictionary (the second file), and lines that are in both files. Lines
+only in the first file (standard input, our stream of words), are words
+that are not in the dictionary. These are likely candidates for
+spelling errors. This pipeline was the first cut at a production
+spelling checker on Unix.
+
+ There are some other tools that deserve brief mention.
+
+‘grep’
+ search files for text that matches a regular expression
+
+‘wc’
+ count lines, words, characters
+
+‘tee’
+ a T-fitting for data pipes, copies data to files and to standard
+ output
+
+‘sed’
+ the stream editor, an advanced tool
+
+‘awk’
+ a data manipulation language, another advanced tool
+
+ The software tools philosophy also espoused the following bit of
+advice: “Let someone else do the hard part.” This means, take something
+that gives you most of what you need, and then massage it the rest of
+the way until it’s in the form that you want.
+
+ To summarize:
+
+ 1. Each program should do one thing well. No more, no less.
+
+ 2. Combining programs with appropriate plumbing leads to results where
+ the whole is greater than the sum of the parts. It also leads to
+ novel uses of programs that the authors might never have imagined.
+
+ 3. Programs should never print extraneous header or trailer data,
+ since these could get sent on down a pipeline. (A point we didn’t
+ mention earlier.)
+
+ 4. Let someone else do the hard part.
+
+ 5. Know your toolbox! Use each program appropriately. If you don’t
+ have an appropriate tool, build one.
+
+ All the programs discussed are available as described in GNU core
+utilities (https://www.gnu.org/software/coreutils/coreutils.html).
+
+ None of what I have presented in this column is new. The Software
+Tools philosophy was first introduced in the book ‘Software Tools’, by
+Brian Kernighan and P.J. Plauger (Addison-Wesley, ISBN 0-201-03669-X).
+This book showed how to write and use software tools. It was written in
+1976, using a preprocessor for FORTRAN named ‘ratfor’ (RATional
+FORtran). At the time, C was not as ubiquitous as it is now; FORTRAN
+was. The last chapter presented a ‘ratfor’ to FORTRAN processor,
+written in ‘ratfor’. ‘ratfor’ looks an awful lot like C; if you know C,
+you won’t have any problem following the code.
+
+ In 1981, the book was updated and made available as ‘Software Tools
+in Pascal’ (Addison-Wesley, ISBN 0-201-10342-7). Both books are still
+in print and are well worth reading if you’re a programmer. They
+certainly made a major change in how I view programming.
+
+ The programs in both books are available from Brian Kernighan’s home
+page (https://www.cs.princeton.edu/~bwk/). For a number of years, there
+was an active Software Tools Users Group, whose members had ported the
+original ‘ratfor’ programs to essentially every computer system with a
+FORTRAN compiler. The popularity of the group waned in the middle 1980s
+as Unix began to spread beyond universities.
+
+ With the current proliferation of GNU code and other clones of Unix
+programs, these programs now receive little attention; modern C versions
+are much more efficient and do more than these programs do.
+Nevertheless, as exposition of good programming style, and evangelism
+for a still-valuable philosophy, these books are unparalleled, and I
+recommend them highly.
+
+ Acknowledgment: I would like to express my gratitude to Brian
+Kernighan of Bell Labs, the original Software Toolsmith, for reviewing
+this column.
+
+
+File: coreutils.info, Node: GNU Free Documentation License, Next: Concept index, Prev: Opening the software toolbox, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of “copyleft”, which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ “Document”, below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as “you”. You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A “Modified Version” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A “Secondary Section” is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The “Invariant Sections” are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The “Cover Texts” are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A “Transparent” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ “Transparent” is called “Opaque”.
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The “Title Page” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, “Title
+ Page” means the text near the most prominent appearance of the
+ work’s title, preceding the beginning of the body of the text.
+
+ The “publisher” means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section “Entitled XYZ” means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.)
+ To “Preserve the Title” of such a section when you modify the
+ Document means that it remains a section “Entitled XYZ” according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document’s license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document’s
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled “History”, Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled “History” in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ “History” section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled “Acknowledgements” or “Dedications”,
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled “Endorsements”. Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ “Endorsements” or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version’s
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties—for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ “History” in the various original documents, forming one section
+ Entitled “History”; likewise combine any sections Entitled
+ “Acknowledgements”, and any sections Entitled “Dedications”. You
+ must delete all sections Entitled “Endorsements.”
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an “aggregate” if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation’s users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document’s Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <https://www.gnu.org/licenses/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License “or any later version” applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ “Incorporate” means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the “with...Texts.” line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: coreutils.info, Node: Concept index, Prev: GNU Free Documentation License, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* !: Connectives for test.
+ (line 23)
+* !=: String tests. (line 29)
+* %: Numeric expressions. (line 16)
+* %b: printf invocation. (line 37)
+* %q: printf invocation. (line 44)
+* &: Relations for expr. (line 17)
+* *: Numeric expressions. (line 16)
+* +: String expressions. (line 51)
+* + <1>: Numeric expressions. (line 12)
+* +PAGE_RANGE: pr invocation. (line 39)
+* -: Numeric expressions. (line 12)
+* - <1>: env invocation. (line 102)
+* - and Unix rm: rm invocation. (line 114)
+* -, removing files beginning with: rm invocation. (line 102)
+* --: Common options. (line 43)
+* --across: pr invocation. (line 62)
+* --additional-suffix: split invocation. (line 139)
+* --address-radix: od invocation. (line 36)
+* --adjustment: nice invocation. (line 51)
+* --algorithm: cksum general options.
+ (line 5)
+* --all: unexpand invocation. (line 51)
+* --all <1>: Which files are listed.
+ (line 13)
+* --all <2>: df invocation. (line 42)
+* --all <3>: du invocation. (line 31)
+* --all <4>: stty invocation. (line 26)
+* --all <5>: who invocation. (line 35)
+* --all <6>: nproc invocation. (line 20)
+* --all <7>: uname invocation. (line 30)
+* --all-repeated: uniq invocation. (line 70)
+* --almost-all: Which files are listed.
+ (line 17)
+* --apparent-size: du invocation. (line 34)
+* --append: tee invocation. (line 26)
+* --archive: cp invocation. (line 63)
+* --attributes-only: cp invocation. (line 72)
+* --author: What information is listed.
+ (line 10)
+* --auto-reference: Output formatting in ptx.
+ (line 45)
+* --backup: Backup options. (line 13)
+* --backup <1>: cp invocation. (line 79)
+* --backup <2>: install invocation. (line 41)
+* --backup <3>: mv invocation. (line 56)
+* --backup <4>: ln invocation. (line 82)
+* --base16: basenc invocation. (line 49)
+* --base2lsbf: basenc invocation. (line 55)
+* --base2msbf: basenc invocation. (line 59)
+* --base32: basenc invocation. (line 35)
+* --base32hex: basenc invocation. (line 42)
+* --base64: basenc invocation. (line 23)
+* --base64 <1>: cksum general options.
+ (line 23)
+* --base64url: basenc invocation. (line 29)
+* --batch-size: sort invocation. (line 268)
+* --before: tac invocation. (line 21)
+* --binary: cksum common options.
+ (line 5)
+* --block-size: Block size. (line 131)
+* --block-size <1>: df invocation. (line 54)
+* --block-size <2>: du invocation. (line 54)
+* --block-size=SIZE: Block size. (line 12)
+* --body-numbering: nl invocation. (line 45)
+* --boot: who invocation. (line 39)
+* --bourne-shell: dircolors invocation.
+ (line 34)
+* --break-file: Input processing in ptx.
+ (line 8)
+* --buffer-size: sort invocation. (line 322)
+* --bytes: fold invocation. (line 23)
+* --bytes <1>: head invocation. (line 24)
+* --bytes <2>: tail invocation. (line 39)
+* --bytes <3>: split invocation. (line 41)
+* --bytes <4>: wc invocation. (line 46)
+* --bytes <5>: cut invocation. (line 26)
+* --bytes <6>: du invocation. (line 59)
+* --c-shell: dircolors invocation.
+ (line 40)
+* --cached=MODE: stat invocation. (line 33)
+* --canonicalize: readlink invocation. (line 31)
+* --canonicalize-existing: readlink invocation. (line 38)
+* --canonicalize-existing <1>: realpath invocation. (line 22)
+* --canonicalize-missing: readlink invocation. (line 45)
+* --canonicalize-missing <1>: realpath invocation. (line 30)
+* --changes: chown invocation. (line 74)
+* --changes <1>: chgrp invocation. (line 24)
+* --changes <2>: chmod invocation. (line 43)
+* --characters: cut invocation. (line 34)
+* --chars: wc invocation. (line 50)
+* --chdir: env invocation. (line 107)
+* --check: sort invocation. (line 39)
+* --check <1>: sort invocation. (line 47)
+* --check-chars: uniq invocation. (line 134)
+* --classify: General output formatting.
+ (line 52)
+* --color: General output formatting.
+ (line 28)
+* --columns: pr invocation. (line 49)
+* --compare: install invocation. (line 46)
+* --complement: cut invocation. (line 86)
+* --complement <1>: tr invocation. (line 31)
+* --compute: runcon invocation. (line 32)
+* --context: What information is listed.
+ (line 259)
+* --context <1>: cp invocation. (line 417)
+* --context <2>: install invocation. (line 143)
+* --context <3>: mv invocation. (line 144)
+* --context <4>: mkdir invocation. (line 59)
+* --context <5>: mkfifo invocation. (line 28)
+* --context <6>: mknod invocation. (line 53)
+* --context <7>: id invocation. (line 51)
+* --count: uniq invocation. (line 56)
+* --count <1>: who invocation. (line 69)
+* --count-links: du invocation. (line 125)
+* --crown-margin: fmt invocation. (line 34)
+* --csh: dircolors invocation.
+ (line 40)
+* --data: sync invocation. (line 32)
+* --date: touch invocation. (line 56)
+* --date <1>: Options for date. (line 15)
+* --dead: who invocation. (line 43)
+* --debug: cksum general options.
+ (line 34)
+* --debug <1>: cp invocation. (line 114)
+* --debug <2>: install invocation. (line 72)
+* --debug <3>: mv invocation. (line 60)
+* --debug <4>: Options for date. (line 29)
+* --debug <5>: env invocation. (line 177)
+* --debug <6>: numfmt invocation. (line 29)
+* --decode: base64 invocation. (line 33)
+* --delete: tr invocation. (line 38)
+* --delimiter: cut invocation. (line 66)
+* --delimiter <1>: numfmt invocation. (line 34)
+* --delimiters: paste invocation. (line 61)
+* --dereference: Which files are listed.
+ (line 84)
+* --dereference <1>: cp invocation. (line 153)
+* --dereference <2>: chown invocation. (line 107)
+* --dereference <3>: chgrp invocation. (line 34)
+* --dereference <4>: du invocation. (line 119)
+* --dereference <5>: stat invocation. (line 22)
+* --dereference <6>: chcon invocation. (line 21)
+* --dereference-args: du invocation. (line 69)
+* --dereference-command-line: Which files are listed.
+ (line 36)
+* --dereference-command-line-symlink-to-dir: Which files are listed.
+ (line 41)
+* --dictionary-order: sort invocation. (line 87)
+* --digits: csplit invocation. (line 82)
+* --dir: rm invocation. (line 35)
+* --directory: Which files are listed.
+ (line 28)
+* --directory <1>: install invocation. (line 67)
+* --directory <2>: ln invocation. (line 88)
+* --directory <3>: mktemp invocation. (line 85)
+* --dired: What information is listed.
+ (line 16)
+* --double-space: pr invocation. (line 74)
+* --dry-run: mktemp invocation. (line 97)
+* --echo: shuf invocation. (line 19)
+* --elide-empty-files: split invocation. (line 144)
+* --elide-empty-files <1>: csplit invocation. (line 96)
+* --endian: od invocation. (line 51)
+* --equal-width: seq invocation. (line 50)
+* --error: stdbuf invocation. (line 34)
+* --escape: Formatting the file names.
+ (line 11)
+* --exact: shred invocation. (line 164)
+* --exclude-from=FILE: du invocation. (line 250)
+* --exclude-type: df invocation. (line 224)
+* --exclude=PATTERN: du invocation. (line 255)
+* --expand-tabs: pr invocation. (line 98)
+* --exponents: factor invocation. (line 18)
+* --field: numfmt invocation. (line 38)
+* --field-separator: sort invocation. (line 338)
+* --fields: cut invocation. (line 43)
+* --file: stty invocation. (line 31)
+* --file <1>: Options for date. (line 34)
+* --file-system: stat invocation. (line 28)
+* --file-system <1>: sync invocation. (line 37)
+* --file-type: General output formatting.
+ (line 68)
+* --files0-from=FILE: wc invocation. (line 84)
+* --files0-from=FILE <1>: sort invocation. (line 224)
+* --files0-from=FILE <2>: du invocation. (line 81)
+* --filter: split invocation. (line 63)
+* --first-line-number: pr invocation. (line 174)
+* --flag-truncation: Output formatting in ptx.
+ (line 71)
+* --follow: tail invocation. (line 57)
+* --footer-numbering: nl invocation. (line 72)
+* --force: cp invocation. (line 119)
+* --force <1>: mv invocation. (line 65)
+* --force <2>: rm invocation. (line 39)
+* --force <3>: shred invocation. (line 123)
+* --force <4>: ln invocation. (line 94)
+* --foreground: timeout invocation. (line 24)
+* --form-feed: pr invocation. (line 106)
+* --format: od invocation. (line 90)
+* --format <1>: What information is listed.
+ (line 133)
+* --format <2>: General output formatting.
+ (line 9)
+* --format <3>: General output formatting.
+ (line 21)
+* --format <4>: General output formatting.
+ (line 114)
+* --format <5>: General output formatting.
+ (line 125)
+* --format <6>: numfmt invocation. (line 48)
+* --format <7>: seq invocation. (line 29)
+* --format=FORMAT: stat invocation. (line 50)
+* --format=roff: Output formatting in ptx.
+ (line 100)
+* --format=tex: Output formatting in ptx.
+ (line 118)
+* --from: chown invocation. (line 84)
+* --from <1>: numfmt invocation. (line 59)
+* --from-unit: numfmt invocation. (line 64)
+* --full-time: What information is listed.
+ (line 103)
+* --gap-size: Output formatting in ptx.
+ (line 26)
+* --general-numeric-sort: sort invocation. (line 105)
+* --goal: fmt invocation. (line 64)
+* --group: uniq invocation. (line 101)
+* --group <1>: install invocation. (line 77)
+* --group <2>: id invocation. (line 29)
+* --group-directories-first: Which files are listed.
+ (line 50)
+* --grouping: numfmt invocation. (line 70)
+* --groups: id invocation. (line 33)
+* --groups <1>: chroot invocation. (line 24)
+* --hardware-platform: uname invocation. (line 35)
+* --head-count: shuf invocation. (line 31)
+* --header: pr invocation. (line 111)
+* --header <1>: General options in join.
+ (line 25)
+* --header <2>: numfmt invocation. (line 76)
+* --header-numbering: nl invocation. (line 76)
+* --header=N: numfmt invocation. (line 76)
+* --heading: who invocation. (line 47)
+* --help: Common options. (line 36)
+* --hex-suffixes: split invocation. (line 135)
+* --hide-control-chars: Formatting the file names.
+ (line 23)
+* --hide=PATTERN: Which files are listed.
+ (line 58)
+* --human-numeric-sort: sort invocation. (line 132)
+* --human-readable: Block size. (line 131)
+* --human-readable <1>: What information is listed.
+ (line 118)
+* --human-readable <2>: df invocation. (line 59)
+* --human-readable <3>: du invocation. (line 98)
+* --hyperlink: General output formatting.
+ (line 73)
+* --ignore: nproc invocation. (line 26)
+* --ignore-backups: Which files are listed.
+ (line 23)
+* --ignore-case: sort invocation. (line 94)
+* --ignore-case <1>: uniq invocation. (line 60)
+* --ignore-case <2>: Charset selection in ptx.
+ (line 20)
+* --ignore-case <3>: General options in join.
+ (line 35)
+* --ignore-environment: env invocation. (line 102)
+* --ignore-fail-on-non-empty: rmdir invocation. (line 17)
+* --ignore-file: Input processing in ptx.
+ (line 26)
+* --ignore-garbage: base64 invocation. (line 39)
+* --ignore-interrupts: tee invocation. (line 31)
+* --ignore-leading-blanks: sort invocation. (line 79)
+* --ignore-missing: cksum common options.
+ (line 54)
+* --ignore-nonprinting: sort invocation. (line 149)
+* --ignore=PATTERN: Which files are listed.
+ (line 70)
+* --indent: pr invocation. (line 180)
+* --indicator-style: General output formatting.
+ (line 52)
+* --indicator-style <1>: General output formatting.
+ (line 68)
+* --indicator-style <2>: General output formatting.
+ (line 82)
+* --indicator-style <3>: General output formatting.
+ (line 120)
+* --initial: expand invocation. (line 46)
+* --inode: What information is listed.
+ (line 125)
+* --inodes: df invocation. (line 69)
+* --inodes <1>: du invocation. (line 104)
+* --input: stdbuf invocation. (line 26)
+* --input-range: shuf invocation. (line 23)
+* --interactive: cp invocation. (line 143)
+* --interactive <1>: mv invocation. (line 71)
+* --interactive <2>: rm invocation. (line 55)
+* --interactive <3>: ln invocation. (line 98)
+* --invalid: numfmt invocation. (line 79)
+* --io-blocks: truncate invocation. (line 26)
+* --iso-8601[=TIMESPEC]: Options for date. (line 42)
+* --iterations=NUMBER: shred invocation. (line 127)
+* --join-blank-lines: nl invocation. (line 85)
+* --join-lines: pr invocation. (line 124)
+* --keep-files: csplit invocation. (line 87)
+* --kernel-name: uname invocation. (line 66)
+* --kernel-release: uname invocation. (line 62)
+* --kernel-version: uname invocation. (line 77)
+* --key: sort invocation. (line 237)
+* --kibibytes: General output formatting.
+ (line 101)
+* --kill-after: timeout invocation. (line 41)
+* --length: pr invocation. (line 133)
+* --length <1>: cksum general options.
+ (line 39)
+* --length <2>: b2sum invocation. (line 24)
+* --line-bytes: split invocation. (line 56)
+* --line-increment: nl invocation. (line 80)
+* --lines: head invocation. (line 40)
+* --lines <1>: tail invocation. (line 126)
+* --lines <2>: split invocation. (line 33)
+* --lines <3>: wc invocation. (line 60)
+* --link: cp invocation. (line 149)
+* --literal: Formatting the file names.
+ (line 17)
+* --local: df invocation. (line 81)
+* --logical: ln invocation. (line 103)
+* --logical <1>: realpath invocation. (line 35)
+* --logical <2>: pwd invocation. (line 15)
+* --login: who invocation. (line 51)
+* --lookup: who invocation. (line 56)
+* --machine: uname invocation. (line 42)
+* --macro-name: Output formatting in ptx.
+ (line 94)
+* --max-depth=DEPTH: du invocation. (line 76)
+* --max-line-length: wc invocation. (line 66)
+* --max-unchanged-stats: tail invocation. (line 114)
+* --merge: pr invocation. (line 140)
+* --merge <1>: sort invocation. (line 53)
+* --mesg: who invocation. (line 94)
+* --message: who invocation. (line 94)
+* --mode: install invocation. (line 83)
+* --mode <1>: mkdir invocation. (line 19)
+* --mode <2>: mkfifo invocation. (line 21)
+* --mode <3>: mknod invocation. (line 47)
+* --month-sort: sort invocation. (line 156)
+* --multiple: basename invocation. (line 32)
+* --name: id invocation. (line 37)
+* --no-clobber: cp invocation. (line 160)
+* --no-clobber <1>: mv invocation. (line 78)
+* --no-copy: mv invocation. (line 85)
+* --no-create: touch invocation. (line 52)
+* --no-create <1>: truncate invocation. (line 22)
+* --no-dereference: cp invocation. (line 166)
+* --no-dereference <1>: ln invocation. (line 109)
+* --no-dereference <2>: chown invocation. (line 119)
+* --no-dereference <3>: chgrp invocation. (line 46)
+* --no-dereference <4>: touch invocation. (line 70)
+* --no-dereference <5>: du invocation. (line 135)
+* --no-dereference <6>: chcon invocation. (line 26)
+* --no-file-warnings: pr invocation. (line 187)
+* --no-group: What information is listed.
+ (line 112)
+* --no-newline: readlink invocation. (line 50)
+* --no-preserve-root: rm invocation. (line 89)
+* --no-preserve-root <1>: chown invocation. (line 132)
+* --no-preserve-root <2>: chgrp invocation. (line 59)
+* --no-preserve-root <3>: chmod invocation. (line 58)
+* --no-preserve-root <4>: chcon invocation. (line 43)
+* --no-renumber: nl invocation. (line 104)
+* --no-symlinks: realpath invocation. (line 64)
+* --no-sync: df invocation. (line 85)
+* --no-target-directory: Target directory. (line 15)
+* --no-target-directory <1>: cp invocation. (line 367)
+* --no-target-directory <2>: install invocation. (line 134)
+* --no-target-directory <3>: mv invocation. (line 139)
+* --no-target-directory <4>: ln invocation. (line 177)
+* --nodename: uname invocation. (line 47)
+* --null: du invocation. (line 25)
+* --null <1>: printenv invocation. (line 19)
+* --null <2>: env invocation. (line 90)
+* --number: cat invocation. (line 32)
+* --number <1>: split invocation. (line 79)
+* --number-format: nl invocation. (line 93)
+* --number-lines: pr invocation. (line 153)
+* --number-nonblank: cat invocation. (line 20)
+* --number-separator: nl invocation. (line 108)
+* --number-width: nl invocation. (line 118)
+* --numeric-sort: sort invocation. (line 166)
+* --numeric-suffixes: split invocation. (line 121)
+* --numeric-uid-gid: What information is listed.
+ (line 227)
+* --omit-header: pr invocation. (line 210)
+* --omit-pagination: pr invocation. (line 220)
+* --one-file-system: cp invocation. (line 411)
+* --one-file-system <1>: rm invocation. (line 66)
+* --one-file-system <2>: du invocation. (line 261)
+* --only-delimited: cut invocation. (line 74)
+* --only-file: Input processing in ptx.
+ (line 35)
+* --operating-system: uname invocation. (line 58)
+* --output: sort invocation. (line 294)
+* --output <1>: shuf invocation. (line 36)
+* --output <2>: df invocation. (line 92)
+* --output <3>: stdbuf invocation. (line 30)
+* --output-delimiter: cut invocation. (line 79)
+* --output-duplicates: od invocation. (line 150)
+* --output-error: tee invocation. (line 35)
+* --output-tabs: pr invocation. (line 117)
+* --owner: install invocation. (line 95)
+* --padding: numfmt invocation. (line 87)
+* --pages=PAGE_RANGE: pr invocation. (line 39)
+* --page_width: pr invocation. (line 239)
+* --parallel: sort invocation. (line 366)
+* --parents: cp invocation. (line 249)
+* --parents <1>: mkdir invocation. (line 36)
+* --parents <2>: rmdir invocation. (line 21)
+* --physical: ln invocation. (line 128)
+* --physical <1>: realpath invocation. (line 40)
+* --physical <2>: pwd invocation. (line 22)
+* --pid: tail invocation. (line 133)
+* --portability: df invocation. (line 149)
+* --portability <1>: pathchk invocation. (line 44)
+* --prefix: csplit invocation. (line 64)
+* --preserve: cp invocation. (line 173)
+* --preserve-context: install invocation. (line 100)
+* --preserve-root: rm invocation. (line 82)
+* --preserve-root <1>: chown invocation. (line 127)
+* --preserve-root <2>: chgrp invocation. (line 54)
+* --preserve-root <3>: chmod invocation. (line 53)
+* --preserve-root <4>: chcon invocation. (line 38)
+* --preserve-status: timeout invocation. (line 18)
+* --preserve-timestamps: install invocation. (line 107)
+* --print-database: dircolors invocation.
+ (line 45)
+* --print-ls-colors: dircolors invocation.
+ (line 50)
+* --print-type: df invocation. (line 201)
+* --printf=FORMAT: stat invocation. (line 59)
+* --process: who invocation. (line 65)
+* --processor: uname invocation. (line 51)
+* --quiet: head invocation. (line 47)
+* --quiet <1>: tail invocation. (line 155)
+* --quiet <2>: csplit invocation. (line 107)
+* --quiet <3>: cksum common options.
+ (line 60)
+* --quiet <4>: readlink invocation. (line 57)
+* --quiet <5>: chown invocation. (line 80)
+* --quiet <6>: chgrp invocation. (line 30)
+* --quiet <7>: chmod invocation. (line 49)
+* --quiet <8>: mktemp invocation. (line 92)
+* --quiet <9>: realpath invocation. (line 46)
+* --quiet <10>: tty invocation. (line 18)
+* --quote-name: Formatting the file names.
+ (line 30)
+* --quoting-style: Formatting the file names.
+ (line 11)
+* --quoting-style <1>: Formatting the file names.
+ (line 17)
+* --quoting-style <2>: Formatting the file names.
+ (line 30)
+* --quoting-style <3>: Formatting the file names.
+ (line 34)
+* --random-sort: sort invocation. (line 195)
+* --random-source: sort invocation. (line 310)
+* --random-source <1>: shuf invocation. (line 42)
+* --random-source <2>: shred invocation. (line 133)
+* --range: chcon invocation. (line 77)
+* --range <1>: runcon invocation. (line 48)
+* --raw: cksum general options.
+ (line 45)
+* --read-bytes: od invocation. (line 76)
+* --real: id invocation. (line 42)
+* --recursive: Which files are listed.
+ (line 91)
+* --recursive <1>: cp invocation. (line 262)
+* --recursive <2>: rm invocation. (line 96)
+* --recursive <3>: chown invocation. (line 151)
+* --recursive <4>: chgrp invocation. (line 77)
+* --recursive <5>: chmod invocation. (line 73)
+* --recursive <6>: chcon invocation. (line 35)
+* --reference: chown invocation. (line 136)
+* --reference <1>: chgrp invocation. (line 63)
+* --reference <2>: chmod invocation. (line 66)
+* --reference <3>: touch invocation. (line 89)
+* --reference <4>: truncate invocation. (line 30)
+* --reference <5>: Options for date. (line 71)
+* --reference <6>: chcon invocation. (line 30)
+* --references: Input processing in ptx.
+ (line 48)
+* --reflink[=WHEN]: cp invocation. (line 275)
+* --regex: tac invocation. (line 26)
+* --relative: ln invocation. (line 137)
+* --relative-base: realpath invocation. (line 54)
+* --relative-base <1>: Realpath usage examples.
+ (line 6)
+* --relative-to: realpath invocation. (line 49)
+* --relative-to <1>: Realpath usage examples.
+ (line 6)
+* --remove: shred invocation. (line 144)
+* --remove-destination: cp invocation. (line 302)
+* --remove=unlink: shred invocation. (line 144)
+* --remove=wipe: shred invocation. (line 144)
+* --remove=wipesync: shred invocation. (line 144)
+* --repeat: shuf invocation. (line 47)
+* --repeated: uniq invocation. (line 64)
+* --resolution: Options for date. (line 75)
+* --retry: tail invocation. (line 158)
+* --reverse: sort invocation. (line 189)
+* --reverse <1>: Sorting the output. (line 25)
+* --rfc-2822: Options for date. (line 91)
+* --rfc-3339=TIMESPEC: Options for date. (line 100)
+* --rfc-822: Options for date. (line 91)
+* --rfc-email: Options for date. (line 85)
+* --right-side-refs: Output formatting in ptx.
+ (line 56)
+* --role: chcon invocation. (line 69)
+* --role <1>: runcon invocation. (line 40)
+* --round: numfmt invocation. (line 94)
+* --round=down: numfmt invocation. (line 94)
+* --round=from-zero: numfmt invocation. (line 94)
+* --round=nearest: numfmt invocation. (line 94)
+* --round=towards-zero: numfmt invocation. (line 94)
+* --round=up: numfmt invocation. (line 94)
+* --runlevel: who invocation. (line 74)
+* --save: stty invocation. (line 41)
+* --section-delimiter: nl invocation. (line 63)
+* --sentence-regexp: Input processing in ptx.
+ (line 65)
+* --sep-string: pr invocation. (line 201)
+* --separate-dirs: du invocation. (line 140)
+* --separator: tac invocation. (line 30)
+* --separator <1>: pr invocation. (line 192)
+* --separator <2>: split invocation. (line 152)
+* --separator <3>: seq invocation. (line 45)
+* --serial: paste invocation. (line 52)
+* --set: Options for date. (line 129)
+* --sh: dircolors invocation.
+ (line 34)
+* --show-all: cat invocation. (line 16)
+* --show-control-chars: pr invocation. (line 68)
+* --show-control-chars <1>: Formatting the file names.
+ (line 78)
+* --show-ends: cat invocation. (line 27)
+* --show-nonprinting: cat invocation. (line 52)
+* --show-nonprinting <1>: pr invocation. (line 225)
+* --show-tabs: cat invocation. (line 45)
+* --si: Block size. (line 131)
+* --si <1>: What information is listed.
+ (line 251)
+* --si <2>: df invocation. (line 168)
+* --si <3>: du invocation. (line 147)
+* --signal: timeout invocation. (line 58)
+* --silent: head invocation. (line 47)
+* --silent <1>: tail invocation. (line 155)
+* --silent <2>: csplit invocation. (line 107)
+* --silent <3>: readlink invocation. (line 57)
+* --silent <4>: chown invocation. (line 80)
+* --silent <5>: chgrp invocation. (line 30)
+* --silent <6>: chmod invocation. (line 49)
+* --silent <7>: tty invocation. (line 18)
+* --size: What information is listed.
+ (line 236)
+* --size <1>: truncate invocation. (line 34)
+* --size=BYTES: shred invocation. (line 138)
+* --skip-bytes: od invocation. (line 59)
+* --skip-chars: uniq invocation. (line 42)
+* --skip-chdir: chroot invocation. (line 37)
+* --skip-fields: uniq invocation. (line 31)
+* --sleep-interval: tail invocation. (line 175)
+* --sort: sort invocation. (line 105)
+* --sort <1>: sort invocation. (line 132)
+* --sort <2>: sort invocation. (line 156)
+* --sort <3>: sort invocation. (line 166)
+* --sort <4>: sort invocation. (line 195)
+* --sort <5>: Sorting the output. (line 32)
+* --sort <6>: Sorting the output. (line 36)
+* --sort <7>: Sorting the output. (line 64)
+* --sort <8>: Sorting the output. (line 71)
+* --sort <9>: Sorting the output. (line 77)
+* --sort <10>: Sorting the output. (line 83)
+* --spaces: fold invocation. (line 29)
+* --sparse=WHEN: cp invocation. (line 306)
+* --split-only: fmt invocation. (line 47)
+* --split-string: env invocation. (line 192)
+* --squeeze-blank: cat invocation. (line 37)
+* --squeeze-repeats: tr invocation. (line 42)
+* --stable: sort invocation. (line 315)
+* --starting-line-number: nl invocation. (line 113)
+* --status: cksum common options.
+ (line 68)
+* --strict: cksum common options.
+ (line 104)
+* --strings: od invocation. (line 81)
+* --strip: install invocation. (line 117)
+* --strip <1>: realpath invocation. (line 64)
+* --strip-program: install invocation. (line 120)
+* --strip-trailing-slashes: cp invocation. (line 345)
+* --strip-trailing-slashes <1>: mv invocation. (line 125)
+* --suffix: Backup options. (line 49)
+* --suffix <1>: cp invocation. (line 358)
+* --suffix <2>: install invocation. (line 124)
+* --suffix <3>: mv invocation. (line 130)
+* --suffix <4>: ln invocation. (line 168)
+* --suffix <5>: basename invocation. (line 38)
+* --suffix <6>: mktemp invocation. (line 113)
+* --suffix <7>: numfmt invocation. (line 99)
+* --suffix-format: csplit invocation. (line 68)
+* --suffix-length: split invocation. (line 113)
+* --summarize: du invocation. (line 155)
+* --suppress-matched: csplit invocation. (line 90)
+* --symbolic: ln invocation. (line 162)
+* --symbolic-link: cp invocation. (line 350)
+* --sync: df invocation. (line 175)
+* --sysv: sum invocation. (line 29)
+* --tabs: expand invocation. (line 22)
+* --tabs <1>: unexpand invocation. (line 24)
+* --tabsize: General output formatting.
+ (line 129)
+* --tag: cksum common options.
+ (line 77)
+* --tagged-paragraph: fmt invocation. (line 40)
+* --target-directory: Target directory. (line 31)
+* --target-directory <1>: cp invocation. (line 363)
+* --target-directory <2>: install invocation. (line 129)
+* --target-directory <3>: mv invocation. (line 135)
+* --target-directory <4>: ln invocation. (line 173)
+* --temporary-directory: sort invocation. (line 358)
+* --terse: stat invocation. (line 70)
+* --text: cksum common options.
+ (line 89)
+* --threshold: du invocation. (line 159)
+* --time: Sorting the output. (line 13)
+* --time <1>: Sorting the output. (line 44)
+* --time <2>: Sorting the output. (line 50)
+* --time <3>: Sorting the output. (line 57)
+* --time <4>: touch invocation. (line 48)
+* --time <5>: touch invocation. (line 85)
+* --time <6>: du invocation. (line 195)
+* --time <7>: du invocation. (line 202)
+* --time <8>: du invocation. (line 208)
+* --time <9>: who invocation. (line 82)
+* --time-style: Formatting file timestamps.
+ (line 24)
+* --time-style <1>: du invocation. (line 212)
+* --tmpdir: mktemp invocation. (line 105)
+* --to: numfmt invocation. (line 103)
+* --to-unit: numfmt invocation. (line 108)
+* --total: df invocation. (line 181)
+* --total <1>: du invocation. (line 63)
+* --total=WHEN: wc invocation. (line 71)
+* --traditional: od invocation. (line 200)
+* --truncate-set1: tr invocation. (line 47)
+* --type: df invocation. (line 195)
+* --type <1>: chcon invocation. (line 73)
+* --type <2>: runcon invocation. (line 44)
+* --unbuffered: split invocation. (line 159)
+* --uniform-spacing: fmt invocation. (line 53)
+* --unique: sort invocation. (line 374)
+* --unique <1>: uniq invocation. (line 128)
+* --universal: Options for date. (line 135)
+* --unset: env invocation. (line 96)
+* --untagged: cksum general options.
+ (line 52)
+* --update: mv invocation. (line 91)
+* --update[=WHICH]: cp invocation. (line 372)
+* --user: id invocation. (line 47)
+* --user <1>: chcon invocation. (line 65)
+* --user <2>: runcon invocation. (line 36)
+* --userspec: chroot invocation. (line 30)
+* --utc: Options for date. (line 135)
+* --verbose: head invocation. (line 51)
+* --verbose <1>: tail invocation. (line 186)
+* --verbose <2>: split invocation. (line 163)
+* --verbose <3>: cp invocation. (line 407)
+* --verbose <4>: install invocation. (line 139)
+* --verbose <5>: mv invocation. (line 122)
+* --verbose <6>: rm invocation. (line 100)
+* --verbose <7>: shred invocation. (line 159)
+* --verbose <8>: ln invocation. (line 182)
+* --verbose <9>: mkdir invocation. (line 54)
+* --verbose <10>: readlink invocation. (line 61)
+* --verbose <11>: rmdir invocation. (line 30)
+* --verbose <12>: chown invocation. (line 143)
+* --verbose <13>: chgrp invocation. (line 69)
+* --verbose <14>: chmod invocation. (line 63)
+* --verbose <15>: chcon invocation. (line 61)
+* --verbose <16>: timeout invocation. (line 64)
+* --version: Common options. (line 40)
+* --version-sort: sort invocation. (line 183)
+* --warn: cksum common options.
+ (line 99)
+* --width: od invocation. (line 157)
+* --width <1>: fmt invocation. (line 59)
+* --width <2>: pr invocation. (line 229)
+* --width <3>: fold invocation. (line 35)
+* --width <4>: Output formatting in ptx.
+ (line 32)
+* --width <5>: General output formatting.
+ (line 149)
+* --word-regexp: Input processing in ptx.
+ (line 105)
+* --words: wc invocation. (line 55)
+* --wrap: base64 invocation. (line 25)
+* --writable: who invocation. (line 94)
+* --z85: basenc invocation. (line 63)
+* --zero: cksum common options.
+ (line 109)
+* --zero <1>: General output formatting.
+ (line 157)
+* --zero <2>: shred invocation. (line 175)
+* --zero <3>: readlink invocation. (line 65)
+* --zero <4>: basename invocation. (line 42)
+* --zero <5>: dirname invocation. (line 31)
+* --zero <6>: realpath invocation. (line 71)
+* --zero <7>: id invocation. (line 58)
+* --zero-terminated: head invocation. (line 55)
+* --zero-terminated <1>: tail invocation. (line 190)
+* --zero-terminated <2>: sort invocation. (line 389)
+* --zero-terminated <3>: shuf invocation. (line 55)
+* --zero-terminated <4>: uniq invocation. (line 140)
+* --zero-terminated <5>: comm invocation. (line 89)
+* --zero-terminated <6>: cut invocation. (line 94)
+* --zero-terminated <7>: paste invocation. (line 72)
+* --zero-terminated <8>: General options in join.
+ (line 93)
+* --zero-terminated <9>: numfmt invocation. (line 115)
+* -0: du invocation. (line 25)
+* -0 <1>: printenv invocation. (line 19)
+* -0 <2>: env invocation. (line 90)
+* -1: comm invocation. (line 23)
+* -1 <1>: General options in join.
+ (line 40)
+* -1 <2>: General output formatting.
+ (line 16)
+* -2: comm invocation. (line 23)
+* -2 <1>: General options in join.
+ (line 43)
+* -3: comm invocation. (line 23)
+* -A: cat invocation. (line 16)
+* -A <1>: od invocation. (line 36)
+* -a: od invocation. (line 169)
+* -a <1>: pr invocation. (line 62)
+* -a <2>: split invocation. (line 113)
+* -a <3>: cksum general options.
+ (line 5)
+* -A <2>: Output formatting in ptx.
+ (line 45)
+* -a <4>: General options in join.
+ (line 10)
+* -a <5>: unexpand invocation. (line 51)
+* -a <6>: Which files are listed.
+ (line 13)
+* -A <3>: Which files are listed.
+ (line 17)
+* -a <7>: cp invocation. (line 63)
+* -a <8>: touch invocation. (line 48)
+* -a <9>: df invocation. (line 42)
+* -a <10>: du invocation. (line 31)
+* -a <11>: Connectives for test.
+ (line 29)
+* -a <12>: tee invocation. (line 26)
+* -a <13>: basename invocation. (line 32)
+* -a <14>: stty invocation. (line 26)
+* -a <15>: who invocation. (line 35)
+* -a <16>: uname invocation. (line 30)
+* -b: Backup options. (line 13)
+* -b <1>: cat invocation. (line 20)
+* -b <2>: tac invocation. (line 21)
+* -b <3>: nl invocation. (line 45)
+* -b <4>: od invocation. (line 172)
+* -b <5>: fold invocation. (line 23)
+* -b <6>: split invocation. (line 41)
+* -b <7>: csplit invocation. (line 68)
+* -b <8>: cksum common options.
+ (line 5)
+* -b <9>: sort invocation. (line 79)
+* -b <10>: Input processing in ptx.
+ (line 8)
+* -b <11>: cut invocation. (line 26)
+* -B: Which files are listed.
+ (line 23)
+* -b <12>: Formatting the file names.
+ (line 11)
+* -b <13>: dircolors invocation.
+ (line 34)
+* -b <14>: cp invocation. (line 79)
+* -b <15>: install invocation. (line 41)
+* -b <16>: mv invocation. (line 56)
+* -b <17>: ln invocation. (line 82)
+* -B <1>: df invocation. (line 54)
+* -B <2>: du invocation. (line 54)
+* -b <18>: du invocation. (line 59)
+* -b <19>: File type tests. (line 10)
+* -b <20>: who invocation. (line 39)
+* -c: od invocation. (line 175)
+* -c <1>: fmt invocation. (line 34)
+* -c <2>: pr invocation. (line 68)
+* -c <3>: head invocation. (line 24)
+* -c <4>: tail invocation. (line 39)
+* -C: split invocation. (line 56)
+* -c <5>: wc invocation. (line 46)
+* -c <6>: sort invocation. (line 39)
+* -c <7>: sort invocation. (line 47)
+* -c <8>: shuf invocation. (line 19)
+* -c <9>: uniq invocation. (line 56)
+* -c <10>: cut invocation. (line 34)
+* -c <11>: tr invocation. (line 31)
+* -C <1>: tr invocation. (line 31)
+* -c <12>: Sorting the output. (line 13)
+* -C <2>: General output formatting.
+ (line 21)
+* -c <13>: dircolors invocation.
+ (line 40)
+* -C <3>: install invocation. (line 46)
+* -c <14>: install invocation. (line 57)
+* -c <15>: chown invocation. (line 74)
+* -c <16>: chgrp invocation. (line 24)
+* -c <17>: chmod invocation. (line 43)
+* -c <18>: touch invocation. (line 52)
+* -c <19>: du invocation. (line 63)
+* -c <20>: stat invocation. (line 50)
+* -c <21>: truncate invocation. (line 22)
+* -c <22>: File type tests. (line 13)
+* -c <23>: runcon invocation. (line 32)
+* -C <4>: env invocation. (line 107)
+* -COLUMN: pr invocation. (line 49)
+* -d: nl invocation. (line 63)
+* -d <1>: od invocation. (line 179)
+* -d <2>: base64 invocation. (line 33)
+* -d <3>: pr invocation. (line 74)
+* -d <4>: split invocation. (line 121)
+* -d <5>: sort invocation. (line 87)
+* -d <6>: uniq invocation. (line 64)
+* -D: uniq invocation. (line 70)
+* -d <7>: cut invocation. (line 66)
+* -d <8>: paste invocation. (line 61)
+* -d <9>: tr invocation. (line 38)
+* -d <10>: Which files are listed.
+ (line 28)
+* -D <1>: What information is listed.
+ (line 16)
+* -d <11>: cp invocation. (line 109)
+* -D <2>: install invocation. (line 60)
+* -d <12>: install invocation. (line 67)
+* -d <13>: rm invocation. (line 35)
+* -d <14>: ln invocation. (line 88)
+* -d <15>: touch invocation. (line 56)
+* -D <3>: du invocation. (line 69)
+* -d <16>: File type tests. (line 16)
+* -d <17>: mktemp invocation. (line 85)
+* -d <18>: who invocation. (line 43)
+* -d <19>: Options for date. (line 15)
+* -d <20>: numfmt invocation. (line 34)
+* -d DEPTH: du invocation. (line 76)
+* -e: cat invocation. (line 23)
+* -E: cat invocation. (line 27)
+* -e <1>: pr invocation. (line 98)
+* -e <2>: split invocation. (line 144)
+* -e <3>: General options in join.
+ (line 21)
+* -e <4>: readlink invocation. (line 38)
+* -e <5>: echo invocation. (line 32)
+* -E <1>: echo invocation. (line 68)
+* -e <6>: File characteristic tests.
+ (line 9)
+* -e <7>: realpath invocation. (line 22)
+* -e <8>: stdbuf invocation. (line 34)
+* -ef: File characteristic tests.
+ (line 23)
+* -eq: Numeric tests. (line 16)
+* -f: nl invocation. (line 72)
+* -f <1>: od invocation. (line 182)
+* -F: pr invocation. (line 106)
+* -f <2>: pr invocation. (line 106)
+* -f <3>: tail invocation. (line 57)
+* -F <1>: tail invocation. (line 109)
+* -f <4>: csplit invocation. (line 64)
+* -f <5>: sort invocation. (line 94)
+* -f <6>: uniq invocation. (line 31)
+* -f <7>: Charset selection in ptx.
+ (line 20)
+* -F <2>: Output formatting in ptx.
+ (line 71)
+* -f <8>: cut invocation. (line 43)
+* -f <9>: Sorting the output. (line 18)
+* -F <3>: General output formatting.
+ (line 52)
+* -f <10>: cp invocation. (line 119)
+* -f <11>: mv invocation. (line 65)
+* -f <12>: rm invocation. (line 39)
+* -f <13>: shred invocation. (line 123)
+* -F <4>: ln invocation. (line 88)
+* -f <14>: ln invocation. (line 94)
+* -f <15>: readlink invocation. (line 31)
+* -f <16>: chown invocation. (line 80)
+* -f <17>: chgrp invocation. (line 30)
+* -f <18>: chmod invocation. (line 49)
+* -f <19>: touch invocation. (line 66)
+* -f <20>: stat invocation. (line 28)
+* -f <21>: File type tests. (line 19)
+* -F <5>: stty invocation. (line 31)
+* -f <22>: Options for date. (line 34)
+* -f <23>: seq invocation. (line 29)
+* -g: fmt invocation. (line 64)
+* -g <1>: sort invocation. (line 105)
+* -g <2>: Output formatting in ptx.
+ (line 26)
+* -g <3>: What information is listed.
+ (line 108)
+* -G: What information is listed.
+ (line 112)
+* -g <4>: install invocation. (line 77)
+* -g <5>: Access permission tests.
+ (line 9)
+* -G <1>: Access permission tests.
+ (line 31)
+* -g <6>: stty invocation. (line 41)
+* -g <7>: id invocation. (line 29)
+* -G <2>: id invocation. (line 33)
+* -ge: Numeric tests. (line 16)
+* -gt: Numeric tests. (line 16)
+* -h: Block size. (line 131)
+* -H: Traversing symlinks. (line 18)
+* -h <1>: nl invocation. (line 76)
+* -h <2>: pr invocation. (line 111)
+* -h <3>: sort invocation. (line 132)
+* -H <1>: Which files are listed.
+ (line 36)
+* -h <4>: What information is listed.
+ (line 118)
+* -H <2>: cp invocation. (line 136)
+* -h <5>: chown invocation. (line 119)
+* -H <3>: chown invocation. (line 154)
+* -h <6>: chgrp invocation. (line 46)
+* -H <4>: chgrp invocation. (line 81)
+* -h <7>: touch invocation. (line 70)
+* -h <8>: df invocation. (line 59)
+* -H <5>: df invocation. (line 65)
+* -H <6>: du invocation. (line 94)
+* -h <9>: du invocation. (line 98)
+* -h <10>: File type tests. (line 23)
+* -H <7>: who invocation. (line 47)
+* -h <11>: chcon invocation. (line 26)
+* -H <8>: chcon invocation. (line 47)
+* -h <12>: factor invocation. (line 18)
+* -i: nl invocation. (line 80)
+* -i <1>: od invocation. (line 185)
+* -i <2>: base64 invocation. (line 39)
+* -i <3>: pr invocation. (line 117)
+* -i <4>: sort invocation. (line 149)
+* -i <5>: shuf invocation. (line 23)
+* -i <6>: uniq invocation. (line 60)
+* -i <7>: Input processing in ptx.
+ (line 26)
+* -i <8>: General options in join.
+ (line 35)
+* -i <9>: expand invocation. (line 46)
+* -I: Which files are listed.
+ (line 70)
+* -i <10>: What information is listed.
+ (line 125)
+* -i <11>: cp invocation. (line 143)
+* -i <12>: mv invocation. (line 71)
+* -i <13>: rm invocation. (line 43)
+* -I <1>: rm invocation. (line 49)
+* -i <14>: ln invocation. (line 98)
+* -i <15>: df invocation. (line 69)
+* -i <16>: tee invocation. (line 31)
+* -i <17>: uname invocation. (line 35)
+* -i <18>: env invocation. (line 102)
+* -i <19>: stdbuf invocation. (line 26)
+* -I[TIMESPEC]: Options for date. (line 42)
+* -j: od invocation. (line 59)
+* -J: pr invocation. (line 124)
+* -k: Block size. (line 131)
+* -k <1>: csplit invocation. (line 87)
+* -k <2>: sort invocation. (line 237)
+* -k <3>: General output formatting.
+ (line 101)
+* -k <4>: df invocation. (line 75)
+* -k <5>: du invocation. (line 113)
+* -k <6>: Access permission tests.
+ (line 12)
+* -k <7>: timeout invocation. (line 41)
+* -L: Traversing symlinks. (line 22)
+* -l: nl invocation. (line 85)
+* -l <1>: od invocation. (line 188)
+* -l <2>: pr invocation. (line 133)
+* -l <3>: split invocation. (line 33)
+* -l <4>: wc invocation. (line 60)
+* -L <1>: wc invocation. (line 66)
+* -l <5>: cksum general options.
+ (line 39)
+* -l <6>: b2sum invocation. (line 24)
+* -L <2>: Which files are listed.
+ (line 84)
+* -l <7>: What information is listed.
+ (line 133)
+* -l <8>: cp invocation. (line 149)
+* -L <3>: cp invocation. (line 153)
+* -L <4>: ln invocation. (line 103)
+* -L <5>: chown invocation. (line 159)
+* -L <6>: chgrp invocation. (line 86)
+* -l <9>: df invocation. (line 81)
+* -L <7>: du invocation. (line 119)
+* -l <10>: du invocation. (line 125)
+* -L <8>: stat invocation. (line 22)
+* -L <9>: File type tests. (line 23)
+* -L <10>: realpath invocation. (line 35)
+* -L <11>: pwd invocation. (line 15)
+* -l <11>: who invocation. (line 51)
+* -L <12>: chcon invocation. (line 52)
+* -l <12>: chcon invocation. (line 77)
+* -l <13>: runcon invocation. (line 48)
+* -le: Numeric tests. (line 16)
+* -lt: Numeric tests. (line 16)
+* -m: pr invocation. (line 140)
+* -m <1>: wc invocation. (line 50)
+* -m <2>: sort invocation. (line 53)
+* -M: sort invocation. (line 156)
+* -M <1>: Output formatting in ptx.
+ (line 94)
+* -m <3>: General output formatting.
+ (line 114)
+* -m <4>: install invocation. (line 83)
+* -m <5>: mkdir invocation. (line 19)
+* -m <6>: mkfifo invocation. (line 21)
+* -m <7>: mknod invocation. (line 47)
+* -m <8>: readlink invocation. (line 45)
+* -m <9>: touch invocation. (line 85)
+* -m <10>: du invocation. (line 129)
+* -m <11>: realpath invocation. (line 30)
+* -m <12>: who invocation. (line 61)
+* -m <13>: uname invocation. (line 42)
+* -n: cat invocation. (line 32)
+* -n <1>: nl invocation. (line 93)
+* -N: od invocation. (line 76)
+* -n <2>: pr invocation. (line 153)
+* -N <1>: pr invocation. (line 174)
+* -n <3>: head invocation. (line 40)
+* -n <4>: tail invocation. (line 126)
+* -n <5>: split invocation. (line 79)
+* -n <6>: csplit invocation. (line 82)
+* -n <7>: sort invocation. (line 166)
+* -n <8>: shuf invocation. (line 31)
+* -n <9>: cut invocation. (line 70)
+* -n <10>: What information is listed.
+ (line 227)
+* -N <2>: Formatting the file names.
+ (line 17)
+* -n <11>: cp invocation. (line 160)
+* -n <12>: mv invocation. (line 78)
+* -n <13>: ln invocation. (line 109)
+* -n <14>: readlink invocation. (line 50)
+* -n <15>: echo invocation. (line 29)
+* -N <3>: File characteristic tests.
+ (line 27)
+* -n <16>: String tests. (line 19)
+* -n <17>: id invocation. (line 37)
+* -n <18>: uname invocation. (line 47)
+* -n <19>: nice invocation. (line 51)
+* -n NUMBER: shred invocation. (line 127)
+* -ne: Numeric tests. (line 16)
+* -nt: File characteristic tests.
+ (line 15)
+* -o: od invocation. (line 191)
+* -o <1>: pr invocation. (line 180)
+* -o <2>: sort invocation. (line 294)
+* -o <3>: shuf invocation. (line 36)
+* -o <4>: Input processing in ptx.
+ (line 35)
+* -O: Output formatting in ptx.
+ (line 100)
+* -o <5>: What information is listed.
+ (line 231)
+* -o <6>: install invocation. (line 95)
+* -o <7>: truncate invocation. (line 26)
+* -O <1>: Access permission tests.
+ (line 28)
+* -o <8>: Connectives for test.
+ (line 33)
+* -o <9>: uname invocation. (line 58)
+* -o <10>: stdbuf invocation. (line 30)
+* -ot: File characteristic tests.
+ (line 19)
+* -P: Traversing symlinks. (line 26)
+* -p: nl invocation. (line 104)
+* -p <1>: General output formatting.
+ (line 120)
+* -p <2>: dircolors invocation.
+ (line 45)
+* -P <1>: cp invocation. (line 166)
+* -p <3>: cp invocation. (line 173)
+* -p <4>: install invocation. (line 107)
+* -P <2>: ln invocation. (line 128)
+* -p <5>: mkdir invocation. (line 36)
+* -p <6>: rmdir invocation. (line 21)
+* -P <3>: chown invocation. (line 172)
+* -P <4>: chgrp invocation. (line 99)
+* -P <5>: df invocation. (line 149)
+* -P <6>: du invocation. (line 135)
+* -p <7>: File type tests. (line 28)
+* -p <8>: tee invocation. (line 35)
+* -p <9>: pathchk invocation. (line 27)
+* -P <7>: pathchk invocation. (line 40)
+* -p <10>: mktemp invocation. (line 105)
+* -P <8>: realpath invocation. (line 40)
+* -P <9>: pwd invocation. (line 22)
+* -p <11>: who invocation. (line 65)
+* -p <12>: uname invocation. (line 51)
+* -P <10>: chcon invocation. (line 56)
+* -q: head invocation. (line 47)
+* -q <1>: tail invocation. (line 155)
+* -q <2>: csplit invocation. (line 107)
+* -q <3>: Formatting the file names.
+ (line 23)
+* -Q: Formatting the file names.
+ (line 30)
+* -q <4>: readlink invocation. (line 57)
+* -q <5>: mktemp invocation. (line 92)
+* -q <6>: realpath invocation. (line 46)
+* -q <7>: who invocation. (line 69)
+* -r: tac invocation. (line 26)
+* -r <1>: pr invocation. (line 187)
+* -r <2>: sum invocation. (line 23)
+* -r <3>: sort invocation. (line 189)
+* -R: sort invocation. (line 195)
+* -r <4>: shuf invocation. (line 47)
+* -r <5>: Input processing in ptx.
+ (line 48)
+* -R <1>: Output formatting in ptx.
+ (line 56)
+* -R <2>: Which files are listed.
+ (line 91)
+* -r <6>: Sorting the output. (line 25)
+* -R <3>: cp invocation. (line 262)
+* -r <7>: cp invocation. (line 262)
+* -r <8>: rm invocation. (line 96)
+* -R <4>: rm invocation. (line 96)
+* -r <9>: ln invocation. (line 137)
+* -R <5>: chown invocation. (line 151)
+* -R <6>: chgrp invocation. (line 77)
+* -R <7>: chmod invocation. (line 73)
+* -r <10>: touch invocation. (line 89)
+* -r <11>: truncate invocation. (line 30)
+* -r <12>: Access permission tests.
+ (line 15)
+* -r <13>: id invocation. (line 42)
+* -r <14>: who invocation. (line 74)
+* -r <15>: Options for date. (line 71)
+* -R <8>: Options for date. (line 85)
+* -r <16>: uname invocation. (line 62)
+* -R <9>: chcon invocation. (line 35)
+* -r <17>: chcon invocation. (line 69)
+* -r <18>: runcon invocation. (line 40)
+* -S: Backup options. (line 49)
+* -s: cat invocation. (line 37)
+* -s <1>: tac invocation. (line 30)
+* -s <2>: nl invocation. (line 108)
+* -S <1>: od invocation. (line 81)
+* -s <3>: od invocation. (line 194)
+* -s <4>: fmt invocation. (line 47)
+* -s <5>: pr invocation. (line 192)
+* -S <2>: pr invocation. (line 201)
+* -s <6>: fold invocation. (line 29)
+* -s <7>: tail invocation. (line 175)
+* -s <8>: csplit invocation. (line 107)
+* -s <9>: sum invocation. (line 29)
+* -s <10>: sort invocation. (line 315)
+* -S <3>: sort invocation. (line 322)
+* -s <11>: uniq invocation. (line 42)
+* -S <4>: Input processing in ptx.
+ (line 65)
+* -s <12>: cut invocation. (line 74)
+* -s <13>: paste invocation. (line 52)
+* -s <14>: tr invocation. (line 42)
+* -s <15>: What information is listed.
+ (line 236)
+* -S <5>: Sorting the output. (line 32)
+* -s <16>: cp invocation. (line 350)
+* -S <6>: cp invocation. (line 358)
+* -s <17>: install invocation. (line 117)
+* -S <7>: install invocation. (line 124)
+* -S <8>: mv invocation. (line 130)
+* -s <18>: ln invocation. (line 162)
+* -S <9>: ln invocation. (line 168)
+* -s <19>: readlink invocation. (line 57)
+* -S <10>: du invocation. (line 140)
+* -s <20>: du invocation. (line 155)
+* -s <21>: truncate invocation. (line 34)
+* -S <11>: File type tests. (line 31)
+* -s <22>: File characteristic tests.
+ (line 12)
+* -s <23>: basename invocation. (line 38)
+* -s <24>: realpath invocation. (line 64)
+* -s <25>: tty invocation. (line 18)
+* -s <26>: who invocation. (line 78)
+* -s <27>: Options for date. (line 129)
+* -s <28>: uname invocation. (line 66)
+* -S <12>: env invocation. (line 192)
+* -s <29>: timeout invocation. (line 58)
+* -s <30>: seq invocation. (line 45)
+* -s BYTES: shred invocation. (line 138)
+* -S, env and single quotes: env invocation. (line 268)
+* -t: cat invocation. (line 41)
+* -T: cat invocation. (line 45)
+* -t <1>: od invocation. (line 90)
+* -t <2>: fmt invocation. (line 40)
+* -t <3>: pr invocation. (line 210)
+* -T <1>: pr invocation. (line 220)
+* -t <4>: split invocation. (line 152)
+* -t <5>: cksum common options.
+ (line 89)
+* -t <6>: sort invocation. (line 338)
+* -T <2>: sort invocation. (line 358)
+* -T <3>: Output formatting in ptx.
+ (line 118)
+* -t <7>: tr invocation. (line 47)
+* -t <8>: expand invocation. (line 22)
+* -t <9>: unexpand invocation. (line 24)
+* -t <10>: Sorting the output. (line 36)
+* -T <4>: General output formatting.
+ (line 129)
+* -t <11>: cp invocation. (line 363)
+* -T <5>: cp invocation. (line 367)
+* -t <12>: install invocation. (line 129)
+* -T <6>: install invocation. (line 134)
+* -t <13>: mv invocation. (line 135)
+* -T <7>: mv invocation. (line 139)
+* -t <14>: ln invocation. (line 173)
+* -T <8>: ln invocation. (line 177)
+* -t <15>: df invocation. (line 195)
+* -T <9>: df invocation. (line 201)
+* -t <16>: du invocation. (line 159)
+* -t <17>: stat invocation. (line 70)
+* -t <18>: File type tests. (line 34)
+* -t <19>: mktemp invocation. (line 121)
+* -t <20>: who invocation. (line 82)
+* -T <10>: who invocation. (line 94)
+* -t <21>: chcon invocation. (line 73)
+* -t <22>: runcon invocation. (line 44)
+* -u: cat invocation. (line 48)
+* -u <1>: fmt invocation. (line 53)
+* -u <2>: split invocation. (line 159)
+* -u <3>: sort invocation. (line 374)
+* -u <4>: uniq invocation. (line 128)
+* -u <5>: Sorting the output. (line 44)
+* -U: Sorting the output. (line 64)
+* -u <6>: cp invocation. (line 372)
+* -u <7>: mv invocation. (line 91)
+* -u <8>: shred invocation. (line 144)
+* -u <9>: Access permission tests.
+ (line 18)
+* -u <10>: mktemp invocation. (line 97)
+* -u <11>: id invocation. (line 47)
+* -u <12>: who invocation. (line 85)
+* -u <13>: Options for date. (line 135)
+* -u <14>: chcon invocation. (line 65)
+* -u <15>: runcon invocation. (line 36)
+* -u <16>: env invocation. (line 96)
+* -v: cat invocation. (line 52)
+* -v <1>: nl invocation. (line 113)
+* -v <2>: od invocation. (line 150)
+* -v <3>: pr invocation. (line 225)
+* -v <4>: head invocation. (line 51)
+* -v <5>: tail invocation. (line 186)
+* -V: sort invocation. (line 183)
+* -v <6>: Sorting the output. (line 71)
+* -v <7>: cp invocation. (line 407)
+* -v <8>: install invocation. (line 139)
+* -v <9>: mv invocation. (line 122)
+* -v <10>: rm invocation. (line 100)
+* -v <11>: shred invocation. (line 159)
+* -v <12>: ln invocation. (line 182)
+* -v <13>: mkdir invocation. (line 54)
+* -v <14>: readlink invocation. (line 61)
+* -v <15>: rmdir invocation. (line 30)
+* -v <16>: chown invocation. (line 143)
+* -v <17>: chgrp invocation. (line 69)
+* -v <18>: chmod invocation. (line 63)
+* -v <19>: uname invocation. (line 77)
+* -v <20>: chcon invocation. (line 61)
+* -v <21>: env invocation. (line 177)
+* -v <22>: timeout invocation. (line 64)
+* -w: nl invocation. (line 118)
+* -w <1>: od invocation. (line 157)
+* -w <2>: base64 invocation. (line 25)
+* -w <3>: fmt invocation. (line 59)
+* -w <4>: pr invocation. (line 229)
+* -W: pr invocation. (line 239)
+* -w <5>: fold invocation. (line 35)
+* -w <6>: wc invocation. (line 55)
+* -w <7>: cksum common options.
+ (line 99)
+* -w <8>: uniq invocation. (line 134)
+* -W <1>: Input processing in ptx.
+ (line 105)
+* -w <9>: Output formatting in ptx.
+ (line 32)
+* -w <10>: General output formatting.
+ (line 149)
+* -w <11>: Access permission tests.
+ (line 21)
+* -w <12>: who invocation. (line 94)
+* -w <13>: seq invocation. (line 50)
+* -WIDTH: fmt invocation. (line 59)
+* -x: od invocation. (line 197)
+* -x <1>: split invocation. (line 135)
+* -X: Sorting the output. (line 83)
+* -x <2>: General output formatting.
+ (line 125)
+* -x <3>: cp invocation. (line 411)
+* -x <4>: shred invocation. (line 164)
+* -x <5>: df invocation. (line 224)
+* -x <6>: du invocation. (line 261)
+* -x <7>: Access permission tests.
+ (line 24)
+* -X FILE: du invocation. (line 250)
+* -z: head invocation. (line 55)
+* -z <1>: tail invocation. (line 190)
+* -z <2>: csplit invocation. (line 96)
+* -z <3>: cksum common options.
+ (line 109)
+* -z <4>: sort invocation. (line 389)
+* -z <5>: shuf invocation. (line 55)
+* -z <6>: uniq invocation. (line 140)
+* -z <7>: comm invocation. (line 89)
+* -z <8>: cut invocation. (line 94)
+* -z <9>: paste invocation. (line 72)
+* -z <10>: General options in join.
+ (line 93)
+* -Z: What information is listed.
+ (line 259)
+* -Z <1>: cp invocation. (line 417)
+* -Z <2>: install invocation. (line 143)
+* -Z <3>: mv invocation. (line 144)
+* -z <11>: shred invocation. (line 175)
+* -Z <4>: mkdir invocation. (line 59)
+* -Z <5>: mkfifo invocation. (line 28)
+* -Z <6>: mknod invocation. (line 53)
+* -z <12>: readlink invocation. (line 65)
+* -z <13>: String tests. (line 15)
+* -z <14>: basename invocation. (line 42)
+* -z <15>: dirname invocation. (line 31)
+* -z <16>: realpath invocation. (line 71)
+* -Z <7>: id invocation. (line 51)
+* -z <17>: id invocation. (line 58)
+* -z <18>: numfmt invocation. (line 115)
+* /: Numeric expressions. (line 16)
+* 128-bit checksum: md5sum invocation. (line 6)
+* 16-bit checksum: sum invocation. (line 6)
+* 160-bit checksum: sha1sum invocation. (line 6)
+* 224-bit checksum: sha2 utilities. (line 6)
+* 256-bit checksum: sha2 utilities. (line 6)
+* 32-bit checksum: cksum invocation. (line 6)
+* 384-bit checksum: sha2 utilities. (line 6)
+* 512-bit checksum: b2sum invocation. (line 6)
+* 512-bit checksum <1>: sha2 utilities. (line 6)
+* <: Relations for expr. (line 22)
+* <=: Relations for expr. (line 22)
+* =: Relations for expr. (line 22)
+* = <1>: String tests. (line 22)
+* ==: Relations for expr. (line 22)
+* == <1>: String tests. (line 25)
+* >: Relations for expr. (line 22)
+* >=: Relations for expr. (line 22)
+* \( regexp operator: String expressions. (line 23)
+* \+ regexp operator: String expressions. (line 27)
+* \? regexp operator: String expressions. (line 27)
+* \c: printf invocation. (line 28)
+* \OOO: printf invocation. (line 67)
+* \uhhhh: printf invocation. (line 74)
+* \Uhhhhhhhh: printf invocation. (line 74)
+* \xHH: printf invocation. (line 67)
+* \| regexp operator: String expressions. (line 27)
+* _POSIX2_VERSION: Standards conformance.
+ (line 20)
+* _POSIX2_VERSION <1>: tail invocation. (line 205)
+* _POSIX2_VERSION <2>: sort invocation. (line 421)
+* _POSIX2_VERSION <3>: uniq invocation. (line 47)
+* _POSIX2_VERSION <4>: touch invocation. (line 107)
+* |: Relations for expr. (line 11)
+* abbreviations for months: Calendar date items. (line 36)
+* access control lists (ACLs): cp invocation. (line 178)
+* access control lists (ACLs) <1>: cp invocation. (line 220)
+* access permission tests: Access permission tests.
+ (line 6)
+* access permissions, changing: chmod invocation. (line 6)
+* access time, changing: touch invocation. (line 48)
+* access timestamp: dd invocation. (line 324)
+* access timestamp, printing or sorting files by: Sorting the output.
+ (line 44)
+* access timestamp, show the most recent: du invocation. (line 208)
+* across columns: pr invocation. (line 62)
+* across, listing files: General output formatting.
+ (line 125)
+* adding permissions: Setting Permissions. (line 35)
+* addition: Numeric expressions. (line 12)
+* ago in date strings: Relative items in date strings.
+ (line 23)
+* all lines, grouping: uniq invocation. (line 101)
+* all repeated lines, outputting: uniq invocation. (line 70)
+* alnum: Character arrays. (line 108)
+* alpha: Character arrays. (line 110)
+* alternate ebcdic, converting to: dd invocation. (line 149)
+* always classify option: General output formatting.
+ (line 59)
+* always color option: General output formatting.
+ (line 32)
+* always hyperlink option: General output formatting.
+ (line 77)
+* always interactive option: rm invocation. (line 60)
+* always total option: wc invocation. (line 76)
+* am i: who invocation. (line 21)
+* am in date strings: Time of day items. (line 21)
+* and operator: Connectives for test.
+ (line 29)
+* and operator <1>: Relations for expr. (line 17)
+* append: dd invocation. (line 253)
+* appending to the output file: dd invocation. (line 253)
+* appropriate privileges: install invocation. (line 95)
+* appropriate privileges <1>: Setting the time. (line 6)
+* appropriate privileges <2>: hostname invocation. (line 6)
+* appropriate privileges <3>: nice invocation. (line 6)
+* arbitrary date strings, debugging: Options for date. (line 29)
+* arbitrary date strings, parsing: Options for date. (line 15)
+* arbitrary text, displaying: echo invocation. (line 6)
+* arch: arch invocation. (line 6)
+* arithmetic tests: Numeric tests. (line 6)
+* arrays of characters in tr: Character arrays. (line 6)
+* ASCII dump of files: od invocation. (line 6)
+* ascii, converting to: dd invocation. (line 138)
+* atime: File timestamps. (line 6)
+* atime, changing: touch invocation. (line 48)
+* atime, printing or sorting files by: Sorting the output. (line 44)
+* atime, show the most recent: du invocation. (line 208)
+* attribute caching: stat invocation. (line 33)
+* attributes, file: Changing file attributes.
+ (line 6)
+* authors of parse_datetime: Authors of parse_datetime.
+ (line 6)
+* auto classify option: General output formatting.
+ (line 58)
+* auto color option: General output formatting.
+ (line 31)
+* auto hyperlink option: General output formatting.
+ (line 76)
+* auto total option: wc invocation. (line 73)
+* b for block special file: mknod invocation. (line 31)
+* b2sum: b2sum invocation. (line 6)
+* background jobs, stopping at terminal write: Local. (line 41)
+* backslash escapes: Character arrays. (line 30)
+* backslash escapes <1>: echo invocation. (line 32)
+* backslash escapes <2>: echo invocation. (line 68)
+* backslash sequences for file names: Formatting the file names.
+ (line 11)
+* backup files, ignoring: Which files are listed.
+ (line 23)
+* backup options: Backup options. (line 6)
+* backup suffix: Backup options. (line 49)
+* backups, making: Backup options. (line 13)
+* backups, making <1>: cp invocation. (line 79)
+* backups, making <2>: install invocation. (line 41)
+* backups, making <3>: mv invocation. (line 56)
+* backups, making <4>: ln invocation. (line 82)
+* backups, making only: cp invocation. (line 51)
+* base32: base32 invocation. (line 6)
+* base32 encoding: base32 invocation. (line 6)
+* base32 encoding <1>: basenc invocation. (line 6)
+* base64: base64 invocation. (line 6)
+* base64 checksum encoding: cksum general options.
+ (line 23)
+* Base64 decoding: base64 invocation. (line 33)
+* base64 encoding: base64 invocation. (line 6)
+* basename: basename invocation. (line 6)
+* basenc: basenc invocation. (line 6)
+* baud rate, setting: Special. (line 54)
+* beeping at input buffer full: Input. (line 59)
+* beginning of time: Time conversion specifiers.
+ (line 32)
+* beginning of time, for POSIX: Seconds since the Epoch.
+ (line 13)
+* Bellovin, Steven M.: Authors of parse_datetime.
+ (line 6)
+* Berets, Jim: Authors of parse_datetime.
+ (line 6)
+* Berry, K.: Introduction. (line 29)
+* Berry, K. <1>: Authors of parse_datetime.
+ (line 19)
+* binary: dd invocation. (line 341)
+* binary I/O: dd invocation. (line 341)
+* binary input files: cksum common options.
+ (line 5)
+* bind mount: rm invocation. (line 68)
+* bind mount <1>: stat invocation. (line 199)
+* birth time, printing or sorting files by: Sorting the output.
+ (line 57)
+* birthtime: File timestamps. (line 6)
+* BLAKE2: b2sum invocation. (line 6)
+* BLAKE2 hash length: cksum general options.
+ (line 39)
+* BLAKE2 hash length <1>: b2sum invocation. (line 24)
+* blank: Character arrays. (line 112)
+* blank lines, numbering: nl invocation. (line 85)
+* blanks, ignoring leading: sort invocation. (line 79)
+* block (space-padding): dd invocation. (line 159)
+* block size: Block size. (line 6)
+* block size <1>: dd invocation. (line 60)
+* block size of conversion: dd invocation. (line 67)
+* block size of input: dd invocation. (line 52)
+* block size of output: dd invocation. (line 56)
+* block special check: File type tests. (line 10)
+* block special files: mknod invocation. (line 11)
+* block special files, creating: mknod invocation. (line 6)
+* BLOCKSIZE: Block size. (line 12)
+* BLOCK_SIZE: Block size. (line 12)
+* body, numbering: nl invocation. (line 17)
+* Bourne shell syntax for color setup: dircolors invocation.
+ (line 34)
+* breaks, cause interrupts: Input. (line 12)
+* breaks, ignoring: Input. (line 9)
+* brkint: Input. (line 12)
+* bs: dd invocation. (line 60)
+* BSD output: cksum common options.
+ (line 77)
+* BSD sum: sum invocation. (line 23)
+* BSD tail: tail invocation. (line 26)
+* BSD touch compatibility: touch invocation. (line 66)
+* bsN: Output. (line 55)
+* btrfs file system type: df invocation. (line 212)
+* bugs, reporting: Introduction. (line 12)
+* built-in shell commands, conflicts with: mknod invocation. (line 20)
+* built-in shell commands, conflicts with <1>: stat invocation.
+ (line 15)
+* built-in shell commands, conflicts with <2>: echo invocation.
+ (line 11)
+* built-in shell commands, conflicts with <3>: printf invocation.
+ (line 16)
+* built-in shell commands, conflicts with <4>: test invocation.
+ (line 28)
+* built-in shell commands, conflicts with <5>: pwd invocation.
+ (line 30)
+* built-in shell commands, conflicts with <6>: nice invocation.
+ (line 38)
+* built-in shell commands, conflicts with <7>: kill invocation.
+ (line 13)
+* built-in shell commands, conflicts with <8>: sleep invocation.
+ (line 40)
+* byte count: wc invocation. (line 6)
+* byte-swapping: od invocation. (line 51)
+* byte-swapping <1>: dd invocation. (line 195)
+* c for character special file: mknod invocation. (line 34)
+* C shell syntax for color setup: dircolors invocation.
+ (line 40)
+* C-s/C-q flow control: Input. (line 40)
+* calendar date item: Calendar date items. (line 6)
+* calling combined multi-call program: Multi-call invocation.
+ (line 6)
+* canonical file name: readlink invocation. (line 6)
+* canonical file name <1>: realpath invocation. (line 6)
+* canonicalize a file name: readlink invocation. (line 6)
+* canonicalize a file name <1>: realpath invocation. (line 6)
+* case folding: sort invocation. (line 94)
+* case translation: Local. (line 36)
+* case, ignored in dates: General date syntax. (line 60)
+* cat: cat invocation. (line 6)
+* cbreak: Combination. (line 52)
+* cbs: dd invocation. (line 67)
+* CD-ROM file system type: df invocation. (line 216)
+* cdfs file system type: df invocation. (line 216)
+* cdtrdsr: Control. (line 44)
+* change or print terminal settings: stty invocation. (line 6)
+* change SELinux context: chcon invocation. (line 6)
+* changed files, verbosely describing: chgrp invocation. (line 24)
+* changed owners, verbosely describing: chown invocation. (line 74)
+* changing access permissions: chmod invocation. (line 6)
+* changing file attributes: Changing file attributes.
+ (line 6)
+* changing file ownership: chown invocation. (line 6)
+* changing file timestamps: touch invocation. (line 6)
+* changing group ownership: chown invocation. (line 6)
+* changing group ownership <1>: chgrp invocation. (line 6)
+* changing security context: chcon invocation. (line 6)
+* changing special mode bits: Changing Special Mode Bits.
+ (line 6)
+* character classes: Character arrays. (line 94)
+* character count: wc invocation. (line 6)
+* character size: Control. (line 24)
+* character special check: File type tests. (line 13)
+* character special files: mknod invocation. (line 11)
+* character special files, creating: mknod invocation. (line 6)
+* characters, special: Characters. (line 6)
+* chcon: chcon invocation. (line 6)
+* check file types: test invocation. (line 6)
+* checking whether a file is sorted: sort invocation. (line 39)
+* checking whether a file is sorted <1>: sort invocation. (line 47)
+* checksum, 128-bit: md5sum invocation. (line 6)
+* checksum, 16-bit: sum invocation. (line 6)
+* checksum, 160-bit: sha1sum invocation. (line 6)
+* checksum, 224-bit: sha2 utilities. (line 6)
+* checksum, 256-bit: sha2 utilities. (line 6)
+* checksum, 32-bit: cksum invocation. (line 6)
+* checksum, 384-bit: sha2 utilities. (line 6)
+* checksum, 512-bit: b2sum invocation. (line 6)
+* checksum, 512-bit <1>: sha2 utilities. (line 6)
+* chgrp: chgrp invocation. (line 6)
+* chmod: chmod invocation. (line 6)
+* chown: chown invocation. (line 6)
+* chroot: chroot invocation. (line 6)
+* cio: dd invocation. (line 261)
+* cksum: cksum invocation. (line 6)
+* clocal: Control. (line 38)
+* clock skew: Formatting file timestamps.
+ (line 11)
+* clock skew <1>: File timestamps. (line 39)
+* clone: cp invocation. (line 275)
+* cmspar: Control. (line 16)
+* cntrl: Character arrays. (line 114)
+* color database, printing: dircolors invocation.
+ (line 45)
+* color setup: dircolors invocation.
+ (line 6)
+* color, distinguishing file types with: General output formatting.
+ (line 28)
+* cols: Special. (line 27)
+* column to wrap data after: base64 invocation. (line 25)
+* COLUMNS: General output formatting.
+ (line 149)
+* COLUMNS <1>: Special. (line 41)
+* columns: Special. (line 27)
+* combination settings: Combination. (line 6)
+* combined: Multi-call invocation.
+ (line 6)
+* combined date and time of day item: Combined date and time of day items.
+ (line 6)
+* comm: comm invocation. (line 6)
+* command-line operands to shuffle: shuf invocation. (line 19)
+* commands for controlling processes: Process control. (line 6)
+* commands for delaying: Delaying. (line 6)
+* commands for exit status: Conditions. (line 6)
+* commands for file name manipulation: File name manipulation.
+ (line 6)
+* commands for invoking other commands: Modified command invocation.
+ (line 6)
+* commands for printing text: Printing text. (line 6)
+* commands for printing the working context: Working context. (line 6)
+* commands for printing user information: User information. (line 6)
+* commands for redirection: Redirection. (line 6)
+* commands for SELinux context: SELinux context. (line 6)
+* commands for system context: System context. (line 6)
+* commas, outputting between files: General output formatting.
+ (line 114)
+* comments, in dates: General date syntax. (line 60)
+* common field, joining on: join invocation. (line 6)
+* common lines: comm invocation. (line 18)
+* common options: Common options. (line 6)
+* compare values: test invocation. (line 6)
+* comparing sorted files: comm invocation. (line 6)
+* comparison operators: Relations for expr. (line 22)
+* compression and du: du invocation. (line 277)
+* concatenate and write files: cat invocation. (line 6)
+* concurrent I/O: dd invocation. (line 261)
+* conditional executability: Conditional Executability.
+ (line 6)
+* conditions: Conditions. (line 6)
+* conflicts with shell built-ins: mknod invocation. (line 20)
+* conflicts with shell built-ins <1>: stat invocation. (line 15)
+* conflicts with shell built-ins <2>: echo invocation. (line 11)
+* conflicts with shell built-ins <3>: printf invocation. (line 16)
+* conflicts with shell built-ins <4>: test invocation. (line 28)
+* conflicts with shell built-ins <5>: pwd invocation. (line 30)
+* conflicts with shell built-ins <6>: nice invocation. (line 38)
+* conflicts with shell built-ins <7>: kill invocation. (line 13)
+* conflicts with shell built-ins <8>: sleep invocation. (line 40)
+* connectives, logical: Connectives for test.
+ (line 6)
+* connectives, logical <1>: Relations for expr. (line 6)
+* constant parity: Control. (line 16)
+* context splitting: csplit invocation. (line 6)
+* context, system: System context. (line 6)
+* control characters, using ^C: Local. (line 51)
+* control settings: Control. (line 6)
+* controlling terminal: dd invocation. (line 330)
+* conv: dd invocation. (line 132)
+* conversion block size: dd invocation. (line 67)
+* conversion specifiers, date: Date conversion specifiers.
+ (line 6)
+* conversion specifiers, literal: Literal conversion specifiers.
+ (line 6)
+* conversion specifiers, time: Time conversion specifiers.
+ (line 6)
+* converting tabs to spaces: expand invocation. (line 6)
+* converting while copying a file: dd invocation. (line 6)
+* cooked: Combination. (line 37)
+* Coordinated Universal Time: Options for date. (line 135)
+* copy on write: cp invocation. (line 275)
+* copy-on-write and du: du invocation. (line 272)
+* copying directories recursively: cp invocation. (line 96)
+* copying directories recursively <1>: cp invocation. (line 262)
+* copying existing permissions: Copying Permissions. (line 6)
+* copying files: cat invocation. (line 6)
+* copying files and directories: cp invocation. (line 6)
+* copying files and setting attributes: install invocation. (line 6)
+* core utilities: Top. (line 18)
+* count: dd invocation. (line 86)
+* COW: cp invocation. (line 275)
+* cp: cp invocation. (line 6)
+* crashes and corruption: sync invocation. (line 17)
+* CRC checksum: cksum invocation. (line 6)
+* cread: Control. (line 35)
+* creating directories: mkdir invocation. (line 6)
+* creating FIFOs (named pipes): mkfifo invocation. (line 6)
+* creating links (hard only): link invocation. (line 6)
+* creating links (hard or soft): ln invocation. (line 6)
+* creating output file, avoiding: dd invocation. (line 210)
+* creating output file, requiring: dd invocation. (line 206)
+* creation timestamp, printing or sorting files by: Sorting the output.
+ (line 57)
+* crN: Output. (line 45)
+* crown margin: fmt invocation. (line 34)
+* crt: Combination. (line 75)
+* crterase: Local. (line 22)
+* crtkill: Local. (line 56)
+* crtscts: Control. (line 41)
+* csh syntax for color setup: dircolors invocation.
+ (line 40)
+* csN: Control. (line 24)
+* csplit: csplit invocation. (line 6)
+* cstopb: Control. (line 32)
+* ctime: File timestamps. (line 6)
+* ctime, printing or sorting by: Sorting the output. (line 13)
+* ctime, show the most recent: du invocation. (line 202)
+* ctlecho: Local. (line 51)
+* current working directory, printing: pwd invocation. (line 6)
+* cut: cut invocation. (line 6)
+* cyclic redundancy check: cksum invocation. (line 6)
+* data modification time, printing or sorting files by: Sorting the output.
+ (line 50)
+* data, erasing: shred invocation. (line 6)
+* database for color setup, printing: dircolors invocation.
+ (line 45)
+* date: date invocation. (line 6)
+* date and time of day format, ISO 8601: Combined date and time of day items.
+ (line 6)
+* date conversion specifiers: Date conversion specifiers.
+ (line 6)
+* date format, ISO 8601: Calendar date items. (line 28)
+* date input formats: Date input formats. (line 6)
+* date options: Options for date. (line 6)
+* date strings, debugging: Options for date. (line 29)
+* date strings, parsing: Options for date. (line 15)
+* day in date strings: Relative items in date strings.
+ (line 15)
+* day in date strings <1>: Relative items in date strings.
+ (line 29)
+* day of week item: Day of week items. (line 6)
+* dd: dd invocation. (line 6)
+* ddrescue: dd invocation. (line 397)
+* debugging date strings: Options for date. (line 29)
+* debugging, copying: cp invocation. (line 114)
+* debugging, copying <1>: install invocation. (line 72)
+* debugging, copying <2>: mv invocation. (line 60)
+* debugging, env -S: env invocation. (line 277)
+* dec: Combination. (line 78)
+* decctlq: Combination. (line 63)
+* Decode base64 data: base64 invocation. (line 33)
+* delay for a specified time: sleep invocation. (line 6)
+* delaying commands: Delaying. (line 6)
+* deleting characters: Squeezing and deleting.
+ (line 6)
+* dereferencing symbolic links: ln invocation. (line 42)
+* descriptor follow option: tail invocation. (line 57)
+* destination directory: Target directory. (line 15)
+* destination directory <1>: Target directory. (line 31)
+* destination directory <2>: cp invocation. (line 363)
+* destination directory <3>: cp invocation. (line 367)
+* destination directory <4>: install invocation. (line 129)
+* destination directory <5>: install invocation. (line 134)
+* destination directory <6>: mv invocation. (line 135)
+* destination directory <7>: mv invocation. (line 139)
+* destination directory <8>: ln invocation. (line 173)
+* destination directory <9>: ln invocation. (line 177)
+* destinations, multiple output: tee invocation. (line 6)
+* device file: df invocation. (line 30)
+* df: df invocation. (line 6)
+* DF_BLOCK_SIZE: Block size. (line 12)
+* diagnostic: chcon invocation. (line 61)
+* dictionary order: sort invocation. (line 87)
+* differing lines: comm invocation. (line 18)
+* digest: cksum invocation. (line 6)
+* digest algorithm: cksum general options.
+ (line 5)
+* digit: Character arrays. (line 116)
+* dir: dir invocation. (line 6)
+* dircolors: dircolors invocation.
+ (line 6)
+* direct: dd invocation. (line 267)
+* direct I/O: dd invocation. (line 267)
+* directories, copying: cp invocation. (line 6)
+* directories, copying recursively: cp invocation. (line 96)
+* directories, copying recursively <1>: cp invocation. (line 262)
+* directories, creating: mkdir invocation. (line 6)
+* directories, creating with given attributes: install invocation.
+ (line 67)
+* directories, removing: rm invocation. (line 35)
+* directories, removing (recursively): rm invocation. (line 96)
+* directories, removing empty: rmdir invocation. (line 6)
+* directory: dd invocation. (line 275)
+* directory check: File type tests. (line 16)
+* directory components, printing: dirname invocation. (line 6)
+* directory deletion, ignoring failures: rmdir invocation. (line 17)
+* directory deletion, reporting: rmdir invocation. (line 30)
+* directory I/O: dd invocation. (line 275)
+* directory listing: ls invocation. (line 6)
+* directory listing, brief: dir invocation. (line 6)
+* directory listing, recursive: Which files are listed.
+ (line 91)
+* directory listing, verbose: vdir invocation. (line 6)
+* directory order, listing by: Sorting the output. (line 18)
+* directory, creating temporary: mktemp invocation. (line 6)
+* directory, stripping from file names: basename invocation. (line 6)
+* dired Emacs mode support: What information is listed.
+ (line 16)
+* dirname: dirname invocation. (line 6)
+* disabling special characters: Characters. (line 12)
+* disambiguating group names and IDs: Disambiguating names and IDs.
+ (line 6)
+* discard: Characters. (line 39)
+* discarding file cache: dd invocation. (line 292)
+* disk device file: df invocation. (line 30)
+* disk usage: File space usage. (line 6)
+* disk usage by file system: df invocation. (line 6)
+* disk usage for files: du invocation. (line 6)
+* displacement of dates: Relative items in date strings.
+ (line 6)
+* displaying text: echo invocation. (line 6)
+* displaying value of a symbolic link: readlink invocation. (line 6)
+* division: Numeric expressions. (line 16)
+* do nothing, successfully: true invocation. (line 6)
+* do nothing, unsuccessfully: false invocation. (line 6)
+* DOS file system: df invocation. (line 220)
+* double spacing: pr invocation. (line 74)
+* down columns: pr invocation. (line 49)
+* drain: Special. (line 30)
+* dsusp: Characters. (line 58)
+* dsync: dd invocation. (line 281)
+* DTR/DSR flow control: Control. (line 44)
+* du: du invocation. (line 6)
+* DU_BLOCK_SIZE: Block size. (line 12)
+* DVD file system type: df invocation. (line 216)
+* ebcdic, converting to: dd invocation. (line 144)
+* echo: echo invocation. (line 6)
+* echo <1>: Local. (line 18)
+* echoctl: Local. (line 51)
+* echoe: Local. (line 22)
+* echok: Local. (line 26)
+* echoke: Local. (line 56)
+* echonl: Local. (line 29)
+* echoprt: Local. (line 46)
+* effective user and group IDs, printing: id invocation. (line 6)
+* effective user name, printing: whoami invocation. (line 6)
+* Eggert, Paul: Authors of parse_datetime.
+ (line 6)
+* eight-bit characters: Control. (line 24)
+* eight-bit characters <1>: Combination. (line 55)
+* eight-bit input: Input. (line 25)
+* ek: Combination. (line 22)
+* empty files, creating: touch invocation. (line 11)
+* empty lines, numbering: nl invocation. (line 85)
+* endianness: od invocation. (line 51)
+* entire files, output of: Output of entire files.
+ (line 6)
+* env: env invocation. (line 6)
+* env -S, and single quotes: env invocation. (line 268)
+* env -S, debugging: env invocation. (line 277)
+* env in scripts: env invocation. (line 192)
+* environment variables, printing: printenv invocation. (line 6)
+* environment, printing: env invocation. (line 50)
+* environment, running a program in a modified: env invocation.
+ (line 6)
+* eof: Characters. (line 30)
+* eol: Characters. (line 33)
+* eol2: Characters. (line 36)
+* Epoch, for POSIX: Seconds since the Epoch.
+ (line 13)
+* Epoch, seconds since: Time conversion specifiers.
+ (line 32)
+* equal string check: String tests. (line 22)
+* equal string check <1>: String tests. (line 25)
+* equivalence classes: Character arrays. (line 133)
+* erase: Characters. (line 24)
+* erasing data: shred invocation. (line 6)
+* error messages, omitting: chown invocation. (line 80)
+* error messages, omitting <1>: chgrp invocation. (line 30)
+* error messages, omitting <2>: chmod invocation. (line 49)
+* evaluation of expressions: expr invocation. (line 6)
+* even parity: Control. (line 13)
+* evenp: Combination. (line 9)
+* exabyte, definition of: Block size. (line 106)
+* examples of date: Examples of date. (line 6)
+* examples of expr: Examples of expr. (line 6)
+* exbibyte, definition of: Block size. (line 109)
+* excl: dd invocation. (line 206)
+* excluding files from du: du invocation. (line 250)
+* excluding files from du <1>: du invocation. (line 255)
+* executable file check: Access permission tests.
+ (line 24)
+* executables and file type, marking: General output formatting.
+ (line 52)
+* execute/search permission: Mode Structure. (line 16)
+* execute/search permission, symbolic: Setting Permissions. (line 56)
+* existence-of-file check: File characteristic tests.
+ (line 9)
+* existing backup method: Backup options. (line 39)
+* exit status commands: Conditions. (line 6)
+* exit status of chroot: chroot invocation. (line 78)
+* exit status of env: env invocation. (line 197)
+* exit status of expr: expr invocation. (line 42)
+* exit status of false: false invocation. (line 6)
+* exit status of ls: ls invocation. (line 29)
+* exit status of mktemp: mktemp invocation. (line 128)
+* exit status of nice: nice invocation. (line 63)
+* exit status of nohup: nohup invocation. (line 48)
+* exit status of pathchk: pathchk invocation. (line 47)
+* exit status of printenv: printenv invocation. (line 23)
+* exit status of realpath: realpath invocation. (line 75)
+* exit status of runcon: runcon invocation. (line 50)
+* exit status of sort: sort invocation. (line 58)
+* exit status of stdbuf: stdbuf invocation. (line 70)
+* exit status of test: test invocation. (line 41)
+* exit status of timeout: timeout invocation. (line 76)
+* exit status of true: true invocation. (line 6)
+* exit status of tty: tty invocation. (line 20)
+* expand: expand invocation. (line 6)
+* expr: expr invocation. (line 6)
+* expression evaluation: test invocation. (line 6)
+* expression evaluation <1>: expr invocation. (line 6)
+* expressions, numeric: Numeric expressions. (line 6)
+* expressions, string: String expressions. (line 6)
+* ext2 file system type: df invocation. (line 212)
+* ext3 file system type: df invocation. (line 212)
+* ext4 file system type: df invocation. (line 212)
+* extended attributes, xattr: install invocation. (line 34)
+* extended attributes, xattr <1>: mv invocation. (line 30)
+* extension, sorting files by: Sorting the output. (line 83)
+* extproc: Local. (line 61)
+* factor: factor invocation. (line 6)
+* failure exit status: false invocation. (line 6)
+* false: false invocation. (line 6)
+* fat file system file: df invocation. (line 220)
+* fdatasync: dd invocation. (line 223)
+* ffN: Output. (line 63)
+* field separator character: sort invocation. (line 338)
+* fields, padding numeric: Padding and other flags.
+ (line 6)
+* FIFOs, creating: mkfifo invocation. (line 6)
+* file attributes, changing: Changing file attributes.
+ (line 6)
+* file characteristic tests: File characteristic tests.
+ (line 6)
+* file contents, dumping unambiguously: od invocation. (line 6)
+* file information, preserving: cp invocation. (line 245)
+* file information, preserving, extended attributes, xattr: cp invocation.
+ (line 173)
+* file mode bits, numeric: Numeric Modes. (line 6)
+* file name manipulation: File name manipulation.
+ (line 6)
+* file names, canonicalization: realpath invocation. (line 6)
+* file names, checking validity and portability: pathchk invocation.
+ (line 6)
+* file names, creating temporary: mktemp invocation. (line 6)
+* file names, stripping directory and suffix: basename invocation.
+ (line 6)
+* file offset radix: od invocation. (line 36)
+* file ownership, changing: chown invocation. (line 6)
+* file sizes: du invocation. (line 54)
+* File space usage: File space usage. (line 6)
+* file space usage: du invocation. (line 6)
+* file status: stat invocation. (line 6)
+* file system allocation: What information is listed.
+ (line 236)
+* file system sizes: df invocation. (line 54)
+* file system space, retrieving current data more slowly: df invocation.
+ (line 175)
+* file system space, retrieving old data more quickly: df invocation.
+ (line 85)
+* file system status: stat invocation. (line 6)
+* file system types, limiting output to certain: df invocation.
+ (line 81)
+* file system types, limiting output to certain <1>: df invocation.
+ (line 195)
+* file system types, printing: df invocation. (line 201)
+* file system usage: df invocation. (line 6)
+* file systems: stat invocation. (line 28)
+* file systems and hard links: ln invocation. (line 6)
+* file systems, omitting copying to different: cp invocation. (line 411)
+* file timestamp resolution: File timestamps. (line 45)
+* file timestamps, changing: touch invocation. (line 6)
+* file type and executables, marking: General output formatting.
+ (line 52)
+* file type tests: File type tests. (line 6)
+* file type, marking: General output formatting.
+ (line 68)
+* file type, marking <1>: General output formatting.
+ (line 120)
+* file types: Special file types. (line 9)
+* file types, special: Special file types. (line 6)
+* file utilities: Top. (line 18)
+* files beginning with -, removing: rm invocation. (line 102)
+* files, copying: cp invocation. (line 6)
+* files, creating: truncate invocation. (line 11)
+* fingerprint, 128-bit: md5sum invocation. (line 6)
+* fingerprint, 160-bit: sha1sum invocation. (line 6)
+* fingerprint, 224-bit: sha2 utilities. (line 6)
+* fingerprint, 256-bit: sha2 utilities. (line 6)
+* fingerprint, 384-bit: sha2 utilities. (line 6)
+* fingerprint, 512-bit: b2sum invocation. (line 6)
+* fingerprint, 512-bit <1>: sha2 utilities. (line 6)
+* first in date strings: General date syntax. (line 22)
+* first part of files, outputting: head invocation. (line 6)
+* fixed-length records, converting to variable-length: dd invocation.
+ (line 67)
+* floating point: Floating point. (line 6)
+* flow control, hardware: Control. (line 41)
+* flow control, hardware <1>: Control. (line 44)
+* flow control, software: Input. (line 45)
+* flush: Characters. (line 39)
+* flushing, disabling: Local. (line 32)
+* flusho: Local. (line 67)
+* fmt: fmt invocation. (line 6)
+* fold: fold invocation. (line 6)
+* folding long input lines: fold invocation. (line 6)
+* footers, numbering: nl invocation. (line 17)
+* force deletion: shred invocation. (line 123)
+* formatting file contents: Formatting file contents.
+ (line 6)
+* formatting of numbers in seq: seq invocation. (line 29)
+* formatting times: pr invocation. (line 78)
+* formatting times <1>: Date format specifiers.
+ (line 6)
+* fortnight in date strings: Relative items in date strings.
+ (line 15)
+* fsync: dd invocation. (line 234)
+* fullblock: dd invocation. (line 349)
+* general date syntax: General date syntax. (line 6)
+* general numeric sort: sort invocation. (line 105)
+* gibibyte, definition of: Block size. (line 94)
+* gigabyte, definition of: Block size. (line 91)
+* giving away permissions: Umask and Protection.
+ (line 12)
+* GMT: Options for date. (line 135)
+* grand total of file system size, usage and available space: df invocation.
+ (line 181)
+* grand total of file system space: du invocation. (line 63)
+* graph: Character arrays. (line 118)
+* Greenwich Mean Time: Options for date. (line 135)
+* group IDs, disambiguating: Disambiguating names and IDs.
+ (line 6)
+* group names, disambiguating: Disambiguating names and IDs.
+ (line 6)
+* group owner, default: Mode Structure. (line 27)
+* group ownership of installed files, setting: install invocation.
+ (line 77)
+* group ownership, changing: chown invocation. (line 6)
+* group ownership, changing <1>: chgrp invocation. (line 6)
+* group, permissions for: Setting Permissions. (line 25)
+* groups: groups invocation. (line 6)
+* growing files: tail invocation. (line 57)
+* hangups, immunity to: nohup invocation. (line 6)
+* hard link check: File characteristic tests.
+ (line 23)
+* hard link, defined: ln invocation. (line 32)
+* hard links: dd invocation. (line 338)
+* hard links to directories: ln invocation. (line 88)
+* hard links to symbolic links: ln invocation. (line 184)
+* hard links, counting in du: du invocation. (line 125)
+* hard links, creating: link invocation. (line 6)
+* hard links, creating <1>: ln invocation. (line 6)
+* hard links, preserving: cp invocation. (line 109)
+* hardware class: uname invocation. (line 42)
+* hardware flow control: Control. (line 41)
+* hardware flow control <1>: Control. (line 44)
+* hardware platform: uname invocation. (line 35)
+* hardware type: uname invocation. (line 42)
+* hat notation for control characters: Local. (line 51)
+* head: head invocation. (line 6)
+* head of output: shuf invocation. (line 31)
+* headers, numbering: nl invocation. (line 17)
+* help, online: Common options. (line 36)
+* hex dump of files: od invocation. (line 6)
+* holes, copying files with: cp invocation. (line 306)
+* holes, creating files with: truncate invocation. (line 13)
+* horizontal, listing files: General output formatting.
+ (line 125)
+* host processor type: uname invocation. (line 51)
+* hostid: hostid invocation. (line 6)
+* hostname: hostname invocation. (line 6)
+* hostname <1>: uname invocation. (line 47)
+* hour in date strings: Relative items in date strings.
+ (line 15)
+* human numeric sort: sort invocation. (line 132)
+* human-readable output: Block size. (line 42)
+* human-readable output <1>: What information is listed.
+ (line 118)
+* human-readable output <2>: df invocation. (line 59)
+* human-readable output <3>: du invocation. (line 98)
+* hup[cl]: Control. (line 28)
+* hurd, author, printing: What information is listed.
+ (line 10)
+* hyperlink, linking to files: General output formatting.
+ (line 73)
+* ibs: dd invocation. (line 52)
+* icanon: Local. (line 11)
+* icrnl: Input. (line 34)
+* id: id invocation. (line 6)
+* idle time: who invocation. (line 85)
+* IEEE floating point: Floating point. (line 6)
+* iexten: Local. (line 15)
+* if: dd invocation. (line 45)
+* iflag: dd invocation. (line 243)
+* ignbrk: Input. (line 9)
+* igncr: Input. (line 31)
+* ignore file systems: df invocation. (line 42)
+* Ignore garbage in base64 stream: base64 invocation. (line 39)
+* ignoring case: sort invocation. (line 94)
+* ignpar: Input. (line 15)
+* imaxbel: Input. (line 59)
+* immunity to hangups: nohup invocation. (line 6)
+* implementation, hardware: uname invocation. (line 35)
+* indenting lines: pr invocation. (line 180)
+* index: String expressions. (line 43)
+* information, about current users: who invocation. (line 6)
+* initial part of files, outputting: head invocation. (line 6)
+* initial tabs, converting: expand invocation. (line 46)
+* inlcr: Input. (line 28)
+* inode number, printing: What information is listed.
+ (line 125)
+* inode usage: df invocation. (line 69)
+* inode usage, dereferencing in du: du invocation. (line 104)
+* inode, and hard links: ln invocation. (line 32)
+* inodes, written buffered: sync invocation. (line 11)
+* inpck: Input. (line 22)
+* input block size: dd invocation. (line 52)
+* input encoding, UTF-8: Input. (line 37)
+* input range to shuffle: shuf invocation. (line 23)
+* input settings: Input. (line 6)
+* input tabs: pr invocation. (line 98)
+* install: install invocation. (line 6)
+* intr: Characters. (line 18)
+* invocation of commands, modified: Modified command invocation.
+ (line 6)
+* iseek: dd invocation. (line 73)
+* isig: Local. (line 7)
+* ISO 8601 date and time of day format: Combined date and time of day items.
+ (line 6)
+* ISO 8601 date format: Calendar date items. (line 28)
+* ISO/IEC 10646: printf invocation. (line 74)
+* ISO9660 file system type: df invocation. (line 216)
+* iso9660 file system type: df invocation. (line 216)
+* ispeed: Special. (line 16)
+* istrip: Input. (line 25)
+* items in date strings: General date syntax. (line 6)
+* iterations, selecting the number of: shred invocation. (line 127)
+* iuclc: Input. (line 50)
+* iutf8: Input. (line 37)
+* ixany: Input. (line 55)
+* ixoff: Input. (line 45)
+* ixon: Input. (line 40)
+* join: join invocation. (line 6)
+* kernel name: uname invocation. (line 66)
+* kernel release: uname invocation. (line 62)
+* kernel version: uname invocation. (line 77)
+* kibibyte, definition of: Block size. (line 82)
+* kibibytes for file sizes: du invocation. (line 113)
+* kibibytes for file system sizes: df invocation. (line 75)
+* kill: kill invocation. (line 6)
+* kill <1>: Characters. (line 27)
+* kilobyte, definition of: Block size. (line 78)
+* Knuth, Donald E.: fmt invocation. (line 19)
+* language, in dates: General date syntax. (line 36)
+* language, in dates <1>: General date syntax. (line 40)
+* last DAY: Day of week items. (line 15)
+* last DAY <1>: Options for date. (line 15)
+* last in date strings: General date syntax. (line 22)
+* last modified dates, displaying in du: du invocation. (line 195)
+* last part of files, outputting: tail invocation. (line 6)
+* lcase: Combination. (line 71)
+* LCASE: Combination. (line 71)
+* lcase, converting to: dd invocation. (line 172)
+* lchown: chown invocation. (line 107)
+* lchown <1>: chown invocation. (line 119)
+* lchown <2>: chgrp invocation. (line 34)
+* lchown <3>: chgrp invocation. (line 46)
+* LC_ALL: sort invocation. (line 23)
+* LC_ALL <1>: ls invocation. (line 17)
+* LC_COLLATE: sort invocation. (line 23)
+* LC_COLLATE <1>: uniq invocation. (line 21)
+* LC_COLLATE <2>: comm invocation. (line 12)
+* LC_COLLATE <3>: Sorting files for join.
+ (line 16)
+* LC_COLLATE <4>: Relations for expr. (line 22)
+* LC_CTYPE: sort invocation. (line 79)
+* LC_CTYPE <1>: sort invocation. (line 87)
+* LC_CTYPE <2>: sort invocation. (line 94)
+* LC_CTYPE <3>: sort invocation. (line 149)
+* LC_CTYPE <4>: printf invocation. (line 74)
+* LC_MESSAGES: pr invocation. (line 13)
+* LC_NUMERIC: Block size. (line 57)
+* LC_NUMERIC <1>: Floating point. (line 29)
+* LC_NUMERIC <2>: sort invocation. (line 105)
+* LC_NUMERIC <3>: sort invocation. (line 132)
+* LC_NUMERIC <4>: sort invocation. (line 166)
+* LC_NUMERIC <5>: printf invocation. (line 61)
+* LC_TIME: pr invocation. (line 85)
+* LC_TIME <1>: sort invocation. (line 156)
+* LC_TIME <2>: Formatting file timestamps.
+ (line 28)
+* LC_TIME <3>: Formatting file timestamps.
+ (line 73)
+* LC_TIME <4>: Formatting file timestamps.
+ (line 97)
+* LC_TIME <5>: du invocation. (line 217)
+* LC_TIME <6>: date invocation. (line 15)
+* leading directories, creating missing: install invocation. (line 67)
+* leading directory components, stripping: basename invocation.
+ (line 6)
+* leap seconds: touch invocation. (line 99)
+* leap seconds <1>: Time conversion specifiers.
+ (line 32)
+* leap seconds <2>: Time conversion specifiers.
+ (line 36)
+* leap seconds <3>: Options for date. (line 135)
+* leap seconds <4>: Examples of date. (line 104)
+* leap seconds <5>: General date syntax. (line 65)
+* leap seconds <6>: Time of day items. (line 14)
+* leap seconds <7>: Seconds since the Epoch.
+ (line 27)
+* left margin: pr invocation. (line 180)
+* length: String expressions. (line 48)
+* limiting output of du: du invocation. (line 76)
+* line: Special. (line 48)
+* line buffered: stdbuf invocation. (line 6)
+* line count: wc invocation. (line 6)
+* line numbering: nl invocation. (line 6)
+* line separator character: split invocation. (line 152)
+* line settings of terminal: stty invocation. (line 6)
+* line-breaking: fmt invocation. (line 19)
+* line-by-line comparison: comm invocation. (line 6)
+* LINES: Special. (line 41)
+* link: link invocation. (line 6)
+* links, creating: link invocation. (line 6)
+* links, creating <1>: ln invocation. (line 6)
+* Linux file system types: df invocation. (line 212)
+* literal conversion specifiers: Literal conversion specifiers.
+ (line 6)
+* litout: Combination. (line 59)
+* ln: ln invocation. (line 6)
+* ln format for nl: nl invocation. (line 96)
+* lnext: Characters. (line 67)
+* local file system types: df invocation. (line 212)
+* local settings: Local. (line 6)
+* logging out and continuing to run: nohup invocation. (line 6)
+* logical and operator: Connectives for test.
+ (line 29)
+* logical and operator <1>: Relations for expr. (line 17)
+* logical connectives: Connectives for test.
+ (line 6)
+* logical connectives <1>: Relations for expr. (line 6)
+* logical or operator: Connectives for test.
+ (line 33)
+* logical or operator <1>: Relations for expr. (line 11)
+* logical pages, numbering on: nl invocation. (line 12)
+* login name, printing: logname invocation. (line 6)
+* login sessions, printing users with: users invocation. (line 6)
+* login time: who invocation. (line 11)
+* logname: logname invocation. (line 6)
+* long ls format: What information is listed.
+ (line 133)
+* lower: Character arrays. (line 120)
+* lowercase, translating to output: Output. (line 12)
+* ls: ls invocation. (line 6)
+* LS_BLOCK_SIZE: Block size. (line 12)
+* LS_COLORS: General output formatting.
+ (line 37)
+* LS_COLORS <1>: dircolors invocation.
+ (line 23)
+* lutimes: touch invocation. (line 70)
+* machine type: uname invocation. (line 42)
+* machine-readable stty output: stty invocation. (line 41)
+* MacKenzie, D.: Introduction. (line 29)
+* MacKenzie, David: Authors of parse_datetime.
+ (line 6)
+* Makefiles, installing programs in: install invocation. (line 29)
+* manipulating files: Basic operations. (line 6)
+* manipulation of file names: File name manipulation.
+ (line 6)
+* mark parity: Control. (line 16)
+* match: String expressions. (line 34)
+* matching patterns: String expressions. (line 11)
+* MD5: md5sum invocation. (line 6)
+* md5sum: md5sum invocation. (line 6)
+* mebibyte, definition of: Block size. (line 89)
+* mebibytes for file sizes: du invocation. (line 129)
+* megabyte, definition of: Block size. (line 86)
+* merging files: paste invocation. (line 6)
+* merging files in parallel: pr invocation. (line 6)
+* merging sorted files: sort invocation. (line 53)
+* message status: who invocation. (line 94)
+* message-digest, 128-bit: md5sum invocation. (line 6)
+* message-digest, 160-bit: sha1sum invocation. (line 6)
+* message-digest, 224-bit: sha2 utilities. (line 6)
+* message-digest, 256-bit: sha2 utilities. (line 6)
+* message-digest, 384-bit: sha2 utilities. (line 6)
+* message-digest, 512-bit: b2sum invocation. (line 6)
+* message-digest, 512-bit <1>: sha2 utilities. (line 6)
+* Meyering, J.: Introduction. (line 29)
+* Meyering, Jim: Authors of parse_datetime.
+ (line 6)
+* midnight in date strings: Time of day items. (line 21)
+* min: Special. (line 7)
+* minute in date strings: Relative items in date strings.
+ (line 15)
+* minutes, time zone correction by: Time of day items. (line 29)
+* mkdir: mkdir invocation. (line 6)
+* mkfifo: mkfifo invocation. (line 6)
+* mknod: mknod invocation. (line 6)
+* mktemp: mktemp invocation. (line 6)
+* modem control: Control. (line 38)
+* modes and umask: Umask and Protection.
+ (line 6)
+* modes of created directories, setting: mkdir invocation. (line 19)
+* modes of created FIFOs, setting: mkfifo invocation. (line 21)
+* modification timestamp, sorting files by: Sorting the output.
+ (line 36)
+* modified command invocation: Modified command invocation.
+ (line 6)
+* modified environment, running a program in a: env invocation.
+ (line 6)
+* modify time, changing: touch invocation. (line 85)
+* month in date strings: Relative items in date strings.
+ (line 15)
+* month names in date strings: Calendar date items. (line 36)
+* months, sorting by: sort invocation. (line 156)
+* months, written-out: General date syntax. (line 32)
+* MS-DOS file system: df invocation. (line 220)
+* MS-Windows file system: df invocation. (line 220)
+* mtime: File timestamps. (line 6)
+* mtime, changing: touch invocation. (line 85)
+* mtime, printing or sorting files by: Sorting the output. (line 50)
+* mtime-greater-atime file check: File characteristic tests.
+ (line 27)
+* multicall: Multi-call invocation.
+ (line 6)
+* multicolumn output, generating: pr invocation. (line 6)
+* multiple changes to permissions: Multiple Changes. (line 6)
+* multiplication: Numeric expressions. (line 16)
+* multipliers after numbers: dd invocation. (line 369)
+* multithreaded sort: sort invocation. (line 366)
+* mv: mv invocation. (line 6)
+* name follow option: tail invocation. (line 57)
+* name of kernel: uname invocation. (line 66)
+* named pipe check: File type tests. (line 28)
+* named pipes, creating: mkfifo invocation. (line 6)
+* network node name: uname invocation. (line 47)
+* networked file systems and du: du invocation. (line 282)
+* never interactive option: rm invocation. (line 57)
+* newer files, copying only: cp invocation. (line 372)
+* newer files, moving only: mv invocation. (line 91)
+* newer-than file check: File characteristic tests.
+ (line 15)
+* newline echoing after kill: Local. (line 26)
+* newline, echoing: Local. (line 29)
+* newline, translating to crlf: Output. (line 19)
+* newline, translating to return: Input. (line 28)
+* next DAY: Day of week items. (line 15)
+* next DAY <1>: Options for date. (line 15)
+* next in date strings: General date syntax. (line 22)
+* NFS file system type: df invocation. (line 207)
+* NFS mounts from BSD to HP-UX: What information is listed.
+ (line 244)
+* nice: nice invocation. (line 6)
+* niceness: nice invocation. (line 6)
+* nl: nl invocation. (line 6)
+* nl <1>: Combination. (line 18)
+* nlN: Output. (line 39)
+* no dereference: chcon invocation. (line 26)
+* no-op: true invocation. (line 6)
+* noatime: dd invocation. (line 324)
+* nocache: dd invocation. (line 292)
+* nocreat: dd invocation. (line 210)
+* noctty: dd invocation. (line 330)
+* node name: uname invocation. (line 47)
+* noerror: dd invocation. (line 220)
+* noflsh: Local. (line 32)
+* nofollow: dd invocation. (line 335)
+* nohup: nohup invocation. (line 6)
+* nohup.out: nohup invocation. (line 6)
+* nohup.out <1>: nohup invocation. (line 20)
+* nolinks: dd invocation. (line 338)
+* non-directories, copying as special files: cp invocation. (line 96)
+* non-directories, copying as special files <1>: cp invocation.
+ (line 262)
+* non-directory suffix, stripping: dirname invocation. (line 6)
+* nonblock: dd invocation. (line 321)
+* nonblocking I/O: dd invocation. (line 321)
+* nonblocking stty setting: Special. (line 30)
+* none backup method: Backup options. (line 31)
+* none classify option: General output formatting.
+ (line 57)
+* none color option: General output formatting.
+ (line 30)
+* none dd status=: dd invocation. (line 101)
+* none hyperlink option: General output formatting.
+ (line 75)
+* none total option: wc invocation. (line 81)
+* none, sorting option for ls: Sorting the output. (line 64)
+* nonempty file check: File characteristic tests.
+ (line 12)
+* nonprinting characters, ignoring: sort invocation. (line 149)
+* nonzero-length string check: String tests. (line 19)
+* noon in date strings: Time of day items. (line 21)
+* not-equal string check: String tests. (line 29)
+* notrunc: dd invocation. (line 217)
+* now in date strings: Relative items in date strings.
+ (line 33)
+* noxfer dd status=: dd invocation. (line 105)
+* NO_NEW_PRIVS: runcon invocation. (line 22)
+* nproc: nproc invocation. (line 6)
+* NTFS file system: df invocation. (line 220)
+* ntfs file system file: df invocation. (line 220)
+* number of inputs to merge, nmerge: sort invocation. (line 268)
+* numbered backup method: Backup options. (line 35)
+* numbering lines: nl invocation. (line 6)
+* numbers, written-out: General date syntax. (line 22)
+* numeric expressions: Numeric expressions. (line 6)
+* numeric field padding: Padding and other flags.
+ (line 6)
+* numeric modes: Numeric Modes. (line 6)
+* numeric operations: Numeric operations. (line 6)
+* numeric sequences: seq invocation. (line 6)
+* numeric sort: sort invocation. (line 166)
+* numeric tests: Numeric tests. (line 6)
+* numeric uid and gid: What information is listed.
+ (line 227)
+* numeric user and group IDs: What information is listed.
+ (line 227)
+* numfmt: numfmt invocation. (line 6)
+* obs: dd invocation. (line 56)
+* ocrnl: Output. (line 16)
+* octal dump of files: od invocation. (line 6)
+* octal numbers for file modes: Numeric Modes. (line 6)
+* od: od invocation. (line 6)
+* odd parity: Control. (line 13)
+* oddp: Combination. (line 14)
+* of: dd invocation. (line 48)
+* ofdel: Output. (line 34)
+* ofill: Output. (line 30)
+* oflag: dd invocation. (line 247)
+* olcuc: Output. (line 12)
+* older-than file check: File characteristic tests.
+ (line 19)
+* once interactive option: rm invocation. (line 58)
+* one file system, restricting du to: du invocation. (line 261)
+* one file system, restricting rm to: rm invocation. (line 66)
+* one-line output format: df invocation. (line 149)
+* onlcr: Output. (line 19)
+* onlret: Output. (line 27)
+* only total option: wc invocation. (line 78)
+* onocr: Output. (line 23)
+* operating on characters: Operating on characters.
+ (line 6)
+* operating on sorted files: Operating on sorted files.
+ (line 6)
+* operating system name: uname invocation. (line 58)
+* opost: Output. (line 9)
+* option delimiter: Common options. (line 43)
+* options for date: Options for date. (line 6)
+* or operator: Connectives for test.
+ (line 33)
+* or operator <1>: Relations for expr. (line 11)
+* ordinal numbers: General date syntax. (line 22)
+* oseek: dd invocation. (line 80)
+* ospeed: Special. (line 19)
+* other permissions: Setting Permissions. (line 27)
+* output block size: dd invocation. (line 56)
+* output file name prefix: split invocation. (line 15)
+* output file name prefix <1>: csplit invocation. (line 64)
+* output file name suffix: csplit invocation. (line 68)
+* output format: stat invocation. (line 50)
+* output format <1>: stat invocation. (line 59)
+* output format, portable: df invocation. (line 149)
+* output NUL-byte-terminated lines: cksum common options.
+ (line 109)
+* output NUL-byte-terminated lines <1>: General output formatting.
+ (line 157)
+* output NUL-byte-terminated lines <2>: readlink invocation. (line 65)
+* output NUL-byte-terminated lines <3>: du invocation. (line 25)
+* output NUL-byte-terminated lines <4>: basename invocation. (line 42)
+* output NUL-byte-terminated lines <5>: dirname invocation. (line 31)
+* output NUL-byte-terminated lines <6>: realpath invocation. (line 71)
+* output NUL-byte-terminated lines <7>: printenv invocation. (line 19)
+* output NUL-byte-terminated lines <8>: env invocation. (line 90)
+* output of entire files: Output of entire files.
+ (line 6)
+* output of parts of files: Output of parts of files.
+ (line 6)
+* output settings: Output. (line 6)
+* output tabs: pr invocation. (line 117)
+* overwriting of input, allowed: sort invocation. (line 294)
+* overwriting of input, allowed <1>: shuf invocation. (line 36)
+* owned by effective group ID check: Access permission tests.
+ (line 31)
+* owned by effective user ID check: Access permission tests.
+ (line 28)
+* owner of file, permissions for: Setting Permissions. (line 23)
+* owner, default: Mode Structure. (line 27)
+* ownership of installed files, setting: install invocation. (line 95)
+* p for FIFO file: mknod invocation. (line 28)
+* pad character: Output. (line 34)
+* pad instead of timing for delaying: Output. (line 30)
+* padding of numeric fields: Padding and other flags.
+ (line 6)
+* paragraphs, reformatting: fmt invocation. (line 6)
+* parenb: Control. (line 9)
+* parent directories and cp: cp invocation. (line 249)
+* parent directories, creating: mkdir invocation. (line 36)
+* parent directories, creating missing: install invocation. (line 67)
+* parent directories, removing: rmdir invocation. (line 21)
+* parentheses for grouping: expr invocation. (line 31)
+* parity: Combination. (line 10)
+* parity errors, marking: Input. (line 18)
+* parity, ignoring: Input. (line 15)
+* parmrk: Input. (line 18)
+* parodd: Control. (line 13)
+* parse_datetime: Date input formats. (line 6)
+* parsing date strings: Options for date. (line 15)
+* parts of files, output of: Output of parts of files.
+ (line 6)
+* pass8: Combination. (line 55)
+* paste: paste invocation. (line 6)
+* Paterson, R.: Introduction. (line 29)
+* PATH: env invocation. (line 28)
+* pathchk: pathchk invocation. (line 6)
+* pattern matching: String expressions. (line 11)
+* pebibyte, definition of: Block size. (line 104)
+* permission tests: Access permission tests.
+ (line 6)
+* permissions of installed files, setting: install invocation.
+ (line 83)
+* permissions, changing access: chmod invocation. (line 6)
+* permissions, copying existing: Copying Permissions. (line 6)
+* permissions, for changing file timestamps: touch invocation.
+ (line 21)
+* permissions, output by ls: What information is listed.
+ (line 184)
+* petabyte, definition of: Block size. (line 101)
+* phone directory order: sort invocation. (line 87)
+* pieces, splitting a file into: split invocation. (line 6)
+* Pinard, F.: Introduction. (line 29)
+* Pinard, F. <1>: Authors of parse_datetime.
+ (line 19)
+* pipe fitting: tee invocation. (line 6)
+* Plass, Michael F.: fmt invocation. (line 19)
+* platform, hardware: uname invocation. (line 35)
+* pm in date strings: Time of day items. (line 21)
+* portable file names, checking for: pathchk invocation. (line 6)
+* portable output format: df invocation. (line 149)
+* POSIX: Introduction. (line 11)
+* POSIX output format: df invocation. (line 149)
+* POSIXLY_CORRECT: Common options. (line 11)
+* POSIXLY_CORRECT <1>: Standards conformance.
+ (line 6)
+* POSIXLY_CORRECT <2>: pr invocation. (line 85)
+* POSIXLY_CORRECT <3>: sort invocation. (line 305)
+* POSIXLY_CORRECT <4>: sort invocation. (line 421)
+* POSIXLY_CORRECT <5>: dd invocation. (line 441)
+* POSIXLY_CORRECT <6>: echo invocation. (line 72)
+* POSIXLY_CORRECT <7>: printf invocation. (line 53)
+* POSIXLY_CORRECT <8>: id invocation. (line 15)
+* POSIXLY_CORRECT, and block size: Block size. (line 12)
+* pr: pr invocation. (line 6)
+* prime factors: factor invocation. (line 6)
+* print: Character arrays. (line 122)
+* print machine hardware name: arch invocation. (line 6)
+* print name of current directory: pwd invocation. (line 6)
+* print system information: uname invocation. (line 6)
+* print terminal file name: tty invocation. (line 6)
+* Print the number of processors: nproc invocation. (line 6)
+* printenv: printenv invocation. (line 6)
+* printf: printf invocation. (line 6)
+* printing all or some environment variables: printenv invocation.
+ (line 6)
+* printing color database: dircolors invocation.
+ (line 45)
+* printing current user information: who invocation. (line 6)
+* printing current usernames: users invocation. (line 6)
+* printing groups a user is in: groups invocation. (line 6)
+* printing ls colors: dircolors invocation.
+ (line 50)
+* printing real and effective user and group IDs: id invocation.
+ (line 6)
+* printing text: echo invocation. (line 6)
+* printing text, commands for: Printing text. (line 6)
+* printing the current time: date invocation. (line 6)
+* printing the effective user ID: whoami invocation. (line 6)
+* printing the host identifier: hostid invocation. (line 6)
+* printing the hostname: hostname invocation. (line 6)
+* printing the system uptime and load: uptime invocation. (line 6)
+* printing user’s login name: logname invocation. (line 6)
+* printing, preparing files for: pr invocation. (line 6)
+* process zero-terminated items: head invocation. (line 55)
+* process zero-terminated items <1>: tail invocation. (line 190)
+* process zero-terminated items <2>: sort invocation. (line 389)
+* process zero-terminated items <3>: shuf invocation. (line 55)
+* process zero-terminated items <4>: uniq invocation. (line 140)
+* process zero-terminated items <5>: comm invocation. (line 89)
+* process zero-terminated items <6>: cut invocation. (line 94)
+* process zero-terminated items <7>: paste invocation. (line 72)
+* process zero-terminated items <8>: General options in join.
+ (line 93)
+* process zero-terminated items <9>: numfmt invocation. (line 115)
+* processes, commands for controlling: Process control. (line 6)
+* progress dd status=: dd invocation. (line 109)
+* prompting, and ln: ln invocation. (line 98)
+* prompting, and mv: mv invocation. (line 34)
+* prompting, and rm: rm invocation. (line 11)
+* prompts, forcing: mv invocation. (line 71)
+* prompts, omitting: mv invocation. (line 65)
+* prompts, omitting <1>: mv invocation. (line 78)
+* prterase: Local. (line 46)
+* ptx: ptx invocation. (line 6)
+* punct: Character arrays. (line 124)
+* pure numbers in date strings: Pure numbers in date strings.
+ (line 6)
+* pwd: pwd invocation. (line 6)
+* quettabyte, definition of: Block size. (line 126)
+* quit: Characters. (line 21)
+* quoting style: Formatting the file names.
+ (line 34)
+* radix for file offsets: od invocation. (line 36)
+* random seed: Random sources. (line 31)
+* random sort: sort invocation. (line 195)
+* random source for shredding: shred invocation. (line 133)
+* random source for shuffling: shuf invocation. (line 42)
+* random source for sorting: sort invocation. (line 310)
+* random sources: Random sources. (line 6)
+* ranges: Character arrays. (line 65)
+* raw: Combination. (line 43)
+* raw binary checksum: cksum general options.
+ (line 45)
+* read errors, ignoring: dd invocation. (line 220)
+* read from standard input and write to standard output and files: tee invocation.
+ (line 6)
+* read permission: Mode Structure. (line 12)
+* read permission, symbolic: Setting Permissions. (line 52)
+* read system call, and holes: cp invocation. (line 306)
+* readable file check: Access permission tests.
+ (line 15)
+* readlink: readlink invocation. (line 6)
+* real user and group IDs, printing: id invocation. (line 6)
+* realpath: realpath invocation. (line 6)
+* realpath <1>: realpath invocation. (line 6)
+* realpath <2>: realpath invocation. (line 6)
+* realpath <3>: readlink invocation. (line 6)
+* record separator character: split invocation. (line 152)
+* recursive directory listing: Which files are listed.
+ (line 91)
+* recursively changing access permissions: chmod invocation. (line 73)
+* recursively changing file ownership: chown invocation. (line 151)
+* recursively changing group ownership: chgrp invocation. (line 77)
+* recursively copying directories: cp invocation. (line 96)
+* recursively copying directories <1>: cp invocation. (line 262)
+* redirection: Redirection. (line 6)
+* reference file: chcon invocation. (line 30)
+* reformatting paragraph text: fmt invocation. (line 6)
+* regular expression matching: String expressions. (line 11)
+* regular file check: File type tests. (line 19)
+* relations, numeric or string: Relations for expr. (line 6)
+* relative items in date strings: Relative items in date strings.
+ (line 6)
+* release of kernel: uname invocation. (line 62)
+* relpath: realpath invocation. (line 49)
+* remainder: Numeric expressions. (line 16)
+* remote hostname: who invocation. (line 11)
+* removing characters: Squeezing and deleting.
+ (line 6)
+* removing empty directories: rmdir invocation. (line 6)
+* removing files after shredding: shred invocation. (line 144)
+* removing files or directories: rm invocation. (line 6)
+* removing files or directories (via the unlink syscall): unlink invocation.
+ (line 6)
+* removing permissions: Setting Permissions. (line 38)
+* renaming files without copying them: mv invocation. (line 85)
+* repeat output values: shuf invocation. (line 47)
+* repeated characters: Character arrays. (line 85)
+* repeated lines, outputting: uniq invocation. (line 64)
+* repeated output of a string: yes invocation. (line 6)
+* restricted deletion flag: Mode Structure. (line 52)
+* restricted security context: runcon invocation. (line 22)
+* return, ignoring: Input. (line 31)
+* return, translating to newline: Input. (line 34)
+* return, translating to newline <1>: Output. (line 16)
+* reverse sorting: sort invocation. (line 189)
+* reverse sorting <1>: Sorting the output. (line 25)
+* reversing files: tac invocation. (line 6)
+* rm: rm invocation. (line 6)
+* rmdir: rmdir invocation. (line 6)
+* rn format for nl: nl invocation. (line 98)
+* ronnabyte, definition of: Block size. (line 121)
+* root as default owner: install invocation. (line 95)
+* root directory, allow recursive destruction: rm invocation. (line 89)
+* root directory, allow recursive modification: chown invocation.
+ (line 132)
+* root directory, allow recursive modification <1>: chgrp invocation.
+ (line 59)
+* root directory, allow recursive modification <2>: chmod invocation.
+ (line 58)
+* root directory, disallow recursive destruction: rm invocation.
+ (line 82)
+* root directory, disallow recursive modification: chown invocation.
+ (line 127)
+* root directory, disallow recursive modification <1>: chgrp invocation.
+ (line 54)
+* root directory, disallow recursive modification <2>: chmod invocation.
+ (line 53)
+* root directory, running a program in a specified: chroot invocation.
+ (line 6)
+* rows: Special. (line 22)
+* rprnt: Characters. (line 61)
+* RTS/CTS flow control: Control. (line 41)
+* run commands with bounded time: timeout invocation. (line 6)
+* run with security context: runcon invocation. (line 6)
+* runcon: runcon invocation. (line 6)
+* running a program in a modified environment: env invocation.
+ (line 6)
+* running a program in a specified root directory: chroot invocation.
+ (line 6)
+* rz format for nl: nl invocation. (line 100)
+* Salz, Rich: Authors of parse_datetime.
+ (line 6)
+* same file check: File characteristic tests.
+ (line 23)
+* sane: Combination. (line 26)
+* scheduling, affecting: nice invocation. (line 6)
+* screen columns: fold invocation. (line 14)
+* scripts arguments: env invocation. (line 192)
+* seconds since the Epoch: Time conversion specifiers.
+ (line 32)
+* section delimiters of pages: nl invocation. (line 63)
+* security context: What information is listed.
+ (line 259)
+* security context <1>: cp invocation. (line 417)
+* security context <2>: install invocation. (line 100)
+* security context <3>: install invocation. (line 143)
+* security context <4>: mv invocation. (line 144)
+* security context <5>: mkdir invocation. (line 59)
+* security context <6>: mkfifo invocation. (line 28)
+* security context <7>: mknod invocation. (line 53)
+* security context <8>: id invocation. (line 51)
+* seek: dd invocation. (line 80)
+* self-backups: cp invocation. (line 51)
+* SELinux: What information is listed.
+ (line 259)
+* SELinux <1>: install invocation. (line 100)
+* SELinux <2>: id invocation. (line 51)
+* SELinux context: SELinux context. (line 6)
+* SELinux, context: SELinux context. (line 6)
+* SELinux, restoring security context: mv invocation. (line 144)
+* SELinux, setting/restoring security context: cp invocation. (line 417)
+* SELinux, setting/restoring security context <1>: install invocation.
+ (line 143)
+* SELinux, setting/restoring security context <2>: mkdir invocation.
+ (line 59)
+* SELinux, setting/restoring security context <3>: mkfifo invocation.
+ (line 28)
+* SELinux, setting/restoring security context <4>: mknod invocation.
+ (line 53)
+* send a signal to processes: kill invocation. (line 6)
+* sentences and line-breaking: fmt invocation. (line 19)
+* separator for numbers in seq: seq invocation. (line 45)
+* seq: seq invocation. (line 6)
+* sequence of numbers: seq invocation. (line 6)
+* set-group-ID: Mode Structure. (line 45)
+* set-group-ID check: Access permission tests.
+ (line 9)
+* set-user-ID: Mode Structure. (line 39)
+* set-user-ID check: Access permission tests.
+ (line 18)
+* setgid: Mode Structure. (line 45)
+* setting permissions: Setting Permissions. (line 41)
+* setting the hostname: hostname invocation. (line 6)
+* setting the time: Setting the time. (line 6)
+* setuid: Mode Structure. (line 39)
+* setup for color: dircolors invocation.
+ (line 6)
+* sh syntax for color setup: dircolors invocation.
+ (line 34)
+* SHA-1: sha1sum invocation. (line 6)
+* SHA-2: sha2 utilities. (line 6)
+* sha1sum: sha1sum invocation. (line 6)
+* sha224sum: sha2 utilities. (line 6)
+* sha256sum: sha2 utilities. (line 6)
+* sha384sum: sha2 utilities. (line 6)
+* sha512sum: sha2 utilities. (line 6)
+* shebang arguments: env invocation. (line 192)
+* SHELL environment variable, and color: General output formatting.
+ (line 37)
+* SHELL environment variable, and color <1>: dircolors invocation.
+ (line 23)
+* shell utilities: Top. (line 18)
+* shred: shred invocation. (line 6)
+* shuf: shuf invocation. (line 6)
+* shuffling files: shuf invocation. (line 6)
+* SI output: Block size. (line 42)
+* SI output <1>: What information is listed.
+ (line 251)
+* SI output <2>: df invocation. (line 168)
+* SI output <3>: du invocation. (line 147)
+* signals, specifying: Signal specifications.
+ (line 6)
+* simple backup method: Backup options. (line 44)
+* SIMPLE_BACKUP_SUFFIX: Backup options. (line 49)
+* single quotes, and env -S: env invocation. (line 268)
+* single-column output of files: General output formatting.
+ (line 9)
+* size: Special. (line 41)
+* size for main memory sorting: sort invocation. (line 322)
+* size of file to shred: shred invocation. (line 138)
+* size of files, reporting: What information is listed.
+ (line 236)
+* size of files, sorting files by: Sorting the output. (line 32)
+* skip: dd invocation. (line 73)
+* sleep: sleep invocation. (line 6)
+* socket check: File type tests. (line 31)
+* software flow control: Input. (line 45)
+* sort: sort invocation. (line 6)
+* sort field: sort invocation. (line 237)
+* sort stability: sort invocation. (line 12)
+* sort stability <1>: sort invocation. (line 315)
+* sort’s last-resort comparison: sort invocation. (line 12)
+* sort’s last-resort comparison <1>: sort invocation. (line 315)
+* sorted files, operations on: Operating on sorted files.
+ (line 6)
+* sorting files: sort invocation. (line 6)
+* sorting ls output: Sorting the output. (line 6)
+* space: Character arrays. (line 126)
+* space parity: Control. (line 16)
+* sparse: dd invocation. (line 180)
+* sparse files, copying: cp invocation. (line 306)
+* sparse files, creating: truncate invocation. (line 13)
+* special characters: Characters. (line 6)
+* special file types: Special file types. (line 6)
+* special file types <1>: Special file types. (line 9)
+* special files: mknod invocation. (line 11)
+* special settings: Special. (line 6)
+* speed: Special. (line 51)
+* split: split invocation. (line 6)
+* splitting a file into pieces: split invocation. (line 6)
+* splitting a file into pieces by context: csplit invocation. (line 6)
+* squeezing blank lines: cat invocation. (line 37)
+* squeezing empty lines: cat invocation. (line 37)
+* squeezing repeat characters: Squeezing and deleting.
+ (line 6)
+* Stallman, R.: Introduction. (line 29)
+* standard input: Common options. (line 47)
+* standard output: Common options. (line 47)
+* standard streams, buffering: stdbuf invocation. (line 6)
+* start: Characters. (line 49)
+* stat: stat invocation. (line 6)
+* status: dd invocation. (line 96)
+* status <1>: Characters. (line 45)
+* status time, printing or sorting by: Sorting the output. (line 13)
+* status time, show the most recent: du invocation. (line 202)
+* stdbuf: stdbuf invocation. (line 6)
+* stick parity: Control. (line 16)
+* sticky: Mode Structure. (line 52)
+* sticky bit check: Access permission tests.
+ (line 12)
+* stop: Characters. (line 52)
+* stop bits: Control. (line 32)
+* storage devices, failing: dd invocation. (line 397)
+* strftime and date: Date format specifiers.
+ (line 6)
+* string constants, outputting: od invocation. (line 81)
+* string expressions: String expressions. (line 6)
+* string tests: String tests. (line 6)
+* strip directory and suffix from file names: basename invocation.
+ (line 6)
+* stripping non-directory suffix: dirname invocation. (line 6)
+* stripping symbol table information: install invocation. (line 117)
+* stripping trailing slashes: cp invocation. (line 345)
+* stripping trailing slashes <1>: mv invocation. (line 125)
+* stty: stty invocation. (line 6)
+* substr: String expressions. (line 38)
+* subtracting permissions: Setting Permissions. (line 38)
+* subtraction: Numeric expressions. (line 12)
+* successful exit: true invocation. (line 6)
+* suffix, stripping from file names: basename invocation. (line 6)
+* sum: sum invocation. (line 6)
+* summarizing files: Summarizing files. (line 6)
+* superblock, writing: sync invocation. (line 11)
+* supplementary groups, printing: groups invocation. (line 6)
+* susp: Characters. (line 55)
+* swab (byte-swapping): dd invocation. (line 195)
+* swap space, saving text image in: Mode Structure. (line 52)
+* swtch: Characters. (line 42)
+* symbol table information, stripping: install invocation. (line 117)
+* symbol table information, stripping, program: install invocation.
+ (line 120)
+* symbolic (soft) links, creating: ln invocation. (line 6)
+* symbolic link check: File type tests. (line 23)
+* symbolic link to directory, controlling traversal of: Traversing symlinks.
+ (line 6)
+* symbolic link to directory, never traverse: Traversing symlinks.
+ (line 26)
+* symbolic link to directory, never traverse <1>: chown invocation.
+ (line 172)
+* symbolic link to directory, never traverse <2>: chgrp invocation.
+ (line 99)
+* symbolic link to directory, never traverse <3>: chcon invocation.
+ (line 56)
+* symbolic link to directory, traverse each that is encountered: Traversing symlinks.
+ (line 22)
+* symbolic link to directory, traverse each that is encountered <1>: chown invocation.
+ (line 159)
+* symbolic link to directory, traverse each that is encountered <2>: chgrp invocation.
+ (line 86)
+* symbolic link to directory, traverse each that is encountered <3>: chcon invocation.
+ (line 52)
+* symbolic link to directory, traverse if on the command line: Traversing symlinks.
+ (line 18)
+* symbolic link to directory, traverse if on the command line <1>: chown invocation.
+ (line 154)
+* symbolic link to directory, traverse if on the command line <2>: chgrp invocation.
+ (line 81)
+* symbolic link to directory, traverse if on the command line <3>: chcon invocation.
+ (line 47)
+* symbolic link, defined: ln invocation. (line 42)
+* symbolic links and ln: ln invocation. (line 184)
+* symbolic links and pwd: pwd invocation. (line 26)
+* symbolic links, changing group: chgrp invocation. (line 46)
+* symbolic links, changing owner: chown invocation. (line 84)
+* symbolic links, changing owner <1>: chown invocation. (line 107)
+* symbolic links, changing owner <2>: chown invocation. (line 119)
+* symbolic links, changing owner <3>: chgrp invocation. (line 34)
+* symbolic links, changing time: touch invocation. (line 70)
+* symbolic links, copying: cp invocation. (line 109)
+* symbolic links, copying <1>: cp invocation. (line 166)
+* symbolic links, copying with: cp invocation. (line 350)
+* symbolic links, dereferencing: Which files are listed.
+ (line 36)
+* symbolic links, dereferencing <1>: Which files are listed.
+ (line 41)
+* symbolic links, dereferencing <2>: Which files are listed.
+ (line 84)
+* symbolic links, dereferencing in du: du invocation. (line 119)
+* symbolic links, dereferencing in du <1>: du invocation. (line 135)
+* symbolic links, dereferencing in stat: stat invocation. (line 22)
+* symbolic links, following: dd invocation. (line 335)
+* symbolic links, permissions of: chmod invocation. (line 10)
+* symbolic modes: Symbolic Modes. (line 6)
+* symlinks, resolution: realpath invocation. (line 6)
+* sync: sync invocation. (line 6)
+* sync <1>: dd invocation. (line 289)
+* sync (padding with ASCII NULs): dd invocation. (line 198)
+* Synchronize cached writes to persistent storage: sync invocation.
+ (line 6)
+* synchronize file system and memory: sync invocation. (line 6)
+* synchronized data and metadata I/O: dd invocation. (line 289)
+* synchronized data and metadata writes, before finishing: dd invocation.
+ (line 234)
+* synchronized data reads: dd invocation. (line 281)
+* synchronized data writes, before finishing: dd invocation. (line 223)
+* system context: System context. (line 6)
+* system information, printing: arch invocation. (line 6)
+* system information, printing <1>: nproc invocation. (line 6)
+* system information, printing <2>: uname invocation. (line 6)
+* system name, printing: hostname invocation. (line 6)
+* System V sum: sum invocation. (line 29)
+* tab stops, setting: expand invocation. (line 22)
+* tabN: Output. (line 51)
+* tabs: Combination. (line 66)
+* tabs to spaces, converting: expand invocation. (line 6)
+* tac: tac invocation. (line 6)
+* tagged paragraphs: fmt invocation. (line 40)
+* tail: tail invocation. (line 6)
+* tandem: Input. (line 45)
+* target directory: Target directory. (line 6)
+* target directory <1>: Target directory. (line 15)
+* target directory <2>: Target directory. (line 31)
+* target directory <3>: cp invocation. (line 363)
+* target directory <4>: cp invocation. (line 367)
+* target directory <5>: install invocation. (line 129)
+* target directory <6>: install invocation. (line 134)
+* target directory <7>: mv invocation. (line 135)
+* target directory <8>: mv invocation. (line 139)
+* target directory <9>: ln invocation. (line 173)
+* target directory <10>: ln invocation. (line 177)
+* tebibyte, definition of: Block size. (line 99)
+* tee: tee invocation. (line 6)
+* telephone directory order: sort invocation. (line 87)
+* temporary directory: sort invocation. (line 358)
+* temporary files and directories: mktemp invocation. (line 6)
+* terabyte, definition of: Block size. (line 96)
+* terminal check: File type tests. (line 34)
+* terminal file name, printing: tty invocation. (line 6)
+* terminal lines, currently used: who invocation. (line 11)
+* terminal settings: stty invocation. (line 6)
+* terminal, using classify iff: General output formatting.
+ (line 58)
+* terminal, using color iff: General output formatting.
+ (line 31)
+* terminal, using hyperlink iff: General output formatting.
+ (line 76)
+* terse output: stat invocation. (line 70)
+* test: test invocation. (line 6)
+* text: dd invocation. (line 345)
+* text I/O: dd invocation. (line 345)
+* text image, saving in swap space: Mode Structure. (line 52)
+* text input files: cksum common options.
+ (line 89)
+* text utilities: Top. (line 18)
+* text, displaying: echo invocation. (line 6)
+* text, reformatting: fmt invocation. (line 6)
+* this in date strings: Relative items in date strings.
+ (line 33)
+* time: touch invocation. (line 56)
+* time <1>: Special. (line 11)
+* time conversion specifiers: Time conversion specifiers.
+ (line 6)
+* time formats: pr invocation. (line 78)
+* time formats <1>: Date format specifiers.
+ (line 6)
+* time limit: timeout invocation. (line 6)
+* time of day item: Time of day items. (line 6)
+* time setting: Setting the time. (line 6)
+* time style: Formatting file timestamps.
+ (line 24)
+* time style <1>: du invocation. (line 212)
+* time units: timeout invocation. (line 66)
+* time units <1>: sleep invocation. (line 11)
+* time zone correction: Time of day items. (line 29)
+* time zone item: General date syntax. (line 40)
+* time zone item <1>: Time zone items. (line 6)
+* time, printing or setting: date invocation. (line 6)
+* timeout: timeout invocation. (line 6)
+* timestamps of installed files, preserving: install invocation.
+ (line 107)
+* timestamps, changing file: touch invocation. (line 6)
+* TIME_STYLE: Formatting file timestamps.
+ (line 103)
+* TIME_STYLE <1>: du invocation. (line 240)
+* TMPDIR: sort invocation. (line 64)
+* TMPDIR <1>: sort invocation. (line 358)
+* today in date strings: Relative items in date strings.
+ (line 33)
+* tomorrow: Options for date. (line 15)
+* tomorrow in date strings: Relative items in date strings.
+ (line 29)
+* topological sort: tsort invocation. (line 6)
+* tostop: Local. (line 41)
+* total counts: wc invocation. (line 13)
+* touch: touch invocation. (line 6)
+* tr: tr invocation. (line 6)
+* trailing slashes: Trailing slashes. (line 6)
+* translating characters: Translating. (line 6)
+* true: true invocation. (line 6)
+* truncate: truncate invocation. (line 6)
+* truncating output file, avoiding: dd invocation. (line 217)
+* truncating, file sizes: truncate invocation. (line 6)
+* tsort: tsort invocation. (line 6)
+* tty: tty invocation. (line 6)
+* two-way parity: Control. (line 9)
+* type size: od invocation. (line 122)
+* TZ: pr invocation. (line 91)
+* TZ <1>: Formatting file timestamps.
+ (line 17)
+* TZ <2>: touch invocation. (line 35)
+* TZ <3>: stat invocation. (line 220)
+* TZ <4>: who invocation. (line 26)
+* TZ <5>: date invocation. (line 20)
+* TZ <6>: Options for date. (line 135)
+* TZ <7>: Specifying time zone rules.
+ (line 6)
+* u, and disabling special characters: Characters. (line 12)
+* ucase, converting to: dd invocation. (line 175)
+* umask and modes: Umask and Protection.
+ (line 6)
+* uname: uname invocation. (line 6)
+* unblock: dd invocation. (line 164)
+* unexpand: unexpand invocation. (line 6)
+* Unicode: printf invocation. (line 74)
+* uniq: uniq invocation. (line 6)
+* unique lines, outputting: uniq invocation. (line 128)
+* uniquify files: uniq invocation. (line 6)
+* uniquifying output: sort invocation. (line 374)
+* Universal Time: Options for date. (line 135)
+* unlink: unlink invocation. (line 6)
+* unprintable characters, ignoring: sort invocation. (line 149)
+* unsorted directory listing: Sorting the output. (line 18)
+* upper: Character arrays. (line 128)
+* uppercase, translating to lowercase: Input. (line 50)
+* uptime: uptime invocation. (line 6)
+* use time, changing: touch invocation. (line 48)
+* use time, printing or sorting files by: Sorting the output. (line 13)
+* use time, printing or sorting files by <1>: Sorting the output.
+ (line 44)
+* use time, show the most recent: du invocation. (line 202)
+* user IDs, disambiguating: Disambiguating names and IDs.
+ (line 6)
+* user information, commands for: User information. (line 6)
+* user name, printing: logname invocation. (line 6)
+* user names, disambiguating: Disambiguating names and IDs.
+ (line 6)
+* usernames, printing current: users invocation. (line 6)
+* users: users invocation. (line 6)
+* UTC: Options for date. (line 135)
+* utmp: logname invocation. (line 6)
+* utmp <1>: users invocation. (line 14)
+* utmp <2>: who invocation. (line 15)
+* valid file names, checking for: pathchk invocation. (line 6)
+* variable-length records, converting to fixed-length: dd invocation.
+ (line 67)
+* vdir: vdir invocation. (line 6)
+* verbose ls format: What information is listed.
+ (line 133)
+* verifying checksums: cksum common options.
+ (line 54)
+* verifying checksums <1>: cksum common options.
+ (line 60)
+* verifying checksums <2>: cksum common options.
+ (line 68)
+* verifying checksums <3>: cksum common options.
+ (line 99)
+* verifying checksums <4>: cksum common options.
+ (line 104)
+* version number sort: sort invocation. (line 183)
+* version number, finding: Common options. (line 40)
+* version of kernel: uname invocation. (line 77)
+* version, sorting option for ls: Sorting the output. (line 71)
+* version-control Emacs variable: Backup options. (line 24)
+* VERSION_CONTROL: Backup options. (line 13)
+* VERSION_CONTROL <1>: cp invocation. (line 79)
+* VERSION_CONTROL <2>: install invocation. (line 41)
+* VERSION_CONTROL <3>: mv invocation. (line 56)
+* VERSION_CONTROL <4>: ln invocation. (line 82)
+* vertical sorted files in columns: General output formatting.
+ (line 21)
+* vtN: Output. (line 59)
+* wc: wc invocation. (line 6)
+* week in date strings: Relative items in date strings.
+ (line 15)
+* werase: Characters. (line 64)
+* who: who invocation. (line 6)
+* who am i: who invocation. (line 21)
+* whoami: whoami invocation. (line 6)
+* width, sorting option for ls: Sorting the output. (line 77)
+* word count: wc invocation. (line 6)
+* working context: Working context. (line 6)
+* working directory, printing: pwd invocation. (line 6)
+* wrap data: base64 invocation. (line 25)
+* wrapping long input lines: fold invocation. (line 6)
+* writable file check: Access permission tests.
+ (line 21)
+* write permission: Mode Structure. (line 14)
+* write permission, symbolic: Setting Permissions. (line 54)
+* write, allowed: who invocation. (line 94)
+* wtmp: users invocation. (line 14)
+* wtmp <1>: who invocation. (line 15)
+* xcase: Local. (line 36)
+* xdigit: Character arrays. (line 130)
+* xfs file system type: df invocation. (line 212)
+* XON/XOFF flow control: Input. (line 40)
+* year in date strings: Relative items in date strings.
+ (line 15)
+* yes: yes invocation. (line 6)
+* yesterday: Options for date. (line 15)
+* yesterday in date strings: Relative items in date strings.
+ (line 29)
+* yottabyte, definition of: Block size. (line 116)
+* Youmans, B.: Introduction. (line 29)
+* zero-length string check: String tests. (line 15)
+* zettabyte, definition of: Block size. (line 111)
+
+
+
+Tag Table:
+Node: Top8616
+Node: Introduction23304
+Node: Common options25185
+Node: Backup options28636
+Node: Block size30662
+Node: Signal specifications36347
+Node: Disambiguating names and IDs38513
+Node: Random sources40157
+Node: Target directory42166
+Node: Trailing slashes45816
+Node: Traversing symlinks46855
+Node: Treating / specially47985
+Node: Special built-in utilities49617
+Node: Exit status50806
+Node: Floating point51681
+Node: Standards conformance53543
+Node: Multi-call invocation55277
+Node: Output of entire files55839
+Node: cat invocation56576
+Node: tac invocation58574
+Node: nl invocation60007
+Node: od invocation64287
+Node: base32 invocation72123
+Node: base64 invocation72722
+Node: basenc invocation74296
+Node: Formatting file contents77979
+Node: fmt invocation78430
+Node: pr invocation81423
+Node: fold invocation93699
+Node: Output of parts of files95214
+Node: head invocation95711
+Node: tail invocation98657
+Node: split invocation109890
+Node: csplit invocation118398
+Node: Summarizing files123884
+Node: wc invocation124595
+Node: sum invocation129058
+Node: cksum invocation130398
+Node: cksum output modes131551
+Node: cksum general options133473
+Node: cksum common options136178
+Node: md5sum invocation141927
+Node: b2sum invocation143455
+Node: sha1sum invocation144515
+Node: sha2 utilities145929
+Node: Operating on sorted files146799
+Node: sort invocation147386
+Ref: sort invocation-Footnote-1173774
+Node: shuf invocation174384
+Node: uniq invocation177585
+Node: comm invocation183726
+Node: ptx invocation187828
+Node: General options in ptx190662
+Node: Charset selection in ptx191262
+Node: Input processing in ptx192170
+Node: Output formatting in ptx197715
+Node: Compatibility in ptx204551
+Node: tsort invocation207934
+Node: tsort background211138
+Node: Operating on fields212846
+Node: cut invocation213208
+Node: paste invocation217988
+Node: join invocation220160
+Node: General options in join221624
+Node: Sorting files for join226832
+Node: Working with fields228542
+Ref: Working with fields-Footnote-1230124
+Node: Paired and unpaired lines230222
+Node: Header lines233160
+Node: Set operations234071
+Node: Operating on characters235591
+Node: tr invocation236014
+Node: Character arrays237872
+Node: Translating244093
+Node: Squeezing and deleting246250
+Node: expand invocation249240
+Node: unexpand invocation251408
+Node: Directory listing253929
+Node: ls invocation254427
+Ref: ls invocation-Footnote-1256594
+Node: Which files are listed256838
+Node: What information is listed260866
+Node: Sorting the output270742
+Node: General output formatting273930
+Node: Formatting file timestamps281563
+Node: Formatting the file names287166
+Node: dir invocation290522
+Node: vdir invocation290949
+Node: dircolors invocation291374
+Node: Basic operations293308
+Node: cp invocation293928
+Node: dd invocation313748
+Node: install invocation333088
+Node: mv invocation339574
+Node: rm invocation345819
+Node: shred invocation350736
+Node: Special file types361099
+Node: link invocation362630
+Node: ln invocation363887
+Node: mkdir invocation373043
+Node: mkfifo invocation376098
+Node: mknod invocation377573
+Node: readlink invocation380122
+Node: rmdir invocation382681
+Node: unlink invocation384301
+Node: Changing file attributes385295
+Node: chown invocation386121
+Node: chgrp invocation393591
+Node: chmod invocation397833
+Node: touch invocation401350
+Node: File space usage407061
+Node: df invocation407765
+Node: du invocation417602
+Node: stat invocation429725
+Node: sync invocation439469
+Node: truncate invocation441661
+Node: Printing text443719
+Node: echo invocation444099
+Node: printf invocation447352
+Node: yes invocation453398
+Node: Conditions454050
+Node: false invocation454645
+Node: true invocation455734
+Node: test invocation457067
+Node: File type tests459240
+Node: Access permission tests460159
+Node: File characteristic tests461073
+Node: String tests461964
+Node: Numeric tests462803
+Node: Connectives for test463638
+Node: expr invocation464892
+Node: String expressions467359
+Node: Numeric expressions470026
+Node: Relations for expr470734
+Node: Examples of expr471963
+Node: Redirection472712
+Node: tee invocation473179
+Node: File name manipulation480274
+Node: basename invocation480849
+Node: dirname invocation483068
+Node: pathchk invocation484885
+Node: mktemp invocation486699
+Node: realpath invocation492517
+Node: Realpath usage examples495580
+Node: Working context497395
+Node: pwd invocation498039
+Node: stty invocation499460
+Node: Control502445
+Node: Input503521
+Node: Output505275
+Node: Local506693
+Node: Combination508780
+Node: Characters511192
+Node: Special513027
+Node: printenv invocation515425
+Node: tty invocation516436
+Node: User information517170
+Node: id invocation517805
+Node: logname invocation520518
+Node: whoami invocation521175
+Node: groups invocation521686
+Node: users invocation522921
+Node: who invocation524101
+Node: System context527436
+Node: date invocation528101
+Node: Date format specifiers529444
+Node: Time conversion specifiers530302
+Node: Date conversion specifiers533049
+Node: Literal conversion specifiers536525
+Node: Padding and other flags536908
+Node: Setting the time540538
+Node: Options for date541701
+Node: Examples of date547351
+Ref: %s-examples548853
+Node: arch invocation552125
+Node: nproc invocation552684
+Node: uname invocation553904
+Node: hostname invocation556632
+Node: hostid invocation557462
+Node: uptime invocation558335
+Node: SELinux context559817
+Node: chcon invocation560192
+Node: runcon invocation562597
+Node: Modified command invocation564378
+Node: chroot invocation565070
+Ref: chroot invocation-Footnote-1568964
+Node: env invocation569481
+Node: nice invocation586342
+Node: nohup invocation590475
+Node: stdbuf invocation592977
+Node: timeout invocation595929
+Node: Process control600721
+Node: kill invocation600944
+Node: Delaying604138
+Node: sleep invocation604335
+Node: Numeric operations605751
+Node: factor invocation606136
+Node: numfmt invocation608104
+Node: seq invocation620199
+Node: File permissions624597
+Node: Mode Structure625290
+Node: Symbolic Modes628969
+Node: Setting Permissions630087
+Node: Copying Permissions632753
+Node: Changing Special Mode Bits633623
+Node: Conditional Executability635505
+Node: Multiple Changes636057
+Node: Umask and Protection637730
+Node: Numeric Modes638875
+Node: Operator Numeric Modes641221
+Node: Directory Setuid and Setgid642281
+Node: File timestamps645136
+Node: Date input formats648459
+Node: General date syntax650948
+Node: Calendar date items654080
+Node: Time of day items656075
+Node: Time zone items658379
+Node: Combined date and time of day items659780
+Node: Day of week items660651
+Node: Relative items in date strings661735
+Node: Pure numbers in date strings664653
+Node: Seconds since the Epoch665642
+Node: Specifying time zone rules667373
+Node: Authors of parse_datetime670988
+Ref: Authors of get_date671179
+Node: Version sort ordering672178
+Node: Version sort overview672499
+Node: Using version sort in GNU Coreutils673511
+Node: Version sort and natural sort675027
+Node: Variations in version sort order675901
+Node: Version sort implementation676681
+Node: Version-sort ordering rules677492
+Node: Version sort is not the same as numeric sort680289
+Node: Version sort punctuation682327
+Node: Punctuation vs letters683958
+Node: The tilde ~684797
+Node: Version sort ignores locale686156
+Node: Differences from Debian version sort687252
+Node: Hyphen-minus and colon687833
+Node: Special priority in GNU Coreutils version sort689464
+Node: Special handling of file extensions690640
+Node: Comparing two strings using Debian's algorithm695713
+Node: Advanced version sort topics697631
+Node: Reporting version sort bugs697921
+Node: Other version/natural sort implementations699126
+Node: Related source code701275
+Node: Opening the software toolbox702041
+Node: Toolbox introduction702839
+Node: I/O redirection705591
+Node: The who command708479
+Node: The cut command709404
+Node: The sort command710506
+Node: The uniq command711224
+Node: Putting the tools together711939
+Node: GNU Free Documentation License724276
+Node: Concept index749655
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End: