diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2007-03-22 21:23:21 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2007-03-22 21:23:21 +0000 |
commit | cbf5993c43f49281173f185863577d86bfac6eae (patch) | |
tree | 90737c96cf15b97273a2bdc5950b3cf09f1d94ca /doc | |
download | coreutils-tarball-cbf5993c43f49281173f185863577d86bfac6eae.tar.gz |
coreutils-6.9coreutils-6.9
Diffstat (limited to 'doc')
-rw-r--r-- | doc/ChangeLog | 1971 | ||||
-rw-r--r-- | doc/Makefile.am | 74 | ||||
-rw-r--r-- | doc/Makefile.in | 976 | ||||
-rw-r--r-- | doc/constants.texi | 1 | ||||
-rw-r--r-- | doc/coreutils.info | 15863 | ||||
-rw-r--r-- | doc/coreutils.texi | 14638 | ||||
-rw-r--r-- | doc/fdl.texi | 452 | ||||
-rw-r--r-- | doc/getdate.texi | 553 | ||||
-rw-r--r-- | doc/perm.texi | 604 | ||||
-rw-r--r-- | doc/stamp-vti | 4 | ||||
-rw-r--r-- | doc/version.texi | 4 |
11 files changed, 35140 insertions, 0 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 0000000..38b5f9d --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,1971 @@ +2007-03-21 Eric Blake <ebb9@byu.net> + + * coreutils.texi (md5sum invocation): Document escapes in output + format. Reported by Armijn Hemel. + +2007-03-15 Paul Eggert <eggert@cs.ucla.edu> + + Fix manual in response to bug reports by Dan Jacobson. + * coreutils.texi (sort invocation): Explain numeric sorts better. + Compress self-congratulation into a simple "comparison is exact" + notice; the --general-numeric-sort option already explains the + tradeoffs. + (seq invocation): Add example of -f. + +2007-03-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Mention that --preserve=timestamps + doesn't preserve time stamps on symbolic links. + Reported by Polo Talnir in <https://bugzilla.redhat.com/230866>. + +2007-02-27 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (df invocation): With -P, the default block size + and output format is not affected by DF_BLOCK_SIZE, BLOCK_SIZE, or + BLOCKSIZE. + +2007-01-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi + (Input processing in ptx, mkdir invocation, rmdir invocation): + @item -> @itemx to fix some typos. + +2007-01-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (mkdir invocation): Say how to set the file + permission bits of a parent directory with mkdir -p. + +2007-01-29 Jim Meyering <jim@meyering.net> + + Document new syntax: "chown +0:+287 file", "chgrp +99 file" + * coreutils.texi (Disambiguating names and IDs): New section. + (chown invocation, chgrp invocation): Mention the new syntax + with an xref to the new section. + +2007-01-19 Jim Meyering <jim@meyering.net> + + * coreutils.texi (ls: General output formatting): Mention the + workarounds to accommodate the Apple Terminal bug. + +2007-01-04 Jim Meyering <jim@meyering.net> + + * coreutils.texi (base64 invocation): When decoding, newlines + are always accepted. + +2007-01-03 Jim Meyering <jim@meyering.net> + + Document what the ".0" in e.g., "-k 2,3.0" means, and... + * coreutils.texi (sort invocation): ... that it can be applied to the + field-end spec, but not the field-start one. Patch from Evan Hunt. + +2006-12-21 Jim Meyering <jim@meyering.net> + + * coreutils.texi (dd invocation): Improve the documentation + for bs, ibs, obs, and cbs. Suggestion from Dan Jacobson. + Patch by Olivier Delhomme. + (dd invocation): Add to the description of cbs. + (dd invocation): Specify that bs=N overrides only any + _preceding_ ibs and obs settings. Spotted by Andreas Schwab. + +2006-12-14 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Remove two doubled words. + (Treating / specially): With --preserve-root, chgrp and chown + will not modify "/", even through a symlink. + +2006-11-28 Jim Meyering <jim@meyering.net> + + * perm.texi (Mode Structure): Fix typo: s/setgid/setuid/. + Reported by Georg Neis as Debian bug 400778. + +2006-10-27 Jim Meyering <jim@meyering.net> + + * coreutils.texi (wc invocation): When giving the order in which + the various "counts" are listed, also mention "maximum line length". + Prompted by a report from Vincent LeFevre. + +2006-10-23 Jim Meyering <jim@meyering.net> + + * coreutils.texi (rm invocation): Describe --one-file-system. + +2006-09-26 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (groups invocation): "groups" no longer prefixes + the output with "user :" unless more than one user is specified. + +2006-09-19 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (cp invocation): Say that -i and -f are + independent. Clarify -i's behavior. + (Disk usage): Clarify intro. Problem reported by Van Ly. + +2006-09-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tail invocation): Ignore -f when standard input + is a FIFO, too. + +2006-09-02 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Treating / specially): --preserve-root is + now the default for rm. + (rm invocation): Likewise. Also, document that you can't + remove `.' or `..'. Use the POSIX term "root directory" + rather than the more-ambiguous "file system root". + +2006-08-22 Paul Eggert <eggert@cs.ucla.edu> + + * .cvsignore: Add Makefile.in, coreutils.html, coreutils.pdf, + coreutils.ps, coreutils.tps. Remove coreutils.cm (dunno what it + is, but the makefile doesn't mention it). Remove coreutils.info + as it is subsumed by coreutils.info*. + +2006-08-22 Jim Meyering <jim@meyering.net> + + * .cvsignore: Add files that are now generated by ../bootstrap. + +2006-08-20 Paul Eggert <eggert@cs.ucla.edu> + + * Makefile.in, fdl.texi, getdate.texi: + Remove from CVS, since ../bootstrap generates them automatically. + +2006-08-17 Jim Meyering <jim@meyering.net> + + * Makefile.am (EXTRA_DIST): Reflect doclicense.texi->fdl.texi renaming. + +2006-08-17 Paul Eggert <eggert@cs.ucla.edu> + + * ChangeLog: Add copyright notice. + * Makefile.am: Likewise. + * getdate.texi: Likewise. + * perm.texi: Likewise. + * getdate.texi: Update to version 1.2 of the GNU FDL. + * coreutils.texi: Likewise. + (Copying This Manual): Renamed from GNU Free Documentation License. + Now an appendix. Include fdl.texi rather than doclicense.texi. + * fdl.tex: Renamed from doclicense.texi. Latest version from FSF. + * perm.texi: Add copyright notice. + +2006-08-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (df invocation): df exits nonzero if it outputs + nothing. + +2006-08-09 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Warn about oflag=append without + conv=notrunc. See Debian bug 373736. + +2006-08-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (shuf invocation, Random sources): New sections. + (Operating on sorted files): Add shuf. + (sort invocation, shred invocation): New option --random-source. + (sort invocation): Fix typo: -R -> -r. + +2006-07-28 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (install invocation, mkdir invocation): + Add cross-references to Directory Setuid and Setgid. + (install-invocation): The default mode is no longer equivalent to 755. + * perm.texi (Changing Special Mode Bits): Clarify u+s versus + a+s versus +s, and likewise for g+s. + (Numeric Modes): Bring back example of 0055 == 55. 4755 no + longer clears setgid bit on directories. + (Directory Setuid and Setgid): Numeric modes now affect setuid + and setgid on directories only if they set these bits. This + is so that leading 0 has no effect on numeric modes. + +2006-07-26 Jim Meyering <jim@meyering.net> + + * coreutils.texi (What information is listed): Mention that missing + pieces of information are marked with "?". From Paul Eggert. + +2006-07-25 Paul Eggert <eggert@cs.ucla.edu> + + * perm.texi (Directory Setuid and Setgid): Explain that this is a + GNU extension, and that other systems behave differently here. + +2006-07-22 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (What information is listed): Clarify that the + restricted deletion flag is another name for the sticky bit. + * perm.texi (Mode Structure): The restricted deletion flag + restricts only unprivileged users. + (Mode Structure, Symbolic Modes, Numeric Modes): Be more careful + about distinguishing file mode bits from permissions bits, + and about execute versus search permission. The FreeBSD command + is chflags, not chrflags. + +2006-07-16 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Change GNU to @acronym{GNU} in a few places. + Use "set-user-ID" and "set-group-ID" a bit more consistently. + Use "appropriate privileges" rather than "super-user" a bit + more consistently. + (install invocation): Parent directories are now 755 without uid + or gid changing. The default mode is now 0755, not 755. + (mkdir invocation): Rewrite the top-level usage description, since + I couldn't easily follow the old one. It's now 3 lines not 8. + For -m, describe file permission bits versus other bits, and note + that mkdir is atomic if you don't mention special bits. + (chmod invocation): Mention what chmod does to setgid and setuid bits. + * perm.texi (Mode Structure): Modernize the explanation of the + setuid and setgid bits on directories. + (Changing Special Mode Bits): Mention that a implies both u and g + for s. Cross reference to new node. + (Numeric Modes): Don't claim that 0055 is the same as 55; this isn't + true any more. Mention new node. + 4755 is now like u=rwxs,go=rx,g-s, not like u=rwxs,go=rx. + (Directory Setuid and Setgid): New node. + +2006-07-08 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Squeezing): Separate doubled "the", so typo-checkers + don't complain. + + * Makefile.am (check-texinfo): Enforce the zeros vs. zeroes consistency. + +2006-07-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * coreutils.texi: Fix some typos. Use `zeros' consistently (both + `zeros' and `zeroes' are correct). + +2006-07-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tail invocation): With no operand, 'tail -f' now + silently ignores the '-f' only if standard input is a FIFO or pipe + and POSIXLY_CORRECT is set. + +2006-06-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (seq invocation): seq now uses long double + internally rather than double. It now defaults to a minimal fixed + point format if possible. It lets you use %a, %A, %E, %F, %G. + Don't assume printf doesn't work for numbers that fit in 64 but + not 32 bits; typically they work these days. Improve discussion + of large integers and update the rounding-error numbers. + +2006-06-28 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): 'sort +1 -2' is now supported + even when conforming to POSIX 1003.1-2001, since this is a pure + extension to POSIX. + +2006-06-27 Jim Meyering <jim@meyering.net> + + * coreutils.texi (wc invocation): Remove ./ prefix from example. + From Padraig Brady. + +2006-06-26 Jim Meyering <jim@meyering.net> + + * coreutils.texi (wc invocation): Spell out `--files0-from' in + the example. Suggestion from Bob Proulx. + + * coreutils.texi (wc invocation): Document new --files0-from option. + +2006-06-20 Eric Blake <ebb9@byu.net> + + * coreutils.texi (sleep invocation): Document that accepting + multiple arguments and suffixes are extensions. + Reported by Dan Jacobson. + +2006-06-12 Paul Eggert <eggert@cs.ucla.edu> + + * Makefile.am (check-texinfo): Use $(_W) and $(W_) instead of + assuming grep -w (which is not portable). + +2006-05-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * Makefile.am: Use `AM_MAKEINFOFLAGS' rather than + overwriting `MAKEINFO', so that `missing' can do its job. + + * Makefile.am (check-texinfo): Use `$(EGREP)' instead of `grep -E'. + (check-texinfo): Use literal `{' only in brackets, i.e., [{] or [}], + to avoid triggering an error from Solaris 2.6's grep. + +2006-05-25 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): Remove mention of --seed, since + it's going away. + +2006-05-04 Eric Blake <ebb9@byu.net> + + * coreutils.texi (Examples of date): Give example of @seconds. + +2006-05-03 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (head invocation, tail invocation, sort invocation): + Give advice about porting to hosts that support only obsolete syntax. + Problem reported by Zack Weinberg. + +2006-04-23 Francesco Montorsi <fr_m@hotmail.com> + + * coreutils.texi (Which files are listed): Describe new option: + --group-directories-first. + +2006-04-17 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (What information is listed): Add P for Solaris + 10 ports. Add commented-out entries for other types that POSIX + says are possible, or that I observed in FreeBSD documentation. + +2006-04-18 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Input processing in ptx): Remove mention of the + default --ignore file, /usr/local/lib/eign. That file has never + been used. Reported by Eric Blake. + +2006-04-12 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (expr invocation): expr exit status is 3 only for + internal errors now; 2 is also for invalid values in expressions. + + (What information is listed): Document 'ls' type letters. + Problem reported by Lincoln Martin. + +2006-04-09 Ori Avtalion <oavtal@bezeqint.net> + + * coreutils.texi (Top): Add 'hostid' to System context menu line. + (trivial change) + +2006-03-22 Eric Blake <ebb9@byu.net> + + * coreutils.texi (General options in ptx): Undocument --copyright. + +2006-03-27 Eric Blake <ebb9@byu.net> + + * coreutils.texi (dirname invocation): Macro in previous patch + was too broad. + +2006-03-11 Eric Blake <ebb9@byu.net> + + * coreutils.texi (basename invocation, dirname invocation): + Improve documentation to match recent // patches. + +2006-03-23 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nohup invocation): nohup now redirects stderr to + nohup.out if stdout is closed and stderr is a tty. + +2006-03-05 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): New flags directory, nolinks. + Alphabetize nofollow. + +2006-02-17 Simon Josefsson <jas@extundo.com> + + * coreutils.texi: Add base64 section. + +2006-02-20 Eric Blake <ebb9@byu.net> + + * coreutils.texi (rm invocation): Fix typo in last patch. + (paste invocation): Fix whitespace. + +2006-02-18 Eric Blake <ebb9@byu.net> + + * coreutils.texi (rm invocation): Document new -I option, and new + --interactive behavior. + +2006-02-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Character sets): Don't say that an unknown + backslash-escape causes an error message -- it doesn't. + Mention that `\' also removes any special significance, so + is useful for [, ], *, -. Prompted by Richard Neill in + http://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=14937 + +2006-02-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (od invocation): Warn that -t a ignores the high + order bit. + +2006-01-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tail invocation): In the obsolete usage, the + count is optional, so put square brackets around it. + +2006-01-02 Paul Eggert <eggert@cs.ucla.edu> + + * getdate.texi (General date syntax): Invalid dates are rejected. + (Time of day items): Mention the possibility of leap seconds. + Problem reported by Dr. David Alan Gilbert. + + * coreutils.texi: Use @acronym around "ISO" uniformly. + (Date conversion specifiers): Explain %g, %G, and %V a bit better. + +2006-01-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tail invocation): Say that --retry + is useful `mainly' (not `only') when following by name. + +2006-01-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi, perm.texi: Clarify file mode bits versus + file permission bits. + * coreutils.texi (mkfifo invocation, mknod invocation): -m + affects only file permission bits. + +2005-12-29 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): Clarify that a blank is a space + or a tab. + +2005-12-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation) [--printf]: Describe new option. + [--format]: Add example. Distinguish from --printf. + Sort option descriptions. + +2005-12-05 Andreas Gruenbacher <agruen@suse.de> + + * coreutils.texi (ls): Clarify the Alternate Access Method description. + (cp): Clarify that --preserve=mode also preserves acls. + +2005-12-12 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): Clarify explanation of + --random-sort, and use a simpler example. + +2005-12-10 Frederik Eaton <frederik@ofb.net> + + * coreutils.texi (sort invocation): Add --random-sort (-R) and --seed. + +2005-12-07 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): New noatime flag. + +2005-11-25 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (df invocation): Document treatment of dummy file + systems better. + +2005-11-16 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (ln invocation): ln -v now outputs lines only for + successful links. + (tail invocation): Say that the obsolete form uses exactly one + option and at most one file. + +2005-11-13 Jim Meyering <jim@meyering.net> + + * perm.texi (Mode Structure): Capitalize two sentences in an + enumerated list and fix a typo. From Aaron Hawley. + +2005-11-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Formatting file timestamps): ls now defaults to + --time-style='locale', which in turn acts like + --time-style='posix-long-iso' if the locale settings are messed up. + +2005-11-02 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (rm invocation): Don't mention --directory (-d). + +2005-11-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tail invocation): Describe obsolete usages + like "tail -2" more precisely. + (touch invocation): The old usage works only for 1969-1999 now. + +2005-08-28 David Madore <david.madore@ens.fr> + + * coreutils.texi: Document SHA-1 and SHA-2 utilities. + +2005-10-15 Paul Eggert <eggert@cs.ucla.edu> + + * doc/coreutils.texi (Top, General output formatting, dir invocation): + (vdir invocation): Don't document the old v and d commands. + +2005-10-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Document du's -m option, + now that we've decided to keep it. + (who invocation): Remove documentation for deprecated --idle (-i). + +2005-10-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Avoid a few overfull/underfull hboxes. + +2005-09-24 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (touch invocation): + "touch -" now touches standard output. + +2005-09-17 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (who invocation): Remove a stray '+'. + +2005-09-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (uname invocation): uname -a no longer generates + the -p and -i outputs if they are unknown. + +2005-09-13 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Time conversion specifiers, Options for date): + Document date --rfc-3339 and new specifiers %:z, %::z, %:::z. Use + "date and time" consistently; the old version sometimes said "time + and date". Fix a minor bug in the documentation for --rfc-2822: + it claimed day-of-month < 10 had leading space, not leading zero. + Use a consistent format for terms like "RFC". + (uname invocation): Mention that Linux outputs "unknown" for + -i and -p. + +2005-09-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nice invocation): Document "niceness" versus + "nice value" versus "scheduling priority". + +2005-09-07 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nice invocation): Use "niceness", not "nice value" + to talk about nice values offset by -20. Don't use the word + "priority" when niceness is intended. + +2005-08-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (join invocation): Itemize the defaults. + From Karl Berry. + +2005-08-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation, mv invocation): Remove square + brackets in --reply=[HOW]. Reported by Oscar Liljeblad. + +2005-07-19 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (md5sum invocation): --check now allows multiple + FILE inputs. + +2005-07-18 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (false invocation): + Mention that false is often built-in, and that it exits + with status >1 on some hosts. + (true invocation): Remove now-incorrect "non-POSIX mode" reference. + +2005-07-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nohup invocation): POSIXLY_CORRECT no longer + affects nohup's behavior. Input is redirected from /dev/null. + +2005-07-11 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (cat invocation): Remove -B or --binary option + (available on MS-DOS-like platforms only). Explain when text and + binary mode are used now. + (md5sum invocation): -b actually does have an effect on Unix: it + causes "*" to be output. Explain when text and binary mode are + used now. + +2005-07-03 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Mark --reply as deprecated. + (mv invocation): Likewise. + +2005-06-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Clarify how --reply=no works. + +2005-06-14 William Brendling <wbrendling@gmail.com> + + * coreutils.texi (du invocation): New options --last-time and + --time-style. + +2005-06-19 Jim Meyering <jim@meyering.net> + + * coreutils.texi (ln invocation): Change a few `paths' to `file names'. + * Makefile.am (check-texinfo): Also catch uses of path, pathname. + +2005-06-17 Jim Meyering <jim@meyering.net> + + * coreutils.texi (shred invocation): Clarify that shred + works on ext3 as long as it's not in data=journal mode. + Patch from Mark Melahn. + +2005-06-16 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Backup options): Undocument --version-control=S (-V). + +2005-06-07 Jim Meyering <jim@meyering.net> + + * coreutils.texi (ln invocation): Examples, from Bob Proulx. + +2005-06-01 Paul Eggert <eggert@cs.ucla.edu> + + Use "file name" when talking about file names, instead of "filename" + or "path", as per the GNU coding standards. + * coreutils.texi (readlink invocation): "path component" -> + "component", since we don't use the POSIX "path" nomenclature. + +2005-05-11 Paul Eggert <eggert@cs.ucla.edu> + + * getdate.texi (General date syntax): Don't say that date + date --iso-8601=ns generates acceptable dates; it doesn't yet. + Problem reported by Nic Ferrier. + +2005-05-06 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): New flags "binary" and "text". + +2005-05-04 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (chmod invocation): chmod -w complains if its + behavior differs from what chmod a-w would do. + +2005-05-02 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (ls invocation): ls --indicator-style=directory + renamed to ls --indicator-style=slash, to avoid confusion with ls + --directory. + +2005-04-28 Paul Eggert <eggert@cs.ucla.edu> + + * perm.texi (Mode Structure, Changing Special Permissions): + (Conditional Executability, Numeric Modes): + These days the sticky bit is more often uses as the restricted + deletion flag, so modernize the discussion about this. + (Mode Structure): Linux/GNU -> GNU/Linux. + (Symbolic Modes): Don't imply that "+ur" or "u" is valid. + (Setting Permissions): Don't imply that "+t" is invalid. + Use "rwx" rather than the less-common "rxw" in an example. + (Copying Permissions): Say that ugo is a replacement for + a string of the other letters. Add spaces around examples. + Use "set-user-ID" rather than "set user ID" to avoid ambiguity. + Use "+t" rather than "o+t", since POSIX doesn't specify the latter. + Mention which combinations are portable and which are GNU. + (Numeric Modes): Don't imply they aren't portable; they are + nowadays. + +2005-04-26 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Standards conformance): Do not mention head -10, + since it now works the same regardless of POSIX version. + (od invocation): -w N -> -w[N]. + (pr invocation): -S STRING -> -SSTRING. + (fold invocation): -WIDTH works even when conforming to POSIX + 1003.1-2001. + (head invocation, tail invocation): Likewise for -NUM. + (split invocation): Likewise for -LINES. + (uniq invocation): Likewise for -N. + (expand invocation, unexpand invocation): Likewise for -TAB. + (nice invocation): Likewise for -ADJUSTMENT. + (sort invocation): Clarify explanation of +N option. + (uniq invocation): Likewise. + (join invocation): Remove special case for --help, --version. + (touch invocation): Clarify explanation of date options. + (Options for date): -I timespec -> -I[timespec]. + +2005-04-23 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (install invocation): Use a= instead of 0 for + the point of departure for -m, and explain what it meeams. + (mkdir invocation, mkfifo invocation, mknod invocation): + The umask does not affect the point of departure. + Problem reported by Mike Stone. + +2005-04-11 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: For consistency, standardize on "user ID" rather + than "uid" or "UID" or "user id". Similarly for "group ID". + +2005-04-09 Jim Meyering <jim@meyering.net> + + * coreutils.texi (rm invocation): Say that --recursive removes + listed directories too, not just their contents. + +2005-04-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Document the distinction between + INFO and USR1 for dd, and the effect of POSIXLY_CORRECT here. + +2005-04-05 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (cat invocation, chown invocation) + (chgrp invocation, basename invocation, dirname invocation): + Add examples, which are copies of the examples newly added + to the usage messages. + (ln invocation): Use same format as other examples above, + for consistency. + +2005-03-26 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Clarify NUL vs null byte vs null character. + +2005-03-18 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nohup invocation): Clarify nohup.out creation. + +2005-03-11 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Formatting file timestamps): Very long timestamps + may be treated as errors. + +2005-03-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (date invocation): Use an example that makes it + clear tha the default date use space-padded day of month. + Replace "directive" with "conversion specifier" to be consistent + with POSIX. All uses changed. + Fix menu RHS to match actual directive lists. + (Time conversion specifiers): Renamed from Time directives. + Use @samp consistently, sometimes instead of @code. + Consistently ention which specifiers are GNU extensions. + Give more examples (in some cases, instead of ranges). + Say why %F is preferred for dates. + (Date conversion specifiers): Renamed from Date directives. + Likewise for other changes. + (Padding and other flags): Correct the description. + Document #. Give an example for %9B. + +2005-02-23 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Adjust to match current strftime.c. + (Time directives): Say that %k, %l, and %P are GNU extensions. + For %p and %P, mention handling of noon and midnight. + For %s, use ISO 8601, and mention handling of leap seconds. + For %S, clarify mention of leap seconds. + For %T, say that it's the same as %H:%M:%S. + For %X, don't say that it must be the same as %H:%M:%S. + For %z and %Z, clarify which time zones are used. These options + are now affected by --date, so don't claim that they're not. + (Date directives): %C is now all but the last two chars of %Y. + For %D, say that it's equivalent to %m/%d/%y. + For %e, use blank in example. + For %h, use @code for %b. + For %Y, mention what happens with outlandish years. + (Padding and other flags): Renamed from Padding. + Mention that the flags are GNU extensions. + Mention the 0 and ^ flags. + Mention field widths an modifiers. + (Examples of date): - is a flag, not a modifier. + +2005-01-07 Jim Meyering <jim@meyering.net> + + * coreutils.texi (sort invocation): Specify that a string + of zero digits is interpreted as 0. Reported by Ulrich Hermisson. + +2005-01-04 Jim Meyering <jim@meyering.net> + + * coreutils.texi (shred invocation): Clarify that shred works fine + with journaled file systems that are configured not to journal + file system data. Also mention BFS and NTFS. + +2004-12-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (ls invocation): Change minor problem to be + "subdirectory not found", since top-level trouble is now serious. + (dircolors invocation): Quote argument to eval. Problem reported + by Stephane Chazelas. + +2004-12-11 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (join invocation): Mention that blank separators + in the -o option need to be quoted. Problem reported by Phil Clayton. + +2004-12-10 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (id invocation): -G also prints main group. + Problem reported by Tim Waugh. + +2004-12-09 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (ls invocation): Document new "ls" exit status. + +2004-12-08 Paul Eggert <eggert@cs.ucla.edu> + + * getdate.texi (Time of day items, Time zone items): + Describe new formats +00:00, UTC+00:00. + +2004-12-04 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cut invocation): Say when --complement is useful. + +2004-10-01 Paolo Bonzini <bonzini@gnu.org> + + * coreutils.texi (cut invocation): Document --complement and + adjust the documentation of -b, -c, -f. + +2004-11-27 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (du invocation): Use if=/dev/null rather + than :|. Problem reported by Dan Jacobson. + Use "seek=2GiB" rather than the wordier "seek=`echo '2^31'|bc`". + Say "KiB" not the (inaccurate) "kilobytes". + Similarly for "GiB" and "gigabytes". + +2004-11-16 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Changes inspired by Debian coreutils 5.2.1-2. + (General output formatting): -x doesn't have an operand. + (Formatting the file names): Warn that even with -N unprintable + chars are still printed as '?' some times. + (rm invocation): Reword rm -d to note that it's sometimes useful + on non-directories. + (logname invocation, users invocation, who invocation): + The utmp and wtmp file names vary from system to system. + + * getdate.texi (General date syntax): "next" is 1, not 2. + Document that "second" isn't allowed as an ordinal number. + +2004-11-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Reword the new dd message. + +2004-11-14 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): dd now outputs total bytes, + seconds, and bytes per second. + +2004-11-03 Paul Eggert <eggert@cs.ucla.edu> + + * Makefile.am (_W, W_): New macros. + (check-texinfo): Use them instead of assuming grep -w (which is not + portable). + +2004-10-29 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Document TZ better, and adjust to new getdate.texi. + (Top): Update menu. + (pr invocation, Formatting file timestamps, touch invocation, + stat invocation, who invocation, date invocation, Options for date): + Mention TZ. + * getdate.texi: Sync from gnulib. + +2004-10-28 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Standards conformance): Use "head -10" rather + than "head -1" as example of obsolete usage, since the POSIX + consensus is that "head -1" could be supported even if we don't + yet have clear consensus on "head -10". See today's revision to + the SUS FAQ + <http://www.opengroup.org/austin/papers/single_unix_faq.html>. + +2004-10-24 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (pathchk invocation): Options must precede operands. + +2004-10-17 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (pathchk invocation): Overall lengths are + OS limits, not file system limits. Component length checks + apply to all components, not merely to existing ones. Say + that nonexistent names are not errors. For -p, omit all + checks based on the underlying file system, not merely length + checks. Explain what the portable file name character set is. + +2004-10-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (printf invocation): Mention ISO/IEC 10646 as + well as Unicode. Various minor formatting cleanups. + +2004-10-13 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): Move LC_ALL, LC_COLLATE + index entries to proper paragraph. + +2004-10-12 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Add `builtin' and `builtins' to + the list of words to avoid. + +2004-10-11 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Special built-in utilities): New node. + (printf invocation): builtin -> built-in, for consistency + with POSIX terminology. + (test invocation, pwd invocation): + Use specific rather than generic language to warn about + built-in commands. + (chroot invocation, env invocation, nice invocation, nohup invocation): + Warn that command must not be a special built-in. + (env invocation): Warn about environment variables with unusual + spellings, or duplicates. + +2004-09-26 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (ls invocation): Document "ls --hide". + +2004-09-24 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (chmod invocation): Warn about "chmod -w file". + +2004-09-23 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tail invocation): Fix bugs in the description of + the obsolete syntax (e.g., it does not support -k or -m). Warn + about usages like "tail -" and "tail -c 4" that are ambigous on + older systems. + +2004-09-20 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (mv invocation, rm invocation): Say "the response + is affirmative" rather than "the response begins with y or Y", + so that the documentation is accurate in non-English locales. + Problem reported by Munzir Taha. + +2004-09-18 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Distinguish between options + (e.g., --help) and operands (e.g., if=file). Move miscellaneous + stuff after the operand descriptions, for clarity. + +2004-09-09 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): -u disables the last-resort + comparison, too. Revamp its description. + (test invocation): Document -r, -w, -x more carefully. + +2004-09-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Common options): Some programs don't reorder + options. + (tr invocation, echo invocation, printf invocation, test invocation, + expr invocation, basename invocation, chroot invocation, + nice invocation, nohup invocation, seq invocation): + This program doesn't reorder options. + (tr invocation): Mention --help, --version, --. + (echo invocation): Mention that -- isn't special. + (test invocation): Mention that the expression is optional, + and that test ! EXPR is like ! test EXPR. + Mention that -h and -L don't dereference symlinks. + (expr invocation): Mention --help, --version. + + * coreutils.texi (sort invocation): Add remarks about sort -u + versus sort | uniq. Prompted by a question from Andrew Noymer. + +2004-09-06 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (od invocation): Several changes for POSIX + and FreeBSD compatibility. Add support for XSI syntax + (POSIX 1003.1-2004). Rename -s[N] to -S N. Remove documentation + for -h. -i is now -t dI (not d2) and -l is now -t dL (not d4). + +2004-09-05 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (String tests): Improve quality of warning about + quoting strings for the shell. + +2004-09-03 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Specify which conversion options + are mutually exclusive. Give a bit more detail about ascii, + ebcdic, and ibm conversions. + +2004-08-24 Paul Eggert <eggert@cs.ucla.edu> + + POSIX-conformance fixes for "expand" and "unexpand". + * coreutils.texi: Standardize on "tab stop" (the POSIX usage) + rather than "tabstop". + (unexpand invocation): Use "blank" rather than "space" when + POSIX requires "blank". Define "blank". Initial blanks are + converted even if there's just one. For -a, convert two or + more blanks only if they occur just before a tab stop. + +2004-08-19 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (chown invocation): Fix synopsis: + group must always be preceded by separator. + "chown : file" and "chown '' file" don't change the owner or group. + Update the explanation of what happens to the set-user-ID or + set-group-ID bits, e.g., they sometimes are not cleared if they + denote mandatory locking. Change "find"-oriented examples to use + chown -h. + +2004-08-18 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (printf invocation): Clarify how "printf" is + supposed to work with extra arguments, missing arguments, etc. + +2004-08-10 Paul Eggert <eggert@cs.ucla.edu> + + POSIX-conformance fixes for "-" used as an operand. + * coreutils.texi (Common options): Clarify that "-" means + stdin/stdout only when it is an operand, not when it is an + option-argument. + (shred invocation): "shred -- -" is equivalent to "shred -", + not to "shred ./-". + (tee invocation): "tee -" means to copy (again) to stdout. + +2004-07-25 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (nice invocation): Document the "nice value", and + how it affects the scheduling priority. (The old documentation + implied that the nice value equaled the scheduling priority, which + isn't accurate.) Document that the range of nice values might + exceed -20..19. Specify what happens when you give a nice value + that is out of range, or when you don't have permissions to lower + the nice value. Bash doesn't have a builtin 'nice', so don't say + "most shells" have one. + +2004-04-03 Dmitry V. Levin <ldv@altlinux.org> + + * coreutils.texi (readlink invocation): Document new + "readlink -f" behaviour and new canonicalize options, -e and -m. + +2004-07-02 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Disallow `filename' in .texi files. + Spell it like `file name' instead, to be consistent. + Fail if a @footnote directive follows non-punctuation. + Fail upon use of @url. Use @uref instead. + +2004-07-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Common options, Target directory, cp invocation, + install invocation, mv invocation, ln invocation): Add -t as a + short option for --target-directory, and -T as a short option for + --no-target-directory. Clean up relevant synopses a bit, so that + the language is similar for all. + +2004-06-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi: Put the right amount of space at sentence ends. + Make sure "i.e." and "e.g." are followed by commas (the GNU style). + Put blank lines before and after every @example, prefer the + previous line to end in ":" (when not a sentence end, for consistency), + and prepend @noindent to the following line when appropriate. + In examples, use "--" arguments when needed to prevent undesired + interpretation of operands as options. + Use "file name" rather than "filename", as per the GNU coding standards. + Remove unwanted spaces before @footnote. + Use "---" when appropriate, instead of " -- ". + Use "name" (or something like that) rather than "path" or "pathname", + since the GNU coding standards don't allow "path". + Use @acronym, @command, @minus{}, @samp in a few places, + where appropriate. + (Target directory): Clarify description of example. + (fmt invocation): Give issue number for reference, and reword + for clarity. + (sort invocation): Note that xargs without -0 also mishandles + file names containing some special characters other than newline. + (Translating): Mention that \012 is not universally portable. + Use '\0' rather than '\000'. + (Squeezing): bourne -> Bourne. + Fix unportable usage of '\n' by replacing it with '[\n*]'. + (More details about version sort): Remove unnecessary indent + in examples. + (dd invocation): Use 'kill -s USR1', not 'kill -USR1', as POSIX + indicates that the former is more portable (the latter is an XSI + extension). + (shred invocation): Use @uref rather than @url, and use a more-typical + style for the date. + (kill invocation): Clarify usage; for example, "kill -s TERM -1" + isn't allowed. + (seq invocation): Reword to avoid implying that printf necessarily + fails for numbers outside the 32-bit range. Prefer separating + options from their operands. + (Opening the software toolbox): Give an online reference to + Robbins's article, and give a date. Don't imply that the + current documentation is unchanged from his article. + (Putting the tools together): Rework examples so that they don't + assume the C locale; nowadays many users now operate outside the C + locale by default. While we're at it, don't assume ASCII either. + Indent example to match actual output from GNU uniq. Remove some + unnecessary and confusing brackets from 'tr' operands. "Software + Tools in Pascal" is back in print, according to Amazon anyway. + Add references to Kernighan's online copies of examples. + +2004-06-30 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi, perm.texi: Standardize on "file system" rather + than "filesystem", as POSIX prefers it with a space. + +2004-06-29 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (Common options, Target directory, cp + invocation, install invocation, mv invocation, ln invocation): + Likewise. + (link invocation): Explain how to rewrite link using ln now + that we have --no-target-directory. + (ln invocation): Explain that --no-target-directory subsumes + --no-dereference. + (unlink invocation): Modify wording to match new wording in + link invocation. + +2004-06-25 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (install invocation): Document + --target-directory in synopsis, too. + +2004-06-15 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (yes invocation): "--" is now supported. + (false invocation, true invocation): --help and --version now + work unconditionally. + +2004-06-07 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Remove menu references to just-removed subsection. + +2004-06-06 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tr invocation): Remove the section describing + how POSIXLY_CORRECT changes tr's behavior. + +2004-06-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cut invocation): Clarify what --output-delimiter=STR + does with byte/character ranges. + +2004-06-01 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (tr invocation): Mention -C. + +2004-05-13 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (echo invocation): Document today's changes. + +2004-05-17 Jim Meyering <jim@meyering.net> + + chgrp and chown now dereference symlinks by default, per POSIX. + * coreutils.texi (chgrp invocation, chown invocation): Document it. + +2004-05-13 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (sort invocation): Document that "sort -m -o F" + might write F before reading all the input. + +2004-05-09 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation): Change IO to I/O. + * Makefile.am (check-texinfo): Check for the above. + +2004-04-25 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (sort invocation): Mention -k earlier, so + that the options are in alphabetical order. Describe how -b works + more-accurately; this involves fixing some examples, too. Mention + what happens if the start field falls after an end field or after + a line end. Warn about using -k without -b, -g, -M, -n, or -t. + Add an example of how to sort IPv4 addresses and Apache Common + Log Format dates. Remove a duplicate example. + (Putting the tools together): Use separate options rather + than agglomerating them. + +2004-03-27 Paul Eggert <eggert@twinsun.com> + + cp -pu and mv -u (when copying) now take the destination + file system time stamp resolution into account. + + * coreutils.texi (mv invocation): Document this. + (cp invocation): Document -u (it was missing!) with new behavior. + +2004-04-08 Paul Eggert <eggert@cs.ucla.edu> + + * coreutils.texi (dd invocation): Remove noctty flag from dd. + +2004-04-07 Paul Eggert <eggert@twinsun.com> + + New dd conv= symbols nocreat, excl, fdatasync, fsync, + and new dd options iflag= and oflag=. + + * coreutils.texi (dd invocation): Document them. + +2004-04-07 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stty invocation - Input): Document new iutf8 option. + +2004-04-04 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation): Correct --format description. + +2004-02-25 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Block size): Document new envvar BLOCKSIZE. + +2004-03-24 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Add a check to ensure future + consistency in using @sc{nul}, not `NUL'. + +2004-03-23 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: Use @sc{nul} consistently for NUL. + (du invocation): FILE0 -> FILE. + +2004-03-23 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): --files0-from is useful with + --total (-c), not with --summarize. + +2004-03-22 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Tweak a few lines that resulted in + `overfull hbox' warnings. + +2004-03-03 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Document new option: --file0-from=F. + +2004-02-29 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (touch invocation): + Describe use of fractional seconds. + (date invocation, Options for date): Likewise. + * getdate.texi (General date syntax, Time of day items): Likewise. + * coreutils.texi (date invocation): Mention effect of LC_TIME. + (Options for date): Describe new --iso-8601=ns option. + + * getdate.texi: Add copyright notice. Change getdate to + get_date when talking about the function name. + (Seconds since the Epoch): New section, containing the time_t + info moved from Date input formats section, along with new + info about the @ syntax. Mention negative time stamps, + fractional time stamps, and leap seconds. + (General date syntax): Modernize examples a bit to reflect new + features. + (General date syntax, Relative items in date strings): + Use ' rather than " to quote formats. + (Time of day items): Add an example with fractional seconds. + Describe fractional-second syntax. + +2004-03-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (date invocation): Add missing `C' to %[...] range + in the `Date directives:: ...' menu entry. From Bob Proulx. + + * coreutils.texi: Add FIXME comment: + The following don't have `invocation' nodes: [, pinky, shasum, uptime. + +2004-03-10 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Sorting the output): Remove description of + ls's --sort=directory option. ls doesn't accept that option, yet. + Reported by Arvind Autar. + + * coreutils.texi (cp invocation): Improve description of + cp's --sparse=WHEN option. + + * coreutils.texi (nl invocation): Specify that these are _basic_ + regular expressions (BRE), and add a link to grep's documentation. + Suggestion from Dan Jacobson. + +2004-02-23 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (chown invocation): Document that chown now falls + back on USER.GROUP parsing regardless of POSIX version, as POSIX + 1003.1-2001 allows that behavior as a compatible extension. + +2004-02-22 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Mention that using du's -H option + currently evokes a warning. + +2004-02-15 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (expr invocation): + Document what forms integers may take, and say "integer" + consistently instead of "number". Warn about operands + that "expr" can misinterpret, and how to work around the + problem. + +2004-02-17 Jim Meyering <jim@meyering.net> + + * coreutils.texi (csplit invocation): Correct typo (s/LINE/N/) + in description of `N' pattern. From Reuben Thomas <rrt@sc3d.org> + +2004-02-11 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Time directives): The %s value *is* changed by the + --date=DATE option; don't say otherwise. Patch from Padraig Brady. + +2004-02-10 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Formatting the file names): + Improve wording for --quoting-style documentation. + Suggestions by Bruno Haible. + +2004-02-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (nice invocation): Add examples. + Prompted by a suggestion from Dan Jacobson. + (factor invocation): Add an example. + Update timing numbers for a more modern CPU. + +2004-01-27 Jim Meyering <jim@meyering.net> + + * coreutils.texi (seq invocation): Remove `@dots{}' at end of synopsis. + Separate `Synopses' section into three examples. + Clarify first paragraph. @w{}-protect an expression.1 + Use @option{--option}, rather than @code{--option}. + +2004-01-19 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Exit status): Document that ordinary failure + might not exit with status 1 on unusual platforms. + Mention chroot, env, nice, and su as having unusual exit + status patterns. Don't bother to mention true and false + since their exit status patterns are actually normal. + (sort invocation, su invocation): Mention its unusual exit + status pattern. + (chroot invocation): Simplify description of exit status 1. + Remove duplicate description of status 127. + (env invocation): Use consistent tenses; simplifiy description + of status 1. + (nice invocation): Likewise. + +2003-12-15 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (touch invocation): touch -r and -d can now + both be specified, with -r specifying the origin for -d. + +2004-01-15 Alfred M. Szmidt <ams@kemisten.nu> + + Factor out some common options. + * coreutils.texi (Common options): Define macros here. + (What information is listed, cp invocation): Use the macro(s). + (install invocation, mv invocation, ln invocation): Likewise. + (df invocation, du invocation): Likewise. + +2004-01-09 Jim Meyering <jim@meyering.net> + + Document the exit status of each and every program. + * coreutils.texi (yes invocation): Document that a write error + makes `yes' exit unsuccessfully. + (chroot invocation): Enumerate the meaning of exit status values. + (nice invocation): Likewise. + (Exit status) [@macro exitstatus]: New macro. + Use @exitstatus to describe the exit status of most programs. + +2004-01-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Mention that -H will eventually + mean not --si, but --dereference-args (-D). + +2003-12-20 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Describe new option: -0, --null. + +2003-12-03 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (What information is listed, chroot invocation): + Adjust example 'ls' output to match new behavior with narrower + output columns. + (The cut command): Remove example that cut the output of + 'ls -l'. The output was incorrect even with the old 'ls', and + the whole idea of using 'cut' on 'ls -l' output is bogus anyway. + +2003-11-24 Paul Eggert <eggert@twinsun.com> + + Parse floating-point operands and options in the C locale. + POSIX requires this for printf, and we might as well be + consistent elsewhere (tail, sleep, seq). + + * coreutils.texi (tail invocation, printf invocation, + sleep invocation, seq invocation): Document this. + +2003-11-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Traversing symlinks, Treating / specially): + New sections. + (rm invocation, chown invocation, chmod invocation, chgrp invocation): + Describe new options, --preserve-root and --no-preserve-root. + +2003-11-11 Jim Meyering <jim@meyering.net> + + * coreutils.texi (chown invocation) [chownchgrpoptions]: New macro + describing -H, -L, -P options. Use it here. + (chgrp invocation): And here. + +2003-11-09 Jim Meyering <jim@meyering.net> + + * coreutils.texi (dd invocation): Fix typo in example. + +2003-10-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (ln invocation): Note that --directory, -d, -F + probably won't work even for superuser. Suggestion from Dan Jacobson. + +2003-09-29 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (csplit invocation): + The regexp offset need not have a sign; POSIX requires support + for signless offets. + +2003-10-03 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Describe -P, --no-dereference. + +2003-09-28 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Translating): Correct typo in menu description. + From A Costa. + +2003-09-02 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (sort invocation): -d now overrides -i. + "whitespace" -> "blanks"; "whitespace" isn't correct. + -t '\0' now specifies a NUL tab. + +2003-08-17 Jim Meyering <jim@meyering.net> + + * coreutils.texi (who invocation): Add an entry for -l, --login. + Remove `-l' from the entry for --lookup. + (who invocation): Begin adding missing option documentation. + +2003-08-07 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (split invocation): + Add -d or --numeric-suffixes option to 'split'. + +2003-07-31 Paul Eggert <eggert@twinsun.com> + + * getdate.texi (General date syntax): Add --rfc-2822 option to GNU date. + * coreutils.texi (Options for date): Fix a typo in format: + it's now %d not %_d. Add URLs. + +2003-07-31 Paul Eggert <eggert@twinsun.com> + + * getdate.texi (Relative items in date strings): Warn about + fuzz in relative units. + +2003-07-29 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tail invocation): Restore two end-of-sentence words + that were mistakenly removed on 2002-09-13. Reported by Paul Worrall. + +2003-07-28 Jim Meyering <jim@meyering.net> + + * coreutils.texi (dd invocation): Explain that a SIGUSR1 signal + makes dd give a progress report to stderr. + +2003-07-24 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: Document changes of 2003-07-24. + +2003-07-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (su invocation): Use `@subsection', not invalid + `@heading'. + +2003-07-17 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (expr invocation): Exit status is 2 if the + expression is syntactically invalid, 3 if there is some other error. + This change is for conformance to POSIX. + +2003-07-14 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (uname invocation): Explain the POSIX + terminology behind uname -m and uname -s. + +2003-07-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi (chown invocation): Warn that chown + now clears set-user-ID and set-group-ID bits on some systems. + From Bob Proulx. + (nohup invocation): Tell what happens when stdout is not a terminal. + Based on a suggestion from Steven Mocking. + +2003-07-10 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Standards conformance): Mention that uses like + `tail -1' and `head -1', like `sort +1', are non conforming. + (chown invocation): Say that using `.' as a separator may not work. + +2003-06-25 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Time directives) [%s]: Add a cross reference + to the related examples. + (Examples of date): Add an @anchor here, along with a few more examples. + Suggestion from Dan Jacobson. + +2003-06-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (wc invocation): Tweak wording: wc prints counts in + the order `newline, word, byte'. Suggestion from Keith M. Briggs. + Also change `lines' to `newlines'. + +2003-05-14 Jim Meyering <jim@meyering.net> + + * coreutils.texi (head invocation): Document --bytes=-N and --lines=-N. + +2003-05-13 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (uniq invocation, squeezing, The uniq command): + Use "repeated" rather than "duplicate" to describe adjacent + duplicates; this simplifies the description and makes it more + consistent with POSIX. + (uniq invocation): Make it clear that -d and -u suppress the + output of lines, rather than cause some lines to be output. + Mention what happens if a line lacks enough fields or characters. + +2003-05-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi (true invocation): Mention that it is possible to + make true --help or true --version (in non-POSIX mode) exit nonzero. + Suggestion from Paul Eggert. + +2003-05-10 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Exit status): Remove `uniq' from the list. + It uses standard exit codes. + (More details about version sort): Note that strverscmp, and hence + `ls -v', does not use LC_COLLATE. Reported by From: Andrey Borzenkov. + +2003-04-21 Jim Meyering <jim@meyering.net> + + Fix printf POSIX compatibility bug reported by Ben Harris in + <http://mail.gnu.org/archive/html/bug-coreutils/2003-04/msg00070.html>. + * coreutils.texi (printf invocation): It's \NNN in the format, + \0NNN in the %b operand. + +2003-04-10 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Check for uses of non-zero. + I prefer to spell it `nonzero'. + + * coreutils.texi (readlink invocation): Tweak description a little. + +2003-04-04 Jim Meyering <jim@meyering.net> + + * Makefile.am (constants.texi): Rename target (thus enabling it), + now that fileutils, textutils, and sh-utils have been merged. + (MAINTAINERCLEANFILES): Define. + +2003-04-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (false invocation): Note that false exits + unsuccessfully even with --help and --version. + + * Makefile.am (check-texinfo): Don't fail if perl is missing. + Reported by Nelson Beebe. + +2003-03-27 Jim Meyering <jim@meyering.net> + + * coreutils.texi (printf invocation): Fix formatting bugs. + From Paul Eggert. + (sort invocation): Describe sort's --stable (-s) option. + +2003-03-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi (shred invocation): Mention that --exact + is now the default for non-regular files. + +2003-03-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Exit status): New section. + Suggestion from Michael Stone. + +2003-02-21 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): Document --apparent-size. + Adjust documentation of --bytes (-b). + (stat invocation): Describe %B. + +2003-02-07 Richard Dawe <rich@phekda.freeserve.co.uk> + + * coreutils.texi: Use @command instead of @code for program names. + + * perm.texi (Mode Structure): Mention filesystem-specific + permissions and that mounting a filesystem as read-only may + override actual file permissions. Use @command instead + of @code for program names. + +2003-02-06 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Adjust alignment and mention `file, text, shell' + on the `* Coreutils:...' dirently line. From Karl Berry. + +2003-02-05 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Allow bare `POSIX' to be used on + direntry lines. + + * coreutils.texi: Use new form of @direntry. + Put unlink in its proper place. Adjust wording in some + dir entry descriptions, mainly so they fit in 80 columns. + Don't use mark-up like @acronym{POSIX} in direntries. + Mostly from Karl Berry. + +2003-01-25 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cut invocation): Describe new functionality of + --output-delimiter=STR. + +2003-01-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (The cut command): Give an example of using cut -c + with an output delimiter. From Jan Nieuwenhuizen. + + * coreutils.texi (The cut command): Extend the new example a little. + (Formatting file timestamps): Fix typo: s/%M:S/%M:%S/. + + * coreutils.texi: Change each use of `Core-utils' to `Coreutils'. + From Karl Berry. + +2003-01-19 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Which files are listed): Document new option: + --dereference-command-line-symlink-to-dir. + +2003-01-15 Paul Eggert <eggert@twinsun.com> + + Change ls -H back to the way it was yesterday, since this is + compatible with FreeBSD and the POSIX spec is confusing + and somewhat contradictory. + + * coreutils.texi (Which files are listed, General output + formatting): Undo last change. + +2003-01-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi (General output formatting): Reflect option name change: + s/--dereference-command-line/--dereference-command-line-symlink-to-dir/. + Say that this option changes how ls treats only symlinks to directories + specified on the command line. + +2002-08-27 Dmitry V. Levin <ldv@altlinux.org> + + * coreutils.texi: Document readlink. + +2002-12-14 Jim Meyering <jim@meyering.net> + + * coreutils.texi (mknod invocation): Specify how major and minor mode + numbers are interpreted. Report forwarded by Kristin E Thomas. + +2002-11-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Examples of expr): Remove bogus `^'s. + Reported by Thomas Goerlich. + +2002-11-09 Jim Meyering <jim@meyering.net> + + * coreutils.texi (What information is listed) [--dired]: + Correct parts of --dired description. Reported by Andre Spiegel. + Include a lot more description, with examples. + +2002-11-06 Jim Meyering <jim@meyering.net> + + * coreutils.texi (printf invocation): Fix typo in index: + change \0x prefix to \x. + Change \xhhh to \xhh. + +2002-10-07 Paul Eggert <eggert@twinsun.com> + + Add support for locale-specific size indications (e.g., + thousands-separators) and for explicit size suffixes on output. + + * coreutils.texi (Block size): Say that: + This affects display format as well as block size. + Fractional block counts are rounded up. + ls file size blocksize defaults to 1. + A block size spec preceded by ' generates thousands separators. + A suffix without a preceding integer generates suffixes. + (tail invocation): 32k -> 32 KiB. + (What information is listed): ls -h is now equivalent to + ls --block-size=human, and ls -H is now equivalent to + ls --block-size=si. Displayed file size is now always affected by + --block-size. + +2002-09-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tail invocation): In --sleep-interval=NUMBER, + NUMBER may now be a floating point number. + (stat invocation): Remove references to now-removed %S and %C. + (Time directives) [%S]: Explain why the range is [0..60]. + +2002-08-30 Jim Meyering <jim@meyering.net> + + * coreutils.texi [START-INFO-DIR-ENTRY]: Don't use sc{} on LHS. + Fix typo: s/permission/permissions/. From Michail Litvak. + +2002-08-02 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (uniq invocation): uniq now obeys LC_COLLATE. + +2002-07-29 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (nohup invocation): Change behavior to conform to + POSIX 1003.1-2001: + - Do not adjust scheduling priority. + - Redirects stderr to stdout, if stderr is not a terminal. + - Exit status is now 126 if command was found but not invoked, + 127 if nohup failed or if command was not found. + +2002-07-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Time directives): Document %P, %R, %e, %F, + %g, %G, and %V + +2002-07-22 Martin Michlmayr <tbm@cyrius.com> + + * coreutils.texi (Formatting the file names): Document + that -N/--literal are equivalent to --quoting-style=literal. + Reported by Oskar Liljeblad as Debian bug#103612. + +2002-07-10 Jim Meyering <jim@meyering.net> + + * coreutils.texi (du invocation): s/PAT/PATTERN/. + From Martin Michlmayr. + +2002-07-08 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Remove unnecessary "$@" in example; + Texinfo would render the @" as an umlaut over the following character. + From Paul Eggert. + * Makefile.am (check-texinfo): Check for the above. + +2002-07-06 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation): Remove description of --secure. + +2002-07-03 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation): Rename --link/-l + to --dereference/-L. Rewrite description of --dereference. + +2002-06-26 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Putting the tools together): Don't mention egrep, + since it's not part of POSIX 1003.1-2001. + +2002-06-21 Jim Meyering <jim@meyering.net> + + * coreutils.texi (stat invocation): New section. From Michael Meskes. + +2002-05-19 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (ls invocation): Document new option: --author. + +2002-06-03 Jim Meyering <jim@meyering.net> + + * coreutils.texi (rm invocation): Add the warning (also in the --help + output) that the contents of a removed file are often recoverable. + +2002-05-27 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Adapt to reflect that now we use + @acronym{POSIX}. + +2002-05-26 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Use @acronym in place of most uses of @sc. + * getdate.texi (Date input formats): Likewise. + +2002-04-28 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Change `@code{PROG}' to `@command{PROG}'. + +2002-04-28 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (kill invocation): Document the above. + Document POSIX signals better. + +2002-04-15 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Document kill. + Written by Marcus Brinkmann. + +2002-04-13 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Document link and unlink. + +2002-04-08 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Use new directives, @copying and @insertcopying, + thus now requiring texinfo-4.2 to create the .info file. + +2002-02-26 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (File characteristic tests): Document the + behavior of test -nt and -ot when one of the files does not exist, + using the same behavior that is documented in ksh93. + +2002-03-05 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (cut invocation): Say that selected input is + written in the same order that it is read, and is written + exactly once. + +2002-03-03 Paul Eggert <eggert@twinsun.com> + + Make cp -r equivalent to cp -R. Add a new cp option --copy-contents + for people who want to emulate the traditional (and rarely desirable) + cp -r behavior. + + * coreutils.texi (cp invocation): Document this. + Fix some related minor bugs: --no-dereference is no longer + equivalent to -d, and --archive (-a) can override the other + symlink options. Warn that cp -R is not portable on symbolic + links unless you also specify -P. + +2002-03-02 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Document that cp -r + preserves symlinks. Emphasize non-portability of cp -r. + +2002-02-27 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Time directives): Add %N for nanoseconds. + This documents the recent change to 'ls'. + +2002-02-28 Jim Meyering <jim@meyering.net> + + * coreutils.texi (pr invocation): Reword to avoid using `:' + in an @opindex entry -- info doesn't permit it. + +2002-02-27 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (Formatting file timestamps): Document new + time-formatting method: --time-style=+FORMAT. + +2002-02-18 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (seq invocation): In the example, use "tail + -n 3", not "tail -3", to conform to POSIX 1003.1-2001. + +2002-02-17 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tsort background): New section. + From Ian Lance Taylor. + (tsort invocation): Add a more realistic example. + +2002-02-15 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: Document _POSIX2_VERSION. + (Standards Conformance): New section. + +2002-01-24 Jim Meyering <jim@meyering.net> + + * coreutils.texi (START-INFO-DIR-ENTRY): Remove a few entries + and clean up a few others based on suggestions from Bob Proulx. + +2002-02-14 Paul Eggert <eggert@twinsun.com> + + Add support for POSIX 1003.1-2001, which requires removal for + support of obsolete "+" option syntax in sort, tail, and uniq. + * coreutils.texi: Document this. (Also, document a similar + change to "touch", for fileutils). + +2002-01-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (shred invocation): List some journaled filesystems. + +2001-11-10 Jim Meyering <jim@meyering.net> + + * coreutils.texi (Date directives): Document %u. + +2001-11-07 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (paste invocation): Give examples. + Thanks to Dan Jacobson for suggesting the examples. + +2001-11-05 Jim Meyering <jim@meyering.net> + + * coreutils.texi (sort invocation): Recommend setting LC_ALL=C, + not LC_COLLATE=C. Explain how the latter can cause problems. + Based on a message from Paul Eggert. + (ls invocation): Recommend setting LC_ALL=C, not LC_COLLATE=C. + +2001-10-21 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Describe --reply=... + +2001-10-17 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): `cp --no-dereference' is + no longer equivalent to `cp -d'. + `cp -d' is equivalent to `--no-dereference --preserve=links'. + cp's -P option means --no-dereference, not --parents. + Describe new optional argument to --preserve. + Describe new option: --no-preserve=ATTRIBUTE_LIST. + +2001-09-23 Jim Meyering <jim@meyering.net> + + * Makefile.am (check-texinfo): Redirect stderr of `grep -w' to + /dev/null, so people with old versions of grep don't see the failure. + +2001-09-16 Jim Meyering <jim@meyering.net> + + * coreutils.texi (mv invocation): Describe new option: + --reply={yes,no,query}. Fix a few typos. + +2001-09-15 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (uniq invocation): The input need not + be sorted. Try to clarify -d versus -D versus -u. + +2001-09-12 Jim Meyering <jim@meyering.net> + + * coreutils.texi (tail invocation): Document new option: -F. + From Herbert Xu. + +2001-09-04 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi (join invocation): Describe the GNU + extension to join, which does not require sorted input when + the input contains no unpairable lines. + +2001-09-03 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: + New 'uname' options -i or --hardware-platform, + and -o or --operating-system. + 'uname -a' now outputs -i and -o information at the end. + New uname option --kernel-version is an alias for -v. + Uname option --release has been renamed to --kernel-release, + and --sysname has been renamed to --kernel-name; + the old options will work for a while, but are no longer documented. + +2001-08-24 Herbert Xu <herbert@gondor.apana.org.au> + + * coreutils.texi (cut invocation): Document how cut treats lines + with no separators. + +2001-06-19 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: expr now uses LC_COLLATE for string comparison, + as per POSIX. + +2001-08-25 Jim Meyering <jim@meyering.net> + + * coreutils.texi: Use @option, rather than @samp everywhere. + +2001-06-21 Paul Eggert <eggert@twinsun.com> + + * coreutils.texi: 'expr' now requires '+' rather than 'quote' + to quote tokens. + +2001-07-14 Jim Meyering <jim@meyering.net> + + * coreutils.texi (cp invocation): Reflect 2001-07-08 change to + cp (via copy.c). + +2001-06-16 Jim Meyering <jim@meyering.net> + + * Makefile.am (info_TEXINFOS): Reflect renaming: s/omni-/core/. + * coreutils.texi: Likewise. + + * coreutils.texi: New, renamed from omni-utils.texi. + * omni-utils.texi: Removed, renamed to coreutils.texi. + + * omni-utils.texi (ls invocation): Mention the effect of locale. + Reported by Keith Thompson. + +2001-05-24 Jim Meyering <jim@meyering.net> + + * texinfo.tex: Update from master source. + + * omni-utils.texi (ls invocation): Document more clearly what ls + does when given no arguments. + +2001-05-21 Jim Meyering <jim@meyering.net> + + * textutils.texi: Remove file. + + * Makefile.am ($(DVIS), $(INFO_DEPS)): Depend on $(EXTRA_DIST). + (DISABLED_constants.texi): New rule -- disabled for now. + + This directory is now shared by fileutils, textutils, and sh-utils. + + + ----- + + Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software + Foundation, Inc. + + Copying and distribution of this file, with or without + modification, are permitted provided the copyright notice + and this notice are preserved. diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..e0e2ee5 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,74 @@ +# Make coreutils documentation. -*-Makefile-*- + +# Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, +# 2006 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +info_TEXINFOS = coreutils.texi + +EXTRA_DIST = perm.texi getdate.texi constants.texi fdl.texi + +# The following is necessary if the package name is 8 characters or longer. +# If the info documentation would be split into 10 or more separate files, +# then this is necessary even if the package name is 7 characters long. +# +# Tell makeinfo to put everything in a single info file: <package>.info. +# Otherwise, it would also generate files with names like <package>.info-[123], +# and those names all map to one 14-byte name (<package>.info-) on some crufty +# old systems. +AM_MAKEINFOFLAGS = --no-split + +constants.texi: $(top_srcdir)/src/tail.c + LC_ALL=C \ + sed -n -e 's/^#define \(DEFAULT_MAX[_A-Z]*\) \(.*\)/@set \1 \2/p' \ + $(top_srcdir)/src/tail.c > t-$@ + mv t-$@ $@ + +MAINTAINERCLEANFILES = constants.texi + +$(DVIS): $(EXTRA_DIST) +$(INFO_DEPS): $(EXTRA_DIST) + +# Extended regular expressions to match word starts and ends. +_W = (^|[^A-Za-z0-9_]) +W_ = ([^A-Za-z0-9_]|$$) + +# List words/regexps here that should not appear in the texinfo documentation. +# E.g., use @sc{nul}, not `NUL' +# Use `time zone', not `timezone'. +# Use `zeros', not `zeroes' (nothing wrong with `zeroes'. just be consistent). +check-texinfo: + fail=0; \ + grep timezone $(srcdir)/*.texi && fail=1; \ + $(EGREP) '$(_W)IO$(W_)' $(srcdir)/*.texi && fail=1; \ + grep non-zero $(srcdir)/*.texi && fail=1; \ + grep '@url{' $(srcdir)/*.texi && fail=1; \ + $(EGREP) '$(_W)NUL$(W_)' $(srcdir)/*.texi && fail=1; \ + grep '\$$@"' $(srcdir)/*.texi && fail=1; \ + grep -n '[^[:punct:]]@footnote' $(srcdir)/*.texi && fail=1; \ + grep -n filename $(srcdir)/*.texi|$(EGREP) -v 'setfilename|[{]filename[}]' \ + && fail=1; \ + $(PERL) -e 1 2> /dev/null && { $(PERL) -ne \ + '/\bPOSIX\b/ && !/\@acronym{POSIX}/ && !/^\* / || /{posix}/ and print,exit 1' \ + $(srcdir)/*.texi 2> /dev/null || fail=1; }; \ + $(EGREP) -i '$(_W)zeroes$(W_)' $(srcdir)/*.texi && fail=1; \ + $(EGREP) -i '$(_W)builtins?$(W_)' $(srcdir)/*.texi && fail=1; \ + $(EGREP) -i '$(_W)path(name)?s?$(W_)' $(srcdir)/*.texi \ + | $(EGREP) -v '@vindex PATH$$|@env[{]PATH[}]' && fail=1; \ + exit $$fail + +check: check-texinfo diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..ca84e92 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,976 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Make coreutils documentation. -*-Makefile-*- + +# Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, +# 2006 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/stamp-vti $(srcdir)/version.texi ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/absolute-header.m4 \ + $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ + $(top_srcdir)/m4/allocsa.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/atexit.m4 $(top_srcdir)/m4/autobuild.m4 \ + $(top_srcdir)/m4/backupfile.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/boottime.m4 \ + $(top_srcdir)/m4/c-strtod.m4 $(top_srcdir)/m4/calloc.m4 \ + $(top_srcdir)/m4/canon-host.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/check-decl.m4 \ + $(top_srcdir)/m4/chown.m4 $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/cloexec.m4 $(top_srcdir)/m4/close-stream.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/cycle-check.m4 \ + $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/d-type.m4 \ + $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \ + $(top_srcdir)/m4/eoverflow.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess-stat.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/exclude.m4 \ + $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fcntl-safer.m4 \ + $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fd-reopen.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fileblocks.m4 \ + $(top_srcdir)/m4/filemode.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fprintftime.m4 \ + $(top_srcdir)/m4/free.m4 $(top_srcdir)/m4/fstypename.m4 \ + $(top_srcdir)/m4/fsusage.m4 $(top_srcdir)/m4/ftruncate.m4 \ + $(top_srcdir)/m4/fts.m4 $(top_srcdir)/m4/getaddrinfo.m4 \ + $(top_srcdir)/m4/getcwd-abort-bug.m4 \ + $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ + $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/gethostname.m4 \ + $(top_srcdir)/m4/gethrxtime.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getloadavg.m4 $(top_srcdir)/m4/getndelim2.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ + $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/getugroups.m4 \ + $(top_srcdir)/m4/getusershell.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/host-os.m4 $(top_srcdir)/m4/human.m4 \ + $(top_srcdir)/m4/i-ring.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/idcache.m4 $(top_srcdir)/m4/inet_ntop.m4 \ + $(top_srcdir)/m4/inline.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ + $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isapipe.m4 $(top_srcdir)/m4/jm-macros.m4 \ + $(top_srcdir)/m4/jm-winsz1.m4 $(top_srcdir)/m4/jm-winsz2.m4 \ + $(top_srcdir)/m4/lchmod.m4 $(top_srcdir)/m4/lchown.m4 \ + $(top_srcdir)/m4/lib-check.m4 $(top_srcdir)/m4/lib-ignore.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/link-follow.m4 \ + $(top_srcdir)/m4/localcharset.m4 \ + $(top_srcdir)/m4/long-options.m4 \ + $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/ls-mntd-fs.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbscasecmp.m4 \ + $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbswidth.m4 \ + $(top_srcdir)/m4/md5.m4 $(top_srcdir)/m4/memcasecmp.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/memcmp.m4 \ + $(top_srcdir)/m4/memcoll.m4 $(top_srcdir)/m4/memcpy.m4 \ + $(top_srcdir)/m4/memmove.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/memset.m4 \ + $(top_srcdir)/m4/memxfrm.m4 $(top_srcdir)/m4/mkancesdirs.m4 \ + $(top_srcdir)/m4/mkdir-p.m4 $(top_srcdir)/m4/mkdir-slash.m4 \ + $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ + $(top_srcdir)/m4/modechange.m4 $(top_srcdir)/m4/mountlist.m4 \ + $(top_srcdir)/m4/mpsort.m4 $(top_srcdir)/m4/nanosleep.m4 \ + $(top_srcdir)/m4/netinet_in_h.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/perl.m4 $(top_srcdir)/m4/physmem.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posixtm.m4 \ + $(top_srcdir)/m4/posixver.m4 $(top_srcdir)/m4/prereq.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/randint.m4 $(top_srcdir)/m4/randperm.m4 \ + $(top_srcdir)/m4/randread.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/readtokens.m4 $(top_srcdir)/m4/readutmp.m4 \ + $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename-dest-slash.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir-errno.m4 \ + $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/root-dev-ino.m4 \ + $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/safe-read.m4 \ + $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \ + $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \ + $(top_srcdir)/m4/savewd.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/settime.m4 $(top_srcdir)/m4/sha1.m4 \ + $(top_srcdir)/m4/sha256.m4 $(top_srcdir)/m4/sha512.m4 \ + $(top_srcdir)/m4/sig2str.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/st_dm_mode.m4 \ + $(top_srcdir)/m4/stat-prog.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcspn.m4 \ + $(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strftime.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strnumcmp.m4 \ + $(top_srcdir)/m4/strpbrk.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/strverscmp.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timespec.m4 \ + $(top_srcdir)/m4/tm_gmtoff.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink-busy.m4 \ + $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/uptime.m4 $(top_srcdir)/m4/userspec.m4 \ + $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \ + $(top_srcdir)/m4/utimecmp.m4 $(top_srcdir)/m4/utimens.m4 \ + $(top_srcdir)/m4/utimes-null.m4 $(top_srcdir)/m4/utimes.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xfts.m4 $(top_srcdir)/m4/xgetcwd.m4 \ + $(top_srcdir)/m4/xnanosleep.m4 $(top_srcdir)/m4/xstrndup.m4 \ + $(top_srcdir)/m4/xstrtod.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/m4/yesno.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +INFO_DEPS = $(srcdir)/coreutils.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = coreutils.dvi +PDFS = coreutils.pdf +PSS = coreutils.ps +HTMLS = coreutils.html +TEXINFOS = coreutils.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__installdirs = "$(DESTDIR)$(infodir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ABSOLUTE_DIRENT_H = @ABSOLUTE_DIRENT_H@ +ABSOLUTE_FCNTL_H = @ABSOLUTE_FCNTL_H@ +ABSOLUTE_INTTYPES_H = @ABSOLUTE_INTTYPES_H@ +ABSOLUTE_NETINET_IN_H = @ABSOLUTE_NETINET_IN_H@ +ABSOLUTE_STDINT_H = @ABSOLUTE_STDINT_H@ +ABSOLUTE_STDIO_H = @ABSOLUTE_STDIO_H@ +ABSOLUTE_STDLIB_H = @ABSOLUTE_STDLIB_H@ +ABSOLUTE_STRING_H = @ABSOLUTE_STRING_H@ +ABSOLUTE_SYS_SOCKET_H = @ABSOLUTE_SYS_SOCKET_H@ +ABSOLUTE_SYS_STAT_H = @ABSOLUTE_SYS_STAT_H@ +ABSOLUTE_SYS_TIME_H = @ABSOLUTE_SYS_TIME_H@ +ABSOLUTE_TIME_H = @ABSOLUTE_TIME_H@ +ABSOLUTE_UNISTD_H = @ABSOLUTE_UNISTD_H@ +ABSOLUTE_WCHAR_H = @ABSOLUTE_WCHAR_H@ +ABSOLUTE_WCTYPE_H = @ABSOLUTE_WCTYPE_H@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +ARPA_INET_H = @ARPA_INET_H@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFAULT_POSIX2_VERSION = @DEFAULT_POSIX2_VERSION@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DF_PROG = @DF_PROG@ +DIRENT_H = @DIRENT_H@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOVERFLOW = @EOVERFLOW@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FNMATCH_H = @FNMATCH_H@ +GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNU_PACKAGE = @GNU_PACKAGE@ +GREP = @GREP@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +INTTYPES_H = @INTTYPES_H@ +KMEM_GROUP = @KMEM_GROUP@ +LDFLAGS = @LDFLAGS@ +LIBCOREUTILS_LIBDEPS = @LIBCOREUTILS_LIBDEPS@ +LIBCOREUTILS_LTLIBDEPS = @LIBCOREUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIB_ACL = @LIB_ACL@ +LIB_ACL_TRIVIAL = @LIB_ACL_TRIVIAL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_CRYPT = @LIB_CRYPT@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_FDATASYNC = @LIB_FDATASYNC@ +LIB_GETHRXTIME = @LIB_GETHRXTIME@ +LIB_NANOSLEEP = @LIB_NANOSLEEP@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAN = @MAN@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEED_SETGID = @NEED_SETGID@ +NETINET_IN_H = @NETINET_IN_H@ +OBJEXT = @OBJEXT@ +OPTIONAL_BIN_PROGS = @OPTIONAL_BIN_PROGS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +POSUB = @POSUB@ +POW_LIB = @POW_LIB@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STRPTIME = @REPLACE_STRPTIME@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +SEQ_LIBM = @SEQ_LIBM@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_SOCKET_H = @SYS_SOCKET_H@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +U = @U@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +info_TEXINFOS = coreutils.texi +EXTRA_DIST = perm.texi getdate.texi constants.texi fdl.texi + +# The following is necessary if the package name is 8 characters or longer. +# If the info documentation would be split into 10 or more separate files, +# then this is necessary even if the package name is 7 characters long. +# +# Tell makeinfo to put everything in a single info file: <package>.info. +# Otherwise, it would also generate files with names like <package>.info-[123], +# and those names all map to one 14-byte name (<package>.info-) on some crufty +# old systems. +AM_MAKEINFOFLAGS = --no-split +MAINTAINERCLEANFILES = constants.texi + +# Extended regular expressions to match word starts and ends. +_W = (^|[^A-Za-z0-9_]) +W_ = ([^A-Za-z0-9_]|$$) +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +.texi.info: + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && cd $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + cd $(srcdir); \ + else \ + rc=$$?; \ + cd $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $< + +.texi.pdf: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $< + +.texi.html: + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +$(srcdir)/coreutils.info: coreutils.texi $(srcdir)/version.texi +coreutils.dvi: coreutils.texi $(srcdir)/version.texi +coreutils.pdf: coreutils.texi $(srcdir)/version.texi +coreutils.html: coreutils.texi $(srcdir)/version.texi +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: coreutils.texi $(top_srcdir)/configure + @(dir=.; test -f ./coreutils.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/coreutils.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp + @cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + -@rm -f vti.tmp + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +.dvi.ps: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f $(distdir)/$$relfile || \ + cp -p $$file $(distdir)/$$relfile; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf coreutils.aux coreutils.cp coreutils.cps coreutils.fl coreutils.fn \ + coreutils.ky coreutils.log coreutils.op coreutils.pg \ + coreutils.tmp coreutils.toc coreutils.tp coreutils.tps \ + coreutils.vr coreutils.dvi coreutils.pdf coreutils.ps \ + coreutils.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) +installdirs: + for dir in "$(DESTDIR)$(infodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + else \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + fi; \ + done +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ + echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ + $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ + done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \ + done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-pdf-am uninstall-ps-am + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic dist-info \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-pdf-am \ + uninstall-ps-am + + +constants.texi: $(top_srcdir)/src/tail.c + LC_ALL=C \ + sed -n -e 's/^#define \(DEFAULT_MAX[_A-Z]*\) \(.*\)/@set \1 \2/p' \ + $(top_srcdir)/src/tail.c > t-$@ + mv t-$@ $@ + +$(DVIS): $(EXTRA_DIST) +$(INFO_DEPS): $(EXTRA_DIST) + +# List words/regexps here that should not appear in the texinfo documentation. +# E.g., use @sc{nul}, not `NUL' +# Use `time zone', not `timezone'. +# Use `zeros', not `zeroes' (nothing wrong with `zeroes'. just be consistent). +check-texinfo: + fail=0; \ + grep timezone $(srcdir)/*.texi && fail=1; \ + $(EGREP) '$(_W)IO$(W_)' $(srcdir)/*.texi && fail=1; \ + grep non-zero $(srcdir)/*.texi && fail=1; \ + grep '@url{' $(srcdir)/*.texi && fail=1; \ + $(EGREP) '$(_W)NUL$(W_)' $(srcdir)/*.texi && fail=1; \ + grep '\$$@"' $(srcdir)/*.texi && fail=1; \ + grep -n '[^[:punct:]]@footnote' $(srcdir)/*.texi && fail=1; \ + grep -n filename $(srcdir)/*.texi|$(EGREP) -v 'setfilename|[{]filename[}]' \ + && fail=1; \ + $(PERL) -e 1 2> /dev/null && { $(PERL) -ne \ + '/\bPOSIX\b/ && !/\@acronym{POSIX}/ && !/^\* / || /{posix}/ and print,exit 1' \ + $(srcdir)/*.texi 2> /dev/null || fail=1; }; \ + $(EGREP) -i '$(_W)zeroes$(W_)' $(srcdir)/*.texi && fail=1; \ + $(EGREP) -i '$(_W)builtins?$(W_)' $(srcdir)/*.texi && fail=1; \ + $(EGREP) -i '$(_W)path(name)?s?$(W_)' $(srcdir)/*.texi \ + | $(EGREP) -v '@vindex PATH$$|@env[{]PATH[}]' && fail=1; \ + exit $$fail + +check: check-texinfo +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/constants.texi b/doc/constants.texi new file mode 100644 index 0000000..f6bffca --- /dev/null +++ b/doc/constants.texi @@ -0,0 +1 @@ +@set DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS 5 diff --git a/doc/coreutils.info b/doc/coreutils.info new file mode 100644 index 0000000..4589ca2 --- /dev/null +++ b/doc/coreutils.info @@ -0,0 +1,15863 @@ +This is coreutils.info, produced by makeinfo version 4.8 from +coreutils.texi. + +INFO-DIR-SECTION Basics +START-INFO-DIR-ENTRY +* Coreutils: (coreutils). Core GNU (file, text, shell) utilities. +* Common options: (coreutils)Common options. 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 +* base64: (coreutils)base64 invocation. Base64 encode/decode data. +* basename: (coreutils)basename invocation. Strip directory and suffix. +* cat: (coreutils)cat invocation. Concatenate and write files. +* chgrp: (coreutils)chgrp invocation. Change file groups. +* chmod: (coreutils)chmod invocation. Change file permissions. +* chown: (coreutils)chown invocation. Change file owners/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 disk usage. +* dir: (coreutils)dir invocation. List directories briefly. +* dircolors: (coreutils)dircolors invocation. Color setup for ls. +* dirname: (coreutils)dirname invocation. Strip non-directory suffix. +* du: (coreutils)du invocation. Report on disk 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 and change 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. +* 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. +* 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. +* rm: (coreutils)rm invocation. Remove files. +* rmdir: (coreutils)rmdir invocation. Remove empty directories. +* 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 fixed-size pieces. +* stat: (coreutils)stat invocation. Report file(system) status. +* stty: (coreutils)stty invocation. Print/change terminal settings. +* su: (coreutils)su invocation. Modify user and group ID. +* sum: (coreutils)sum invocation. Print traditional checksum. +* sync: (coreutils)sync invocation. Synchronize memory and disk. +* 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. +* touch: (coreutils)touch invocation. Change file timestamps. +* tr: (coreutils)tr invocation. Translate characters. +* true: (coreutils)true invocation. Do nothing, successfully. +* 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). +* 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 + + This manual documents version 6.9 of the GNU core utilities, +including the standard programs for text and file manipulation. + + Copyright (C) 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2004, 2005, +2006 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.2 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". + + +File: coreutils.info, Node: Top, Next: Introduction, Up: (dir) + +GNU Coreutils +************* + +This manual documents version 6.9 of the GNU core utilities, including +the standard programs for text and file manipulation. + + Copyright (C) 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2004, 2005, +2006 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.2 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 +* Formatting file contents:: fmt pr fold +* Output of parts of files:: head tail split csplit +* Summarizing files:: wc sum cksum md5sum sha1sum sha2 +* Operating on sorted files:: sort shuf uniq comm ptx tsort +* Operating on fields within a line:: 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:: ln mkdir rmdir mkfifo mknod +* Changing file attributes:: chgrp chmod chown touch +* Disk usage:: df du stat sync +* Printing text:: echo printf yes +* Conditions:: false true test expr +* Redirection:: tee +* File name manipulation:: dirname basename pathchk +* Working context:: pwd stty printenv tty +* User information:: id logname whoami groups users who +* System context:: date uname hostname hostid +* Modified command invocation:: chroot env nice nohup su +* Process control:: kill +* Delaying:: sleep +* Numeric operations:: factor seq +* File permissions:: Access modes. +* Date input formats:: Specifying date strings. +* Opening the software toolbox:: The software tools philosophy. +* Copying This Manual:: License for copying this manual. +* Index:: General index. + + --- The Detailed Node Listing --- + +Common Options + +* Exit status:: Indicating program success or failure. +* Backup options:: Backup options +* Block size:: Block size +* Disambiguating names and IDs:: chgrp and chown owner 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 + +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. +* base64 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. +* 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 within a line + +* 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 sets:: Specifying sets of characters. +* Translating:: Changing one set of characters to another. +* Squeezing:: Squeezing repeats and deleting. + +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 +* More details about version sort:: More details about version sort +* 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 the referent of a symbolic link +* 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 + +Disk usage + +* df invocation:: Report file system disk space usage +* du invocation:: Estimate file space usage +* stat invocation:: Report file or file system status +* sync invocation:: Synchronize data on disk with memory + +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 + +File name manipulation + +* basename invocation:: Strip directory and suffix from a file name +* dirname invocation:: Strip non-directory suffix from a file name +* pathchk invocation:: Check file name portability + +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 + +* date invocation:: Print or set system date and time +* uname invocation:: Print system information +* hostname invocation:: Print or set system name +* hostid invocation:: Print numeric host identifier. + +`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. +* Examples of date:: Examples. + +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 +* su invocation:: Run a command with substitute user and group ID + +Process control + +* kill invocation:: Sending a signal to processes. + +Delaying + +* sleep invocation:: Delay for a specified time + +Numeric operations + +* factor invocation:: Print prime factors +* seq invocation:: Print numeric sequences + +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:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: EST, PDT, GMT. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al. + +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:: License for copying 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>. +Remember to 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. Diffs are +welcome, but please include a description of the problem as well, since +this is sometimes difficult to infer. *Note Bugs: (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. Franc,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. + + Some of these programs recognize the `--help' and `--version' +options only when one of them is the sole command line argument. + +`--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 standard input, or for standard output if that is +clear from the context. For example, `sort -' reads from standard +input, and is equivalent to plain `sort', and `tee -' writes an extra +copy of its input to standard output. Unless otherwise specified, `-' +can appear as any operand that requires a file name. + +* Menu: + +* Exit status:: Indicating program success or failure. +* Backup options:: -b -S, in some programs. +* Block size:: BLOCK_SIZE and --block-size, in some programs. +* Disambiguating names and IDs:: chgrp and chown owner and group syntax +* Random sources:: --random-source, in some programs. +* Target directory:: Specifying a target directory, in some programs. +* Trailing slashes:: --strip-trailing-slashes, in some programs. +* Traversing symlinks:: -H, -L, or -P, in some programs. +* Treating / specially:: --preserve-root and --no-preserve-root. +* Special built-in utilities:: `break', `:', `eval', ... +* Standards conformance:: Conformance to the POSIX standard. + + +File: coreutils.info, Node: Exit status, Next: Backup options, Up: Common options + +2.1 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 some of the exceptions: `chroot', `env', `expr', +`nice', `nohup', `printenv', `sort', `su', `test', `tty'. + + +File: coreutils.info, Node: Backup options, Next: Block size, Prev: Exit status, Up: Common options + +2.2 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: Disambiguating names and IDs, Prev: Backup options, Up: Common options + +2.3 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.fr/enus/3_SI/si-prefixes.html) for decimal multiples +and with the IEC 60027-2 prefixes for binary multiples +(http://physics.nist.gov/cuu/Units/binary.html). + + 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 `1Y' 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 IEC 60027-2 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' + 2^70 = 1,180,591,620,717,411,303,424. (`Zi' is a GNU extension to + IEC 60027-2.) + +`YB' + yottabyte: 10^24 = 1,000,000,000,000,000,000,000,000. + +`Y' +`YiB' + 2^80 = 1,208,925,819,614,629,174,706,176. (`Yi' is a GNU + extension to IEC 60027-2.) + + 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'. + + +File: coreutils.info, Node: Disambiguating names and IDs, Next: Random sources, Prev: Block size, Up: Common options + +2.4 chown and chgrp: Disambiguating user names and IDs +====================================================== + +Since the OWNER and GROUP arguments to `chown' and `chgrp' 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? (1) Should the +command interpret it as a user name or as an ID? POSIX requires that +`chown' and `chgrp' 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' and `chgrp' 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 / + + GNU `chown' and `chgrp' skip the name look-up process 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. + + ---------- Footnotes ---------- + + (1) Using a number as a user name is common in some environments. + + +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. + + Normally these commands use the device file `/dev/urandom' 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 pseudorandom number generator. + + `/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 use such a source, specify the `--random-source=FILE' option, +e.g., `shuf --random-source=/dev/random'. The contents of FILE should +be as random as possible. An error is reported if FILE does not +contain enough bytes to randomize the input adequately. + + 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. + + Some old-fashioned or stripped-down operating systems lack support +for `/dev/urandom'. On these systems commands like `shuf' by default +fall back on an internal pseudorandom generator initialized by a small +amount of entropy. + + +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-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: Standards conformance, 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: Standards conformance, Prev: Special built-in utilities, Up: Common options + +2.11 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 starting with 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. + + 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. Two values are currently supported for `_POSIX2_VERSION': +`199209' stands for POSIX 1003.2-1992, and `200112' stands for POSIX +1003.1-2001. For example, if you have a newer system but are running +software that assumes an older version of POSIX and uses `sort +1' or +`tail +10', you can work around any compatibility problems by setting +`_POSIX2_VERSION=199209' in your environment. + + +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. +* base64 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 nonblank output lines, starting with 1. + +`-e' + Equivalent to `-vE'. + +`-E' +`--show-ends' + Display a `$' after the end of each line. + +`-n' +`--number' + Number all output lines, starting with 1. + +`-s' +`--squeeze-blank' + Replace multiple adjacent blank lines with a single blank line. + +`-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. Users of `tac' + on MS-DOS/MS-Windows should note that, since `tac' reads files in + binary mode, each line of a text file might end with a CR/LF pair + instead of the Unix-style LF. + +`-s SEPARATOR' +`--separator=SEPARATOR' + Use SEPARATOR as the record separator, instead of newline. + + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +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) pages; by default, the line +number is reset to 1 at the top of each logical page. `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 two characters from which these strings are made can be changed +from `\' and `:' via options (see below), but the pattern and length 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 `:'. (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' +`--page-increment=NUMBER' + Increment line numbers by NUMBER (default 1). + +`-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). + +`-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: base64 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. + +`-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. + Appending `b' multiplies BYTES by 512, `k' by 1024, and `m' by + 1048576. + +`-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 N' +`--strings[=N]' + Instead of the normal output, output only "string constants": at + least N consecutive ASCII graphic characters, followed by a null + (zero) byte. + + If N 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 ASCII character representation of the printable characters + to the output line generated by the type specification. + + `a' + named character, ignoring high-order bit + + `c' + ASCII character or backslash escape, + + `d' + signed decimal + + `f' + 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 null (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 ASCII characters or backslash escapes. 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: base64 invocation, Prev: od invocation, Up: Output of entire files + +3.5 `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, see RFC 3548 +(ftp://ftp.rfc-editor.org/in-notes/rfc3548.txt). Synopses: + + base64 [OPTION]... [FILE] + base64 --decode [OPTION]... [FILE] + + The base64 encoding expands data to roughly 133% of the original. + + 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: 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). `fmt' + initially tries to make lines about 7% shorter than this, to give + it room to balance line lengths. + +`-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. With the +`-F' option, a 3-line header is printed: the leading two blank lines are +omitted; no footer is used. The default PAGE_LENGTH in both cases is 66 +lines. The default number of text lines changes from 56 (without `-F') +to 63 (with `-F'). 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 following changes were made in version 1.22i and apply to later +versions of `pr': - Brian + * Some small LETTER OPTIONS (`-s', `-w') have been redefined for + better POSIX compliance. The output of some further cases has + been adapted to other Unix systems. These changes are not + compatible with earlier versions of the program. + + * Some NEW CAPITAL LETTER options (`-J', `-S', `-W') have been + introduced to turn off unexpected interferences of small letter + options. The `-N' option and the second argument LAST_PAGE of + `+FIRST_PAGE' offer more flexibility. The detailed handling of + form feeds set in the input files requires the `-T' option. + + * Capital letter options override small letter ones. + + * Some of the option-arguments (compare `-s', `-e', `-i', `-n') + cannot be specified as separate arguments from the preceding + option letter (already stated in the POSIX specification). + + 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"'. + + Normally the date format defaults to `%Y-%m-%d %H:%M' (for + example, `2001-12-04 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, `Dec 4 23:59 2001'. + + Time stamps 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. The + default page length of 66 lines is not altered. But the number of + lines of text per page changes from default 56 to 63 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 (or <= 3 with `-F'), the header and footer are + omitted, and all form feeds set in input files are eliminated, 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. + +`-SSTRING' +`--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" "'). + `--sep-string' with no `=STRING' is equivalent to + `--sep-string=""'. + +`-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). `-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. That's valid with and + without a column option. 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 affect 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 fixed-size 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 N' +`--bytes=N' + Print the first N bytes, instead of initial lines. Appending `b' + multiplies N by 512, `k' by 1024, and `m' by 1048576. However, if + N starts with a `-', print all but the last N bytes of each file. + +`-n N' +`--lines=N' + Output the first N lines. However, if N starts with a `-', print + all but the last N lines of each file. + +`-q' +`--quiet' +`--silent' + Never print file name headers. + +`-v' +`--verbose' + Always print file name headers. + + + For compatibility `head' also supports an obsolete option syntax +`-COUNTOPTIONS', which is recognized only if it is specified first. +COUNT 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 +COUNT' or `-n COUNT' 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 +consisting of: + + ==> FILE NAME <== + +before the output for each FILE. + + 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. + + If any option-argument is a number N starting with a `+', `tail' +begins printing with the Nth item from the start of each file, instead +of from the end. + + The program accepts the following options. Also see *Note Common +options::. + +`-c BYTES' +`--bytes=BYTES' + Output the last BYTES bytes, instead of final lines. Appending + `b' multiplies BYTES by 512, `k' by 1024, and `m' by 1048576. + +`-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 by reopening it + periodically to see if it has been removed and recreated by some + other program. + + 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 the end of the file from the + newly-determined endpoint. + + 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'. + + If `POSIXLY_CORRECT' is set, the `-f' option is ignored if no FILE + operand is specified and standard input is a FIFO or a pipe. + +`-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. + +`--retry' + This option is useful mainly when following by name (i.e., with + `--follow=name'). 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. + +`--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. Historical implementations + of `tail' have required that NUMBER be an integer. However, GNU + `tail' accepts an arbitrary floating point number (using a period + before any fractional digits). + +`--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. + +`--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 following by name. + +`-n N' +`--lines=N' + Output the last N lines. + +`-q' +`--quiet' +`--silent' + Never print file name headers. + +`-v' +`--verbose' + Always print file name headers. + + + For compatibility `tail' also supports an obsolete usage `tail +-[COUNT][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, COUNT 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 older systems, the leading `-' can be replaced by `+' in the +obsolete option syntax with the same meaning as in counts, and obsolete +usage overrides normal usage when the two conflict. This obsolete +behavior can be enabled or disabled with the `_POSIX2_VERSION' +environment variable (*note Standards conformance::). + + Scripts intended for use on standard hosts should avoid obsolete +syntax and should use `-c COUNT[b]', `-n COUNT', and/or `-f' instead. +If your script must also run on hosts that support only the obsolete +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 fixed-size pieces +================================================ + +`split' creates output files containing consecutive 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. If 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::. + +`-a LENGTH' +`--suffix-length=LENGTH' + Use suffixes of length LENGTH. The default LENGTH is 2. + +`-l LINES' +`--lines=LINES' + Put LINES lines of INPUT into each output file. + + For compatibility `split' also supports an obsolete option syntax + `-LINES'. New scripts should use `-l LINES' instead. + +`-b BYTES' +`--bytes=BYTES' + Put the first BYTES bytes of INPUT into each output file. + Appending `b' multiplies BYTES by 512, `k' by 1024, and `m' by + 1048576. + +`-C BYTES' +`--line-bytes=BYTES' + Put into each output file as many complete lines of INPUT as + possible without exceeding BYTES bytes. For lines longer than + BYTES bytes, put BYTES bytes into each output file until less than + BYTES bytes of the line are left, then continue normally. BYTES + has the same format as for the `--bytes' option. + +`-d' +`--numeric-suffixes' + Use digits in suffixes rather than lower-case letters. + +`--verbose' + Write a diagnostic to standard error just before each output file + is opened. + + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +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. 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. + +`%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. + + 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 SUFFIX' +`--suffix=SUFFIX' + Use SUFFIX 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 + specifications, or all of these kinds of modifiers. The format + letter must convert a binary integer argument to readable form; + thus, only `d', `i', `u', `o', `x', and `X' conversions are + allowed. The entire SUFFIX 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. + +`-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. + + +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. +* 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, whitespace-separated +words, and newlines in each given FILE, or standard input if none are +given or for a FILE of `-'. 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. If +more than one FILE is given, `wc' prints a final line containing the +cumulative counts, with the file name `total'. 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 program accepts the following options. Also see *Note Common +options::. + +`-c' +`--bytes' + Print only the byte counts. + +`-m' +`--chars' + Print only the character counts. + +`-w' +`--words' + Print only the word counts. + +`-l' +`--lines' + Print only the newline counts. + +`-L' +`--max-line-length' + Print only the maximum line lengths. + +`--files0-from=FILE' + Rather than processing files named on the command line, process + those named in file FILE; each name is terminated by a null byte. + 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 + null-byte-terminated file names is with GNU `find', using its + `-print0' predicate. 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 + + Do not specify any FILE on the command line when using this option. + + + 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 more than one FILE is given, file +names are also printed (by default). (With the `--sysv' option, +corresponding file names are printed when there is at least one file +argument.) + + 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 CRC checksum and byte counts +=============================================== + +`cksum' computes a cyclic redundancy check (CRC) checksum for each +given FILE, or standard input if none are given or for a FILE of `-'. +Synopsis: + + cksum [OPTION]... [FILE]... + + `cksum' prints the CRC checksum for each file along with the number +of bytes in the file, and the file name unless no arguments were given. + + `cksum' is typically used to ensure that files transferred by +unreliable means (e.g., netnews) 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). + + The CRC algorithm is specified by the POSIX standard. It is not +compatible with the BSD or System V `sum' algorithms (see the previous +section); it is more robust. + + 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: md5sum invocation, Next: sha1sum 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 truly secure +against malicious tampering: although finding a file with a given MD5 +fingerprint, or modifying a file so as to retain its MD5 are considered +infeasible at the moment, it is known how to produce different files +with identical MD5 (a "collision"), something which can be a security +issue in certain contexts. For more secure hashes, consider using +SHA-1 or SHA-2. *Note sha1sum invocation::, and *Note sha2 utilities::. + + 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]... + + For each FILE, `md5sum' outputs the MD5 checksum, a flag indicating +a binary or text input file, and the file name. If FILE contains a +backslash or newline, 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. If FILE is omitted or specified as `-', standard input is read. + + The program accepts the following options. Also see *Note Common +options::. + +`-b' +`--binary' + 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 file as binary: the MD5 + 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 stdin if no FILE was specified) and report whether the + checksums match the contents of the named files. The input to + this mode of `md5sum' is usually the output of a prior, + checksum-generating run of `md5sum'. Each valid line of input + consists of an MD5 checksum, a binary/text flag, and then a file + name. Binary files are marked with `*', text with ` '. For each + such line, `md5sum' reads the named file and computes its MD5 + 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 an MD5 checksum inconsistent with the + associated file, or if no valid line is found, `md5sum' exits with + nonzero status. Otherwise, it exits successfully. + +`--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 MD5 checksums, exit successfully. + Otherwise exit with a status code indicating there was a failure. + +`-t' +`--text' + 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. + +`-w' +`--warn' + When verifying checksums, warn about improperly formatted MD5 + checksum lines. This option is useful only if all but a few lines + in the checked input are valid. + + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: sha1sum invocation, Next: sha2 utilities, Prev: md5sum invocation, Up: Summarizing files + +6.5 `sha1sum': Print or check SHA-1 digests +=========================================== + +`sha1sum' computes a 160-bit checksum for each specified FILE. The +usage and options of this command are precisely the same as for +`md5sum'. *Note md5sum invocation::. + + Note: The SHA-1 digest is more secure than MD5, and no collisions of +it are known (different files having the same fingerprint). However, +it is known that they can be produced with considerable, but not +unreasonable, resources. For this reason, it is generally considered +that SHA-1 should be gradually phased out in favor of the more secure +SHA-2 hash algorithms. *Note sha2 utilities::. + + +File: coreutils.info, Node: sha2 utilities, Prev: sha1sum invocation, Up: Summarizing files + +6.6 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. The usage and +options of these commands are precisely the same as for `md5sum'. +*Note md5sum invocation::. + + Note: The SHA384 and SHA512 digests are considerably slower to +compute, especially on 32-bit computers, than SHA224 or SHA256. + + +File: coreutils.info, Node: Operating on sorted files, Next: Operating on fields within a line, 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. +* tsort background:: Where tsort came from. + + +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]... + + `sort' has three modes of operation: sort (the default), merge, and +check for sortedness. 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. + + + A pair of lines is compared as follows: `sort' compares each pair of +fields, 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) + + GNU `sort' (as specified for all GNU utilities) has no limit on +input line length or restrictions on bytes allowed within lines. In +addition, if the final byte of an input file is not a newline, GNU +`sort' silently supplies one. A line's trailing newline is not part of +the line for comparison purposes. + + 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. + +`-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. + +`-g' +`--general-numeric-sort' + Sort numerically, using the standard C function `strtod' to convert + a prefix of each line to a double-precision floating point number. + This allows floating point numbers to be specified in scientific + notation, like `1.0e-34' and `10e100'. The `LC_NUMERIC' locale + determines the decimal-point character. 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. + +`-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' + 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 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. + +`-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 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. + + Whitespace and the backslash character should not appear in PROG; + they are reserved for future use. + +`-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_. + + 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 examples. + +`-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 + safely sort a file in place by using commands like `sort -o F F' + and `cat F | sort -o F'. However, `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', and `Y'. + 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 a null character (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 disks and controllers. + +`-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' + Treat the input as a set of lines, each terminated by a null + character (ASCII NUL) instead of a line feed (ASCII LF). 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 `Mbdfinr' appended to it, in which case the global +ordering options are not used for 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', `-g', `-M', or `-n'; 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 older systems, `sort' supports an obsolete origin-zero syntax +`+POS1 [-POS2]' for specifying sort keys. This obsolete behavior can +be enabled or disabled with the `_POSIX2_VERSION' environment variable +(*note Standards conformance::); it can also be enabled when +`POSIXLY_CORRECT' is not set by using the obsolete syntax with `-POS2' +present. + + Scripts intended for use on standard hosts should avoid obsolete +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 obsolete +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 + + * 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 time stamp. 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/2004:06:31:51 +0000] message 1 + 211.24.3.231 - - [24/Apr/2004: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 `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 time stamp and the second by IPv4 + address. The time stamp 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. + + * 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. + + * 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 LINES' +`--head-lines=LINES' + Output at most LINES 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::. + +`-z' +`--zero-terminated' + Treat the input and output as a set of lines, each terminated by a + zero byte (ASCII NUL (Null) character) instead of an ASCII LF + (Line Feed). 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 + +These 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. + + 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 use the character collating sequence 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 sequences of non-space non-tab characters that are + separated from each other by at least one space or tab. + + For compatibility `uniq' supports an obsolete 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 older systems, `uniq' supports an obsolete option syntax `+N'. + This obsolete behavior can be enabled or disabled with the + `_POSIX2_VERSION' environment variable (*note Standards + conformance::), but 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 tells + 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. + + `separate' + Separate groups of repeated lines with a single newline. + This is the same as using `prepend', except that there is no + newline before the first group, and hence may be better + suited for output direct to users. + + Note that when groups are delimited and the input stream contains + two or more consecutive blank lines, then the output is ambiguous. + To avoid that, filter the input through `tr -s '\n'' to replace + each sequence of consecutive newlines with a single newline. + + This is a GNU extension. + +`-u' +`--unique' + Discard the first repeated line. 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. + + + 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. 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. + + +File: coreutils.info, Node: tsort invocation, Next: tsort background, Prev: ptx invocation, Up: Operating on sorted files + +7.5 `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::. + + +File: coreutils.info, Node: tsort background, Prev: tsort invocation, Up: Operating on sorted files + +7.6 `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. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: ptx invocation, Next: tsort invocation, Prev: comm invocation, Up: Operating on sorted files + +7.7 `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. For the full list, see *Note Compatibility in ptx::. + + 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.7.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.7.2 Charset selection +----------------------- + +As it is set up now, the program assumes that the input file is coded +using 8-bit ISO 8859-1 code, also known as Latin-1 character set, +_unless_ it is compiled for MS-DOS, in which case it uses the character +set of the IBM-PC. (GNU `ptx' is not known to work on smaller MS-DOS +machines anymore.) Compared to 7-bit ASCII, the set of characters +which are letters is different; this alters the behavior of regular +expression matching. Thus, 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. + +`-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.7.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. For + more information about reference production, see *Note Output + formatting in ptx::. 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.7.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' +`--flac-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.7.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 null 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: Operating on fields within a line, Next: Operating on characters, Prev: Operating on sorted files, Up: Top + +8 Operating on fields within a line +*********************************** + +* 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 within a line + +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 + +`-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. + + + 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 within a line + +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. + + For example: + + $ cat num2 + 1 + 2 + $ cat let3 + a + b + c + $ paste num2 let3 + 1 a + 2 b + c + + Synopsis: + + paste [OPTION]... [FILE]... + + 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_ + + + 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 within a line + +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. + + 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'. + + 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'. + + As a GNU extension, if the input has no unpairable lines 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 + + The defaults are: + * 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. + + 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. + +`-e STRING' + Replace those output fields that are missing in the input with + STRING. + +`-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' + 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. + +`-v FILE-NUMBER' + Print a line for each unpairable line in file FILE-NUMBER (either + `1' or `2'), instead of the normal output. + + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: Operating on characters, Next: Directory listing, Prev: Operating on fields within a line, Up: Top + +9 Operating on characters +************************* + +This 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]... SET1 [SET2] + + `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 SET1 and (if given) SET2 arguments define ordered sets of +characters, referred to below as SET1 and SET2. These sets are the +characters of the input that `tr' operates on. The `--complement' +(`-c', `-C') option replaces SET1 with its complement (all of the +characters that are not in SET1). + + Currently `tr' fully supports only single-byte characters. +Eventually it will support multibyte characters; when it does, the `-C' +option will cause it to complement the set of characters, whereas `-c' +will cause it to complement the set of values. This distinction will +matter only when some values are not characters, and this is possible +only in locales using multibyte encodings when the input contains +encoding errors. + + The program accepts the `--help' and `--version' options. *Note +Common options::. Options must precede operands. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + +* Menu: + +* Character sets:: Specifying sets of characters. +* Translating:: Changing one set of characters to another. +* Squeezing:: Squeezing repeats and deleting. + + +File: coreutils.info, Node: Character sets, Next: Translating, Up: tr invocation + +9.1.1 Specifying sets of characters +----------------------------------- + +The format of the SET1 and SET2 arguments resembles the format of +regular expressions; however, they are not regular expressions, only +lists of characters. Most characters simply represent themselves in +these strings, but the strings can contain the shorthands listed below, +for convenience. Some of them can be used only in SET1 or SET2, as +noted below. + +Backslash escapes + The following backslash escape sequences are recognized: + + `\a' + Control-G. + + `\b' + Control-H. + + `\f' + Control-L. + + `\n' + Control-J. + + `\r' + Control-M. + + `\t' + Control-I. + + `\v' + Control-K. + + `\OOO' + The character with the value given by OOO, which is 1 to 3 + octal digits, + + `\\' + A backslash. + + While a backslash followed by a character not listed above is + interpreted as that character, the backslash also effectively + removes any special significance, so it is useful to escape `[', + `]', `*', and `-'. + +Ranges + The notation `M-N' expands to all of the characters from M through + N, in ascending order. M should collate before N; if it doesn't, + 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 + 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. If you can rely on a POSIX + compliant version of `tr', then the best 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 SET2 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 SET2 + as long as SET1. If N begins with `0', it is interpreted in + octal, otherwise in decimal. + +Character classes + The notation `[:CLASS:]' expands to all of the characters in the + (predefined) class CLASS. The characters expand in no particular + order, except for the `upper' and `lower' classes, which expand in + ascending order. When the `--delete' (`-d') and + `--squeeze-repeats' (`-s') options are both given, any character + class can be used in SET2. Otherwise, only the character classes + `lower' and `upper' are accepted in SET2, and then only if the + corresponding character class (`upper' and `lower', respectively) + is specified in the same relative position in SET1. Doing this + specifies case conversion. 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 of the characters that are + equivalent to C, in no particular order. Equivalence classes are + a relatively recent invention intended to support non-English + alphabets. But 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, Prev: Character sets, Up: tr invocation + +9.1.2 Translating +----------------- + +`tr' performs translation when SET1 and SET2 are both given and the +`--delete' (`-d') option is not given. `tr' translates each character +of its input that is in SET1 to the corresponding character in SET2. +Characters not in SET1 are passed through unchanged. When a character +appears more than once in SET1 and the corresponding characters in SET2 +are not all the same, only the final one 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:]' + +But note that using ranges like `a-z' above is not portable. + + When `tr' is performing translation, SET1 and SET2 typically have +the same length. If SET1 is shorter than SET2, the extra characters at +the end of SET2 are ignored. + + On the other hand, making SET1 longer than SET2 is not portable; +POSIX says that the result is undefined. In this situation, BSD `tr' +pads SET2 to the length of SET1 by repeating the last character of SET2 +as many times as necessary. System V `tr' truncates SET1 to the length +of SET2. + + 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 SET1), 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. Assuming a POSIX +compliant `tr', here is a better way to write it: + + tr -cs '[:alnum:]' '[\n*]' + + +File: coreutils.info, Node: Squeezing, 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 SET1. + + When given just the `--squeeze-repeats' (`-s') option, `tr' replaces +each input sequence of a repeated character that is in SET1 with a +single occurrence of that character. + + When given both `--delete' and `--squeeze-repeats', `tr' first +performs any deletions using SET1, then squeezes repeats from any +remaining characters using SET2. + + 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 SET2. + + 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: + + 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 + + More generally, use the character class notation `[=c=]' with `-' + (or any other character) in place of the `c': + + tr -d '[=-=]axM' + + Note how single quotes are used in the above example to protect the + square brackets from interpretation by a shell. + + + +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. + + 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. 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. + + 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., a subdirectory was not found) + 2 serious trouble (e.g., memory exhausted) + + Also see *Note Common options::. + +* Menu: + +* Which files are listed:: +* What information is listed:: +* Sorting the output:: +* More details about version sort:: +* 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 when no other + dereferencing-related option has been specified (`--classify' + (`-F'), `--directory' (`-d'), (`-l'), `--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. + +`--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' + List each file's author when producing long format directory + listings. In GNU/Hurd, file authors can differ from their owners, + but in other operating systems the two are the same. + +`-D' +`--dired' + With the long listing (`-l') format, 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 (`-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 + + Note that 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 + + Note that 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' along + with an option like `--escape' (aka `-b') and operate on a file + whose name contains special characters, notice that 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 that adds quote marks (e.g., + `--quoting-style=c'), 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' option (aka `-N' or `--literal') on the + command line, or else be prepared to parse the escaped names. + +`--full-time' + Produce long format directory listings, and list times in full. + It is equivalent to using `--format=long' with + `--time-style=full-iso' (*note Formatting file timestamps::). + +`-g' + Produce long format directory listings, but don't display owner + information. + +`-G' +`--no-group' + Inhibit display of group information in a long format directory + listing. (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. + 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' + 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 time. Print question marks for 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, `-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 total disk 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 2.5 and up) + + `l' + symbolic link + + `M' + off-line ("migrated") file (Cray DMF) + + `n' + network special file (HP-UX) + + `p' + FIFO (named pipe) + + `P' + port (Solaris 10 and up) + + `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. + + For a file with an extended access control list, a `+' character is + listed. Basic access control lists are equivalent to the + permissions listed, and are not considered an alternate access + method. + +`-n' +`--numeric-uid-gid' + Produce long format directory listings, but display numeric user + and group IDs instead of the owner and group names. + +`-o' + Produce long format directory listings, but don't display group + information. It is equivalent to using `--format=long' with + `--no-group' . + +`-s' +`--size' + Print the disk allocation of each file to the left of the file + name. This is the amount of disk 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 disk 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. + + + +File: coreutils.info, Node: Sorting the output, Next: More details about version sort, 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' + If the long listing format (e.g., `-l', `-o') is being used, print + the status change time (the `ctime' in the inode) instead of the + modification time. When explicitly sorting by time (`--sort=time' + or `-t') or when not using a long listing format, sort according + to the status change time. + +`-f' + Primarily, like `-U'--do not sort; list the files in whatever + order they are stored in the directory. But also enable `-a' (list + all files) and disable `-l', `--color', and `-s' (if they were + specified before the `-f'). + +`-r' +`--reverse' + Reverse whatever the sorting method is--e.g., list files in reverse + alphabetical order, youngest first, smallest first, or whatever. + +`-S' +`--sort=size' + Sort by file size, largest first. + +`-t' +`--sort=time' + Sort by modification time (the `mtime' in the inode), newest first. + +`-u' +`--time=atime' +`--time=access' +`--time=use' + If the long listing format (e.g., `--format=long') is being used, + print the last access time (the `atime' in the inode). When + explicitly sorting by time (`--sort=time' or `-t') or when not + using a long listing format, sort according to the access time. + +`-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 is especially useful when listing very large + directories, since not doing any sorting can be noticeably faster. + +`-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 More + details about version sort::.) + +`-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: More details about version sort, Next: General output formatting, Prev: Sorting the output, Up: ls invocation + +10.1.4 More details about version sort +-------------------------------------- + +The version sort takes into account the fact that file names frequently +include indices or version numbers. Standard sorting functions usually +do not produce the ordering that people expect because comparisons are +made on a character-by-character basis. The version sort addresses +this problem, and is especially useful when browsing directories that +contain many files with indices/version numbers in their names: + + $ ls -1 $ ls -1v + foo.zml-1.gz foo.zml-1.gz + foo.zml-100.gz foo.zml-2.gz + foo.zml-12.gz foo.zml-6.gz + foo.zml-13.gz foo.zml-12.gz + foo.zml-2.gz foo.zml-13.gz + foo.zml-25.gz foo.zml-25.gz + foo.zml-6.gz foo.zml-100.gz + + Note also that numeric parts with leading zeros are considered as +fractional one: + + $ ls -1 $ ls -1v + abc-1.007.tgz abc-1.007.tgz + abc-1.012b.tgz abc-1.01a.tgz + abc-1.01a.tgz abc-1.012b.tgz + + This functionality is implemented using the `strverscmp' function. +*Note String/Array Comparison: (libc)String/Array Comparison. One +result of that implementation decision is that `ls -v' does not use the +locale category, `LC_COLLATE'. As a result, non-numeric prefixes are +sorted as if `LC_COLLATE' were set to `C'. + + +File: coreutils.info, Node: General output formatting, Next: Formatting file timestamps, Prev: More details about version sort, Up: ls invocation + +10.1.5 General output formatting +-------------------------------- + +These options affect the appearance of the overall output. + +`-1' +`--format=single-column' + List one file per line. This is the default for `ls' when standard + output is not a terminal. + +`-C' +`--format=vertical' + List files in columns, sorted vertically. 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'. + Piping a colorized listing through a pager like `more' or `less' + usually produces unreadable results. However, using `more -f' + does seem to work. + +`-F' +`--classify' +`--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. 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 `-F', except that executables are not marked. + +`--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 `-F' or + `--classify' option. + +`-k' + Print file sizes in 1024-byte blocks, overriding the default block + size (*note Block size::). This option is equivalent to + `--block-size=1K'. + +`-m' +`--format=commas' + List files horizontally, with as many as will fit on each line, + separated by `, ' (a comma and a space). + +`-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 (at least Apple Terminal 1.5 (133) from + Mac OS X 10.4.8) do not properly align columns to the right of a + TAB following a non-ASCII byte. If you use such a terminal + emulator, use the `-T0' option or put `TABSIZE=0' in your + environment to tell `ls' to align using spaces, not tabs. + +`-w' +`--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. + + + +File: coreutils.info, Node: Formatting file timestamps, Next: Formatting the file names, Prev: General output formatting, Up: ls invocation + +10.1.6 Formatting file timestamps +--------------------------------- + +By default, file timestamps are listed in abbreviated form. Most +locales use a timestamp like `2002-03-30 23:45'. However, the default +POSIX locale uses a date like `Mar 30 2002' for non-recent timestamps, +and a date-without-year and time like `Mar 30 23:45' for recent +timestamps. + + 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. + + Time stamps 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 `2002-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 date, time, and time + zone format with nanosecond precision, e.g., `2002-03-30 + 23:45:56.477817180 -0700'. 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 in minutes, e.g., `2002-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., + `2002-03-30 '), and ISO 8601 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 + Finnish locale might list non-recent timestamps like `maalis + 30 2002' and recent timestamps like `maalis 30 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 2002' + 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. Ma"r 2002 ' and `30. Ma"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 2002' + and `Mar 30 23:45' when in the POSIX locale, and like + `2002-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.7 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 `-N' or + `--literal' 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. + + `c' + Quote strings as for C character string literals, including + the surrounding double-quote characters; this is the same as + the `-Q' or `--quote-name' option. + + `escape' + Quote strings as for C character string literals, except omit + the surrounding double-quote characters; this is the same as + the `-b' or `--escape' 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 `literal', but this + default may change to `shell' in a future version of this package. + +`--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. + + +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'. + + 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. + + + 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. + + By default, `cp' follows symbolic links only when not copying +recursively. 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. + + 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). Equivalent to `-dpPR'. + +`-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. + for i; do + cp --backup --force -- "$i" "$i" + done + +`--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 disk 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'. + +`-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 + unlinks it and tries to open it again. Contrast this behavior + with that enabled by `--link' and `--symbolic-link', whereby the + destination file is never opened but rather is unlinked + unconditionally. Also see the description of + `--remove-destination'. + + This option is independent of the `--interactive' or `-i' option: + neither cancels the effect of the other. + +`-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. + +`-l' +`--link' + Make hard links instead of copies of non-directories. + +`-L' +`--dereference' + Always follow symbolic links. + +`-P' +`--no-dereference' + Copy symbolic links as symbolic links rather than copying the + files that they point to. + +`-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 the file mode bits and access control lists. + + `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. In general, it is not possible to preserve these + attributes when the affected file is a symbolic link. + However, FreeBSD now provides the `lutimes' function, which + makes it possibile even for symbolic links. However, this + implementation does not yet take advantage of that. + + `links' + Preserve in the destination files any links between + corresponding source files. + + `all' + Preserve all file attributes. Equivalent to specifying all + of the above. + + Using `--preserve' with no ATTRIBUTE_LIST is equivalent to + `--preserve=mode,ownership,timestamps'. + + In the absence of this option, each destination file is created + with the mode bits of the corresponding source file, minus the + bits set in the umask and minus the set-user-ID and set-group-ID + bits. *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. + +`--reply=HOW' + *Deprecated: to be removed in 2008.* + Using `--reply=yes' makes `cp' act as if `yes' were given as a + response to every prompt about a destination file. That + effectively cancels any preceding `--interactive' or `-i' option. + Specify `--reply=no' to make `cp' act as if `no' were given as a + response to every prompt about a destination file. Specify + `--reply=query' to make `cp' prompt the user about each existing + destination file. + +`-R' +`-r' +`--recursive' + Copy directories recursively. Symbolic links are not followed by + default; 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. + +`--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 physical disk blocks; the `read' system call + reads these as zeros. This can both save considerable disk 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. + +`--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' + Do not copy a non-directory that has an existing destination with + the same or newer modification time. If time stamps are being + preserved, the comparison is to the source time stamp truncated to + the resolutions of the destination file system and of the system + calls used to update time stamps; this avoids duplicate work if + several `cp -pu' commands are executed with the same source and + destination. + +`-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. + + + 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 a file (from standard input to standard output, by default) +with a changeable I/O block size, while optionally performing +conversions on it. Synopses: + + dd [OPERAND]... + dd OPTION + + The only options are `--help' and `--version'. *Note Common +options::. `dd' accepts the following operands. + +`if=FILE' + Read from FILE instead of standard input. + +`of=FILE' + Write to FILE instead of standard output. Unless `conv=notrunc' + is given, `dd' truncates FILE to zero bytes (or the size specified + with `seek='). + +`ibs=BYTES' + Set the input block size to BYTES. This makes `dd' read BYTES per + block. + +`obs=BYTES' + Set the output block size to BYTES. This makes `dd' write BYTES + per block. + +`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. + +`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=BLOCKS' + Skip BLOCKS `ibs'-byte blocks in the input file before copying. + +`seek=BLOCKS' + Skip BLOCKS `obs'-byte blocks in the output file before copying. + +`count=BLOCKS' + Copy BLOCKS `ibs'-byte blocks from the input file, instead of + everything until the end of the file. + +`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. + + `ebcdic' + Convert ASCII to EBCDIC. This is the inverse of the `ascii' + conversion. + + `ibm' + Convert ASCII to alternate EBCDIC, using 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. + + `block' + For each line in the input, output `cbs' bytes, replacing the + input newline with a space and padding with spaces as + necessary. + + `unblock' + Replace trailing spaces in each `cbs'-sized input block with a + newline. + + The `block' and `unblock' conversions are mutually exclusive. + + `lcase' + Change uppercase letters to lowercase. + + `ucase' + Change lowercase letters to uppercase. + + The `lcase' and `ucase' conversions are mutually exclusive. + + `swab' + Swap every pair of input bytes. GNU `dd', unlike others, + works when an odd number of bytes are read--the last byte is + simply copied (since there is nothing to swap it with). + + `noerror' + Continue after read errors. + + `nocreat' + Do not create the output file; the output file must already + exist. + + `excl' + Fail if the output file already exists; `dd' must create the + output file itself. + + The `excl' and `nocreat' conversions are mutually exclusive. + + `notrunc' + Do not truncate the output file. + + `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. + + `fdatasync' + Synchronize output data just before finishing. This forces a + physical write of output data. + + `fsync' + Synchronize output data and metadata just before finishing. + This forces a physical write of output data and metadata. + + +`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. Not every flag is supported on every operating + system. + + `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. + + `direct' + Use direct I/O for data, avoiding the buffer cache. + + `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. + + `nonblock' + Use non-blocking I/O. + + `noatime' + Do not update the file's access time. 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 option 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 option has an effect only on nonstandard + platforms that distinguish binary from text I/O. + + `text' + Use text I/O. Like `binary', this option has no effect on + standard platforms. + + + These flags 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 numeric-valued strings above (BYTES and BLOCKS) 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::). + + Use different `dd' invocations to use different block sizes for +skipping and I/O. For example, the following shell commands copy data +in 512 KiB blocks between a disk and a tape, but do not save or restore +a 4 KiB label at the start of the disk: + + disk=/dev/rdsk/c0t1d0s2 + tape=/dev/rmt/0 + + # Copy all but the label from disk to tape. + (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape + + # Copy from tape back to disk, but leave the disk label alone. + (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk + + Sending an `INFO' signal 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 10 million blocks. +The `kill' command makes it output intermediate I/O statistics, and +when `dd' completes, it outputs the final statistics. + + $ dd if=/dev/zero of=/dev/null count=10MB & pid=$! + $ kill -s INFO $pid; wait $pid + 3385223+0 records in + 3385223+0 records out + 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s + 10000000+0 records in + 10000000+0 records out + 5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s + + 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. + + 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' + Ignored; for compatibility with old Unix versions of `install'. + +`-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. + +`-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. + +`-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 times are both set to the time of + installation. This option is useful if you want to use the last + modification times 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. + +`-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 before copying it. + + + 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. + + `mv' can move any type of file from one file system to another. +Prior to version `4.0' of the fileutils, `mv' could move only regular +files between file systems. For example, now `mv' can move an entire +directory hierarchy including special device files from one partition +to another. It first uses some of the same code that's used by `cp -a' +to copy the requested directories and files, then (assuming the copy +succeeded) it removes the originals. If the copy fails, then the part +that was copied to the destination partition is removed. If you were +to copy three directories from one partition to another and the copy of +the first directory succeeded, but the second didn't, the first would +be left on the destination partition and the second and third would be +left on the original partition. + + 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_: If you try to move a symlink that points to a directory, +and you specify the symlink with a trailing slash, then `mv' doesn't +move the symlink but instead moves the directory referenced by the +symlink. *Note Trailing slashes::. + + 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. + +`-f' +`--force' + Do not prompt the user before removing a destination file. + +`-i' +`--interactive' + Prompt whether to overwrite each existing destination file, + regardless of its permissions. If the response is not + affirmative, the file is skipped. + +`--reply=HOW' + *Deprecated: to be removed in 2008.* + Specifying `--reply=yes' is equivalent to using `--force'. + Specify `--reply=no' to make `mv' act as if `no' were given as a + response to every prompt about a destination file. Specify + `--reply=query' to make `mv' prompt the user about each existing + destination file. Note that `--reply=no' has an effect only when + `mv' would prompt without `-i' or equivalent, i.e., when a + destination file exists and is not writable, standard input is a + terminal, and no `-f' (or equivalent) option is specified. + +`-u' +`--update' + Do not move a non-directory that has an existing destination with + the same or newer modification time. If the move is across file + system boundaries, the comparison is to the source time stamp + truncated to the resolutions of the destination file system and of + the system calls used to update time stamps; this avoids duplicate + work if several `mv -u' commands are executed with the same source + and destination. + +`-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::. + + + 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. + + _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 truly unrecoverable, consider using `shred'. + + The program accepts the following options. Also see *Note Common +options::. + +`-f' +`--force' + Ignore nonexistent files and never prompt the user. Ignore any + previous `--interactive' (`-i') option. + +`-i' + Prompt whether to remove each file. If the response is not + affirmative, the file is skipped. 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'. + Specifying `--interactive' and no WHEN is equivalent to + `--interactive=always'. + +`--one-file-system' + When removing a hierarchy recursively, skip 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 warn about 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. + +`--preserve-root' + Fail upon any attempt to remove the root directory, `/', when used + with the `--recursive' option. This is the default behavior. + *Note Treating / specially::. + +`--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 very +expensive hardware from recovering the data. + + Ordinarily when you remove a file (*note rm invocation::), the data +is not actually destroyed. Only the index listing where the file is +stored is destroyed, and the storage is made available for reuse. +There are undelete utilities that will attempt to reconstruct the index +and can bring the file back if the parts were not reused. + + On a busy system with a nearly-full drive, space can get reused in a +few seconds. But there is no way to know for sure. If you have +sensitive data, you may want to be sure that recovery is not possible +by actually overwriting the file with non-sensitive data. + + However, even after doing that, it is possible to take the 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. If the data has only been overwritten once, it's not +even that hard. + + 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 like floppy disks, this is the preferred method. +However, hard drives are expensive and hard to melt, so the `shred' +utility tries to achieve a similar effect non-destructively. + + This uses many overwrite passes, with the data patterns chosen to +maximize the damage they do to the old data. While this will work on +floppies, the patterns are designed for best effect on hard drives. +For more details, see the source code and Peter Gutmann's paper `Secure +Deletion of Data from Magnetic and Solid-State Memory' +(http://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). + + *Please note* that `shred' relies on a very important assumption: +that the file system overwrites data in place. This is the traditional +way to do things, but many modern file system designs do not satisfy +this assumption. Exceptions include: + + * Log-structured or journaled file systems, such as those supplied + with AIX and Solaris, and JFS, ReiserFS, XFS, Ext3 (in + `data=journal' mode), BFS, NTFS, 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. + + In the particular case of ext3 file systems, the above disclaimer +applies (and `shred' is thus of limited effectiveness) only 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. Ext3 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). + + If you are not sure how your file system operates, then you should +assume that it does not overwrite data in place, which means that 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 the problem of file system design mentioned +above. However, even shredding devices is not always completely +reliable. For example, most disks map out bad sectors invisibly to the +application; if the bad sectors contain sensitive data, `shred' won't +be able to destroy it. + + `shred' makes no attempt to detect or report this problem, 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 +truncate or remove the output file. This default is more suitable for +devices, which typically cannot be truncated 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. + +`-NUMBER' +`-n NUMBER' +`--iterations=NUMBER' + By default, `shred' uses 25 passes of overwrite. This is enough + for all of the useful overwrite patterns to be used at least once. + You can reduce this to save time, or increase it if you have a lot + of time to waste. + +`--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' + After shredding a file, truncate it (if possible) and then remove + it. If a file has multiple links, only the named links will be + removed. + +`-v' +`--verbose' + Display 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 + last block of the file. 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 hard drive (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 all trace of the file +system you'd created on the floppy disk in your first drive. That +command takes about 20 minutes to erase a "1.44MB" (actually 1440 KiB) +floppy. + + shred --verbose /dev/fd0 + + Similarly, to erase all data on a selected partition of your hard +disk, you could give a command like this: + + shred --verbose /dev/sda5 + + A FILE of `-' denotes standard output. The intended use of this is +to shred a removed temporary file. For example: + + i=`tempfile -m 0600` + 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 the referent of a symbolic link. +* 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 Hard Links: +(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. + + 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 remove existing files. Use the `--force' +(`-f') option to remove them unconditionally, the `--interactive' +(`-i') option to remove them conditionally, and the `--backup' (`-b') +option to rename them. + + 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. +On all existing implementations, you cannot make a hard link to a +directory, and 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. *Note Symbolic Links: +(libc)Symbolic Links. + + 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. + +`-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. + +`-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. + + + 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::. + + 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 the umask modified by `u+wx'. Ignore + existing parent directories, and do not change their file + permission bits. + + To set the file permission bits of any newly-created parent + directories to a value that includes `u+wx', you can 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 permission bits to `u=rwx,go=rx'. 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'. + + 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 option. 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::. + + + 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 disk. (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. + + 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 option. 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::. + + + 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 the referent of a symbolic link +====================================================== + +`readlink' may work in one of two supported modes: + +`Readlink mode' + `readlink' outputs the value of the given symbolic link. 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 file which + contains no `.', `..' components nor any repeated separators (`/') + or symbolic links. + + + 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. + +`-e' +`--canonicalize-existing' + Activate canonicalize mode. If any component is missing or + unavailable, `readlink' produces no output and exits with a + nonzero exit code. + +`-m' +`--canonicalize-missing' + Activate canonicalize mode. If any component is missing or + unavailable, `readlink' treats it as a directory. + +`-n' +`--no-newline' + Do not output the trailing newline. + +`-s' +`-q' +`--silent' +`--quiet' + Suppress most error messages. + +`-v' +`--verbose' + Report error messages. + + + The `readlink' utility first appeared in OpenBSD 2.1. + + 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 option. Also see *Note Common +options::. + +`--ignore-fail-on-non-empty' + Ignore each failure to remove a directory that is solely because + the directory 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). + + 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 Deleting +Files: (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: Disk 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: + +* chgrp invocation:: Change file groups. +* chmod invocation:: Change access permissions. +* chown invocation:: Change file owners and groups. +* touch invocation:: Change file timestamps. + + +File: coreutils.info, Node: chown invocation, Next: touch invocation, Prev: chmod 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. 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 `.'. + + 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. + +`-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. *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, 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. 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::. + + 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. + +`-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. *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: chown 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. + + 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 changes. + +`-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. + + +File: coreutils.info, Node: touch invocation, Prev: chown invocation, Up: Changing file attributes + +13.4 `touch': Change file timestamps +==================================== + +`touch' changes the access and/or modification times of the specified +files. Synopsis: + + touch [OPTION]... FILE... + + Any FILE that does not exist is created empty. + + A FILE of `-' causes `touch' to change the times of the file +associated with standard output. + + If changing both the access and modification times to the current +time, `touch' can change the timestamps for files that the user running +it does not own but has write permission for. Otherwise, the user must +own the files. + + Although `touch' provides options for changing two of the times--the +times of last access and modification--of a file, there is actually a +third one as well: the inode change time. This is often referred to as +a file's `ctime'. The inode change time represents the time when the +file's meta-information last changed. One common example of this is +when the permissions of a file change. Changing the permissions +doesn't access the file, so the 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. In any case, it is not +possible, in normal operations, for a user to change the ctime field to +a user-specified value. + + Time stamps 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 +time stamps. + + The program accepts the following options. Also see *Note Common +options::. + +`-a' +`--time=atime' +`--time=access' +`--time=use' + Change the access time only. + +`-c' +`--no-create' + Do not create files that do not exist. + +`-d' +`--date=TIME' + Use TIME instead of the current time. It can contain month names, + time zones, `am' and `pm', `yesterday', etc. For example, + `--date="2004-02-27 14:19:13.489392193 +0530"' specifies the + instant of time that is 489,392,193 nanoseconds after February 27, + 2004 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 time stamps silently ignore any excess + precision here. + +`-f' + Ignored; for compatibility with BSD versions of `touch'. + +`-m' +`--time=mtime' +`--time=modify' + Change the modification time 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 time stamp equal to five seconds before + the corresponding time stamp for `foo'. + +`-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 older systems, `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. This obsolete behavior +can be enabled or disabled with the `_POSIX2_VERSION' environment +variable (*note Standards conformance::), but 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: Disk usage, Next: Printing text, Prev: Changing file attributes, Up: Top + +14 Disk usage +************* + +No disk can hold an infinite amount of data. These commands report how +much disk storage is in use or available, report other file and file +status information, and write buffers to disk. + +* Menu: + +* df invocation:: Report file system disk space usage. +* du invocation:: Estimate file space usage. +* stat invocation:: Report file or file system status. +* sync invocation:: Synchronize memory and disk. + + +File: coreutils.info, Node: df invocation, Next: du invocation, Up: Disk usage + +14.1 `df': Report file system disk space usage +============================================== + +`df' reports the amount of disk 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 disk 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 an argument FILE is a disk device 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 (i.e., the root file +system). GNU `df' does not attempt to determine the disk usage on +unmounted file systems, because on most kinds of systems doing so +requires extremely nonportable intimate knowledge of file system +structures. + + The program accepts the following options. Also see *Note Common +options::. + +`-a' +`--all' + Include in the listing dummy file systems, which are omitted by + default. Such file systems are typically special-purpose + pseudo-file-systems, such as automounter entries. + +`-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. + 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 disk. + +`-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 + disks, but on some systems (notably SunOS) the results may be + slightly out of date. This is the default. + +`-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 SunOS), 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. + +`-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. + + `4.2, ufs, efs...' + A file system on a locally-mounted hard disk. (The system + might even support more than one type here; Linux does.) + + `hsfs, cdfs' + A file system on a CD-ROM drive. HP-UX uses `cdfs', most + other systems use `hsfs' (`hs' for "High Sierra"). + + `pcfs' + An MS-DOS file system, usually on a diskette. + + +`-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'. + + + 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'. + + +File: coreutils.info, Node: du invocation, Next: stat invocation, Prev: df invocation, Up: Disk usage + +14.2 `du': Estimate file space usage +==================================== + +`du' reports the amount of disk space used by the specified files and +for each subdirectory (of directory arguments). Synopsis: + + du [OPTION]... [FILE]... + + With no arguments, `du' reports the disk space for the current +directory. Normally the disk 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. + + The program accepts the following options. Also see *Note Common +options::. + +`-a' +`--all' + Show counts for all files, not just directories. + +`--apparent-size' + Print apparent sizes, rather than disk 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 disk + 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 systems, it + actually uses almost no disk space. + +`-b' +`--bytes' + Equivalent to `--apparent-size --block-size=1'. + +`-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. + +`-c' +`--total' + Print a grand total of all arguments after all arguments have been + processed. This can be used to find out the total disk 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 disk usage of directories, such as `/usr/tmp', which are often + symbolic links. + +`--files0-from=FILE' + Rather than processing files named on the command line, process + those named in file FILE; each name is terminated by a null byte. + This is useful with the `--total' (`-c') option 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 a + total for each sublist rather than for the entire list. One way + to produce a list of null-byte-terminated file names is with GNU + `find', using its `-print0' predicate. Do not specify any FILE on + the command line when using this option. + +`-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. + Use the `--si' option if you prefer powers of 1000. + +`-H' + Currently, `-H' is the same as `--si', except that `-H' evokes a + warning. This option will be changed to be equivalent to + `--dereference-args' (`-D'). + +`-k' + Print sizes in 1024-byte blocks, overriding the default block size + (*note Block size::). This option is equivalent to + `--block-size=1K'. + +`-l' +`--count-links' + Count the size of all files, even if they have appeared already + (as a hard link). + +`-L' +`--dereference' + Dereference symbolic links (show the disk space used by the file + or directory that the link points to instead of the space used by + the 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 links encountered by `du', consider the disk + space used by the symbolic link. + +`--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'. + +`-0' +`--null' + Output a null byte at the end of each line, rather than a newline. + This option enables other programs to parse the output of `du' + even when that output would contain file names with embedded + newlines. + +`--si' + Append an SI-style abbreviation to each size, such as `MB' for + megabytes. Powers of 1000 are used, not 1024; `MB' stands for + 1,000,000 bytes. Use the `-h' or `--human-readable' option if you + prefer powers of 1024. + +`-s' +`--summarize' + Display only a total for each argument. + +`-S' +`--separate-dirs' + Report the size of each directory separately, not including the + sizes of subdirectories. + +`--time' + Show time of the most recent modification of any file in the + directory, or any of its subdirectories. + +`--time=ctime' +`--time=status' +`--time=use' + Show the most recent status change time (the `ctime' in the inode) + of any file in the directory, instead of the modification time. + +`--time=atime' +`--time=access' + Show the most recent access time (the `atime' in the inode) of any + file in the directory, instead of the modification time. + +`--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 `2002-03-30 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 date, time, and time + zone format with nanosecond precision, e.g., `2002-03-30 + 23:45:56.477817180 -0700'. This style is equivalent to + `+%Y-%m-%d %H:%M:%S.%N %z'. + + `long-iso' + List ISO 8601 date and time in minutes, e.g., `2002-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 timestamps, e.g., `2002-03-30'. 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' +`--one-file-system' + Skip directories that are on different file systems from the one + that the argument being processed is on. + +`--exclude=PATTERN' + When recursing, skip subdirectories or files matching PATTERN. + For example, `du --exclude='*.o'' excludes files whose names end + in `.o'. + +`-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. + + + On BSD systems, `du' reports sizes that are half the correct values +for files that are NFS-mounted from HP-UX systems. 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 `du' program. + + 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: Disk 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. + +`-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. + +`-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 valid format sequences for files are: + + * %a - Access rights in octal + + * %A - Access rights in human readable form + + * %b - Number of blocks allocated (see `%B') + + * %B - The size in bytes of each block reported by `%b' + + * %d - Device number in decimal + + * %D - Device number in hex + + * %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 + + * %n - File name + + * %N - Quoted file name with dereference if symbolic link + + * %o - I/O block size + + * %s - Total size, in bytes + + * %t - Major device type in hex + + * %T - Minor device type in hex + + * %u - User ID of owner + + * %U - User name of owner + + * %x - Time of last access + + * %X - Time of last access as seconds since Epoch + + * %y - Time of last modification + + * %Y - Time of last modification as seconds since Epoch + + * %z - Time of last change + + * %Z - Time of last change as seconds since Epoch + + The valid format sequences for file systems are: + + * %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 + + Time stamps 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, Prev: stat invocation, Up: Disk usage + +14.4 `sync': Synchronize data on disk with memory +================================================= + +`sync' writes any data buffered in memory out to disk. 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' system call. + + The kernel keeps data in memory to avoid doing (relatively slow) disk +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 ensures everything in memory is written to disk. + + Any arguments are ignored, except for a lone `--help' or `--version' +(*note Common options::). + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: Printing text, Next: Conditions, Prev: Disk 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]... + + 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' + suppress trailing newline + + `\f' + form feed + + `\n' + new line + + `\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) + + `\NNN' + the eight-bit value that is the octal number NNN (one to + three octal digits) + + `\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'. + + 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 can use +the `printf' command if they need to omit trailing newlines or output +control characters or backslashes. *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. The differences are as +follows: + + * 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. + + * `printf' has an additional directive, `%b', which 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 a precision is also + given, it limits the number of bytes printed from the converted + string. + + * 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 must use a period before any fractional +digits, but is printed according to the `LC_NUMERIC' category of the +current locale. For example, in a locale whose radix character is a +comma, the command `printf %g 3.14' outputs `3,14' whereas the command +`printf %g 3,14' is an error. + + `printf' interprets `\OOO' in FORMAT as an octal number (if OOO is 1 +to 3 octal digits) specifying a character to print, and `\xHH' as a +hexadecimal number (if HH is 1 to 2 hex digits) specifying a character +to print. + + `printf' interprets two character syntaxes introduced in ISO C 99: +`\u' for 16-bit Unicode (ISO/IEC 10646) 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. + + 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. + + The only options are a lone `--help' or `--version'. *Note Common +options::. Options must precede operands. + + The Unicode character syntaxes are useful for writing strings in a +locale independent way. For example, a string containing the Euro +currency symbol + + $ /usr/local/bin/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 + + $ /usr/local/bin/printf '\u4e2d\u6587' + +will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, +etc). + + Note that in these examples, the full name of `printf' has been +given, to distinguish it from the GNU `bash' built-in function `printf'. + + 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_CN.big5 /usr/local/bin/printf \ + '\u4e2d\u6587\n' > sample.txt + $ recode BIG5..JAVA < sample.txt \ + | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \ + > sample.sh + + 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 + + Because most shells have a built-in `test' command, using an +unadorned `test' in a script or interactively may get you different +functionality than that described here. + + 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 read permission is granted. + +`-u FILE' + True if FILE exists and has its set-user-ID bit set. + +`-w FILE' + True if FILE exists and write permission is granted. + +`-x FILE' + True if FILE exists and execute permission is granted (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. + + + +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 not equal. + + + +File: coreutils.info, Node: Numeric tests, Next: Connectives for test, Prev: String tests, Up: test invocation + +16.3.5 Numeric tests +-------------------- + +Numeric relationals. 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' +----------------------------- + +The usual logical connectives. + +`! EXPR' + True if EXPR is false. + +`EXPR1 -a EXPR2' + True if both EXPR1 and EXPR2 are true. + +`EXPR1 -o EXPR2' + True if either EXPR1 or EXPR2 is true. + + + +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. + + 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 lower 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 the match succeeds and REGEX uses `\(' and `\)', the `:' + expression returns the part of STRING that matched the + subexpression; otherwise, it returns the number of characters + matched. + + If the match fails, the `:' operator returns the null string if + `\(' and `\)' are used in REGEX, otherwise 0. + + 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. SunOS and other `expr''s treat these as regular + characters. (POSIX allows either behavior.) *Note Regular + Expression Library: (regex)Top, 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. The string operators (previous section) have lower +precedence, the connectives (next section) have higher. + +`+ -' + 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 are +higher precedence than either the string or 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 quote 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. + + +File: coreutils.info, Node: tee invocation, Up: Redirection + +17.1 `tee': Redirect output to multiple files +============================================= + +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. + + A FILE of `-' causes `tee' to send another copy of input to standard +output, but this is typically not that useful as the copies are +interleaved. + + 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. + + + 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 non-directory suffix from a file name. +* pathchk invocation:: Check file name portability. + + +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] + + 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 only options are `--help' and `--version'. *Note Common +options::. Options must precede operands. + + 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 + + +File: coreutils.info, Node: dirname invocation, Next: pathchk invocation, Prev: basename invocation, Up: File name manipulation + +18.2 `dirname': Strip non-directory suffix from a file name +=========================================================== + +`dirname' prints all but the final slash-delimited component of a +string (presumably a file name). Synopsis: + + dirname NAME + + If NAME is a single component, `dirname' prints `.' (meaning the +current 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 only options are `--help' and `--version'. *Note Common +options::. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + Examples: + + # Output "/usr/bin". + dirname /usr/bin/sort + + # Output ".". + dirname stdio.h + + +File: coreutils.info, Node: pathchk invocation, Prev: dirname invocation, Up: File name manipulation + +18.3 `pathchk': Check file name portability +=========================================== + +`pathchk' checks portability of file names. Synopsis: + + pathchk [OPTION]... NAME... + + For each NAME, `pathchk' prints a 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 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 a message if any of these conditions is true: + + 1. A file name is empty. + + 2. The length of a file name or one of its components exceeds the + POSIX minimum limits for portability. + + 3. A file name contains a character outside the portable file + name character set, namely, the ASCII letters and digits, `-', + `.', `/', and `_'. + +`-P' + Print a message if a file name is empty, or if it contains a + component that begins with `-'. + +`--portability' + Print a 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: 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 fully resolved name of the current directory. That +is, all components of the printed name will be actual directory +names--none will be symbolic links. + + Because most shells have a built-in `pwd' command, using an +unadorned `pwd' in a script or interactively may get you different +functionality than that described here. + + The only options are a lone `--help' or `--version'. *Note Common +options::. + + 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. + + 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. + +`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. + + +File: coreutils.info, Node: Input, Next: Output, Prev: Control, Up: stty invocation + +19.2.2 Input settings +--------------------- + +`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. + +`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 arguments specify output-related operations. + +`opost' + Postprocess output. May be negated. + +`olcuc' + Translate lowercase characters to uppercase. Non-POSIX. May be + negated. + +`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 delete characters for fill instead of null 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. + + +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 -ixoff + -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr + -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 + ff0 isig icanon iexten echo echoe echok -echonl + -noflsh -xcase -tostop -echoprt echoctl echoke + + 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 -iuclc -ixany + -imaxbel -opost -isig -icanon -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. + +`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. + +`swtch' + Switch to a different shell layer. 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. + +`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. 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 only options are a lone `--help' or `--version'. *Note Common +options::. + + 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 not a terminal + 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]... [USERNAME] + + 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. + + 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. + + + 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 ID +====================================== + +`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. 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::. + + 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::. + + 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'. + + Time stamps 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 column headings. + +`-m' + Same as `who am i'. + +`-q' +`--count' + Print only the login names and the number of users logged on. + Overrides all other options. + +`-s' + Ignored; for compatibility with other versions of `who'. + +`-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. + +`-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. + +`-H' +`--heading' + Print a line of column headings. + +`-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 + + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: System context, Next: Modified command invocation, 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. +* uname invocation:: Print system information. +* hostname invocation:: Print or set system name. +* hostid invocation:: Print numeric host identifier. + + +File: coreutils.info, Node: date invocation, Next: uname 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] ] + + 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 Mar 3 13:47:51 PST 2005'. + + 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. + + 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. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + +* Menu: + +* 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. +* Examples of date:: Examples. + + +File: coreutils.info, Node: Time conversion specifiers, Next: Date conversion specifiers, Up: date invocation + +21.1.1 Time conversion specifiers +--------------------------------- + +`date' conversion specifiers related to times. + +`%H' + hour (`00'...`23') + +`%I' + hour (`01'...`12') + +`%k' + hour (` 0'...`23'). This is a GNU extension. + +`%l' + hour (` 1'...`12'). 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'. This is a GNU + extension. + +`%s' + seconds since the epoch, i.e., since 1970-01-01 00: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' + RFC 2822/ISO 8601 style numeric time zone (e.g., `-0600' or + `+0530'), or nothing 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. The time (and optionally, the time zone rules) can be + overridden by the `--date' option. This is a GNU extension. + +`%:z' + RFC 3339/ISO 8601 style numeric time zone with `:' (e.g., `-06:00' + or `+05:30'), or nothing 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 nothing 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 nothing 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 invocation + +21.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 2005') + +`%C' + century. This is like `%Y', except the last two digits are + omitted. For example, it is `20' if `%Y' is `2000', 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; same as `%Y-%m-%d'. 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. This is + a GNU extension. + +`%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. This is a GNU + extension. + +`%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. This is a GNU extension. + +`%h' + same as `%b' + +`%j' + day of year (`001'...`366') + +`%m' + month (`01'...`12') + +`%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 invocation + +21.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, Next: Setting the time, Prev: Literal conversion specifiers, Up: date invocation + +21.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. Seconds since the epoch are not padded, though, since there is +no natural width for them. + + As a GNU extension, `date' recognizes any of the following optional +flags after the `%': + +`-' + (hyphen) Do not pad the field; useful if the output is intended for + human consumption. + +`_' + (underscore) Pad with spaces; useful if you need a fixed number of + characters in the output, but zeros are too distracting. + +`0' + (zero) Pad with zeros even if the conversion specifier would + normally pad with spaces. + +`^' + Use upper case characters if possible. + +`#' + Use opposite case characters if possible. A field that is + normally upper case becomes lower case, and vice versa. + +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 + + As a GNU extension, you can specify the field width (after any flag, +if present) as a decimal number. If the natural size of the output is +of the field has less than the specified number of characters, the +result is written right adjusted and padded to the given size. For +example, `%9B' prints the right adjusted month name in a field of width +9. + + 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. + + +File: coreutils.info, Node: Setting the time, Next: Options for date, Prev: Padding and other flags, Up: date invocation + +21.1.5 Setting the time +----------------------- + +If given an argument that does not start with `+', `date' sets the +system clock to the date and time specified by that argument (as +described below). You must have appropriate privileges to set the +system clock. The `--date' and `--set' options may not be used with +such an argument. The `--universal' option may be used with such an +argument to indicate that the specified date and time are relative to +Coordinated Universal Time rather than to the local time zone. + + The argument must consist entirely of digits, which have the +following meaning: + +`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) + + The `--set' option also sets the system clock; see the next section. + + +File: coreutils.info, Node: Options for date, Next: Examples of date, Prev: Setting the time, Up: date invocation + +21.1.6 Options for `date' +------------------------- + +The program accepts the following options. Also see *Note Common +options::. + +`-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="2004-02-27 + 14:19:13.489392193 +0530"' specifies the instant of time that is + 489,392,193 nanoseconds after February 27, 2004 at 2:19:13 PM in a + time zone that is 5 hours and 30 minutes east of UTC. *Note Date + input formats::. + +`-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. + +`-r FILE' +`--reference=FILE' + Display the date and time of the last modification of FILE, + instead of the current date and time. + +`-R' +`--rfc-822' +`--rfc-2822' + 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: + + Fri, 09 Sep 2005 13:51:39 -0700 + + This format conforms to Internet RFCs 2822 + (ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt) and 822 + (ftp://ftp.rfc-editor.org/in-notes/rfc822.txt), the current and + previous standards for Internet email. + +`--rfc-3339=TIMESPEC' + Display the date using a format specified by Internet RFC 3339 + (ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt). This is a subset + of the ISO 8601 format, except that it also permits applications + to use a space rather than a `T' to separate dates from times. + Unlike the other standard formats, RFC 3339 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., `2005-09-14'. This is + equivalent to the format `%Y-%m-%d'. + + `seconds' + Print the full-date and full-time separated by a space, e.g., + `2005-09-14 00:56:06+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 equivalent to + the format `%Y-%m-%d %H:%M:%S%:z'. + + `ns' + Like `seconds', but also print nanoseconds, e.g., `2005-09-14 + 00:56:06.998458565+05:30'. This is equivalent to the format + `%Y-%m-%d %H:%M:%S.%N%:z'. + + +`-s DATESTR' +`--set=DATESTR' + Set the date and time to DATESTR. See `-d' above. + +`-u' +`--utc' +`--universal' + Use Coordinated Universal Time (UTC) by operating as if the `TZ' + environment variable were set to the string `UTC0'. Coordinated + Universal Time is often called "Greenwich Mean Time" (GMT) for + historical reasons. + + +File: coreutils.info, Node: Examples of date, Prev: Options for date, Up: date invocation + +21.1.7 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 RFC 2822 format, use `date --rfc-2822'. Here + is some example output: + + Fri, 09 Sep 2005 13:51:39 -0700 + + * To convert a date string to the number of seconds since the epoch + (which is 1970-01-01 00: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 + + 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 `946684800' and casually note "Oh, that's the + first second of the year 2000 in Greenwich, England." + + date --date='2000-01-01 UTC' +%s + 946684800 + + 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=2000-01-01 +%s + 946684800 + + To convert such an unwieldy number of seconds back to a more + readable form, use a command like this: + + # local time zone used + date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z" + 1999-12-31 19:00:00 -0500 + + Or if you do not mind depending on the `@' feature present since + coreutils 5.3.0, you could shorten this to: + + date -d @946684800 +"%F %T %z" + 1999-12-31 19:00:00 -0500 + + Often it is better to output UTC-relative date and time: + + date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z" + 2000-01-01 00:00:00 +0000 + + + +File: coreutils.info, Node: uname invocation, Next: hostname invocation, Prev: date invocation, Up: System context + +21.2 `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, RELEASE is +`2.2.18ss.e820-bda652a #4 SMP Tue Jun 5 11:24:08 PDT 2001': + + uname -a + => Linux dum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686 unknown unknown 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 the kernel does not make this + information easily available, as is the case with Linux kernels. + +`-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 the kernel does not make + this information easily available, as is the case with Linux + kernels. + +`-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.3 `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::. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: hostid invocation, Prev: hostname invocation, Up: System context + +21.4 `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. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: Modified command invocation, Next: Process control, Prev: System context, Up: Top + +22 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. +* su invocation:: Modify user and group ID. + + +File: coreutils.info, Node: chroot invocation, Next: env invocation, Up: Modified command invocation + +22.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. Synopses: + + chroot 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) and then 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 only options are `--help' and `--version'. *Note Common +options::. Options must precede operands. + + 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. + + Exit status: + + 1 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 + + +File: coreutils.info, Node: env invocation, Next: nice invocation, Prev: chroot invocation, Up: Modified command invocation + +22.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 + + 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 the null character (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::). + + If no command name is specified following the environment +specifications, the resulting environment is printed. This is like +specifying the `printenv' program. + + The program accepts the following options. Also see *Note Common +options::. Options must precede operands. + +`-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. + + + Exit status: + + 0 if no COMMAND is specified and the environment is output + 1 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 + + +File: coreutils.info, Node: nice invocation, Next: nohup invocation, Prev: env invocation, Up: Modified command invocation + +22.3 `nice': Run a command with modified niceness +================================================= + +`nice' prints or modifies a process's "niceness", a parameter that +affects whether the process is scheduled favorably. 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. + + Nicenesses range at least from -20 (resulting in the most favorable +scheduling) through 19 (the least favorable). Some systems may have a +wider range of nicenesses; 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 nonnegative 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::). + + Because many shells have a built-in `nice' command, using an +unadorned `nice' in a script or interactively may get you different +functionality than that described here. + + 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. + + + Exit status: + + 0 if no COMMAND is specified and the niceness is output + 1 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: su invocation, Prev: nice invocation, Up: Modified command invocation + +22.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, it is redirected from `/dev/null' +so that terminal sessions do not mistakenly consider the terminal to be +used by the command. This is a GNU extension; programs intended to be +portable to non-GNU hosts should use `nohup COMMAND [ARG]... </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. + + `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: + + 126 if COMMAND is found but cannot be invoked + 127 if `nohup' itself fails or if COMMAND cannot be found + the exit status of COMMAND otherwise + + +File: coreutils.info, Node: su invocation, Prev: nohup invocation, Up: Modified command invocation + +22.5 `su': Run a command with substitute user and group ID +========================================================== + +`su' allows one user to temporarily become another user. It runs a +command (often an interactive shell) with the real and effective user +ID, group ID, and supplemental groups of a given USER. Synopsis: + + su [OPTION]... [USER [ARG]...] + + If no USER is given, the default is `root', the super-user. The +shell to use is taken from USER's `passwd' entry, or `/bin/sh' if none +is specified there. If USER has a password, `su' prompts for the +password unless run by a user with effective user ID of zero (the +super-user). + + By default, `su' does not change the current directory. It sets the +environment variables `HOME' and `SHELL' from the password entry for +USER, and if USER is not the super-user, sets `USER' and `LOGNAME' to +USER. By default, the shell is not a login shell. + + Any additional ARGs are passed as additional arguments to the shell. + + GNU `su' does not treat `/bin/sh' or any other shells specially +(e.g., by setting `argv[0]' to `-su', passing `-c' only to certain +shells, etc.). + + `su' can optionally be compiled to use `syslog' to report failed, +and optionally successful, `su' attempts. (If the system supports +`syslog'.) However, GNU `su' does not check if the user is a member of +the `wheel' group; see below. + + The program accepts the following options. Also see *Note Common +options::. + +`-c COMMAND' +`--command=COMMAND' + Pass COMMAND, a single command line to run, to the shell with a + `-c' option instead of starting an interactive shell. + +`-f' +`--fast' + Pass the `-f' option to the shell. This probably only makes sense + if the shell run is `csh' or `tcsh', for which the `-f' option + prevents reading the startup file (`.cshrc'). With Bourne-like + shells, the `-f' option disables file name pattern expansion + (globbing), which is not likely to be useful. + +`-' +`-l' +`--login' + Make the shell a login shell. This means the following. Unset all + environment variables except `TERM', `HOME', and `SHELL' (which + are set as described above), and `USER' and `LOGNAME' (which are + set, even for the super-user, as described above), and set `PATH' + to a compiled-in default value. Change to USER's home directory. + Prepend `-' to the shell's name, intended to make it read its + login startup file(s). + +`-m' +`-p' +`--preserve-environment' + Do not change the environment variables `HOME', `USER', `LOGNAME', + or `SHELL'. Run the shell given in the environment variable + `SHELL' instead of the shell from USER's passwd entry, unless the + user running `su' is not the super-user and USER's shell is + restricted. A "restricted shell" is one that is not listed in the + file `/etc/shells', or in a compiled-in list if that file does not + exist. Parts of what this option does can be overridden by + `--login' and `--shell'. + +`-s SHELL' +`--shell=SHELL' + Run SHELL instead of the shell from USER's passwd entry, unless + the user running `su' is not the super-user and USER's shell is + restricted (see `-m' just above). + + + Exit status: + + 1 if `su' itself fails + 126 if subshell is found but cannot be invoked + 127 if subshell cannot be found + the exit status of the subshell otherwise + +22.5.1 Why GNU `su' does not support the `wheel' group +------------------------------------------------------ + +(This section is by Richard Stallman.) + + Sometimes a few of the users try to hold total power over all the +rest. For example, in 1984, a few users at the MIT AI lab decided to +seize power by changing the operator password on the Twenex system and +keeping it secret from everyone else. (I was able to thwart this coup +and give power back to the users by patching the kernel, but I wouldn't +know how to do that in Unix.) + + However, occasionally the rulers do tell someone. Under the usual +`su' mechanism, once someone learns the root password who sympathizes +with the ordinary users, he or she can tell the rest. The "wheel +group" feature would make this impossible, and thus cement the power of +the rulers. + + I'm on the side of the masses, not that of the rulers. If you are +used to supporting the bosses and sysadmins in whatever they do, you +might find this idea strange at first. + + +File: coreutils.info, Node: Process control, Next: Delaying, Prev: Modified command invocation, Up: Top + +23 Process control +****************** + +* Menu: + +* kill invocation:: Sending a signal to processes. + + +File: coreutils.info, Node: kill invocation, Up: Process control + +23.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]... + + 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. 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: Delaying, Next: Numeric operations, Prev: Process control, Up: Top + +24 Delaying +*********** + +* Menu: + +* sleep invocation:: Delay for a specified time. + + +File: coreutils.info, Node: sleep invocation, Up: Delaying + +24.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 number followed by an optional unit; the default +is seconds. The units are: + +`s' + seconds + +`m' + minutes + +`h' + hours + +`d' + days + + Historical implementations of `sleep' have required that NUMBER be +an integer, and only accepted a single argument without a suffix. +However, GNU `sleep' accepts arbitrary floating point numbers (using a +period before any fractional digits). + + 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: Numeric operations, Next: File permissions, Prev: Delaying, Up: Top + +25 Numeric operations +********************* + +These programs do numerically-related operations. + +* Menu: + +* factor invocation:: Show factors of numbers. +* seq invocation:: Print sequences of numbers. + + +File: coreutils.info, Node: factor invocation, Next: seq invocation, Up: Numeric operations + +25.1 `factor': Print prime factors +================================== + +`factor' prints prime factors. Synopses: + + factor [NUMBER]... + factor OPTION + + If no NUMBER is specified on the command line, `factor' reads +numbers from standard input, delimited by newlines, tabs, or spaces. + + The only options are `--help' and `--version'. *Note Common +options::. + + The algorithm it uses is not very sophisticated, so for some inputs +`factor' runs for a long time. The hardest numbers to factor are the +products of large primes. Factoring the product of the two largest +32-bit prime numbers takes about 80 seconds of CPU time on a 1.6 GHz +Athlon. + + $ p=`echo '4294967279 * 4294967291'|bc` + $ factor $p + 18446743979220271189: 4294967279 4294967291 + + Similarly, it takes about 80 seconds for GNU factor (from +coreutils-5.1.2) to "factor" the largest 64-bit prime: + + $ factor 18446744073709551557 + 18446744073709551557: 18446744073709551557 + + In contrast, `factor' factors the largest 64-bit number in just over +a tenth of a second: + + $ factor `echo '2^64-1'|bc` + 18446744073709551615: 3 5 17 257 641 65537 6700417 + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: seq invocation, Prev: factor invocation, Up: Numeric operations + +25.2 `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. Floating-point numbers may be specified +(using a period before any fractional digits). + + 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, but a common case is +that `seq' works with integers through `2^64', and larger integers may +not be numerically correct: + + $ seq 18446744073709551616 1 18446744073709551618 + 18446744073709551616 + 18446744073709551616 + 18446744073709551618 + + Be careful when using `seq' with a fractional INCREMENT; otherwise +you may see surprising results. Most people would expect to see +`0.000003' printed as the last number in this example: + + $ seq -s ' ' 0 0.000001 0.000003 + 0.000000 0.000001 0.000002 + + But that doesn't happen on many systems because `seq' is implemented +using binary floating point arithmetic (via the C `long double' +type)--which means decimal fractions like `0.000001' cannot be +represented exactly. That in turn means some nonintuitive conditions +like `0.000001 * 3 > 0.000003' will end up being true. + + To work around that in the above example, use a slightly larger +number as the LAST value: + + $ seq -s ' ' 0 0.000001 0.0000031 + 0.000000 0.000001 0.000002 0.000003 + + In general, when using an INCREMENT with a fractional part, where +(LAST - FIRST) / INCREMENT is (mathematically) a whole number, specify +a slightly larger (or smaller, if INCREMENT is negative) value for LAST +to ensure that LAST is the final value printed by seq. + + An exit status of zero indicates success, and a nonzero value +indicates failure. + + +File: coreutils.info, Node: File permissions, Next: Date input formats, Prev: Numeric operations, Up: Top + +26 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. +* 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 + +26.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: + + 1. Set the process's effective user ID to that of the file upon + execution (called the "set-user-ID bit", or sometimes the "setuid + bit"). 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. + + 2. Set the process's effective group ID to that of the file upon + execution (called the "set-group-ID bit", or sometimes the "setgid + bit"). 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. + + 3. Prevent unprivileged users from removing or renaming a file in a + directory unless they own the file or the directory; this is + called the "restricted deletion flag" for the directory, and 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; + this is called the "sticky bit". + + 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 + +26.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 + +26.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 + +26.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 + +26.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 + +26.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 + +26.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 + +26.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: Directory Setuid and Setgid, Prev: Symbolic Modes, Up: File permissions + +26.3 Numeric Modes +================== + +As an alternative to giving a symbolic mode, you can give an octal +(base 8) number that represents the mode. This number is 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'. + + 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. (As +discussed in the next section, the set-user-ID and set-group-ID bits of +directories are an exception to this general limitation.) + + 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, which are represented as one octal digit. 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 lowest valued bit: + + Value in Corresponding + Mode Mode Bit + + Other users not in the file's group: + 1 Execute/search + 2 Write + 4 Read + + Other users in the file's group: + 10 Execute/search + 20 Write + 40 Read + + The file's owner: + 100 Execute/search + 200 Write + 400 Read + + Special mode bits: + 1000 Restricted deletion flag or sticky bit + 2000 Set group ID on execution + 4000 Set user ID on execution + + For example, numeric mode `4755' corresponds to symbolic mode +`u=rwxs,go=rx', and numeric mode `664' corresponds to symbolic mode +`ug=rw,o=r'. Numeric mode `0' corresponds to symbolic mode `a='. + + +File: coreutils.info, Node: Directory Setuid and Setgid, Prev: Numeric Modes, Up: File permissions + +26.4 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 sets them in a numeric mode. 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 H + chmod 6755 G + chmod u=rwx,go=rx,a+s H + mkdir -m 6755 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, e.g.: + + # This command tries to clear the set-user-ID + # and set-group-ID bits of the directory D. + chmod a-s 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. + + +File: coreutils.info, Node: Date input formats, Next: Opening the software toolbox, Prev: File permissions, Up: Top + +27 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 `get_date' +function) is not described here. + +* Menu: + +* General date syntax:: Common rules. +* Calendar date items:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: EST, PDT, GMT. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al. + + +File: coreutils.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats + +27.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 + + * 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 + Mon Mar 1 00:21:42 UTC 2004 + $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' + 2004-03-01 00:21:42Z + $ date --iso-8601=ns | tr T ' ' # --iso-8601 is a GNU extension. + 2004-02-29 16:21:42,692722128-0800 + $ date --rfc-2822 # a GNU extension + Sun, 29 Feb 2004 16:21:42 -0800 + $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. + 2004-02-29 16:21:42 -0800 + $ date +'@%s.%N' # %s and %N are GNU extensions. + @1078100502.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 `2005-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 + +27.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: + + 1972-09-24 # ISO 8601. + 72-9-24 # Assume 19xx for 69 through 99, + # 20xx for 00 through 68. + 72-09-24 # Leading zeros are ignored. + 9/24/72 # Common U.S. writing. + 24 September 1972 + 24 Sept 72 # September has a special abbreviation. + 24 Sep 72 # Three-letter abbreviations always allowed. + Sep 24, 1972 + 24-sep-72 + 24sep72 + + The year can also be omitted. In this case, the last specified year +is used, or the current year if none. For example: + + 9/24 + sep 24 + + 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 + +27.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. 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). The MINUTE part of +the time of day may not be elided when a time zone correction is used. +This is the best way to specify a time zone correction by fractional +parts of an hour. + + Either `am'/`pm' or a time zone correction may be specified, but not +both. + + +File: coreutils.info, Node: Time zone items, Next: Day of week items, Prev: Time of day items, Up: Date input formats + +27.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. 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, +time stamps are interpreted using the rules of the default time zone +(*note Specifying time zone rules::). + + +File: coreutils.info, Node: Day of week items, Next: Relative items in date strings, Prev: Time zone items, Up: Date input formats + +27.5 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 + +27.6 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, `2003-07-31 -1 month' might evaluate to 2003-07-01, because +2003-06-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 Jul 2003 13:02:39 -0700 + $ date --date='-1 month' +'Last month was %B?' + Last month was July? + $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' + Last month was June! + + 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 + +27.7 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 + +27.8 Seconds since the Epoch +============================ + +If you precede a number with `@', it represents an internal time stamp +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 time stamp. + + 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. + + Traditional Unix 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. More modern systems use 64-bit counts of +seconds with nanosecond subcounts, and can represent all the times in +the known lifetime of the universe to a resolution of 1 nanosecond. + + On most hosts, these counts ignore the presence of leap seconds. +For example, on most hosts `@915148799' represents 1998-12-31 23:59:59 +UTC, `@915148800' represents 1999-01-01 00:00:00 UTC, and there is no +way to represent the intervening leap second 1998-12-31 23:59:60 UTC. + + +File: coreutils.info, Node: Specifying time zone rules, Next: Authors of get_date, Prev: Seconds since the Epoch, Up: Date input formats + +27.9 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, 2004?" 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" 2004-10-31 06:30' + Sun Oct 31 01:30:00 EDT 2004 + + 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 `2004-10-31 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 2004, 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 (http://www.twinsun.com/tz/tz-link.htm). A recent catalog of +location names appears in the TWiki Date and Time Gateway +(http://twiki.org/cgi-bin/xtra/tzdate). 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 +`Arctic/Longyearbyen' to `Antarctica/South_Pole', 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. Simple POSIX rules like `UTC0' specify a time zone +without daylight saving time; other rules can specify simple daylight +saving regimes. *Note Specifying the Time Zone with `TZ': (libc)TZ +Variable. + + +File: coreutils.info, Node: Authors of get_date, Prev: Specifying time zone rules, Up: Date input formats + +27.10 Authors of `get_date' +=========================== + +`get_date' was 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. + + This chapter was originally produced by Franc,ois Pinard +(<pinard@iro.umontreal.ca>) from the `getdate.y' source code, and then +edited by K. Berry (<kb@cs.umb.edu>). + + +File: coreutils.info, Node: Opening the software toolbox, Next: Copying This Manual, Prev: Date input formats, Up: Top + +28 Opening the Software Toolbox +******************************* + +An earlier version of this chapter appeared in 2 (June 1994). 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 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 disk 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. This helps us +avoid 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/dict/words'. On my +GNU/Linux system,(1) this is a is a sorted, 45,402 word dictionary. + + 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. + + $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | + > tr -s ' ' '\n' | sort -u | + > comm -23 - /usr/dict/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. + + As of this writing, all the programs we've discussed are available +via anonymous `ftp' from: +`ftp://gnudist.gnu.org/textutils/textutils-1.22.tar.gz'. (There may be +more recent versions available now.) + + 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 (http://cm.bell-labs.com/who/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. + + ---------- Footnotes ---------- + + (1) Redhat Linux 6.1, for the November 2000 revision of this article. + + +File: coreutils.info, Node: Copying This Manual, Next: Index, Prev: Opening the software toolbox, Up: Top + +Appendix A Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual. + + +File: coreutils.info, Node: GNU Free Documentation License, Up: Copying This Manual + +A.1 GNU Free Documentation License +================================== + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + + 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. + + 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 for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 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 + `http://www.gnu.org/copyleft/'. + + 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. + +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.2 + 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: Index, Prev: Copying This Manual, Up: Top + +Index +***** + + +* Menu: + +* !: Connectives for test. + (line 9) +* !=: String tests. (line 25) +* %: Numeric expressions. (line 15) +* %b: printf invocation. (line 32) +* &: Relations for expr. (line 17) +* *: Numeric expressions. (line 15) +* + <1>: Numeric expressions. (line 11) +* +: String expressions. (line 53) +* +PAGE_RANGE: pr invocation. (line 60) +* - <1>: su invocation. (line 53) +* - <2>: env invocation. (line 45) +* -: Numeric expressions. (line 11) +* - and Unix rm: rm invocation. (line 110) +* -, removing files beginning with: rm invocation. (line 98) +* --: Common options. (line 36) +* --across: pr invocation. (line 84) +* --address-radix: od invocation. (line 36) +* --adjustment: nice invocation. (line 44) +* --all <1>: uname invocation. (line 30) +* --all <2>: who invocation. (line 36) +* --all <3>: stty invocation. (line 26) +* --all <4>: du invocation. (line 21) +* --all <5>: df invocation. (line 32) +* --all <6>: Which files are listed. + (line 13) +* --all: unexpand invocation. (line 37) +* --all-repeated: uniq invocation. (line 69) +* --almost-all: Which files are listed. + (line 17) +* --apparent-size: du invocation. (line 24) +* --append: tee invocation. (line 25) +* --archive: cp invocation. (line 54) +* --author: What information is listed. + (line 10) +* --backup <1>: ln invocation. (line 55) +* --backup <2>: mv invocation. (line 50) +* --backup <3>: install invocation. (line 40) +* --backup <4>: cp invocation. (line 61) +* --backup: Backup options. (line 13) +* --before: tac invocation. (line 21) +* --binary: md5sum invocation. (line 38) +* --block-size <1>: du invocation. (line 45) +* --block-size <2>: df invocation. (line 38) +* --block-size: Block size. (line 138) +* --block-size=SIZE: Block size. (line 12) +* --body-numbering: nl invocation. (line 47) +* --boot: who invocation. (line 40) +* --bourne-shell: dircolors invocation. + (line 27) +* --buffer-size: sort invocation. (line 237) +* --bytes <1>: du invocation. (line 41) +* --bytes <2>: cut invocation. (line 26) +* --bytes <3>: wc invocation. (line 41) +* --bytes <4>: split invocation. (line 37) +* --bytes <5>: tail invocation. (line 36) +* --bytes <6>: head invocation. (line 24) +* --bytes: fold invocation. (line 23) +* --c-shell: dircolors invocation. + (line 33) +* --canonicalize: readlink invocation. (line 29) +* --canonicalize-existing: readlink invocation. (line 35) +* --canonicalize-missing: readlink invocation. (line 41) +* --changes <1>: chmod invocation. (line 39) +* --changes <2>: chgrp invocation. (line 20) +* --changes: chown invocation. (line 70) +* --characters: cut invocation. (line 34) +* --chars: wc invocation. (line 45) +* --check: sort invocation. (line 18) +* --check-chars: uniq invocation. (line 103) +* --classify: General output formatting. + (line 36) +* --color: General output formatting. + (line 21) +* --columns: pr invocation. (line 70) +* --command: su invocation. (line 39) +* --complement: cut invocation. (line 71) +* --count <1>: who invocation. (line 55) +* --count: uniq invocation. (line 55) +* --count-links: du invocation. (line 91) +* --crown-margin: fmt invocation. (line 34) +* --csh: dircolors invocation. + (line 33) +* --date <1>: Options for date. (line 11) +* --date: touch invocation. (line 58) +* --dead: who invocation. (line 44) +* --decode: base64 invocation. (line 29) +* --delimiter: cut invocation. (line 51) +* --delimiters: paste invocation. (line 43) +* --dereference <1>: stat invocation. (line 17) +* --dereference <2>: du invocation. (line 96) +* --dereference <3>: chgrp invocation. (line 30) +* --dereference <4>: chown invocation. (line 103) +* --dereference <5>: cp invocation. (line 125) +* --dereference: Which files are listed. + (line 83) +* --dereference-args: du invocation. (line 56) +* --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 85) +* --digits: csplit invocation. (line 80) +* --directory <1>: ln invocation. (line 61) +* --directory <2>: install invocation. (line 48) +* --directory: Which files are listed. + (line 28) +* --dired: What information is listed. + (line 16) +* --double-space: pr invocation. (line 96) +* --echo: shuf invocation. (line 19) +* --elide-empty-files: csplit invocation. (line 89) +* --escape: Formatting the file names. + (line 11) +* --exact: shred invocation. (line 133) +* --exclude-from=FILE: du invocation. (line 201) +* --exclude-type: df invocation. (line 138) +* --exclude=PATTERN: du invocation. (line 195) +* --expand-tabs: pr invocation. (line 120) +* --fast: su invocation. (line 44) +* --field-separator: sort invocation. (line 253) +* --fields: cut invocation. (line 44) +* --file <1>: Options for date. (line 22) +* --file: stty invocation. (line 31) +* --file-system: stat invocation. (line 23) +* --file-type: General output formatting. + (line 47) +* --files0-from=FILE <1>: du invocation. (line 62) +* --files0-from=FILE: wc invocation. (line 60) +* --first-line-number: pr invocation. (line 198) +* --follow: tail invocation. (line 41) +* --footer-numbering: nl invocation. (line 75) +* --force <1>: ln invocation. (line 67) +* --force <2>: shred invocation. (line 101) +* --force <3>: rm invocation. (line 35) +* --force <4>: mv invocation. (line 55) +* --force: cp invocation. (line 96) +* --form-feed: pr invocation. (line 128) +* --format <1>: General output formatting. + (line 10) +* --format <2>: What information is listed. + (line 130) +* --format: od invocation. (line 76) +* --format=FORMAT <1>: seq invocation. (line 24) +* --format=FORMAT: stat invocation. (line 28) +* --from: chown invocation. (line 80) +* --full-time: What information is listed. + (line 100) +* --general-numeric-sort: sort invocation. (line 98) +* --group <1>: id invocation. (line 23) +* --group: install invocation. (line 54) +* --group-directories-first: Which files are listed. + (line 50) +* --groups: id invocation. (line 27) +* --hardware-platform: uname invocation. (line 35) +* --head-lines: shuf invocation. (line 32) +* --header: pr invocation. (line 134) +* --header-numbering: nl invocation. (line 79) +* --heading: who invocation. (line 48) +* --help: Common options. (line 29) +* --hide-control-chars: Formatting the file names. + (line 23) +* --hide=PATTERN: Which files are listed. + (line 56) +* --human-readable <1>: du invocation. (line 75) +* --human-readable <2>: df invocation. (line 43) +* --human-readable <3>: What information is listed. + (line 116) +* --human-readable: Block size. (line 138) +* --ignore-backups: Which files are listed. + (line 23) +* --ignore-case <1>: join invocation. (line 69) +* --ignore-case <2>: uniq invocation. (line 59) +* --ignore-case: sort invocation. (line 92) +* --ignore-environment: env invocation. (line 45) +* --ignore-fail-on-non-empty: rmdir invocation. (line 17) +* --ignore-garbage: base64 invocation. (line 35) +* --ignore-interrupts: tee invocation. (line 30) +* --ignore-leading-blanks: sort invocation. (line 79) +* --ignore-nonprinting: sort invocation. (line 125) +* --ignore=PATTERN: Which files are listed. + (line 69) +* --indent: pr invocation. (line 204) +* --indicator-style: General output formatting. + (line 36) +* --initial: expand invocation. (line 34) +* --inode: What information is listed. + (line 122) +* --inodes: df invocation. (line 52) +* --input-range: shuf invocation. (line 23) +* --interactive <1>: ln invocation. (line 71) +* --interactive <2>: rm invocation. (line 50) +* --interactive <3>: mv invocation. (line 59) +* --interactive: cp invocation. (line 116) +* --iterations=NUMBER: shred invocation. (line 106) +* --join-blank-lines: nl invocation. (line 87) +* --join-lines: pr invocation. (line 147) +* --keep-files: csplit invocation. (line 85) +* --kernel-name: uname invocation. (line 65) +* --kernel-release: uname invocation. (line 61) +* --kernel-version: uname invocation. (line 76) +* --key: sort invocation. (line 193) +* --length: pr invocation. (line 156) +* --line-bytes: split invocation. (line 43) +* --lines <1>: wc invocation. (line 53) +* --lines <2>: split invocation. (line 30) +* --lines <3>: tail invocation. (line 130) +* --lines: head invocation. (line 30) +* --link: cp invocation. (line 121) +* --literal: Formatting the file names. + (line 17) +* --local: df invocation. (line 63) +* --login <1>: su invocation. (line 53) +* --login: who invocation. (line 68) +* --lookup: who invocation. (line 73) +* --machine: uname invocation. (line 41) +* --max-depth=DEPTH: du invocation. (line 111) +* --max-line-length: wc invocation. (line 57) +* --max-unchanged-stats: tail invocation. (line 118) +* --merge <1>: sort invocation. (line 32) +* --merge: pr invocation. (line 164) +* --mesg: who invocation. (line 86) +* --message: who invocation. (line 86) +* --mode <1>: mknod invocation. (line 43) +* --mode <2>: mkfifo invocation. (line 21) +* --mode <3>: mkdir invocation. (line 19) +* --mode: install invocation. (line 60) +* --month-sort: sort invocation. (line 131) +* --name: id invocation. (line 31) +* --no-create: touch invocation. (line 54) +* --no-dereference <1>: du invocation. (line 107) +* --no-dereference <2>: chgrp invocation. (line 35) +* --no-dereference <3>: chown invocation. (line 108) +* --no-dereference <4>: ln invocation. (line 75) +* --no-dereference: cp invocation. (line 129) +* --no-file-warnings: pr invocation. (line 211) +* --no-group: What information is listed. + (line 110) +* --no-newline: readlink invocation. (line 46) +* --no-preserve-root <1>: chmod invocation. (line 54) +* --no-preserve-root <2>: chgrp invocation. (line 48) +* --no-preserve-root <3>: chown invocation. (line 121) +* --no-preserve-root: rm invocation. (line 84) +* --no-renumber: nl invocation. (line 108) +* --no-sync: df invocation. (line 67) +* --no-target-directory <1>: ln invocation. (line 109) +* --no-target-directory <2>: mv invocation. (line 103) +* --no-target-directory <3>: install invocation. (line 101) +* --no-target-directory <4>: cp invocation. (line 272) +* --no-target-directory: Target directory. (line 15) +* --nodename: uname invocation. (line 46) +* --null: du invocation. (line 117) +* --number: cat invocation. (line 31) +* --number-format: nl invocation. (line 95) +* --number-lines: pr invocation. (line 177) +* --number-nonblank: cat invocation. (line 20) +* --number-separator: nl invocation. (line 112) +* --number-width: nl invocation. (line 122) +* --numeric-sort: sort invocation. (line 140) +* --numeric-suffixes: split invocation. (line 51) +* --numeric-uid-gid: What information is listed. + (line 232) +* --omit-header: pr invocation. (line 235) +* --omit-pagination: pr invocation. (line 246) +* --one-file-system <1>: du invocation. (line 191) +* --one-file-system <2>: rm invocation. (line 63) +* --one-file-system: cp invocation. (line 291) +* --only-delimited: cut invocation. (line 59) +* --operating-system: uname invocation. (line 57) +* --output <1>: shuf invocation. (line 37) +* --output: sort invocation. (line 213) +* --output-delimiter: cut invocation. (line 64) +* --output-duplicates: od invocation. (line 146) +* --output-tabs: pr invocation. (line 140) +* --owner: install invocation. (line 72) +* --page-increment: nl invocation. (line 83) +* --page_width: pr invocation. (line 264) +* --pages=PAGE_RANGE: pr invocation. (line 60) +* --parents <1>: rmdir invocation. (line 22) +* --parents <2>: mkdir invocation. (line 34) +* --parents: cp invocation. (line 177) +* --pid: tail invocation. (line 98) +* --portability <1>: pathchk invocation. (line 46) +* --portability: df invocation. (line 74) +* --prefix: csplit invocation. (line 62) +* --preserve: cp invocation. (line 134) +* --preserve-environment: su invocation. (line 64) +* --preserve-root <1>: chmod invocation. (line 49) +* --preserve-root <2>: chgrp invocation. (line 43) +* --preserve-root <3>: chown invocation. (line 116) +* --preserve-root: rm invocation. (line 79) +* --preserve-timestamps: install invocation. (line 78) +* --print-database: dircolors invocation. + (line 38) +* --print-type: df invocation. (line 113) +* --printf=FORMAT: stat invocation. (line 37) +* --processor: uname invocation. (line 50) +* --quiet <1>: tty invocation. (line 18) +* --quiet <2>: chmod invocation. (line 45) +* --quiet <3>: chgrp invocation. (line 26) +* --quiet <4>: chown invocation. (line 76) +* --quiet <5>: readlink invocation. (line 52) +* --quiet <6>: csplit invocation. (line 100) +* --quiet <7>: tail invocation. (line 135) +* --quiet: head invocation. (line 36) +* --quote-name: Formatting the file names. + (line 30) +* --quoting-style: Formatting the file names. + (line 11) +* --random-sort: sort invocation. (line 162) +* --random-source <1>: shred invocation. (line 112) +* --random-source <2>: shuf invocation. (line 43) +* --random-source: sort invocation. (line 226) +* --read-bytes: od invocation. (line 63) +* --real: id invocation. (line 36) +* --recursive <1>: chmod invocation. (line 69) +* --recursive <2>: chgrp invocation. (line 66) +* --recursive <3>: chown invocation. (line 140) +* --recursive <4>: rm invocation. (line 91) +* --recursive <5>: cp invocation. (line 200) +* --recursive: Which files are listed. + (line 90) +* --reference <1>: Options for date. (line 30) +* --reference <2>: touch invocation. (line 77) +* --reference <3>: chmod invocation. (line 62) +* --reference <4>: chgrp invocation. (line 52) +* --reference: chown invocation. (line 125) +* --regex: tac invocation. (line 26) +* --remove: shred invocation. (line 123) +* --remove-destination: cp invocation. (line 212) +* --repeated: uniq invocation. (line 63) +* --reply <1>: mv invocation. (line 64) +* --reply: cp invocation. (line 188) +* --retry: tail invocation. (line 84) +* --reverse <1>: Sorting the output. (line 27) +* --reverse: sort invocation. (line 157) +* --rfc-2822: Options for date. (line 36) +* --rfc-3339=TIMESPEC: Options for date. (line 48) +* --rfc-822: Options for date. (line 36) +* --save: stty invocation. (line 41) +* --section-delimiter: nl invocation. (line 68) +* --sep-string: pr invocation. (line 225) +* --separate-dirs: du invocation. (line 134) +* --separator <1>: pr invocation. (line 216) +* --separator: tac invocation. (line 33) +* --serial: paste invocation. (line 34) +* --set: Options for date. (line 78) +* --sh: dircolors invocation. + (line 27) +* --shell: su invocation. (line 75) +* --show-all: cat invocation. (line 16) +* --show-control-chars <1>: Formatting the file names. + (line 78) +* --show-control-chars: pr invocation. (line 90) +* --show-ends: cat invocation. (line 27) +* --show-nonprinting <1>: pr invocation. (line 251) +* --show-nonprinting: cat invocation. (line 49) +* --show-tabs: cat invocation. (line 42) +* --si <1>: du invocation. (line 123) +* --si <2>: df invocation. (line 93) +* --si <3>: What information is listed. + (line 258) +* --si: Block size. (line 138) +* --silent <1>: tty invocation. (line 18) +* --silent <2>: chmod invocation. (line 45) +* --silent <3>: chgrp invocation. (line 26) +* --silent <4>: chown invocation. (line 76) +* --silent <5>: readlink invocation. (line 52) +* --silent <6>: csplit invocation. (line 100) +* --silent <7>: tail invocation. (line 135) +* --silent: head invocation. (line 36) +* --size: What information is listed. + (line 242) +* --size=BYTES: shred invocation. (line 117) +* --skip-bytes: od invocation. (line 55) +* --skip-chars: uniq invocation. (line 41) +* --skip-fields: uniq invocation. (line 31) +* --sleep-interval: tail invocation. (line 90) +* --sort: Sorting the output. (line 32) +* --spaces: fold invocation. (line 29) +* --sparse=WHEN: cp invocation. (line 216) +* --split-only: fmt invocation. (line 47) +* --squeeze-blank: cat invocation. (line 35) +* --stable: sort invocation. (line 231) +* --starting-line-number: nl invocation. (line 117) +* --status: md5sum invocation. (line 69) +* --strings: od invocation. (line 68) +* --strip: install invocation. (line 88) +* --strip-trailing-slashes <1>: mv invocation. (line 89) +* --strip-trailing-slashes: cp invocation. (line 250) +* --suffix <1>: ln invocation. (line 100) +* --suffix <2>: mv invocation. (line 94) +* --suffix <3>: install invocation. (line 92) +* --suffix <4>: cp invocation. (line 263) +* --suffix <5>: csplit invocation. (line 66) +* --suffix: Backup options. (line 50) +* --suffix-length: split invocation. (line 26) +* --summarize: du invocation. (line 130) +* --symbolic: ln invocation. (line 94) +* --symbolic-link: cp invocation. (line 255) +* --sync: df invocation. (line 100) +* --sysv: sum invocation. (line 31) +* --tabs <1>: unexpand invocation. (line 24) +* --tabs: expand invocation. (line 22) +* --tabsize: General output formatting. + (line 92) +* --tagged-paragraph: fmt invocation. (line 40) +* --target-directory <1>: ln invocation. (line 105) +* --target-directory <2>: mv invocation. (line 99) +* --target-directory <3>: install invocation. (line 97) +* --target-directory <4>: cp invocation. (line 268) +* --target-directory: Target directory. (line 31) +* --temporary-directory: sort invocation. (line 273) +* --terse: stat invocation. (line 48) +* --text: md5sum invocation. (line 79) +* --time <1>: du invocation. (line 138) +* --time <2>: touch invocation. (line 50) +* --time: Sorting the output. (line 13) +* --time-style <1>: du invocation. (line 153) +* --time-style: Formatting file timestamps. + (line 26) +* --total: du invocation. (line 50) +* --traditional: od invocation. (line 197) +* --type: df invocation. (line 107) +* --uniform-spacing: fmt invocation. (line 53) +* --unique <1>: uniq invocation. (line 98) +* --unique: sort invocation. (line 282) +* --universal: Options for date. (line 83) +* --unset: env invocation. (line 39) +* --update <1>: mv invocation. (line 76) +* --update: cp invocation. (line 277) +* --user: id invocation. (line 41) +* --utc: Options for date. (line 83) +* --verbose <1>: chmod invocation. (line 59) +* --verbose <2>: chgrp invocation. (line 58) +* --verbose <3>: chown invocation. (line 132) +* --verbose <4>: rmdir invocation. (line 31) +* --verbose <5>: readlink invocation. (line 56) +* --verbose <6>: mkdir invocation. (line 51) +* --verbose <7>: ln invocation. (line 114) +* --verbose <8>: shred invocation. (line 129) +* --verbose <9>: rm invocation. (line 95) +* --verbose <10>: mv invocation. (line 86) +* --verbose <11>: install invocation. (line 106) +* --verbose <12>: cp invocation. (line 287) +* --verbose <13>: split invocation. (line 54) +* --verbose <14>: tail invocation. (line 139) +* --verbose: head invocation. (line 40) +* --version: Common options. (line 33) +* --warn: md5sum invocation. (line 88) +* --width <1>: General output formatting. + (line 104) +* --width <2>: fold invocation. (line 35) +* --width <3>: pr invocation. (line 255) +* --width <4>: fmt invocation. (line 59) +* --width: od invocation. (line 153) +* --words: wc invocation. (line 49) +* --wrap: base64 invocation. (line 21) +* --writable: who invocation. (line 86) +* --zero: shred invocation. (line 143) +* --zero-terminated <1>: shuf invocation. (line 48) +* --zero-terminated: sort invocation. (line 296) +* -0: du invocation. (line 116) +* -1 <1>: General output formatting. + (line 10) +* -1 <2>: join invocation. (line 74) +* -1: comm invocation. (line 23) +* -2 <1>: join invocation. (line 77) +* -2: comm invocation. (line 23) +* -3: comm invocation. (line 23) +* -a <1>: uname invocation. (line 30) +* -a <2>: who invocation. (line 36) +* -a <3>: stty invocation. (line 26) +* -a <4>: tee invocation. (line 25) +* -a <5>: Connectives for test. + (line 12) +* -a <6>: du invocation. (line 21) +* -a <7>: df invocation. (line 32) +* -a <8>: touch invocation. (line 50) +* -a: cp invocation. (line 54) +* -A: Which files are listed. + (line 17) +* -a <1>: Which files are listed. + (line 13) +* -a <2>: unexpand invocation. (line 37) +* -a <3>: join invocation. (line 60) +* -a <4>: split invocation. (line 26) +* -a <5>: pr invocation. (line 84) +* -a: od invocation. (line 166) +* -A <1>: od invocation. (line 36) +* -A: cat invocation. (line 16) +* -b <1>: who invocation. (line 40) +* -b: File type tests. (line 10) +* -B: du invocation. (line 45) +* -b: du invocation. (line 41) +* -B: df invocation. (line 38) +* -b <1>: ln invocation. (line 55) +* -b <2>: mv invocation. (line 50) +* -b <3>: install invocation. (line 40) +* -b <4>: cp invocation. (line 61) +* -b <5>: dircolors invocation. + (line 27) +* -b: Formatting the file names. + (line 11) +* -B: Which files are listed. + (line 23) +* -b <1>: cut invocation. (line 26) +* -b <2>: sort invocation. (line 79) +* -b <3>: md5sum invocation. (line 38) +* -b <4>: csplit invocation. (line 66) +* -b <5>: split invocation. (line 37) +* -b <6>: fold invocation. (line 23) +* -b <7>: od invocation. (line 169) +* -b <8>: nl invocation. (line 47) +* -b <9>: tac invocation. (line 21) +* -b <10>: cat invocation. (line 20) +* -b: Backup options. (line 13) +* -c <1>: su invocation. (line 39) +* -c <2>: File type tests. (line 13) +* -c <3>: stat invocation. (line 28) +* -c <4>: du invocation. (line 50) +* -c <5>: touch invocation. (line 54) +* -c <6>: chmod invocation. (line 39) +* -c <7>: chgrp invocation. (line 20) +* -c <8>: chown invocation. (line 70) +* -c <9>: install invocation. (line 44) +* -c: dircolors invocation. + (line 33) +* -C: General output formatting. + (line 15) +* -c <1>: Sorting the output. (line 13) +* -c <2>: cut invocation. (line 34) +* -c <3>: uniq invocation. (line 55) +* -c <4>: shuf invocation. (line 19) +* -c <5>: sort invocation. (line 18) +* -c: wc invocation. (line 41) +* -C: split invocation. (line 43) +* -c <1>: tail invocation. (line 36) +* -c <2>: head invocation. (line 24) +* -c <3>: pr invocation. (line 90) +* -c <4>: fmt invocation. (line 34) +* -c: od invocation. (line 172) +* -COLUMN: pr invocation. (line 70) +* -d <1>: Options for date. (line 11) +* -d <2>: who invocation. (line 44) +* -d: File type tests. (line 16) +* -D: du invocation. (line 56) +* -d <1>: touch invocation. (line 58) +* -d <2>: ln invocation. (line 61) +* -d <3>: install invocation. (line 48) +* -d: cp invocation. (line 89) +* -D: What information is listed. + (line 16) +* -d <1>: Which files are listed. + (line 28) +* -d <2>: paste invocation. (line 43) +* -d: cut invocation. (line 51) +* -D: uniq invocation. (line 69) +* -d <1>: uniq invocation. (line 63) +* -d <2>: sort invocation. (line 85) +* -d <3>: split invocation. (line 51) +* -d <4>: pr invocation. (line 96) +* -d <5>: base64 invocation. (line 29) +* -d <6>: od invocation. (line 176) +* -d: nl invocation. (line 68) +* -e: File characteristic tests. + (line 9) +* -E: echo invocation. (line 63) +* -e <1>: echo invocation. (line 20) +* -e <2>: readlink invocation. (line 35) +* -e <3>: join invocation. (line 64) +* -e: pr invocation. (line 120) +* -E: cat invocation. (line 27) +* -e: cat invocation. (line 23) +* -ef: File characteristic tests. + (line 23) +* -eq: Numeric tests. (line 16) +* -f <1>: su invocation. (line 44) +* -f: Options for date. (line 22) +* -F: stty invocation. (line 31) +* -f <1>: File type tests. (line 19) +* -f <2>: stat invocation. (line 23) +* -f <3>: touch invocation. (line 68) +* -f <4>: chmod invocation. (line 45) +* -f <5>: chgrp invocation. (line 26) +* -f <6>: chown invocation. (line 76) +* -f <7>: readlink invocation. (line 29) +* -f: ln invocation. (line 67) +* -F: ln invocation. (line 61) +* -f <1>: shred invocation. (line 101) +* -f <2>: rm invocation. (line 35) +* -f <3>: mv invocation. (line 55) +* -f: cp invocation. (line 96) +* -F: General output formatting. + (line 36) +* -f <1>: Sorting the output. (line 20) +* -f <2>: cut invocation. (line 44) +* -f <3>: uniq invocation. (line 31) +* -f <4>: sort invocation. (line 92) +* -f: csplit invocation. (line 62) +* -F: tail invocation. (line 79) +* -f <1>: tail invocation. (line 41) +* -f: pr invocation. (line 128) +* -F: pr invocation. (line 128) +* -f <1>: od invocation. (line 179) +* -f: nl invocation. (line 75) +* -f FORMAT: seq invocation. (line 24) +* -G: id invocation. (line 27) +* -g <1>: id invocation. (line 23) +* -g: stty invocation. (line 41) +* -G: Access permission tests. + (line 31) +* -g <1>: Access permission tests. + (line 9) +* -g: install invocation. (line 54) +* -G: What information is listed. + (line 110) +* -g <1>: What information is listed. + (line 105) +* -g: sort invocation. (line 98) +* -ge: Numeric tests. (line 16) +* -gt: Numeric tests. (line 16) +* -H: who invocation. (line 48) +* -h: File type tests. (line 23) +* -H: du invocation. (line 80) +* -h: du invocation. (line 75) +* -H: df invocation. (line 48) +* -h: df invocation. (line 43) +* -H: chgrp invocation. (line 70) +* -h: chgrp invocation. (line 35) +* -H: chown invocation. (line 143) +* -h: chown invocation. (line 108) +* -H: cp invocation. (line 109) +* -h: What information is listed. + (line 116) +* -H: Which files are listed. + (line 36) +* -h <1>: pr invocation. (line 134) +* -h: nl invocation. (line 79) +* -H: Traversing symlinks. (line 18) +* -h: Block size. (line 138) +* -i <1>: env invocation. (line 45) +* -i <2>: uname invocation. (line 35) +* -i <3>: tee invocation. (line 30) +* -i <4>: df invocation. (line 52) +* -i: ln invocation. (line 71) +* -I: rm invocation. (line 44) +* -i <1>: rm invocation. (line 39) +* -i <2>: mv invocation. (line 59) +* -i <3>: cp invocation. (line 116) +* -i: What information is listed. + (line 122) +* -I: Which files are listed. + (line 69) +* -i <1>: expand invocation. (line 34) +* -i <2>: join invocation. (line 69) +* -i <3>: uniq invocation. (line 59) +* -i <4>: shuf invocation. (line 23) +* -i <5>: sort invocation. (line 125) +* -i <6>: pr invocation. (line 140) +* -i <7>: base64 invocation. (line 35) +* -i <8>: od invocation. (line 182) +* -i: nl invocation. (line 83) +* -J: pr invocation. (line 147) +* -j: od invocation. (line 55) +* -k <1>: Access permission tests. + (line 12) +* -k <2>: du invocation. (line 85) +* -k <3>: df invocation. (line 57) +* -k <4>: General output formatting. + (line 72) +* -k <5>: sort invocation. (line 193) +* -k <6>: csplit invocation. (line 85) +* -k: Block size. (line 138) +* -l <1>: su invocation. (line 53) +* -l: who invocation. (line 68) +* -L <1>: File type tests. (line 23) +* -L <2>: stat invocation. (line 17) +* -L: du invocation. (line 96) +* -l <1>: du invocation. (line 91) +* -l: df invocation. (line 63) +* -L <1>: chgrp invocation. (line 75) +* -L <2>: chown invocation. (line 148) +* -L: cp invocation. (line 125) +* -l <1>: cp invocation. (line 121) +* -l: What information is listed. + (line 130) +* -L <1>: Which files are listed. + (line 83) +* -L: wc invocation. (line 57) +* -l <1>: wc invocation. (line 53) +* -l <2>: split invocation. (line 30) +* -l <3>: pr invocation. (line 156) +* -l <4>: od invocation. (line 185) +* -l: nl invocation. (line 87) +* -L: Traversing symlinks. (line 22) +* -le: Numeric tests. (line 16) +* -lt: Numeric tests. (line 16) +* -m <1>: su invocation. (line 64) +* -m <2>: uname invocation. (line 41) +* -m <3>: who invocation. (line 51) +* -m <4>: du invocation. (line 101) +* -m <5>: touch invocation. (line 73) +* -m <6>: readlink invocation. (line 41) +* -m <7>: mknod invocation. (line 43) +* -m <8>: mkfifo invocation. (line 21) +* -m <9>: mkdir invocation. (line 19) +* -m <10>: install invocation. (line 60) +* -m: General output formatting. + (line 78) +* -M: sort invocation. (line 131) +* -m <1>: sort invocation. (line 32) +* -m <2>: wc invocation. (line 45) +* -m: pr invocation. (line 164) +* -n <1>: nice invocation. (line 44) +* -n <2>: uname invocation. (line 46) +* -n <3>: id invocation. (line 31) +* -n <4>: String tests. (line 19) +* -n <5>: echo invocation. (line 17) +* -n <6>: readlink invocation. (line 46) +* -n: ln invocation. (line 75) +* -N: Formatting the file names. + (line 17) +* -n <1>: What information is listed. + (line 232) +* -n <2>: cut invocation. (line 55) +* -n <3>: shuf invocation. (line 32) +* -n <4>: sort invocation. (line 140) +* -n <5>: csplit invocation. (line 80) +* -n <6>: tail invocation. (line 130) +* -n: head invocation. (line 30) +* -N: pr invocation. (line 198) +* -n: pr invocation. (line 177) +* -N: od invocation. (line 63) +* -n <1>: nl invocation. (line 95) +* -n: cat invocation. (line 31) +* -n NUMBER: shred invocation. (line 106) +* -ne: Numeric tests. (line 16) +* -nt: File characteristic tests. + (line 15) +* -o <1>: uname invocation. (line 57) +* -o: Connectives for test. + (line 15) +* -O: Access permission tests. + (line 28) +* -o <1>: install invocation. (line 72) +* -o <2>: What information is listed. + (line 236) +* -o <3>: shuf invocation. (line 37) +* -o <4>: sort invocation. (line 213) +* -o <5>: pr invocation. (line 204) +* -o: od invocation. (line 188) +* -ot: File characteristic tests. + (line 19) +* -p <1>: su invocation. (line 64) +* -p: uname invocation. (line 50) +* -P: pathchk invocation. (line 42) +* -p <1>: pathchk invocation. (line 29) +* -p: File type tests. (line 28) +* -P <1>: du invocation. (line 107) +* -P <2>: df invocation. (line 74) +* -P <3>: chgrp invocation. (line 79) +* -P: chown invocation. (line 152) +* -p <1>: rmdir invocation. (line 22) +* -p <2>: mkdir invocation. (line 34) +* -p <3>: install invocation. (line 78) +* -p: cp invocation. (line 134) +* -P: cp invocation. (line 129) +* -p <1>: dircolors invocation. + (line 38) +* -p <2>: General output formatting. + (line 83) +* -p: nl invocation. (line 108) +* -P: Traversing symlinks. (line 26) +* -q <1>: who invocation. (line 55) +* -q: readlink invocation. (line 52) +* -Q: Formatting the file names. + (line 30) +* -q <1>: Formatting the file names. + (line 23) +* -q <2>: csplit invocation. (line 100) +* -q <3>: tail invocation. (line 135) +* -q: head invocation. (line 36) +* -r: uname invocation. (line 61) +* -R: Options for date. (line 36) +* -r <1>: Options for date. (line 30) +* -r <2>: id invocation. (line 36) +* -r <3>: Access permission tests. + (line 15) +* -r: touch invocation. (line 77) +* -R <1>: chmod invocation. (line 69) +* -R <2>: chgrp invocation. (line 66) +* -R <3>: chown invocation. (line 140) +* -R: rm invocation. (line 91) +* -r <1>: rm invocation. (line 91) +* -r: cp invocation. (line 200) +* -R: cp invocation. (line 200) +* -r: Sorting the output. (line 27) +* -R <1>: Which files are listed. + (line 90) +* -R: sort invocation. (line 162) +* -r <1>: sort invocation. (line 157) +* -r <2>: sum invocation. (line 25) +* -r <3>: pr invocation. (line 211) +* -r: tac invocation. (line 26) +* -s <1>: su invocation. (line 75) +* -s <2>: uname invocation. (line 65) +* -s <3>: Options for date. (line 78) +* -s <4>: who invocation. (line 59) +* -s <5>: tty invocation. (line 18) +* -s: File characteristic tests. + (line 12) +* -S <1>: File type tests. (line 31) +* -S: du invocation. (line 134) +* -s <1>: du invocation. (line 130) +* -s: readlink invocation. (line 52) +* -S: ln invocation. (line 100) +* -s: ln invocation. (line 94) +* -S <1>: mv invocation. (line 94) +* -S: install invocation. (line 92) +* -s: install invocation. (line 88) +* -S: cp invocation. (line 263) +* -s: cp invocation. (line 255) +* -S: Sorting the output. (line 32) +* -s <1>: What information is listed. + (line 242) +* -s <2>: paste invocation. (line 34) +* -s <3>: cut invocation. (line 59) +* -s: uniq invocation. (line 41) +* -S: sort invocation. (line 237) +* -s <1>: sort invocation. (line 231) +* -s <2>: sum invocation. (line 31) +* -s <3>: csplit invocation. (line 100) +* -s: fold invocation. (line 29) +* -S: pr invocation. (line 225) +* -s <1>: pr invocation. (line 216) +* -s <2>: fmt invocation. (line 47) +* -s: od invocation. (line 191) +* -S: od invocation. (line 68) +* -s <1>: nl invocation. (line 112) +* -s <2>: tac invocation. (line 33) +* -s: cat invocation. (line 35) +* -S: Backup options. (line 50) +* -s BYTES: shred invocation. (line 117) +* -su: su invocation. (line 25) +* -T: who invocation. (line 86) +* -t <1>: File type tests. (line 34) +* -t: stat invocation. (line 48) +* -T: df invocation. (line 113) +* -t: df invocation. (line 107) +* -T: ln invocation. (line 109) +* -t: ln invocation. (line 105) +* -T: mv invocation. (line 103) +* -t: mv invocation. (line 99) +* -T: install invocation. (line 101) +* -t: install invocation. (line 97) +* -T: cp invocation. (line 272) +* -t: cp invocation. (line 268) +* -T: General output formatting. + (line 92) +* -t <1>: Sorting the output. (line 36) +* -t <2>: unexpand invocation. (line 24) +* -t: expand invocation. (line 22) +* -T: sort invocation. (line 273) +* -t <1>: sort invocation. (line 253) +* -t: md5sum invocation. (line 79) +* -T: pr invocation. (line 246) +* -t <1>: pr invocation. (line 235) +* -t <2>: fmt invocation. (line 40) +* -t: od invocation. (line 76) +* -T: cat invocation. (line 42) +* -t: cat invocation. (line 38) +* -u <1>: env invocation. (line 39) +* -u <2>: Options for date. (line 83) +* -u <3>: who invocation. (line 62) +* -u <4>: id invocation. (line 41) +* -u <5>: Access permission tests. + (line 18) +* -u <6>: shred invocation. (line 123) +* -u <7>: mv invocation. (line 76) +* -u: cp invocation. (line 277) +* -U: Sorting the output. (line 49) +* -u <1>: Sorting the output. (line 42) +* -u <2>: uniq invocation. (line 98) +* -u <3>: sort invocation. (line 282) +* -u <4>: fmt invocation. (line 53) +* -u: cat invocation. (line 45) +* -v <1>: uname invocation. (line 76) +* -v <2>: chmod invocation. (line 59) +* -v <3>: chgrp invocation. (line 58) +* -v <4>: chown invocation. (line 132) +* -v <5>: rmdir invocation. (line 31) +* -v <6>: readlink invocation. (line 56) +* -v <7>: mkdir invocation. (line 51) +* -v <8>: ln invocation. (line 114) +* -v <9>: shred invocation. (line 129) +* -v <10>: rm invocation. (line 95) +* -v <11>: mv invocation. (line 86) +* -v <12>: install invocation. (line 106) +* -v <13>: cp invocation. (line 287) +* -v <14>: Sorting the output. (line 56) +* -v <15>: tail invocation. (line 139) +* -v <16>: head invocation. (line 40) +* -v <17>: pr invocation. (line 251) +* -v <18>: od invocation. (line 146) +* -v <19>: nl invocation. (line 117) +* -v: cat invocation. (line 49) +* -w <1>: who invocation. (line 86) +* -w <2>: Access permission tests. + (line 21) +* -w <3>: General output formatting. + (line 104) +* -w <4>: uniq invocation. (line 103) +* -w <5>: md5sum invocation. (line 88) +* -w <6>: wc invocation. (line 49) +* -w: fold invocation. (line 35) +* -W: pr invocation. (line 264) +* -w <1>: pr invocation. (line 255) +* -w <2>: fmt invocation. (line 59) +* -w <3>: base64 invocation. (line 21) +* -w <4>: od invocation. (line 153) +* -w: nl invocation. (line 122) +* -WIDTH: fmt invocation. (line 59) +* -x <1>: Access permission tests. + (line 24) +* -x <2>: du invocation. (line 191) +* -x <3>: df invocation. (line 138) +* -x <4>: shred invocation. (line 133) +* -x <5>: cp invocation. (line 291) +* -x: General output formatting. + (line 88) +* -X: Sorting the output. (line 63) +* -x: od invocation. (line 194) +* -X FILE: du invocation. (line 201) +* -z <1>: String tests. (line 15) +* -z <2>: shred invocation. (line 143) +* -z <3>: shuf invocation. (line 48) +* -z <4>: sort invocation. (line 296) +* -z: csplit invocation. (line 89) +* .cshrc: su invocation. (line 44) +* /: Numeric expressions. (line 15) +* /bin/sh: su invocation. (line 12) +* /etc/passwd: su invocation. (line 12) +* /etc/shells: su invocation. (line 64) +* 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) +* 384-bit checksum: sha2 utilities. (line 6) +* 4.2 file system type: df invocation. (line 125) +* 512-bit checksum: sha2 utilities. (line 6) +* <: Relations for expr. (line 22) +* <=: Relations for expr. (line 22) +* = <1>: Relations for expr. (line 22) +* =: String tests. (line 22) +* ==: Relations for expr. (line 22) +* >: Relations for expr. (line 22) +* >=: Relations for expr. (line 22) +* \( regexp operator: String expressions. (line 24) +* \+ regexp operator: String expressions. (line 28) +* \? regexp operator: String expressions. (line 28) +* \c: printf invocation. (line 23) +* \OOO: printf invocation. (line 57) +* \uhhhh: printf invocation. (line 62) +* \Uhhhhhhhh: printf invocation. (line 62) +* \xHH: printf invocation. (line 57) +* \| regexp operator: String expressions. (line 28) +* _POSIX2_VERSION <1>: touch invocation. (line 93) +* _POSIX2_VERSION <2>: uniq invocation. (line 46) +* _POSIX2_VERSION <3>: sort invocation. (line 328) +* _POSIX2_VERSION <4>: tail invocation. (line 150) +* _POSIX2_VERSION: Standards conformance. + (line 19) +* abbreviations for months: Calendar date items. (line 38) +* access permission tests: Access permission tests. + (line 6) +* access permissions, changing: chmod invocation. (line 6) +* access time: dd invocation. (line 171) +* access time, changing: touch invocation. (line 50) +* access time, printing or sorting files by: Sorting the output. + (line 42) +* access time, show the most recent: du invocation. (line 149) +* across columns: pr invocation. (line 84) +* across, listing files: General output formatting. + (line 88) +* adding permissions: Setting Permissions. (line 38) +* addition: Numeric expressions. (line 11) +* ago in date strings: Relative items in date strings. + (line 23) +* all repeated lines, outputting: uniq invocation. (line 69) +* alnum: Character sets. (line 91) +* alpha: Character sets. (line 94) +* alternate ebcdic, converting to: dd invocation. (line 67) +* always color option: General output formatting. + (line 27) +* always interactive option: rm invocation. (line 57) +* am i: who invocation. (line 21) +* am in date strings: Time of day items. (line 22) +* and operator <1>: Relations for expr. (line 17) +* and operator: Connectives for test. + (line 12) +* append: dd invocation. (line 141) +* appending to the output file: dd invocation. (line 141) +* appropriate privileges <1>: nice invocation. (line 6) +* appropriate privileges <2>: hostname invocation. (line 6) +* appropriate privileges <3>: Setting the time. (line 6) +* appropriate privileges: install invocation. (line 72) +* arbitrary date strings, parsing: Options for date. (line 11) +* arbitrary text, displaying: echo invocation. (line 6) +* arithmetic tests: Numeric tests. (line 6) +* ASCII dump of files: od invocation. (line 6) +* ascii, converting to: dd invocation. (line 59) +* atime, changing: touch invocation. (line 50) +* atime, printing or sorting files by: Sorting the output. (line 42) +* atime, show the most recent: du invocation. (line 149) +* attributes, file: Changing file attributes. + (line 6) +* authors of get_date: Authors of get_date. (line 6) +* auto color option: General output formatting. + (line 25) +* automounter file systems: df invocation. (line 32) +* b for block special file: mknod invocation. (line 26) +* background jobs, stopping at terminal write: Local. (line 41) +* backslash escapes <1>: echo invocation. (line 20) +* backslash escapes: Character sets. (line 14) +* 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 50) +* backups, making <1>: ln invocation. (line 55) +* backups, making <2>: mv invocation. (line 50) +* backups, making <3>: install invocation. (line 40) +* backups, making <4>: cp invocation. (line 61) +* backups, making: Backup options. (line 13) +* backups, making only: cp invocation. (line 42) +* base64: base64 invocation. (line 6) +* Base64 decoding: base64 invocation. (line 29) +* base64 encoding: base64 invocation. (line 6) +* basename: basename invocation. (line 6) +* baud rate, setting: Special. (line 43) +* beeping at input buffer full: Input. (line 56) +* beginning of time: Time conversion specifiers. + (line 41) +* beginning of time, for POSIX: Seconds since the Epoch. + (line 13) +* Bellovin, Steven M.: Authors of get_date. (line 6) +* Berets, Jim: Authors of get_date. (line 6) +* Berry, K. <1>: Authors of get_date. (line 14) +* Berry, K.: Introduction. (line 19) +* binary: dd invocation. (line 188) +* binary I/O: dd invocation. (line 188) +* binary input files: md5sum invocation. (line 38) +* blank: Character sets. (line 97) +* blank lines, numbering: nl invocation. (line 87) +* blanks, ignoring leading: sort invocation. (line 79) +* block (space-padding): dd invocation. (line 76) +* block size <1>: dd invocation. (line 33) +* block size: Block size. (line 6) +* block size of conversion: dd invocation. (line 38) +* block size of input: dd invocation. (line 25) +* block size of output: dd invocation. (line 29) +* block special check: File type tests. (line 10) +* block special files: mknod invocation. (line 11) +* block special files, creating: mknod invocation. (line 6) +* BLOCK_SIZE: Block size. (line 12) +* BLOCKSIZE: Block size. (line 12) +* body, numbering: nl invocation. (line 17) +* Bourne shell syntax for color setup: dircolors invocation. + (line 27) +* breaks, cause interrupts: Input. (line 10) +* breaks, ignoring: Input. (line 7) +* brkint: Input. (line 10) +* bs: dd invocation. (line 33) +* BSD sum: sum invocation. (line 25) +* BSD tail: tail invocation. (line 19) +* BSD touch compatibility: touch invocation. (line 68) +* bsN: Output. (line 55) +* bugs, reporting: Introduction. (line 12) +* built-in shell commands, conflicts with <1>: nice invocation. + (line 35) +* built-in shell commands, conflicts with <2>: pwd invocation. + (line 10) +* built-in shell commands, conflicts with: test invocation. (line 28) +* byte count: wc invocation. (line 6) +* byte-swapping: dd invocation. (line 95) +* c for character special file: mknod invocation. (line 29) +* C shell syntax for color setup: dircolors invocation. + (line 33) +* C-s/C-q flow control: Input. (line 38) +* calendar date item: Calendar date items. (line 6) +* case folding: sort invocation. (line 92) +* case translation: Local. (line 36) +* case, ignored in dates: General date syntax. (line 64) +* cat: cat invocation. (line 6) +* cbreak: Combination. (line 52) +* cbs: dd invocation. (line 38) +* CD-ROM file system type: df invocation. (line 129) +* cdfs file system type: df invocation. (line 129) +* change or print terminal settings: stty invocation. (line 6) +* changed files, verbosely describing: chgrp invocation. (line 20) +* changed owners, verbosely describing: chown invocation. (line 70) +* 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 <1>: chgrp invocation. (line 6) +* changing group ownership: chown invocation. (line 6) +* changing special mode bits: Changing Special Mode Bits. + (line 6) +* character classes: Character sets. (line 78) +* character count: wc invocation. (line 6) +* character size: Control. (line 19) +* 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) +* check file types: test invocation. (line 6) +* checking for sortedness: sort invocation. (line 18) +* 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, 384-bit: sha2 utilities. (line 6) +* checksum, 512-bit: sha2 utilities. (line 6) +* chgrp: chgrp invocation. (line 6) +* chmod: chmod invocation. (line 6) +* chown: chown invocation. (line 6) +* chroot: chroot invocation. (line 6) +* cksum: cksum invocation. (line 6) +* clocal: Control. (line 33) +* cntrl: Character sets. (line 100) +* color database, printing: dircolors invocation. + (line 38) +* color setup: dircolors invocation. + (line 6) +* color, distinguishing file types with: General output formatting. + (line 21) +* cols: Special. (line 27) +* column to wrap data after: base64 invocation. (line 21) +* COLUMNS: Special. (line 30) +* columns: Special. (line 27) +* COLUMNS: General output formatting. + (line 104) +* combination settings: Combination. (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 system context: System context. (line 6) +* commas, outputting between files: General output formatting. + (line 78) +* comments, in dates: General date syntax. (line 64) +* 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) +* concatenate and write files: cat invocation. (line 6) +* conditional executability: Conditional Executability. + (line 6) +* conditions: Conditions. (line 6) +* conflicts with shell built-ins <1>: nice invocation. (line 35) +* conflicts with shell built-ins <2>: pwd invocation. (line 10) +* conflicts with shell built-ins: test invocation. (line 28) +* connectives, logical <1>: Relations for expr. (line 6) +* connectives, logical: Connectives for test. + (line 6) +* 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 176) +* conv: dd invocation. (line 53) +* conversion block size: dd invocation. (line 38) +* 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 83) +* copying directories recursively: cp invocation. (line 76) +* 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 19) +* count: dd invocation. (line 49) +* cp: cp invocation. (line 6) +* crashes and corruption: sync invocation. (line 11) +* CRC checksum: cksum invocation. (line 6) +* cread: Control. (line 30) +* 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 103) +* creating output file, requiring: dd invocation. (line 107) +* crN: Output. (line 45) +* crown margin: fmt invocation. (line 34) +* crt: Combination. (line 74) +* crterase: Local. (line 22) +* crtkill: Local. (line 56) +* crtscts: Control. (line 36) +* csh syntax for color setup: dircolors invocation. + (line 33) +* csN: Control. (line 19) +* csplit: csplit invocation. (line 6) +* cstopb: Control. (line 27) +* ctime, printing or sorting by: Sorting the output. (line 13) +* ctime, show the most recent: du invocation. (line 144) +* 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, erasing: shred invocation. (line 6) +* database for color setup, printing: dircolors invocation. + (line 38) +* date: date invocation. (line 6) +* date conversion specifiers: Date conversion specifiers. + (line 6) +* date format, ISO 8601: Calendar date items. (line 30) +* date input formats: Date input formats. (line 6) +* date options: Options for date. (line 6) +* date strings, parsing: Options for date. (line 11) +* day in date strings: Relative items in date strings. + (line 15) +* day of week item: Day of week items. (line 6) +* dd: dd invocation. (line 6) +* dec: Combination. (line 77) +* decctlq: Combination. (line 63) +* Decode base64 data: base64 invocation. (line 29) +* delay for a specified time: sleep invocation. (line 6) +* delaying commands: Delaying. (line 6) +* deleting characters: Squeezing. (line 6) +* dereferencing symbolic links: ln invocation. (line 40) +* descriptor follow option: tail invocation. (line 41) +* destination directory <1>: ln invocation. (line 105) +* destination directory <2>: mv invocation. (line 99) +* destination directory <3>: install invocation. (line 97) +* destination directory <4>: cp invocation. (line 268) +* destination directory: Target directory. (line 15) +* destinations, multiple output: tee invocation. (line 6) +* device file, disk: df invocation. (line 19) +* df: df invocation. (line 6) +* DF_BLOCK_SIZE: Block size. (line 12) +* dictionary order: sort invocation. (line 85) +* differing lines: comm invocation. (line 18) +* digit: Character sets. (line 103) +* dir: dir invocation. (line 6) +* dircolors: dircolors invocation. + (line 6) +* direct: dd invocation. (line 149) +* direct I/O: dd invocation. (line 149) +* directories, copying: cp invocation. (line 6) +* directories, copying recursively: cp invocation. (line 76) +* directories, creating: mkdir invocation. (line 6) +* directories, creating with given attributes: install invocation. + (line 48) +* directories, removing (recursively): rm invocation. (line 91) +* directories, removing empty: rmdir invocation. (line 6) +* directory: dd invocation. (line 152) +* 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 31) +* directory I/O: dd invocation. (line 152) +* directory listing: ls invocation. (line 6) +* directory listing, brief: dir invocation. (line 6) +* directory listing, recursive: Which files are listed. + (line 90) +* directory listing, verbose: vdir invocation. (line 6) +* directory order, listing by: Sorting the output. (line 20) +* 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 13) +* disambiguating group names and IDs: Disambiguating names and IDs. + (line 6) +* disk allocation: What information is listed. + (line 242) +* disk device file: df invocation. (line 19) +* disk usage: Disk usage. (line 6) +* disk usage by file system: df invocation. (line 6) +* disk usage for files: du invocation. (line 6) +* diskette file system: df invocation. (line 133) +* 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 15) +* do nothing, successfully: true invocation. (line 6) +* do nothing, unsuccessfully: false invocation. (line 6) +* DOS file system: df invocation. (line 133) +* double spacing: pr invocation. (line 96) +* down columns: pr invocation. (line 70) +* dsusp: Characters. (line 53) +* dsync: dd invocation. (line 157) +* du: du invocation. (line 6) +* DU_BLOCK_SIZE: Block size. (line 12) +* ebcdic, converting to: dd invocation. (line 63) +* echo <1>: Local. (line 18) +* echo: echo invocation. (line 6) +* 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 ID, printing: whoami invocation. (line 6) +* efs file system type: df invocation. (line 125) +* Eggert, Paul: Authors of get_date. (line 6) +* eight-bit characters <1>: Combination. (line 55) +* eight-bit characters: Control. (line 19) +* eight-bit input: Input. (line 23) +* ek: Combination. (line 22) +* empty files, creating: touch invocation. (line 11) +* empty lines, numbering: nl invocation. (line 87) +* entire files, output of: Output of entire files. + (line 6) +* env: env invocation. (line 6) +* environment variables, printing: printenv invocation. (line 6) +* environment, preserving: su invocation. (line 64) +* environment, printing: env invocation. (line 30) +* environment, running a program in a modified: env invocation. + (line 6) +* eof: Characters. (line 32) +* eol: Characters. (line 35) +* eol2: Characters. (line 38) +* epoch, for POSIX: Seconds since the Epoch. + (line 13) +* epoch, seconds since: Time conversion specifiers. + (line 41) +* equal string check: String tests. (line 22) +* equivalence classes: Character sets. (line 127) +* erase: Characters. (line 26) +* erasing data: shred invocation. (line 6) +* error messages, omitting <1>: chmod invocation. (line 45) +* error messages, omitting <2>: chgrp invocation. (line 26) +* error messages, omitting: chown invocation. (line 76) +* evaluation of expressions: expr invocation. (line 6) +* even parity: Control. (line 13) +* evenp: Combination. (line 9) +* exabyte, definition of: Block size. (line 116) +* examples of date: Examples of date. (line 6) +* examples of expr: Examples of expr. (line 6) +* exbibyte, definition of: Block size. (line 120) +* excl: dd invocation. (line 107) +* excluding files from du: du invocation. (line 195) +* executable file check: Access permission tests. + (line 24) +* executables and file type, marking: General output formatting. + (line 36) +* execute/search permission: Mode Structure. (line 18) +* execute/search permission, symbolic: Setting Permissions. (line 63) +* 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 47) +* exit status of env: env invocation. (line 49) +* exit status of expr: expr invocation. (line 39) +* exit status of false: false invocation. (line 6) +* exit status of ls: ls invocation. (line 29) +* exit status of nice: nice invocation. (line 53) +* exit status of nohup: nohup invocation. (line 42) +* exit status of pathchk: pathchk invocation. (line 50) +* exit status of printenv: printenv invocation. (line 17) +* exit status of sort: sort invocation. (line 58) +* exit status of su: su invocation. (line 80) +* exit status of test: test invocation. (line 40) +* exit status of true: true invocation. (line 6) +* exit status of tty: tty invocation. (line 21) +* expand: expand invocation. (line 6) +* expr: expr invocation. (line 6) +* expression evaluation <1>: expr invocation. (line 6) +* expression evaluation: test invocation. (line 6) +* expressions, numeric: Numeric expressions. (line 6) +* expressions, string: String expressions. (line 6) +* extension, sorting files by: Sorting the output. (line 63) +* factor: factor invocation. (line 6) +* failure exit status: false invocation. (line 6) +* false: false invocation. (line 6) +* fascism: su invocation. (line 87) +* fdatasync: dd invocation. (line 121) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* ffN: Output. (line 63) +* field separator character: sort invocation. (line 253) +* 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 134) +* file mode bits, numeric: Numeric Modes. (line 6) +* file name manipulation: File name manipulation. + (line 6) +* file name pattern expansion, disabled: su invocation. (line 44) +* file names, checking validity and portability: pathchk 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 45) +* file space usage: du invocation. (line 6) +* file status: stat invocation. (line 6) +* file system disk usage: df invocation. (line 6) +* file system sizes: df invocation. (line 38) +* file system space, retrieving current data more slowly: df invocation. + (line 100) +* file system space, retrieving old data more quickly: df invocation. + (line 67) +* file system status: stat invocation. (line 6) +* file system types, limiting output to certain: df invocation. + (line 63) +* file system types, printing: df invocation. (line 113) +* file systems: stat invocation. (line 23) +* file systems and hard links: ln invocation. (line 6) +* file systems, omitting copying to different: cp invocation. (line 291) +* file timestamps, changing: touch invocation. (line 6) +* file type and executables, marking: General output formatting. + (line 36) +* file type tests: File type tests. (line 6) +* file type, marking: General output formatting. + (line 47) +* file types: Special file types. (line 9) +* file types, special: Special file types. (line 6) +* file utilities: Top. (line 19) +* files beginning with -, removing: rm invocation. (line 98) +* files, copying: cp invocation. (line 6) +* 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: sha2 utilities. (line 6) +* first in date strings: General date syntax. (line 26) +* first part of files, outputting: head invocation. (line 6) +* fixed-length records, converting to variable-length: dd invocation. + (line 38) +* flow control, hardware: Control. (line 36) +* flow control, software: Input. (line 43) +* flushing, disabling: Local. (line 32) +* 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 101) +* formatting file contents: Formatting file contents. + (line 6) +* formatting of numbers in seq: seq invocation. (line 24) +* formatting times <1>: date invocation. (line 20) +* formatting times: pr invocation. (line 100) +* fortnight in date strings: Relative items in date strings. + (line 15) +* fsync: dd invocation. (line 125) +* general date syntax: General date syntax. (line 6) +* general numeric sort: sort invocation. (line 98) +* get_date: Date input formats. (line 6) +* gibibyte, definition of: Block size. (line 99) +* gigabyte, definition of: Block size. (line 95) +* giving away permissions: Umask and Protection. + (line 12) +* globbing, disabled: su invocation. (line 44) +* GMT: Options for date. (line 83) +* grand total of disk space: du invocation. (line 50) +* graph: Character sets. (line 106) +* Greenwich Mean Time: Options for date. (line 83) +* group IDs, disambiguating: Disambiguating names and IDs. + (line 6) +* group names, disambiguating: Disambiguating names and IDs. + (line 6) +* group owner, default: Mode Structure. (line 31) +* group ownership of installed files, setting: install invocation. + (line 54) +* group ownership, changing <1>: chgrp invocation. (line 6) +* group ownership, changing: chown invocation. (line 6) +* group wheel, not supported: su invocation. (line 87) +* group, permissions for: Setting Permissions. (line 26) +* groups: groups invocation. (line 6) +* growing files: tail invocation. (line 41) +* 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 185) +* hard links to directories: ln invocation. (line 61) +* hard links, counting in du: du invocation. (line 91) +* hard links, creating <1>: ln invocation. (line 6) +* hard links, creating: link invocation. (line 6) +* hard links, preserving: cp invocation. (line 89) +* hardware class: uname invocation. (line 41) +* hardware flow control: Control. (line 36) +* hardware platform: uname invocation. (line 35) +* hardware type: uname invocation. (line 41) +* hat notation for control characters: Local. (line 51) +* head: head invocation. (line 6) +* head of output: shuf invocation. (line 32) +* headers, numbering: nl invocation. (line 17) +* help, online: Common options. (line 29) +* hex dump of files: od invocation. (line 6) +* High Sierra file system: df invocation. (line 129) +* holes, copying files with: cp invocation. (line 216) +* HOME: su invocation. (line 18) +* horizontal, listing files: General output formatting. + (line 88) +* host processor type: uname invocation. (line 50) +* hostid: hostid invocation. (line 6) +* hostname <1>: hostname invocation. (line 6) +* hostname: uname invocation. (line 46) +* hour in date strings: Relative items in date strings. + (line 15) +* hsfs file system type: df invocation. (line 129) +* human-readable output <1>: du invocation. (line 75) +* human-readable output <2>: df invocation. (line 43) +* human-readable output <3>: What information is listed. + (line 116) +* human-readable output: Block size. (line 43) +* hup[cl]: Control. (line 23) +* hurd, author, printing: What information is listed. + (line 10) +* ibs: dd invocation. (line 25) +* icanon: Local. (line 11) +* icrnl: Input. (line 32) +* id: id invocation. (line 6) +* idle time: who invocation. (line 62) +* iexten: Local. (line 15) +* if: dd invocation. (line 17) +* iflag: dd invocation. (line 130) +* ignbrk: Input. (line 7) +* igncr: Input. (line 29) +* ignore file systems: df invocation. (line 32) +* Ignore garbage in base64 stream: base64 invocation. (line 35) +* ignoring case: sort invocation. (line 92) +* ignpar: Input. (line 13) +* imaxbel: Input. (line 56) +* immunity to hangups: nohup invocation. (line 6) +* implementation, hardware: uname invocation. (line 35) +* including files from du <1>: du invocation. (line 62) +* including files from du: wc invocation. (line 60) +* indenting lines: pr invocation. (line 204) +* index: String expressions. (line 45) +* information, about current users: who invocation. (line 6) +* initial part of files, outputting: head invocation. (line 6) +* initial tabs, converting: expand invocation. (line 34) +* inlcr: Input. (line 26) +* inode number, printing: What information is listed. + (line 122) +* inode usage: df invocation. (line 52) +* inode, and hard links: ln invocation. (line 32) +* inodes, written buffered: sync invocation. (line 6) +* inpck: Input. (line 20) +* input block size: dd invocation. (line 25) +* input encoding, UTF-8: Input. (line 35) +* input range to shuffle: shuf invocation. (line 23) +* input settings: Input. (line 6) +* input tabs: pr invocation. (line 120) +* install: install invocation. (line 6) +* interactivity <1>: mv invocation. (line 64) +* interactivity: cp invocation. (line 188) +* intr: Characters. (line 20) +* invocation of commands, modified: Modified command invocation. + (line 6) +* isig: Local. (line 7) +* ISO 8601 date format: Calendar date items. (line 30) +* ISO/IEC 10646: printf invocation. (line 62) +* ispeed: Special. (line 16) +* istrip: Input. (line 23) +* items in date strings: General date syntax. (line 6) +* iterations, selecting the number of: shred invocation. (line 106) +* iuclc: Input. (line 48) +* iutf8: Input. (line 35) +* ixany: Input. (line 52) +* ixoff: Input. (line 43) +* ixon: Input. (line 38) +* join: join invocation. (line 6) +* kernel name: uname invocation. (line 65) +* kernel release: uname invocation. (line 61) +* kernel version: uname invocation. (line 76) +* kibibyte, definition of: Block size. (line 83) +* kibibytes for file sizes: du invocation. (line 85) +* kibibytes for file system sizes: df invocation. (line 57) +* kill <1>: kill invocation. (line 6) +* kill: Characters. (line 29) +* kilobyte, definition of: Block size. (line 78) +* Knuth, Donald E.: fmt invocation. (line 19) +* language, in dates: General date syntax. (line 40) +* last DAY <1>: Day of week items. (line 15) +* last DAY: Options for date. (line 11) +* last in date strings: General date syntax. (line 26) +* last modified dates, displaying in du: du invocation. (line 138) +* last part of files, outputting: tail invocation. (line 6) +* LC_ALL <1>: ls invocation. (line 17) +* LC_ALL: sort invocation. (line 49) +* LC_COLLATE <1>: Relations for expr. (line 22) +* LC_COLLATE <2>: join invocation. (line 14) +* LC_COLLATE <3>: comm invocation. (line 12) +* LC_COLLATE <4>: uniq invocation. (line 21) +* LC_COLLATE: sort invocation. (line 49) +* LC_CTYPE <1>: printf invocation. (line 62) +* LC_CTYPE: sort invocation. (line 79) +* LC_MESSAGES: pr invocation. (line 13) +* LC_NUMERIC <1>: printf invocation. (line 51) +* LC_NUMERIC <2>: sort invocation. (line 98) +* LC_NUMERIC: Block size. (line 57) +* LC_TIME <1>: date invocation. (line 11) +* LC_TIME <2>: du invocation. (line 158) +* LC_TIME <3>: Formatting file timestamps. + (line 30) +* LC_TIME <4>: sort invocation. (line 131) +* LC_TIME: pr invocation. (line 107) +* LCASE: Combination. (line 71) +* lcase: Combination. (line 71) +* lcase, converting to: dd invocation. (line 87) +* lchown <1>: chgrp invocation. (line 30) +* lchown: chown invocation. (line 103) +* leading directories, creating missing: install invocation. (line 48) +* leading directory components, stripping: basename invocation. + (line 6) +* left margin: pr invocation. (line 204) +* length: String expressions. (line 50) +* limiting output of du: du invocation. (line 111) +* line: Special. (line 37) +* line count: wc invocation. (line 6) +* line numbering: nl invocation. (line 6) +* 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 30) +* link: link invocation. (line 6) +* links, creating <1>: ln invocation. (line 6) +* links, creating: link invocation. (line 6) +* Linux file system types: df invocation. (line 125) +* literal conversion specifiers: Literal conversion specifiers. + (line 6) +* litout: Combination. (line 59) +* ln: ln invocation. (line 6) +* ln format for nl: nl invocation. (line 98) +* lnext: Characters. (line 62) +* local file system types: df invocation. (line 125) +* local settings: Local. (line 6) +* logging out and continuing to run: nohup invocation. (line 6) +* logical and operator <1>: Relations for expr. (line 17) +* logical and operator: Connectives for test. + (line 12) +* logical connectives <1>: Relations for expr. (line 6) +* logical connectives: Connectives for test. + (line 6) +* logical or operator <1>: Relations for expr. (line 11) +* logical or operator: Connectives for test. + (line 15) +* 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 shell: su invocation. (line 18) +* login shell, creating: su invocation. (line 53) +* login time: who invocation. (line 11) +* LOGNAME: su invocation. (line 18) +* logname: logname invocation. (line 6) +* long ls format: What information is listed. + (line 130) +* lower: Character sets. (line 109) +* lowercase, translating to output: Output. (line 12) +* ls: ls invocation. (line 6) +* LS_BLOCK_SIZE: Block size. (line 12) +* LS_COLORS: dircolors invocation. + (line 16) +* machine type: uname invocation. (line 41) +* machine-readable stty output: stty invocation. (line 41) +* MacKenzie, D.: Introduction. (line 19) +* MacKenzie, David: Authors of get_date. (line 6) +* Makefiles, installing programs in: install invocation. (line 30) +* manipulating files: Basic operations. (line 6) +* manipulation of file names: File name manipulation. + (line 6) +* match: String expressions. (line 36) +* matching patterns: String expressions. (line 11) +* MD5: md5sum invocation. (line 6) +* md5sum: md5sum invocation. (line 6) +* mebibyte, definition of: Block size. (line 92) +* mebibytes for file sizes: du invocation. (line 101) +* megabyte, definition of: Block size. (line 88) +* merging files: paste invocation. (line 6) +* merging files in parallel: pr invocation. (line 6) +* merging sorted files: sort invocation. (line 32) +* message status: who invocation. (line 86) +* 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: sha2 utilities. (line 6) +* Meyering, J.: Introduction. (line 19) +* Meyering, Jim: Authors of get_date. (line 6) +* midnight in date strings: Time of day items. (line 22) +* 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 30) +* MIT AI lab: su invocation. (line 92) +* mkdir: mkdir invocation. (line 6) +* mkfifo: mkfifo invocation. (line 6) +* mknod: mknod invocation. (line 6) +* modem control: Control. (line 33) +* 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 time, 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 73) +* month in date strings: Relative items in date strings. + (line 15) +* month names in date strings: Calendar date items. (line 38) +* months, sorting by: sort invocation. (line 131) +* months, written-out: General date syntax. (line 36) +* MS-DOS file system: df invocation. (line 133) +* mtime, changing: touch invocation. (line 73) +* multicolumn output, generating: pr invocation. (line 6) +* multiple changes to permissions: Multiple Changes. (line 6) +* multiplication: Numeric expressions. (line 15) +* multipliers after numbers: dd invocation. (line 204) +* mv: mv invocation. (line 6) +* name follow option: tail invocation. (line 41) +* name of kernel: uname invocation. (line 65) +* named pipe check: File type tests. (line 28) +* named pipes, creating: mkfifo invocation. (line 6) +* network node name: uname invocation. (line 46) +* never interactive option: rm invocation. (line 52) +* newer files, copying only: cp invocation. (line 277) +* newer files, moving only: mv invocation. (line 76) +* 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 26) +* next DAY <1>: Day of week items. (line 15) +* next DAY: Options for date. (line 11) +* next in date strings: General date syntax. (line 26) +* NFS file system type: df invocation. (line 120) +* NFS mounts from BSD to HP-UX <1>: du invocation. (line 206) +* NFS mounts from BSD to HP-UX: What information is listed. + (line 250) +* nice: nice invocation. (line 6) +* niceness: nice invocation. (line 6) +* nl <1>: Combination. (line 18) +* nl: nl invocation. (line 6) +* nlN: Output. (line 39) +* no-op: true invocation. (line 6) +* noatime: dd invocation. (line 171) +* nocreat: dd invocation. (line 103) +* noctty: dd invocation. (line 176) +* node name: uname invocation. (line 46) +* noerror: dd invocation. (line 100) +* noflsh: Local. (line 32) +* nofollow: dd invocation. (line 182) +* nohup: nohup invocation. (line 6) +* nohup.out: nohup invocation. (line 6) +* nolinks: dd invocation. (line 185) +* non-directories, copying as special files: cp invocation. (line 76) +* non-directory suffix, stripping: dirname invocation. (line 6) +* nonblock: dd invocation. (line 168) +* nonblocking I/O: dd invocation. (line 168) +* none backup method: Backup options. (line 31) +* none color option: General output formatting. + (line 23) +* none, sorting option for ls: Sorting the output. (line 49) +* nonempty file check: File characteristic tests. + (line 12) +* nonprinting characters, ignoring: sort invocation. (line 125) +* nonzero-length string check: String tests. (line 19) +* noon in date strings: Time of day items. (line 22) +* not-equal string check: String tests. (line 25) +* notrunc: dd invocation. (line 113) +* now in date strings: Relative items in date strings. + (line 33) +* numbered backup method: Backup options. (line 35) +* numbering lines: nl invocation. (line 6) +* numbers, written-out: General date syntax. (line 26) +* 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 140) +* numeric tests: Numeric tests. (line 6) +* numeric uid and gid: What information is listed. + (line 232) +* numeric user and group IDs: What information is listed. + (line 232) +* obs: dd invocation. (line 29) +* 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 20) +* ofdel: Output. (line 34) +* ofill: Output. (line 30) +* oflag: dd invocation. (line 134) +* olcuc: Output. (line 12) +* older-than file check: File characteristic tests. + (line 19) +* once interactive option: rm invocation. (line 54) +* one file system, restricting du to: du invocation. (line 191) +* one file system, restricting rm to: rm invocation. (line 63) +* one-line output format: df invocation. (line 74) +* onlcr: Output. (line 19) +* onlret: Output. (line 27) +* 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 57) +* opost: Output. (line 9) +* option delimiter: Common options. (line 36) +* options for date: Options for date. (line 6) +* or operator <1>: Relations for expr. (line 11) +* or operator: Connectives for test. + (line 15) +* ordinal numbers: General date syntax. (line 26) +* ospeed: Special. (line 19) +* other permissions: Setting Permissions. (line 29) +* output block size: dd invocation. (line 29) +* output file name prefix <1>: csplit invocation. (line 62) +* output file name prefix: split invocation. (line 14) +* output file name suffix: csplit invocation. (line 66) +* output format: stat invocation. (line 28) +* output format, portable: df invocation. (line 74) +* output null-byte-terminated lines: du invocation. (line 117) +* 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 140) +* overwriting of input, allowed <1>: shuf invocation. (line 37) +* overwriting of input, allowed: sort invocation. (line 213) +* 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 31) +* ownership of installed files, setting: install invocation. (line 72) +* p for FIFO file: mknod invocation. (line 23) +* 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 177) +* parent directories, creating: mkdir invocation. (line 34) +* parent directories, creating missing: install invocation. (line 48) +* parent directories, removing: rmdir invocation. (line 22) +* parentheses for grouping: expr invocation. (line 31) +* parity: Combination. (line 10) +* parity errors, marking: Input. (line 16) +* parity, ignoring: Input. (line 13) +* parmrk: Input. (line 16) +* parodd: Control. (line 13) +* parsing date strings: Options for date. (line 11) +* parts of files, output of: Output of parts of files. + (line 6) +* pass8: Combination. (line 55) +* passwd entry, and su shell: su invocation. (line 12) +* paste: paste invocation. (line 6) +* Paterson, R.: Introduction. (line 19) +* PATH <1>: su invocation. (line 53) +* PATH: env invocation. (line 24) +* pathchk: pathchk invocation. (line 6) +* pattern matching: String expressions. (line 11) +* PC file system: df invocation. (line 133) +* pcfs: df invocation. (line 133) +* pebibyte, definition of: Block size. (line 113) +* permission tests: Access permission tests. + (line 6) +* permissions of installed files, setting: install invocation. + (line 60) +* permissions, changing access: chmod invocation. (line 6) +* permissions, copying existing: Copying Permissions. (line 6) +* permissions, for changing file timestamps: touch invocation. + (line 16) +* permissions, output by ls: What information is listed. + (line 190) +* petabyte, definition of: Block size. (line 109) +* phone directory order: sort invocation. (line 85) +* pieces, splitting a file into: split invocation. (line 6) +* Pinard, F. <1>: Authors of get_date. (line 14) +* Pinard, F.: Introduction. (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 22) +* portable file names, checking for: pathchk invocation. (line 6) +* portable output format: df invocation. (line 74) +* POSIX: Introduction. (line 11) +* POSIX output format: df invocation. (line 74) +* POSIXLY_CORRECT <1>: printf invocation. (line 42) +* POSIXLY_CORRECT <2>: echo invocation. (line 68) +* POSIXLY_CORRECT <3>: dd invocation. (line 237) +* POSIXLY_CORRECT <4>: sort invocation. (line 221) +* POSIXLY_CORRECT <5>: tail invocation. (line 75) +* POSIXLY_CORRECT <6>: pr invocation. (line 107) +* POSIXLY_CORRECT <7>: Standards conformance. + (line 6) +* POSIXLY_CORRECT: Common options. (line 11) +* POSIXLY_CORRECT, and block size: Block size. (line 12) +* pr: pr invocation. (line 6) +* prime factors: factor invocation. (line 6) +* print: Character sets. (line 112) +* print name of current directory: pwd invocation. (line 6) +* print system information: uname invocation. (line 6) +* print terminal file name: tty 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 38) +* 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 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 user's login name: logname invocation. (line 6) +* printing, preparing files for: pr invocation. (line 6) +* processes, commands for controlling: Process control. (line 6) +* prompting, and ln: ln invocation. (line 71) +* prompting, and mv: mv invocation. (line 34) +* prompting, and rm: rm invocation. (line 11) +* prompts, forcing: mv invocation. (line 59) +* prompts, omitting: mv invocation. (line 55) +* prterase: Local. (line 46) +* ptx: ptx invocation. (line 6) +* punct: Character sets. (line 115) +* pure numbers in date strings: Pure numbers in date strings. + (line 6) +* pwd: pwd invocation. (line 6) +* quit: Characters. (line 23) +* quoting style: Formatting the file names. + (line 34) +* radix for file offsets: od invocation. (line 36) +* random sort: sort invocation. (line 162) +* random source for shredding: shred invocation. (line 112) +* random source for shuffling: shuf invocation. (line 43) +* random source for sorting: sort invocation. (line 226) +* random sources: Random sources. (line 6) +* ranges: Character sets. (line 50) +* raw: Combination. (line 43) +* read errors, ignoring: dd invocation. (line 100) +* read from stdin and write to stdout and files: tee invocation. + (line 6) +* read permission: Mode Structure. (line 12) +* read permission, symbolic: Setting Permissions. (line 57) +* read system call, and holes: cp invocation. (line 216) +* readable file check: Access permission tests. + (line 15) +* readlink: readlink invocation. (line 6) +* real user and group IDs, printing: id invocation. (line 6) +* recursive directory listing: Which files are listed. + (line 90) +* recursively changing access permissions: chmod invocation. (line 69) +* recursively changing file ownership: chown invocation. (line 140) +* recursively changing group ownership: chgrp invocation. (line 66) +* recursively copying directories: cp invocation. (line 76) +* redirection: Redirection. (line 6) +* 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 61) +* remainder: Numeric expressions. (line 15) +* remote hostname: who invocation. (line 11) +* removing empty directories: rmdir invocation. (line 6) +* removing files after shredding: shred invocation. (line 123) +* 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 42) +* repeated characters: Character sets. (line 71) +* repeated lines, outputting: uniq invocation. (line 63) +* repeated output of a string: yes invocation. (line 6) +* restricted deletion flag: Mode Structure. (line 56) +* restricted shell: su invocation. (line 64) +* return, ignoring: Input. (line 29) +* return, translating to newline <1>: Output. (line 16) +* return, translating to newline: Input. (line 32) +* reverse sorting <1>: Sorting the output. (line 27) +* reverse sorting: sort invocation. (line 157) +* reversing files: tac invocation. (line 6) +* rm: rm invocation. (line 6) +* rmdir: rmdir invocation. (line 6) +* rn format for nl: nl invocation. (line 101) +* root as default owner: install invocation. (line 72) +* root directory, allow recursive destruction: rm invocation. (line 84) +* root directory, allow recursive modification <1>: chmod invocation. + (line 54) +* root directory, allow recursive modification <2>: chgrp invocation. + (line 48) +* root directory, allow recursive modification: chown invocation. + (line 121) +* root directory, disallow recursive destruction: rm invocation. + (line 79) +* root directory, disallow recursive modification <1>: chmod invocation. + (line 49) +* root directory, disallow recursive modification <2>: chgrp invocation. + (line 43) +* root directory, disallow recursive modification: chown invocation. + (line 116) +* root directory, running a program in a specified: chroot invocation. + (line 6) +* root, becoming: su invocation. (line 6) +* rows: Special. (line 22) +* rprnt: Characters. (line 56) +* RTS/CTS flow control: Control. (line 36) +* 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 104) +* Salz, Rich: Authors of get_date. (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) +* seconds since the epoch: Time conversion specifiers. + (line 41) +* section delimiters of pages: nl invocation. (line 68) +* seek: dd invocation. (line 46) +* self-backups: cp invocation. (line 42) +* 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 42) +* seq: seq invocation. (line 6) +* sequence of numbers: seq invocation. (line 6) +* set-group-ID: Mode Structure. (line 49) +* set-group-ID check: Access permission tests. + (line 9) +* set-user-ID: Mode Structure. (line 42) +* set-user-ID check: Access permission tests. + (line 18) +* setgid: Mode Structure. (line 49) +* setting permissions: Setting Permissions. (line 46) +* setting the hostname: hostname invocation. (line 6) +* setting the time: Setting the time. (line 6) +* setuid: Mode Structure. (line 42) +* setup for color: dircolors invocation. + (line 6) +* sh syntax for color setup: dircolors invocation. + (line 27) +* 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) +* SHELL: su invocation. (line 18) +* SHELL environment variable, and color: dircolors invocation. + (line 16) +* shell utilities: Top. (line 19) +* shred: shred invocation. (line 6) +* shuf: shuf invocation. (line 6) +* shuffling files: shuf invocation. (line 6) +* SI output <1>: du invocation. (line 123) +* SI output <2>: df invocation. (line 93) +* SI output <3>: What information is listed. + (line 258) +* SI output: Block size. (line 43) +* simple backup method: Backup options. (line 44) +* SIMPLE_BACKUP_SUFFIX: Backup options. (line 50) +* single-column output of files: General output formatting. + (line 10) +* size: Special. (line 30) +* size for main memory sorting: sort invocation. (line 237) +* size of file to shred: shred invocation. (line 117) +* size of files, reporting: What information is listed. + (line 242) +* size of files, sorting files by: Sorting the output. (line 32) +* skip: dd invocation. (line 43) +* sleep: sleep invocation. (line 6) +* socket check: File type tests. (line 31) +* software flow control: Input. (line 43) +* sort: sort invocation. (line 6) +* sort field: sort invocation. (line 193) +* sort stability: sort invocation. (line 38) +* sort zero-terminated lines <1>: shuf invocation. (line 48) +* sort zero-terminated lines: sort invocation. (line 296) +* sort's last-resort comparison: sort invocation. (line 38) +* 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 sets. (line 118) +* sparse files, copying: cp invocation. (line 216) +* special characters: Characters. (line 6) +* special file types: Special file types. (line 6) +* special files: mknod invocation. (line 11) +* special settings: Special. (line 6) +* specifying sets of characters: Character sets. (line 6) +* speed: Special. (line 40) +* 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 35) +* squeezing repeat characters: Squeezing. (line 6) +* Stallman, R.: Introduction. (line 19) +* standard input: Common options. (line 41) +* standard output: Common options. (line 41) +* start: Characters. (line 44) +* stat: stat invocation. (line 6) +* status time, printing or sorting by: Sorting the output. (line 13) +* status time, show the most recent: du invocation. (line 144) +* sticky: Mode Structure. (line 56) +* sticky bit check: Access permission tests. + (line 12) +* stop: Characters. (line 47) +* stop bits: Control. (line 27) +* strftime and date: date invocation. (line 20) +* string constants, outputting: od invocation. (line 68) +* 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 88) +* stripping trailing slashes <1>: mv invocation. (line 89) +* stripping trailing slashes: cp invocation. (line 250) +* stty: stty invocation. (line 6) +* su: su invocation. (line 6) +* substitute user and group IDs: su invocation. (line 6) +* substr: String expressions. (line 40) +* subtracting permissions: Setting Permissions. (line 42) +* subtraction: Numeric expressions. (line 11) +* 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) +* super-user, becoming: su invocation. (line 6) +* superblock, writing: sync invocation. (line 6) +* supplementary groups, printing: groups invocation. (line 6) +* susp: Characters. (line 50) +* swab (byte-swapping): dd invocation. (line 95) +* swap space, saving text image in: Mode Structure. (line 56) +* swtch: Characters. (line 41) +* symbol table information, stripping: install invocation. (line 88) +* 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 <1>: chgrp invocation. + (line 79) +* symbolic link to directory, never traverse <2>: chown invocation. + (line 152) +* symbolic link to directory, never traverse: Traversing symlinks. + (line 26) +* symbolic link to directory, traverse each that is encountered <1>: chgrp invocation. + (line 75) +* symbolic link to directory, traverse each that is encountered <2>: chown invocation. + (line 148) +* symbolic link to directory, traverse each that is encountered: Traversing symlinks. + (line 22) +* symbolic link to directory, traverse each that is specified on the command line <1>: chgrp invocation. + (line 70) +* symbolic link to directory, traverse each that is specified on the command line <2>: chown invocation. + (line 143) +* symbolic link to directory, traverse each that is specified on the command line: Traversing symlinks. + (line 18) +* symbolic link, defined: ln invocation. (line 40) +* symbolic links and pwd: pwd invocation. (line 6) +* symbolic links, changing group: chgrp invocation. (line 35) +* symbolic links, changing owner <1>: chgrp invocation. (line 30) +* symbolic links, changing owner: chown invocation. (line 80) +* symbolic links, copying: cp invocation. (line 89) +* symbolic links, copying with: cp invocation. (line 255) +* symbolic links, dereferencing: Which files are listed. + (line 36) +* symbolic links, dereferencing in du: du invocation. (line 96) +* symbolic links, dereferencing in stat: stat invocation. (line 17) +* symbolic links, following: dd invocation. (line 182) +* symbolic links, permissions of: chmod invocation. (line 10) +* symbolic modes: Symbolic Modes. (line 6) +* sync <1>: sync invocation. (line 6) +* sync: dd invocation. (line 165) +* sync (padding with nulls): dd invocation. (line 116) +* synchronize disk and memory: sync invocation. (line 6) +* synchronized data and metadata I/O: dd invocation. (line 165) +* synchronized data and metadata writes, before finishing: dd invocation. + (line 125) +* synchronized data reads: dd invocation. (line 157) +* synchronized data writes, before finishing: dd invocation. (line 121) +* syslog: su invocation. (line 29) +* system context: System context. (line 6) +* system information, printing: uname invocation. (line 6) +* system name, printing: hostname invocation. (line 6) +* System V sum: sum invocation. (line 31) +* 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 43) +* target directory <1>: ln invocation. (line 105) +* target directory <2>: mv invocation. (line 99) +* target directory <3>: install invocation. (line 97) +* target directory <4>: cp invocation. (line 268) +* target directory: Target directory. (line 6) +* tebibyte, definition of: Block size. (line 106) +* tee: tee invocation. (line 6) +* telephone directory order: sort invocation. (line 85) +* temporary directory: sort invocation. (line 273) +* terabyte, definition of: Block size. (line 102) +* TERM: su invocation. (line 53) +* 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 color iff: General output formatting. + (line 25) +* terse output: stat invocation. (line 48) +* test: test invocation. (line 6) +* text: dd invocation. (line 192) +* text I/O: dd invocation. (line 192) +* text image, saving in swap space: Mode Structure. (line 56) +* text input files: md5sum invocation. (line 79) +* text utilities: Top. (line 19) +* text, displaying: echo invocation. (line 6) +* text, reformatting: fmt invocation. (line 6) +* this in date strings: Relative items in date strings. + (line 33) +* time <1>: Special. (line 11) +* time: touch invocation. (line 58) +* time conversion specifiers: Time conversion specifiers. + (line 6) +* time formats <1>: date invocation. (line 20) +* time formats: pr invocation. (line 100) +* time of day item: Time of day items. (line 6) +* time setting: Setting the time. (line 6) +* time style <1>: du invocation. (line 153) +* time style: Formatting file timestamps. + (line 26) +* time units: sleep invocation. (line 11) +* time zone correction: Time of day items. (line 30) +* time zone item <1>: Time zone items. (line 6) +* time zone item: General date syntax. (line 44) +* time, printing or setting: date invocation. (line 6) +* TIME_STYLE <1>: du invocation. (line 181) +* TIME_STYLE: Formatting file timestamps. + (line 106) +* timestamps of installed files, preserving: install invocation. + (line 78) +* timestamps, changing file: touch invocation. (line 6) +* TMPDIR: sort invocation. (line 64) +* today in date strings: Relative items in date strings. + (line 33) +* tomorrow: Options for date. (line 11) +* 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 12) +* 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) +* truncating output file, avoiding: dd invocation. (line 113) +* tsort: tsort invocation. (line 6) +* tty: tty invocation. (line 6) +* Twenex: su invocation. (line 92) +* two-way parity: Control. (line 9) +* type size: od invocation. (line 113) +* TZ <1>: Specifying time zone rules. + (line 6) +* TZ <2>: Options for date. (line 83) +* TZ <3>: date invocation. (line 16) +* TZ <4>: who invocation. (line 26) +* TZ <5>: stat invocation. (line 131) +* TZ <6>: touch invocation. (line 37) +* TZ <7>: Formatting file timestamps. + (line 18) +* TZ: pr invocation. (line 113) +* u, and disabling special characters: Characters. (line 13) +* ucase, converting to: dd invocation. (line 90) +* ufs file system type: df invocation. (line 125) +* umask and modes: Umask and Protection. + (line 6) +* uname: uname invocation. (line 6) +* unblock: dd invocation. (line 81) +* unexpand: unexpand invocation. (line 6) +* Unicode: printf invocation. (line 62) +* uniq: uniq invocation. (line 6) +* unique lines, outputting: uniq invocation. (line 98) +* uniquify files: uniq invocation. (line 6) +* uniquifying output: sort invocation. (line 282) +* unlink: unlink invocation. (line 6) +* unprintable characters, ignoring: sort invocation. (line 125) +* unsorted directory listing: Sorting the output. (line 20) +* upper: Character sets. (line 121) +* uppercase, translating to lowercase: Input. (line 48) +* use time, changing: touch invocation. (line 50) +* use time, printing or sorting files by: Sorting the output. (line 13) +* use time, show the most recent: du invocation. (line 144) +* USER: su invocation. (line 18) +* user ID, switching: su invocation. (line 6) +* 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 83) +* utmp <1>: who invocation. (line 15) +* utmp <2>: users invocation. (line 14) +* utmp: logname invocation. (line 6) +* valid file names, checking for: pathchk invocation. (line 6) +* variable-length records, converting to fixed-length: dd invocation. + (line 38) +* vdir: vdir invocation. (line 6) +* verbose ls format: What information is listed. + (line 130) +* verifying MD5 checksums: md5sum invocation. (line 69) +* version number, finding: Common options. (line 33) +* version of kernel: uname invocation. (line 76) +* version, sorting option for ls: Sorting the output. (line 56) +* version-control Emacs variable: Backup options. (line 24) +* VERSION_CONTROL <1>: ln invocation. (line 55) +* VERSION_CONTROL <2>: mv invocation. (line 50) +* VERSION_CONTROL <3>: install invocation. (line 40) +* VERSION_CONTROL <4>: cp invocation. (line 61) +* VERSION_CONTROL: Backup options. (line 13) +* vertical sorted files in columns: General output formatting. + (line 15) +* vtN: Output. (line 59) +* wc: wc invocation. (line 6) +* week in date strings: Relative items in date strings. + (line 15) +* werase: Characters. (line 59) +* wheel group, not supported: su invocation. (line 87) +* who: who invocation. (line 6) +* who am i: who invocation. (line 21) +* whoami: whoami invocation. (line 6) +* word count: wc invocation. (line 6) +* working context: Working context. (line 6) +* working directory, printing: pwd invocation. (line 6) +* wrap data: base64 invocation. (line 21) +* wrapping long input lines: fold invocation. (line 6) +* writable file check: Access permission tests. + (line 21) +* write permission: Mode Structure. (line 15) +* write permission, symbolic: Setting Permissions. (line 60) +* write, allowed: who invocation. (line 86) +* wtmp <1>: who invocation. (line 15) +* wtmp: users invocation. (line 14) +* xcase: Local. (line 36) +* xdigit: Character sets. (line 124) +* XON/XOFF flow control: Input. (line 38) +* year in date strings: Relative items in date strings. + (line 15) +* yes: yes invocation. (line 6) +* yesterday: Options for date. (line 11) +* yesterday in date strings: Relative items in date strings. + (line 29) +* yottabyte, definition of: Block size. (line 131) +* Youmans, B.: Introduction. (line 19) +* zero-length string check: String tests. (line 15) +* zettabyte, definition of: Block size. (line 123) +* |: Relations for expr. (line 11) + + + +Tag Table: +Node: Top7718 +Node: Introduction20818 +Node: Common options22377 +Node: Exit status25162 +Node: Backup options25892 +Node: Block size27816 +Node: Disambiguating names and IDs32732 +Ref: Disambiguating names and IDs-Footnote-134290 +Node: Random sources34360 +Node: Target directory36109 +Node: Trailing slashes39594 +Node: Traversing symlinks40615 +Node: Treating / specially41686 +Node: Special built-in utilities43227 +Node: Standards conformance44362 +Node: Output of entire files45878 +Node: cat invocation46479 +Node: tac invocation48207 +Node: nl invocation49469 +Node: od invocation53348 +Node: base64 invocation59711 +Node: Formatting file contents61073 +Node: fmt invocation61524 +Node: pr invocation64337 +Node: fold invocation77122 +Node: Output of parts of files78582 +Node: head invocation79090 +Node: tail invocation80806 +Node: split invocation88629 +Node: csplit invocation90715 +Node: Summarizing files94827 +Node: wc invocation95475 +Node: sum invocation98360 +Node: cksum invocation99765 +Node: md5sum invocation100905 +Node: sha1sum invocation105599 +Node: sha2 utilities106379 +Node: Operating on sorted files107003 +Node: sort invocation107659 +Ref: sort invocation-Footnote-1127034 +Node: shuf invocation127586 +Node: uniq invocation130150 +Node: comm invocation134230 +Node: tsort invocation135558 +Node: tsort background138592 +Node: ptx invocation140355 +Node: General options in ptx143159 +Node: Charset selection in ptx143740 +Node: Input processing in ptx144642 +Node: Output formatting in ptx150063 +Node: Compatibility in ptx156629 +Node: Operating on fields within a line159858 +Node: cut invocation160262 +Node: paste invocation163581 +Node: join invocation164909 +Node: Operating on characters169133 +Node: tr invocation169569 +Node: Character sets171287 +Node: Translating175718 +Node: Squeezing177809 +Node: expand invocation180876 +Node: unexpand invocation182358 +Node: Directory listing184176 +Node: ls invocation184662 +Ref: ls invocation-Footnote-1186476 +Node: Which files are listed186698 +Node: What information is listed190358 +Node: Sorting the output199334 +Node: More details about version sort201654 +Node: General output formatting203152 +Node: Formatting file timestamps207060 +Node: Formatting the file names212401 +Node: dir invocation215317 +Node: vdir invocation215728 +Node: dircolors invocation216106 +Node: Basic operations217586 +Node: cp invocation218206 +Node: dd invocation230266 +Node: install invocation238684 +Node: mv invocation242911 +Node: rm invocation247201 +Node: shred invocation251515 +Node: Special file types259000 +Node: link invocation260496 +Node: ln invocation261502 +Node: mkdir invocation266564 +Node: mkfifo invocation268813 +Node: mknod invocation269818 +Node: readlink invocation271577 +Node: rmdir invocation273320 +Node: unlink invocation274593 +Node: Changing file attributes275552 +Node: chown invocation276366 +Node: chgrp invocation282552 +Node: chmod invocation285602 +Node: touch invocation288357 +Node: Disk usage292953 +Node: df invocation293545 +Node: du invocation299217 +Node: stat invocation307207 +Node: sync invocation311049 +Node: Printing text311976 +Node: echo invocation312350 +Node: printf invocation314527 +Node: yes invocation319234 +Node: Conditions319846 +Node: false invocation320437 +Node: true invocation321472 +Node: test invocation322751 +Node: File type tests324711 +Node: Access permission tests325593 +Node: File characteristic tests326478 +Node: String tests327243 +Node: Numeric tests327908 +Node: Connectives for test328705 +Node: expr invocation329058 +Node: String expressions331319 +Node: Numeric expressions333902 +Node: Relations for expr334540 +Node: Examples of expr335740 +Node: Redirection336468 +Node: tee invocation336913 +Node: File name manipulation337978 +Node: basename invocation338426 +Node: dirname invocation339873 +Node: pathchk invocation341079 +Node: Working context342743 +Node: pwd invocation343387 +Node: stty invocation344061 +Node: Control346821 +Node: Input347581 +Node: Output349057 +Node: Local350313 +Node: Combination351895 +Node: Characters354057 +Node: Special355611 +Node: printenv invocation356977 +Node: tty invocation357740 +Node: User information358446 +Node: id invocation359081 +Node: logname invocation360297 +Node: whoami invocation360924 +Node: groups invocation361411 +Node: users invocation362147 +Node: who invocation363094 +Node: System context365863 +Node: date invocation366353 +Node: Time conversion specifiers368011 +Node: Date conversion specifiers370411 +Node: Literal conversion specifiers373535 +Node: Padding and other flags373893 +Node: Setting the time376087 +Node: Options for date377093 +Node: Examples of date380398 +Ref: %s-examples381841 +Node: uname invocation384026 +Node: hostname invocation386599 +Node: hostid invocation387212 +Node: Modified command invocation387899 +Node: chroot invocation388525 +Node: env invocation390644 +Node: nice invocation392723 +Node: nohup invocation396219 +Node: su invocation398210 +Node: Process control402683 +Node: kill invocation402906 +Node: Delaying407272 +Node: sleep invocation407469 +Node: Numeric operations408333 +Node: factor invocation408665 +Node: seq invocation410003 +Node: File permissions414284 +Node: Mode Structure414902 +Node: Symbolic Modes418597 +Node: Setting Permissions419695 +Node: Copying Permissions422308 +Node: Changing Special Mode Bits423127 +Node: Conditional Executability424949 +Node: Multiple Changes425493 +Node: Umask and Protection427160 +Node: Numeric Modes428265 +Node: Directory Setuid and Setgid430165 +Node: Date input formats432427 +Node: General date syntax434780 +Node: Calendar date items437739 +Node: Time of day items439744 +Node: Time zone items441868 +Node: Day of week items443110 +Node: Relative items in date strings444107 +Node: Pure numbers in date strings446917 +Node: Seconds since the Epoch447906 +Node: Specifying time zone rules449535 +Node: Authors of get_date451907 +Node: Opening the software toolbox452667 +Node: Toolbox introduction453328 +Node: I/O redirection456051 +Node: The who command458885 +Node: The cut command459782 +Node: The sort command460845 +Node: The uniq command461549 +Node: Putting the tools together462239 +Ref: Putting the tools together-Footnote-1474196 +Node: Copying This Manual474270 +Node: GNU Free Documentation License474525 +Node: Index496926 + +End Tag Table diff --git a/doc/coreutils.texi b/doc/coreutils.texi new file mode 100644 index 0000000..588147f --- /dev/null +++ b/doc/coreutils.texi @@ -0,0 +1,14638 @@ +\input texinfo +@c %**start of header +@setfilename coreutils.info +@settitle @sc{gnu} Coreutils + +@c %**end of header + +@include version.texi +@include constants.texi + +@c Define new indices. +@defcodeindex op +@defcodeindex fl + +@c Put everything in one index (arbitrarily chosen to be the concept index). +@syncodeindex fl cp +@syncodeindex fn cp +@syncodeindex ky cp +@syncodeindex op cp +@syncodeindex pg cp +@syncodeindex vr cp + +@dircategory Basics +@direntry +* Coreutils: (coreutils). Core GNU (file, text, shell) utilities. +* Common options: (coreutils)Common options. Common options. +* File permissions: (coreutils)File permissions. Access modes. +* Date input formats: (coreutils)Date input formats. +@end direntry + +@c FIXME: the following need documentation +@c * [: (coreutils)[ invocation. File/string tests. +@c * pinky: (coreutils)pinky invocation. FIXME. +@c * uptime: (coreutils)uptime invocation. FIXME. + +@dircategory Individual utilities +@direntry +* base64: (coreutils)base64 invocation. Base64 encode/decode data. +* basename: (coreutils)basename invocation. Strip directory and suffix. +* cat: (coreutils)cat invocation. Concatenate and write files. +* chgrp: (coreutils)chgrp invocation. Change file groups. +* chmod: (coreutils)chmod invocation. Change file permissions. +* chown: (coreutils)chown invocation. Change file owners/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 disk usage. +* dir: (coreutils)dir invocation. List directories briefly. +* dircolors: (coreutils)dircolors invocation. Color setup for ls. +* dirname: (coreutils)dirname invocation. Strip non-directory suffix. +* du: (coreutils)du invocation. Report on disk 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 and change 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. +* 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. +* 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. +* rm: (coreutils)rm invocation. Remove files. +* rmdir: (coreutils)rmdir invocation. Remove empty directories. +* 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 fixed-size pieces. +* stat: (coreutils)stat invocation. Report file(system) status. +* stty: (coreutils)stty invocation. Print/change terminal settings. +* su: (coreutils)su invocation. Modify user and group ID. +* sum: (coreutils)sum invocation. Print traditional checksum. +* sync: (coreutils)sync invocation. Synchronize memory and disk. +* 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. +* touch: (coreutils)touch invocation. Change file timestamps. +* tr: (coreutils)tr invocation. Translate characters. +* true: (coreutils)true invocation. Do nothing, successfully. +* 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). +* 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 direntry + +@copying +This manual documents version @value{VERSION} of the @sc{gnu} core +utilities, including the standard programs for text and file manipulation. + +Copyright @copyright{} 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2004, +2005, 2006 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 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''. +@end quotation +@end copying + +@titlepage +@title @sc{gnu} @code{Coreutils} +@subtitle Core GNU utilities +@subtitle for version @value{VERSION}, @value{UPDATED} +@author David MacKenzie et al. + +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + + +@ifnottex +@node Top +@top GNU Coreutils + +@insertcopying +@end ifnottex + +@cindex core utilities +@cindex text utilities +@cindex shell utilities +@cindex file utilities + +@menu +* Introduction:: Caveats, overview, and authors. +* Common options:: Common options. +* Output of entire files:: cat tac nl od +* Formatting file contents:: fmt pr fold +* Output of parts of files:: head tail split csplit +* Summarizing files:: wc sum cksum md5sum sha1sum sha2 +* Operating on sorted files:: sort shuf uniq comm ptx tsort +* Operating on fields within a line:: 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:: ln mkdir rmdir mkfifo mknod +* Changing file attributes:: chgrp chmod chown touch +* Disk usage:: df du stat sync +* Printing text:: echo printf yes +* Conditions:: false true test expr +* Redirection:: tee +* File name manipulation:: dirname basename pathchk +* Working context:: pwd stty printenv tty +* User information:: id logname whoami groups users who +* System context:: date uname hostname hostid +* Modified command invocation:: chroot env nice nohup su +* Process control:: kill +* Delaying:: sleep +* Numeric operations:: factor seq +* File permissions:: Access modes. +* Date input formats:: Specifying date strings. +* Opening the software toolbox:: The software tools philosophy. +* Copying This Manual:: License for copying this manual. +* Index:: General index. + +@detailmenu + --- The Detailed Node Listing --- + +Common Options + +* Exit status:: Indicating program success or failure. +* Backup options:: Backup options +* Block size:: Block size +* Disambiguating names and IDs:: chgrp and chown owner 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 + +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. +* base64 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. +* 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. + +@command{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 @acronym{GNU} extensions to @command{ptx} + +Operating on fields within a line + +* 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. + +@command{tr}: Translate, squeeze, and/or delete characters + +* Character sets:: Specifying sets of characters. +* Translating:: Changing one set of characters to another. +* Squeezing:: Squeezing repeats and deleting. + +Directory listing + +* ls invocation:: List directory contents +* dir invocation:: Briefly list directory contents +* vdir invocation:: Verbosely list directory contents +* dircolors invocation:: Color setup for @command{ls} + +@command{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 +* More details about version sort:: More details about version sort +* 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 the referent of a symbolic link +* 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 + +Disk usage + +* df invocation:: Report file system disk space usage +* du invocation:: Estimate file space usage +* stat invocation:: Report file or file system status +* sync invocation:: Synchronize data on disk with memory + +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 + +@command{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 + +@command{expr}: Evaluate expression + +* String expressions:: + : match substr index length +* Numeric expressions:: + - * / % +* Relations for expr:: | & < <= = == != >= > +* Examples of expr:: Examples of using @command{expr} + +Redirection + +* tee invocation:: Redirect output to multiple files + +File name manipulation + +* basename invocation:: Strip directory and suffix from a file name +* dirname invocation:: Strip non-directory suffix from a file name +* pathchk invocation:: Check file name portability + +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 + +@command{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 + +* date invocation:: Print or set system date and time +* uname invocation:: Print system information +* hostname invocation:: Print or set system name +* hostid invocation:: Print numeric host identifier. + +@command{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. +* Examples of date:: Examples. + +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 +* su invocation:: Run a command with substitute user and group ID + +Process control + +* kill invocation:: Sending a signal to processes. + +Delaying + +* sleep invocation:: Delay for a specified time + +Numeric operations + +* factor invocation:: Print prime factors +* seq invocation:: Print numeric sequences + +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:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @@1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al. + +Opening the software toolbox + +* Toolbox introduction:: Toolbox introduction +* I/O redirection:: I/O redirection +* The who command:: The @command{who} command +* The cut command:: The @command{cut} command +* The sort command:: The @command{sort} command +* The uniq command:: The @command{uniq} command +* Putting the tools together:: Putting the tools together + +Copying This Manual + +* GNU Free Documentation License:: License for copying this manual. + +@end detailmenu +@end menu + + +@node Introduction +@chapter 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 @sc{gnu} community +will benefit. + +@cindex @acronym{POSIX} +The @sc{gnu} utilities documented here are mostly compatible with the +@acronym{POSIX} standard. +@cindex bugs, reporting +Please report bugs to @email{bug-coreutils@@gnu.org}. Remember +to 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. Diffs are welcome, but +please include a description of the problem as well, since this is +sometimes difficult to infer. @xref{Bugs, , , gcc, Using and Porting GNU CC}. + +@cindex Berry, K. +@cindex Paterson, R. +@cindex Stallman, R. +@cindex Pinard, F. +@cindex MacKenzie, D. +@cindex Meyering, J. +@cindex Youmans, B. +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 @command{fmt} man page was written by Ross Paterson. Fran@,{c}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. + +@node Common options +@chapter Common options + +@macro optBackup +@item -b +@itemx @w{@kbd{--backup}[=@var{method}]} +@opindex -b +@opindex --backup +@vindex VERSION_CONTROL +@cindex backups, making +@xref{Backup options}. +Make a backup of each file that would otherwise be overwritten or removed. +@end macro + +@macro optBackupSuffix +@item -S @var{suffix} +@itemx --suffix=@var{suffix} +@opindex -S +@opindex --suffix +Append @var{suffix} to each backup file made with @option{-b}. +@xref{Backup options}. +@end macro + +@macro optTargetDirectory +@item -t @var{directory} +@itemx @w{@kbd{--target-directory}=@var{directory}} +@opindex -t +@opindex --target-directory +@cindex target directory +@cindex destination directory +Specify the destination @var{directory}. +@xref{Target directory}. +@end macro + +@macro optNoTargetDirectory +@item -T +@itemx --no-target-directory +@opindex -T +@opindex --no-target-directory +@cindex target directory +@cindex destination directory +Do not treat the last operand specially when it is a directory or a +symbolic link to a directory. @xref{Target directory}. +@end macro + +@macro optSi +@itemx --si +@opindex --si +@cindex SI output +Append an SI-style abbreviation to each size, such as @samp{M} for +megabytes. Powers of 1000 are used, not 1024; @samp{M} stands for +1,000,000 bytes. This option is equivalent to +@option{--block-size=si}. Use the @option{-h} or +@option{--human-readable} option if +you prefer powers of 1024. +@end macro + +@macro optHumanReadable +@item -h +@itemx --human-readable +@opindex -h +@opindex --human-readable +@cindex human-readable output +Append a size letter to each size, such as @samp{M} for mebibytes. +Powers of 1024 are used, not 1000; @samp{M} stands for 1,048,576 bytes. +Use the @option{--si} option if you prefer powers of 1000. +@end macro + +@macro optStripTrailingSlashes +@itemx @w{@kbd{--strip-trailing-slashes}} +@opindex --strip-trailing-slashes +@cindex stripping trailing slashes +Remove any trailing slashes from each @var{source} argument. +@xref{Trailing slashes}. +@end macro + +@cindex 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 @sc{gnu} program accepts (or should accept) +these options.) + +@vindex POSIXLY_CORRECT +Normally options and operands can appear in any order, and programs act +as if all the options appear before any operands. For example, +@samp{sort -r passwd -t :} acts like @samp{sort -r -t : passwd}, since +@samp{:} is an option-argument of @option{-t}. However, if the +@env{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 +@samp{-}. With such a program, options must precede operands even if +@env{POSIXLY_CORRECT} is not set, and this fact is noted in the +program description. For example, the @command{env} command's options +must appear before its operands, since in some cases the operands +specify a command that itself contains options. + +Some of these programs recognize the @option{--help} and @option{--version} +options only when one of them is the sole command line argument. + +@table @samp + +@item --help +@opindex --help +@cindex help, online +Print a usage message listing all available options, then exit successfully. + +@item --version +@opindex --version +@cindex version number, finding +Print the version number, then exit successfully. + +@item -- +@opindex -- +@cindex option delimiter +Delimit the option list. Later arguments, if any, are treated as +operands even if they begin with @samp{-}. For example, @samp{sort -- +-r} reads from the file named @file{-r}. + +@end table + +@cindex standard input +@cindex standard output +A single @samp{-} operand is not really an option, though it looks like one. It +stands for standard input, or for standard output if that is clear from +the context. For example, @samp{sort -} reads from standard input, +and is equivalent to plain @samp{sort}, and @samp{tee -} writes an +extra copy of its input to standard output. Unless otherwise +specified, @samp{-} can appear as any operand that requires a file +name. + +@menu +* Exit status:: Indicating program success or failure. +* Backup options:: -b -S, in some programs. +* Block size:: BLOCK_SIZE and --block-size, in some programs. +* Disambiguating names and IDs:: chgrp and chown owner and group syntax +* Random sources:: --random-source, in some programs. +* Target directory:: Specifying a target directory, in some programs. +* Trailing slashes:: --strip-trailing-slashes, in some programs. +* Traversing symlinks:: -H, -L, or -P, in some programs. +* Treating / specially:: --preserve-root and --no-preserve-root. +* Special built-in utilities:: @command{break}, @command{:}, @command{eval}, @dots{} +* Standards conformance:: Conformance to the @acronym{POSIX} standard. +@end menu + + +@node Exit status +@section Exit status + +@macro exitstatus +An exit status of zero indicates success, +and a nonzero value indicates failure. +@end macro + +Nearly every command invocation yields an integral @dfn{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 +@samp{1}, though it may differ on unusual platforms as @acronym{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 @samp{0} and @samp{1}. +Here are some of the exceptions: +@command{chroot}, @command{env}, @command{expr}, +@command{nice}, @command{nohup}, @command{printenv}, +@command{sort}, @command{su}, @command{test}, @command{tty}. + + +@node Backup options +@section Backup options + +@cindex backup options + +Some @sc{gnu} programs (at least @command{cp}, @command{install}, +@command{ln}, and @command{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. + +@table @samp + +@item -b +@itemx @w{@kbd{--backup}[=@var{method}]} +@opindex -b +@opindex --backup +@vindex VERSION_CONTROL +@cindex backups, making +Make a backup of each file that would otherwise be overwritten or removed. +Without this option, the original versions are destroyed. +Use @var{method} to determine the type of backups to make. +When this option is used but @var{method} is not specified, +then the value of the @env{VERSION_CONTROL} +environment variable is used. And if @env{VERSION_CONTROL} is not set, +the default backup type is @samp{existing}. + +Note that the short form of this option, @option{-b} does not accept any +argument. Using @option{-b} is equivalent to using @option{--backup=existing}. + +@vindex version-control @r{Emacs variable} +This option corresponds to the Emacs variable @samp{version-control}; +the values for @var{method} are the same as those used in Emacs. +This option also accepts more descriptive names. +The valid @var{method}s are (unique abbreviations are accepted): + +@table @samp +@item none +@itemx off +@opindex none @r{backup method} +Never make backups. + +@item numbered +@itemx t +@opindex numbered @r{backup method} +Always make numbered backups. + +@item existing +@itemx nil +@opindex existing @r{backup method} +Make numbered backups of files that already have them, simple backups +of the others. + +@item simple +@itemx never +@opindex simple @r{backup method} +Always make simple backups. Please note @samp{never} is not to be +confused with @samp{none}. + +@end table + +@item -S @var{suffix} +@itemx --suffix=@var{suffix} +@opindex -S +@opindex --suffix +@cindex backup suffix +@vindex SIMPLE_BACKUP_SUFFIX +Append @var{suffix} to each backup file made with @option{-b}. If this +option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX} +environment variable is used. And if @env{SIMPLE_BACKUP_SUFFIX} is not +set, the default is @samp{~}, just as in Emacs. + +@end table + +@node Block size +@section Block size + +@cindex block size + +Some @sc{gnu} programs (at least @command{df}, @command{du}, and +@command{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. + +@opindex --block-size=@var{size} +@vindex BLOCKSIZE +@vindex BLOCK_SIZE +@vindex DF_BLOCK_SIZE +@vindex DU_BLOCK_SIZE +@vindex LS_BLOCK_SIZE +@vindex POSIXLY_CORRECT@r{, and block size} + +The default block size is chosen by examining the following environment +variables in turn; the first one that is set determines the block size. + +@table @code + +@item DF_BLOCK_SIZE +This specifies the default block size for the @command{df} command. +Similarly, @env{DU_BLOCK_SIZE} specifies the default for @command{du} and +@env{LS_BLOCK_SIZE} for @command{ls}. + +@item BLOCK_SIZE +This specifies the default block size for all three commands, if the +above command-specific environment variables are not set. + +@item BLOCKSIZE +This specifies the default block size for all values that are normally +printed as blocks, if neither @env{BLOCK_SIZE} nor the above +command-specific environment variables are set. Unlike the other +environment variables, @env{BLOCKSIZE} does not affect values that are +normally printed as byte counts, e.g., the file sizes contained in +@code{ls -l} output. + +@item POSIXLY_CORRECT +If neither @env{@var{command}_BLOCK_SIZE}, nor @env{BLOCK_SIZE}, nor +@env{BLOCKSIZE} is set, but this variable is set, the block size +defaults to 512. + +@end table + +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 @command{ls} file sizes, the block size +defaults to 1 byte. + +@cindex human-readable output +@cindex SI output + +A block size specification can be a positive integer specifying the number +of bytes per block, or it can be @code{human-readable} or @code{si} to +select a human-readable format. Integers may be followed by suffixes +that are upward compatible with the +@uref{http://www.bipm.fr/enus/3_SI/si-prefixes.html, SI prefixes} +for decimal multiples and with the +@uref{http://physics.nist.gov/cuu/Units/binary.html, IEC 60027-2 +prefixes for binary multiples}. + +With human-readable formats, output sizes are followed by a size letter +such as @samp{M} for megabytes. @code{BLOCK_SIZE=human-readable} uses +powers of 1024; @samp{M} stands for 1,048,576 bytes. +@code{BLOCK_SIZE=si} is similar, but uses powers of 1000 and appends +@samp{B}; @samp{MB} stands for 1,000,000 bytes. + +@vindex LC_NUMERIC +A block size specification preceded by @samp{'} causes output sizes to +be displayed with thousands separators. The @env{LC_NUMERIC} locale +specifies the thousands separator and grouping. For example, in an +American English locale, @samp{--block-size="'1kB"} would cause a size +of 1234000 bytes to be displayed as @samp{1,234}. In the default C +locale, there is no thousands separator so a leading @samp{'} 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 @samp{iB}, specifies +a multiple using powers of 1024. A size letter followed by @samp{B} +specifies powers of 1000 instead. For example, @samp{1M} and +@samp{1MiB} are equivalent to @samp{1048576}, whereas @samp{1MB} is +equivalent to @samp{1000000}. + +A plain suffix without a preceding integer acts as if @samp{1} were +prepended, except that it causes a size indication to be appended to +the output. For example, @samp{--block-size="kB"} displays 3000 as +@samp{3kB}. + +The following suffixes are defined. Large sizes like @code{1Y} +may be rejected by your computer due to limitations of its arithmetic. + +@table @samp +@item kB +@cindex kilobyte, definition of +kilobyte: @math{10^3 = 1000}. +@item k +@itemx K +@itemx KiB +@cindex kibibyte, definition of +kibibyte: @math{2^10 = 1024}. @samp{K} is special: the SI prefix is +@samp{k} and the IEC 60027-2 prefix is @samp{Ki}, but tradition and +@acronym{POSIX} use @samp{k} to mean @samp{KiB}. +@item MB +@cindex megabyte, definition of +megabyte: @math{10^6 = 1,000,000}. +@item M +@itemx MiB +@cindex mebibyte, definition of +mebibyte: @math{2^20 = 1,048,576}. +@item GB +@cindex gigabyte, definition of +gigabyte: @math{10^9 = 1,000,000,000}. +@item G +@itemx GiB +@cindex gibibyte, definition of +gibibyte: @math{2^30 = 1,073,741,824}. +@item TB +@cindex terabyte, definition of +terabyte: @math{10^12 = 1,000,000,000,000}. +@item T +@itemx TiB +@cindex tebibyte, definition of +tebibyte: @math{2^40 = 1,099,511,627,776}. +@item PB +@cindex petabyte, definition of +petabyte: @math{10^15 = 1,000,000,000,000,000}. +@item P +@itemx PiB +@cindex pebibyte, definition of +pebibyte: @math{2^50 = 1,125,899,906,842,624}. +@item EB +@cindex exabyte, definition of +exabyte: @math{10^18 = 1,000,000,000,000,000,000}. +@item E +@itemx EiB +@cindex exbibyte, definition of +exbibyte: @math{2^60 = 1,152,921,504,606,846,976}. +@item ZB +@cindex zettabyte, definition of +zettabyte: @math{10^21 = 1,000,000,000,000,000,000,000} +@item Z +@itemx ZiB +@math{2^70 = 1,180,591,620,717,411,303,424}. +(@samp{Zi} is a @acronym{GNU} extension to IEC 60027-2.) +@item YB +@cindex yottabyte, definition of +yottabyte: @math{10^24 = 1,000,000,000,000,000,000,000,000}. +@item Y +@itemx YiB +@math{2^80 = 1,208,925,819,614,629,174,706,176}. +(@samp{Yi} is a @acronym{GNU} extension to IEC 60027-2.) +@end table + +@opindex -k +@opindex -h +@opindex --block-size +@opindex --human-readable +@opindex --si + +Block size defaults can be overridden by an explicit +@option{--block-size=@var{size}} option. The @option{-k} +option is equivalent to @option{--block-size=1K}, which +is the default unless the @env{POSIXLY_CORRECT} environment variable is +set. The @option{-h} or @option{--human-readable} option is equivalent to +@option{--block-size=human-readable}. The @option{--si} option is +equivalent to @option{--block-size=si}. + +@node Disambiguating names and IDs +@section chown and chgrp: Disambiguating user names and IDs +@cindex user names, disambiguating +@cindex user IDs, disambiguating +@cindex group names, disambiguating +@cindex group IDs, disambiguating +@cindex disambiguating group names and IDs + +Since the @var{owner} and @var{group} arguments to @command{chown} and +@command{chgrp} may be specified as names or numeric IDs, there is an +apparent ambiguity. +What if a user or group @emph{name} is a string of digits? +@footnote{Using a number as a user name is common in some environments.} +Should the command interpret it as a user name or as an ID? +@acronym{POSIX} requires that @command{chown} and @command{chgrp} +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 +@samp{42} is a user name that maps to some other user ID, say 1000. +Simply invoking @code{chown 42 F}, will set @file{F}s owner ID to +1000---not what you intended. + +GNU @command{chown} and @command{chgrp} 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 @samp{+}, +in order to force its interpretation as an integer: + +@example +chown +42 F +chgrp +$numeric_group_id another-file +chown +0:+0 / +@end example + +GNU @command{chown} and @command{chgrp} +skip the name look-up process for each @samp{+}-prefixed string, +because a string containing @samp{+} is never a valid user or group name. +This syntax is accepted on most common Unix systems, but not on Solaris 10. + +@node Random sources +@section Sources of random data + +@cindex random sources + +The @command{shuf}, @command{shred}, and @command{sort} commands +sometimes need random data to do their work. For example, @samp{sort +-R} must choose a hash function at random, and it needs random data to +make this selection. + +Normally these commands use the device file @file{/dev/urandom} 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 pseudorandom number generator. + +@file{/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 @file{/dev/random} or +@file{/dev/arandom}. The set of available sources depends on your +operating system. + +To use such a source, specify the @option{--random-source=@var{file}} +option, e.g., @samp{shuf --random-source=/dev/random}. The contents +of @var{file} should be as random as possible. An error is reported +if @var{file} does not contain enough bytes to randomize the input +adequately. + +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. + +Some old-fashioned or stripped-down operating systems lack support for +@command{/dev/urandom}. On these systems commands like @command{shuf} +by default fall back on an internal pseudorandom generator initialized +by a small amount of entropy. + +@node Target directory +@section Target directory + +@cindex target directory + +The @command{cp}, @command{install}, @command{ln}, and @command{mv} +commands normally treat the last operand specially when it is a +directory or a symbolic link to a directory. For example, @samp{cp +source dest} is equivalent to @samp{cp source dest/source} if +@file{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: + +@table @samp + +@item -T +@itemx --no-target-directory +@opindex --no-target-directory +@cindex target directory +@cindex destination 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 +@samp{mv /tmp/source /tmp/dest} succeeds, there is no guarantee that +@file{/tmp/source} was renamed to @file{/tmp/dest}: it could have been +renamed to @file{/tmp/dest/source} instead, if some other process +created @file{/tmp/dest} as a directory. However, if @file{mv +-T /tmp/source /tmp/dest} succeeds, there is no +question that @file{/tmp/source} was renamed to @file{/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 @option{--target-directory} (@option{-t}) option. + +@item -t @var{directory} +@itemx @w{@kbd{--target-directory}=@var{directory}} +@opindex --target-directory +@cindex target directory +@cindex destination directory +Use @var{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 @command{xargs} +program is designed to work well with this convention. + +The commands in the @command{mv}-family are unusual in that they take +a variable number of arguments with a special case at the @emph{end} +(namely, the target directory). This makes it nontrivial to perform some +operations, e.g., ``move all files from here to ../d/'', because +@code{mv * ../d/} might exhaust the argument space, and @code{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 @w{@kbd{--target-directory}} (@option{-t}) option allows the @command{cp}, +@command{install}, @command{ln}, and @command{mv} programs to be used +conveniently with @command{xargs}. For example, you can move the files +from the current directory to a sibling directory, @code{d} like this: + +@smallexample +ls | xargs mv -t ../d -- +@end smallexample + +However, this doesn't move files whose names begin with @samp{.}. +If you use the @sc{gnu} @command{find} program, you can move those +files too, with this command: + +@example +find . -mindepth 1 -maxdepth 1 \ + | xargs mv -t ../d +@end example + +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 +@sc{gnu} @command{find} and @sc{gnu} @command{xargs}: + +@example +find . -mindepth 1 -maxdepth 1 -print0 \ + | xargs --null --no-run-if-empty \ + mv -t ../d +@end example + +@end table + +@noindent +The @option{--target-directory} (@option{-t}) and +@option{--no-target-directory} (@option{-T}) +options cannot be combined. + +@node Trailing slashes +@section Trailing slashes + +@cindex trailing slashes + +Some @sc{gnu} programs (at least @command{cp} and @command{mv}) allow you to +remove any trailing slashes from each @var{source} argument before +operating on it. The @w{@kbd{--strip-trailing-slashes}} option enables +this behavior. + +This is useful when a @var{source} argument may have a trailing slash and +@c FIXME: mv's behavior in this case is system-dependent +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, @command{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 @emph{directory} and not +the symbolic link. Although it may seem surprising that such behavior +be the default, it is required by @acronym{POSIX} and is consistent with +other parts of that standard. + +@node Traversing symlinks +@section Traversing symlinks + +@cindex symbolic link to directory, controlling traversal of + +The following options modify how @command{chown} and @command{chgrp} +@c FIXME: note that `du' has these options, too, but they have slightly +@c different meaning. +traverse a hierarchy when the @option{--recursive} (@option{-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 @option{--dereference} and +@option{--no-dereference} (@option{-h}), which control whether to modify +a symlink or its referent. + +@table @samp + +@macro choptH +@item -H +@opindex -H +@cindex symbolic link to directory, traverse each that is specified on the command line +If @option{--recursive} (@option{-R}) is specified and +a command line argument is a symbolic link to a directory, traverse it. +@end macro +@choptH + +@macro choptL +@item -L +@opindex -L +@cindex symbolic link to directory, traverse each that is encountered +In a recursive traversal, traverse every symbolic link to a directory +that is encountered. +@end macro +@choptL + +@macro choptP +@item -P +@opindex -P +@cindex symbolic link to directory, never traverse +Do not traverse any symbolic links. +This is the default if none of @option{-H}, @option{-L}, +or @option{-P} is specified. +@end macro +@choptP + +@end table + + +@node Treating / specially +@section Treating / specially + +Certain commands can operate destructively on entire hierarchies. +For example, if a user with appropriate privileges mistakenly runs +@samp{rm -rf / tmp/junk}, that may remove +all files on the entire system. Since there are so few +legitimate uses for such a command, +@sc{gnu} @command{rm} normally declines to operate on any directory +that resolves to @file{/}. If you really want to try to remove all +the files on your system, you can use the @option{--no-preserve-root} +option, but the default behavior, specified by the +@option{--preserve-option}, is safer for most purposes. + +The commands @command{chgrp}, @command{chmod} and @command{chown} +can also operate destructively on entire hierarchies, so they too +support these options. Although, unlike @command{rm}, they don't +actually unlink files, these commands are arguably more dangerous +when operating recursively on @file{/}, since they often work much +more quickly, and hence damage more files before an alert user can +interrupt them. Tradition and @acronym{POSIX} require these commands +to operate recursively on @file{/}, so they default to +@option{--no-preserve-root}, but using the @option{--preserve-root} +option makes them safer for most purposes. For convenience you can +specify @option{--preserve-root} in an alias or in a shell function. + +Note that the @option{--preserve-root} option also ensures +that @command{chgrp} and @command{chown} do not modify @file{/} +even when dereferencing a symlink pointing to @file{/}. + +@node Special built-in utilities +@section Special built-in utilities + +Some programs like @command{nice} can invoke other programs; for +example, the command @samp{nice cat file} invokes the program +@command{cat} by executing the command @samp{cat file}. However, +@dfn{special built-in utilities} like @command{exit} cannot be invoked +this way. For example, the command @samp{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 @acronym{POSIX} 1003.1-2004. + +@quotation +@t{.@: : break continue eval exec exit export readonly +return set shift times trap unset} +@end quotation + +For example, because @samp{.}, @samp{:}, and @samp{exec} are special, +the commands @samp{nice . foo.sh}, @samp{nice :}, and @samp{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 @command{history}, and +@command{suspend}, and with Bash the command @samp{nice suspend} +generates an error message instead of suspending. + +@node Standards conformance +@section Standards conformance + +@vindex POSIXLY_CORRECT +In a few cases, the @sc{gnu} utilities' default behavior is +incompatible with the @acronym{POSIX} standard. To suppress these +incompatibilities, define the @env{POSIXLY_CORRECT} environment +variable. Unless you are checking for @acronym{POSIX} conformance, you +probably do not need to define @env{POSIXLY_CORRECT}. + +Newer versions of @acronym{POSIX} are occasionally incompatible with older +versions. For example, older versions of @acronym{POSIX} required the +command @samp{sort +1} to sort based on the second and succeeding +fields in each input line, but starting with @acronym{POSIX} 1003.1-2001 +the same command is required to sort the file named @file{+1}, and you +must instead use the command @samp{sort -k 2} to get the field-based +sort. + +@vindex _POSIX2_VERSION +The @sc{gnu} utilities normally conform to the version of @acronym{POSIX} +that is standard for your system. To cause them to conform to a +different version of @acronym{POSIX}, define the @env{_POSIX2_VERSION} +environment variable to a value of the form @var{yyyymm} specifying +the year and month the standard was adopted. Two values are currently +supported for @env{_POSIX2_VERSION}: @samp{199209} stands for +@acronym{POSIX} 1003.2-1992, and @samp{200112} stands for @acronym{POSIX} +1003.1-2001. For example, if you have a newer system but are running software +that assumes an older version of @acronym{POSIX} and uses @samp{sort +1} +or @samp{tail +10}, you can work around any compatibility problems by setting +@samp{_POSIX2_VERSION=199209} in your environment. + +@node Output of entire files +@chapter Output of entire files + +@cindex output of entire files +@cindex entire files, output of + +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. +* base64 invocation:: Transform data into printable data. +@end menu + +@node cat invocation +@section @command{cat}: Concatenate and write files + +@pindex cat +@cindex concatenate and write files +@cindex copying files + +@command{cat} copies each @var{file} (@samp{-} means standard input), or +standard input if none are given, to standard output. Synopsis: + +@example +cat [@var{option}] [@var{file}]@dots{} +@end example + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -A +@itemx --show-all +@opindex -A +@opindex --show-all +Equivalent to @option{-vET}. + +@item -b +@itemx --number-nonblank +@opindex -b +@opindex --number-nonblank +Number all nonblank output lines, starting with 1. + +@item -e +@opindex -e +Equivalent to @option{-vE}. + +@item -E +@itemx --show-ends +@opindex -E +@opindex --show-ends +Display a @samp{$} after the end of each line. + +@item -n +@itemx --number +@opindex -n +@opindex --number +Number all output lines, starting with 1. + +@item -s +@itemx --squeeze-blank +@opindex -s +@opindex --squeeze-blank +@cindex squeezing blank lines +Replace multiple adjacent blank lines with a single blank line. + +@item -t +@opindex -t +Equivalent to @option{-vT}. + +@item -T +@itemx --show-tabs +@opindex -T +@opindex --show-tabs +Display TAB characters as @samp{^I}. + +@item -u +@opindex -u +Ignored; for @acronym{POSIX} compatibility. + +@item -v +@itemx --show-nonprinting +@opindex -v +@opindex --show-nonprinting +Display control characters except for LFD and TAB using +@samp{^} notation and precede characters that have the high bit set with +@samp{M-}. + +@end table + +On systems like MS-DOS that distinguish between text and binary files, +@command{cat} normally reads and writes in binary mode. However, +@command{cat} reads in text mode if one of the options +@option{-bensAE} is used or if @command{cat} is reading from standard +input and standard input is a terminal. Similarly, @command{cat} +writes in text mode if one of the options @option{-bensAE} is used or +if standard output is a terminal. + +@exitstatus + +Examples: + +@smallexample +# Output f's contents, then standard input, then g's contents. +cat f - g + +# Copy standard input to standard output. +cat +@end smallexample + + +@node tac invocation +@section @command{tac}: Concatenate and write files in reverse + +@pindex tac +@cindex reversing files + +@command{tac} copies each @var{file} (@samp{-} means standard input), or +standard input if none are given, to standard output, reversing the +records (lines by default) in each separately. Synopsis: + +@example +tac [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@dfn{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 @ref{Common options}. + +@table @samp + +@item -b +@itemx --before +@opindex -b +@opindex --before +The separator is attached to the beginning of the record that it +precedes in the file. + +@item -r +@itemx --regex +@opindex -r +@opindex --regex +Treat the separator string as a regular expression. Users of @command{tac} +on MS-DOS/MS-Windows should note that, since @command{tac} reads files in +binary mode, each line of a text file might end with a CR/LF pair +instead of the Unix-style LF. + +@item -s @var{separator} +@itemx --separator=@var{separator} +@opindex -s +@opindex --separator +Use @var{separator} as the record separator, instead of newline. + +@end table + +@exitstatus + + +@node nl invocation +@section @command{nl}: Number lines and write files + +@pindex nl +@cindex numbering lines +@cindex line numbering + +@command{nl} writes each @var{file} (@samp{-} 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: + +@example +nl [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@cindex logical pages, numbering on +@command{nl} decomposes its input into (logical) pages; by default, the +line number is reset to 1 at the top of each logical page. @command{nl} +treats all of the input files as a single document; it does not reset +line numbers or logical pages between files. + +@cindex headers, numbering +@cindex body, numbering +@cindex footers, numbering +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: + +@table @samp +@item \:\:\: +start of header; +@item \:\: +start of body; +@item \: +start of footer. +@end table + +The two characters from which these strings are made can be changed from +@samp{\} and @samp{:} via options (see below), but the pattern and +length 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 @command{nl} treats a +file that contains no section delimiters as a single body section. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -b @var{style} +@itemx --body-numbering=@var{style} +@opindex -b +@opindex --body-numbering +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: + +@table @samp +@item a +number all lines, +@item t +number only nonempty lines (default for body), +@item n +do not number lines (default for header and footer), +@item p@var{bre} +number only lines that contain a match for the basic regular +expression @var{bre}. +@xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep Manual}. +@end table + +@item -d @var{cd} +@itemx --section-delimiter=@var{cd} +@opindex -d +@opindex --section-delimiter +@cindex section delimiters of pages +Set the section delimiter characters to @var{cd}; default is +@samp{\:}. If only @var{c} is given, the second remains @samp{:}. +(Remember to protect @samp{\} or other metacharacters from shell +expansion with quotes or extra backslashes.) + +@item -f @var{style} +@itemx --footer-numbering=@var{style} +@opindex -f +@opindex --footer-numbering +Analogous to @option{--body-numbering}. + +@item -h @var{style} +@itemx --header-numbering=@var{style} +@opindex -h +@opindex --header-numbering +Analogous to @option{--body-numbering}. + +@item -i @var{number} +@itemx --page-increment=@var{number} +@opindex -i +@opindex --page-increment +Increment line numbers by @var{number} (default 1). + +@item -l @var{number} +@itemx --join-blank-lines=@var{number} +@opindex -l +@opindex --join-blank-lines +@cindex empty lines, numbering +@cindex blank lines, numbering +Consider @var{number} (default 1) consecutive empty lines to be one +logical line for numbering, and only number the last one. Where fewer +than @var{number} consecutive empty lines occur, do not number them. +An empty line is one that contains no characters, not even spaces +or tabs. + +@item -n @var{format} +@itemx --number-format=@var{format} +@opindex -n +@opindex --number-format +Select the line numbering format (default is @code{rn}): + +@table @samp +@item ln +@opindex ln @r{format for @command{nl}} +left justified, no leading zeros; +@item rn +@opindex rn @r{format for @command{nl}} +right justified, no leading zeros; +@item rz +@opindex rz @r{format for @command{nl}} +right justified, leading zeros. +@end table + +@item -p +@itemx --no-renumber +@opindex -p +@opindex --no-renumber +Do not reset the line number at the start of a logical page. + +@item -s @var{string} +@itemx --number-separator=@var{string} +@opindex -s +@opindex --number-separator +Separate the line number from the text line in the output with +@var{string} (default is the TAB character). + +@item -v @var{number} +@itemx --starting-line-number=@var{number} +@opindex -v +@opindex --starting-line-number +Set the initial line number on each logical page to @var{number} (default 1). + +@item -w @var{number} +@itemx --number-width=@var{number} +@opindex -w +@opindex --number-width +Use @var{number} characters for line numbers (default 6). + +@end table + +@exitstatus + + +@node od invocation +@section @command{od}: Write files in octal or other formats + +@pindex od +@cindex octal dump of files +@cindex hex dump of files +@cindex ASCII dump of files +@cindex file contents, dumping unambiguously + +@command{od} writes an unambiguous representation of each @var{file} +(@samp{-} means standard input), or standard input if none are given. +Synopses: + +@smallexample +od [@var{option}]@dots{} [@var{file}]@dots{} +od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]] +od [@var{option}]@dots{} --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]] +@end smallexample + +Each line of output consists of the offset in the input, followed by +groups of data from the file. By default, @command{od} prints the offset in +octal, and each group of file data is a C @code{short int}'s worth of input +printed as a single octal number. + +If @var{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 @samp{0x} or @samp{0X} it is interpreted as a hexadecimal +number. If there is a trailing @samp{b}, the number of bytes skipped +will be @var{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 @samp{+} or (if there are two +operands) a digit. For example, in @samp{od foo 10} and @samp{od +10} +the @samp{10} is an offset, whereas in @samp{od 10} the @samp{10} is a +file name. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -A @var{radix} +@itemx --address-radix=@var{radix} +@opindex -A +@opindex --address-radix +@cindex radix for file offsets +@cindex file offset radix +Select the base in which file offsets are printed. @var{radix} can +be one of the following: + +@table @samp +@item d +decimal; +@item o +octal; +@item x +hexadecimal; +@item n +none (do not print offsets). +@end table + +The default is octal. + +@item -j @var{bytes} +@itemx --skip-bytes=@var{bytes} +@opindex -j +@opindex --skip-bytes +Skip @var{bytes} input bytes before formatting and writing. If +@var{bytes} begins with @samp{0x} or @samp{0X}, it is interpreted in +hexadecimal; otherwise, if it begins with @samp{0}, in octal; otherwise, +in decimal. Appending @samp{b} multiplies @var{bytes} by 512, @samp{k} +by 1024, and @samp{m} by 1048576. + +@item -N @var{bytes} +@itemx --read-bytes=@var{bytes} +@opindex -N +@opindex --read-bytes +Output at most @var{bytes} bytes of the input. Prefixes and suffixes on +@code{bytes} are interpreted as for the @option{-j} option. + +@item -S @var{n} +@itemx --strings[=@var{n}] +@opindex -S +@opindex --strings +@cindex string constants, outputting +Instead of the normal output, output only @dfn{string constants}: at +least @var{n} consecutive @acronym{ASCII} graphic characters, +followed by a null (zero) byte. + +If @var{n} is omitted with @option{--strings}, the default is 3. + +@item -t @var{type} +@itemx --format=@var{type} +@opindex -t +@opindex --format +Select the format in which to output the file data. @var{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 @var{type} +string, or use this option more than once, @command{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 @acronym{ASCII} character representation of the printable characters +to the output line generated by the type specification. + +@table @samp +@item a +named character, ignoring high-order bit +@item c +@acronym{ASCII} character or backslash escape, +@item d +signed decimal +@item f +floating point +@item o +octal +@item u +unsigned decimal +@item x +hexadecimal +@end table + +The type @code{a} outputs things like @samp{sp} for space, @samp{nl} for +newline, and @samp{nul} for a null (zero) byte. Only the least significant +seven bits of each byte is used; the high-order bit is ignored. +Type @code{c} outputs +@samp{ }, @samp{\n}, and @code{\0}, respectively. + +@cindex type size +Except for types @samp{a} and @samp{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 (@samp{d}, @samp{o}, +@samp{u}, @samp{x}): + +@table @samp +@item C +char +@item S +short +@item I +int +@item L +long +@end table + +For floating point (@code{f}): + +@table @asis +@item F +float +@item D +double +@item L +long double +@end table + +@item -v +@itemx --output-duplicates +@opindex -v +@opindex --output-duplicates +Output consecutive lines that are identical. By default, when two or +more consecutive output lines would be identical, @command{od} outputs only +the first line, and puts just an asterisk on the following line to +indicate the elision. + +@item -w[@var{n}] +@itemx --width[=@var{n}] +@opindex -w +@opindex --width +Dump @code{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 @var{n} is +omitted, the default is 32. + +@end table + +The next several options are shorthands for format specifications. +@sc{gnu} @command{od} accepts any combination of shorthands and format +specification options. These options accumulate. + +@table @samp + +@item -a +@opindex -a +Output as named characters. Equivalent to @samp{-t a}. + +@item -b +@opindex -b +Output as octal bytes. Equivalent to @samp{-t o1}. + +@item -c +@opindex -c +Output as @acronym{ASCII} characters or backslash escapes. Equivalent to +@samp{-t c}. + +@item -d +@opindex -d +Output as unsigned decimal two-byte units. Equivalent to @samp{-t u2}. + +@item -f +@opindex -f +Output as floats. Equivalent to @samp{-t fF}. + +@item -i +@opindex -i +Output as decimal ints. Equivalent to @samp{-t dI}. + +@item -l +@opindex -l +Output as decimal long ints. Equivalent to @samp{-t dL}. + +@item -o +@opindex -o +Output as octal two-byte units. Equivalent to @option{-t o2}. + +@item -s +@opindex -s +Output as decimal two-byte units. Equivalent to @option{-t d2}. + +@item -x +@opindex -x +Output as hexadecimal two-byte units. Equivalent to @samp{-t x2}. + +@item --traditional +@opindex --traditional +Recognize the non-option label argument that traditional @command{od} +accepted. The following syntax: + +@smallexample +od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]] +@end smallexample + +@noindent +can be used to specify at most one file and optional arguments +specifying an offset and a pseudo-start address, @var{label}. +The @var{label} argument is interpreted +just like @var{offset}, but it specifies an initial pseudo-address. The +pseudo-addresses are displayed in parentheses following any normal +address. + +@end table + +@exitstatus + +@node base64 invocation +@section @command{base64}: Transform data into printable data. + +@pindex base64 +@cindex base64 encoding + +@command{base64} transforms data read from a file, or standard input, +into (or from) base64 encoded form. The base64 encoded form uses +printable @acronym{ASCII} characters to represent binary data, see +@uref{ftp://ftp.rfc-editor.org/in-notes/rfc3548.txt, RFC 3548}. +Synopses: + +@smallexample +base64 [@var{option}]@dots{} [@var{file}] +base64 --decode [@var{option}]@dots{} [@var{file}] +@end smallexample + +The base64 encoding expands data to roughly 133% of the original. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -w @var{COLS} +@itemx --wrap=@var{COLS} +@opindex -w +@opindex --wrap +@cindex wrap data +@cindex column to wrap data after +During encoding, wrap lines after @var{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. + +@item -d +@itemx --decode +@opindex -d +@opindex --decode +@cindex Decode base64 data +@cindex Base64 decoding +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. + +@item -i +@itemx --ignore-garbage +@opindex -i +@opindex --ignore-garbage +@cindex Ignore garbage in base64 stream +When decoding, newlines are always accepted. +During decoding, ignore unrecognized bytes, +to permit distorted data to be decoded. + +@end table + +@exitstatus + + +@node Formatting file contents +@chapter Formatting file contents + +@cindex 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. +@end menu + + +@node fmt invocation +@section @command{fmt}: Reformat paragraph text + +@pindex fmt +@cindex reformatting paragraph text +@cindex paragraphs, reformatting +@cindex text, reformatting + +@command{fmt} fills and joins lines to produce output lines of (at most) +a given number of characters (75 by default). Synopsis: + +@example +fmt [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@command{fmt} reads from the specified @var{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. + +@cindex line-breaking +@cindex sentences and line-breaking +@cindex Knuth, Donald E. +@cindex Plass, Michael F. +@command{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 @dfn{sentence break} is defined as either the end +of a paragraph or a word ending in any of @samp{.?!}, followed by two +spaces or end of line, ignoring any intervening parentheses or quotes. +Like @TeX{}, @command{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'', +@cite{Software---Practice & Experience} @b{11}, 11 (November 1981), +1119--1184. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c +@itemx --crown-margin +@opindex -c +@opindex --crown-margin +@cindex crown margin +@dfn{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. + +@item -t +@itemx --tagged-paragraph +@opindex -t +@opindex --tagged-paragraph +@cindex tagged paragraphs +@dfn{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. + +@item -s +@itemx --split-only +@opindex -s +@opindex --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. + +@item -u +@itemx --uniform-spacing +@opindex -u +@opindex --uniform-spacing +Uniform spacing. Reduce spacing between words to one space, and spacing +between sentences to two spaces. + +@item -@var{width} +@itemx -w @var{width} +@itemx --width=@var{width} +@opindex -@var{width} +@opindex -w +@opindex --width +Fill output lines up to @var{width} characters (default 75). @command{fmt} +initially tries to make lines about 7% shorter than this, to give it +room to balance line lengths. + +@item -p @var{prefix} +@itemx --prefix=@var{prefix} +Only lines beginning with @var{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. + +@end table + +@exitstatus + + +@node pr invocation +@section @command{pr}: Paginate or columnate files for printing + +@pindex pr +@cindex printing, preparing files for +@cindex multicolumn output, generating +@cindex merging files in parallel + +@command{pr} writes each @var{file} (@samp{-} means standard input), or +standard input if none are given, to standard output, paginating and +optionally outputting in multicolumn format; optionally merges all +@var{file}s, printing all in parallel, one per column. Synopsis: + +@example +pr [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@vindex LC_MESSAGES +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. +With the @option{-F} +option, a 3-line header is printed: the leading two blank lines are +omitted; no footer is used. The default @var{page_length} in both cases is 66 +lines. The default number of text lines changes from 56 (without @option{-F}) +to 63 (with @option{-F}). The text line of the header takes the form +@samp{@var{date} @var{string} @var{page}}, with spaces inserted around +@var{string} so that the line takes up the full @var{page_width}. Here, +@var{date} is the date (see the @option{-D} or @option{--date-format} +option for details), @var{string} is the centered header string, and +@var{page} identifies the page number. The @env{LC_MESSAGES} locale +category affects the spelling of @var{page}; in the default C locale, it +is @samp{Page @var{number}} where @var{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 @samp{space}). For multicolumn output, lines will always be truncated to +@var{page_width} (default 72), unless you use the @option{-J} option. +For single +column output no line truncation occurs by default. Use @option{-W} option to +truncate lines in that case. + +The following changes were made in version 1.22i and apply to later +versions of @command{pr}: +@c FIXME: this whole section here sounds very awkward to me. I +@c made a few small changes, but really it all needs to be redone. - Brian +@c OK, I fixed another sentence or two, but some of it I just don't understand. +@ - Brian +@itemize @bullet + +@item +Some small @var{letter options} (@option{-s}, @option{-w}) have been +redefined for better @acronym{POSIX} compliance. The output of some further +cases has been adapted to other Unix systems. These changes are not +compatible with earlier versions of the program. + +@item +Some @var{new capital letter} options (@option{-J}, @option{-S}, @option{-W}) +have been introduced to turn off unexpected interferences of small letter +options. The @option{-N} option and the second argument @var{last_page} +of @samp{+FIRST_PAGE} offer more flexibility. The detailed handling of +form feeds set in the input files requires the @option{-T} option. + +@item +Capital letter options override small letter ones. + +@item +Some of the option-arguments (compare @option{-s}, @option{-e}, +@option{-i}, @option{-n}) cannot be specified as separate arguments from the +preceding option letter (already stated in the @acronym{POSIX} specification). +@end itemize + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item +@var{first_page}[:@var{last_page}] +@itemx --pages=@var{first_page}[:@var{last_page}] +@c The two following @opindex lines evoke warnings because they contain `:' +@c The `info' spec does not permit that. If we use those lines, we end +@c up with truncated index entries that don't work. +@c @opindex +@var{first_page}[:@var{last_page}] +@c @opindex --pages=@var{first_page}[:@var{last_page}] +@opindex +@var{page_range} +@opindex --pages=@var{page_range} +Begin printing with page @var{first_page} and stop with @var{last_page}. +Missing @samp{:@var{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 @samp{+@var{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 @option{-N} +option. + +@item -@var{column} +@itemx --columns=@var{column} +@opindex -@var{column} +@opindex --columns +@cindex down columns +With each single @var{file}, produce @var{column} columns of output +(default is 1) and print columns down, unless @option{-a} is used. The +column width is automatically decreased as @var{column} increases; unless +you use the @option{-W/-w} option to increase @var{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 @option{-e} +and @option{-i} are on for multiple text-column output. Together with +@option{-J} option column alignment and line truncation is turned off. +Lines of full length are joined in a free field format and @option{-S} +option may set field separators. @option{-@var{column}} may not be used +with @option{-m} option. + +@item -a +@itemx --across +@opindex -a +@opindex --across +@cindex across columns +With each single @var{file}, print columns across rather than down. The +@option{-@var{column}} option must be given with @var{column} greater than one. +If a line is too long to fit in a column, it is truncated. + +@item -c +@itemx --show-control-chars +@opindex -c +@opindex --show-control-chars +Print control characters using hat notation (e.g., @samp{^G}); print +other nonprinting characters in octal backslash notation. By default, +nonprinting characters are not changed. + +@item -d +@itemx --double-space +@opindex -d +@opindex --double-space +@cindex double spacing +Double space the output. + +@item -D @var{format} +@itemx --date-format=@var{format} +@cindex time formats +@cindex formatting times +Format header dates using @var{format}, using the same conventions as +for the command @samp{date +@var{format}}; @xref{date invocation}. +Except for directives, which start with +@samp{%}, characters in @var{format} are printed unchanged. You can use +this option to specify an arbitrary string in place of the header date, +e.g., @option{--date-format="Monday morning"}. + +@vindex POSIXLY_CORRECT +@vindex LC_TIME +Normally the date +format defaults to @samp{%Y-%m-%d %H:%M} (for example, @samp{2001-12-04 +23:59}); but if the @env{POSIXLY_CORRECT} environment variable is set +and the @env{LC_TIME} locale category specifies the @acronym{POSIX} +locale, the default is @samp{%b %e %H:%M %Y} (for example, +@samp{Dec@ @ 4 23:59 2001}. + +@vindex TZ +Time stamps are listed according to the time zone rules specified by +the @env{TZ} environment variable, or by the system default rules if +@env{TZ} is not set. @xref{TZ Variable,, Specifying the Time Zone +with @env{TZ}, libc, The GNU C Library}. + +@item -e[@var{in-tabchar}[@var{in-tabwidth}]] +@itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]] +@opindex -e +@opindex --expand-tabs +@cindex input tabs +Expand @var{tab}s to spaces on input. Optional argument @var{in-tabchar} is +the input tab character (default is the TAB character). Second optional +argument @var{in-tabwidth} is the input tab character's width (default +is 8). + +@item -f +@itemx -F +@itemx --form-feed +@opindex -F +@opindex -f +@opindex --form-feed +Use a form feed instead of newlines to separate output pages. The default +page length of 66 lines is not altered. But the number of lines of text +per page changes from default 56 to 63 lines. + +@item -h @var{HEADER} +@itemx --header=@var{HEADER} +@opindex -h +@opindex --header +Replace the file name in the header with the centered string @var{header}. +When using the shell, @var{header} should be quoted and should be +separated from @option{-h} by a space. + +@item -i[@var{out-tabchar}[@var{out-tabwidth}]] +@itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]] +@opindex -i +@opindex --output-tabs +@cindex output tabs +Replace spaces with @var{tab}s on output. Optional argument @var{out-tabchar} +is the output tab character (default is the TAB character). Second optional +argument @var{out-tabwidth} is the output tab character's width (default +is 8). + +@item -J +@itemx --join-lines +@opindex -J +@opindex --join-lines +Merge lines of full length. Used together with the column options +@option{-@var{column}}, @option{-a -@var{column}} or @option{-m}. Turns off +@option{-W/-w} line truncation; +no column alignment used; may be used with +@option{--sep-string[=@var{string}]}. @option{-J} has been introduced +(together with @option{-W} and @option{--sep-string}) +to disentangle the old (@acronym{POSIX}-compliant) options @option{-w} and +@option{-s} along with the three column options. + + +@item -l @var{page_length} +@itemx --length=@var{page_length} +@opindex -l +@opindex --length +Set the page length to @var{page_length} (default 66) lines, including +the lines of the header [and the footer]. If @var{page_length} is less +than or equal to 10 (or <= 3 with @option{-F}), the header and footer are +omitted, and all form feeds set in input files are eliminated, as if +the @option{-T} option had been given. + +@item -m +@itemx --merge +@opindex -m +@opindex --merge +Merge and print all @var{file}s in parallel, one in each column. If a +line is too long to fit in a column, it is truncated, unless the @option{-J} +option is used. @option{--sep-string[=@var{string}]} may be used. +Empty pages in +some @var{file}s (form feeds set) produce empty columns, still marked +by @var{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 +@samp{@var{date} @var{page}} with spaces inserted in the middle; this +may be used with the @option{-h} or @option{--header} option to fill up +the middle blank part. + +@item -n[@var{number-separator}[@var{digits}]] +@itemx --number-lines[=@var{number-separator}[@var{digits}]] +@opindex -n +@opindex --number-lines +Provide @var{digits} digit line numbering (default for @var{digits} is +5). With multicolumn output the number occupies the first @var{digits} +column positions of each text column or only each line of @option{-m} +output. With single column output the number precedes each line just as +@option{-m} does. Default counting of the line numbers starts with the +first line of the input file (not the first line printed, compare the +@option{--page} option and @option{-N} option). +Optional argument @var{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 @var{TAB}-width varies +with the @var{TAB}-position, e.g., with the left @var{margin} specified +by @option{-o} option. With multicolumn output priority is given to +@samp{equal width of output columns} (a @acronym{POSIX} specification). +The @var{TAB}-width is fixed to the value of the first column and does +not change with different values of left @var{margin}. That means a +fixed number of spaces is always printed in the place of the +@var{number-separator tab}. The tabification depends upon the output +position. + +@item -N @var{line_number} +@itemx --first-line-number=@var{line_number} +@opindex -N +@opindex --first-line-number +Start line counting with the number @var{line_number} at first line of +first page printed (in most cases not the first line of the input file). + +@item -o @var{margin} +@itemx --indent=@var{margin} +@opindex -o +@opindex --indent +@cindex indenting lines +@cindex left margin +Indent each line with a margin @var{margin} spaces wide (default is zero). +The total page width is the size of the margin plus the @var{page_width} +set with the @option{-W/-w} option. A limited overflow may occur with +numbered single column output (compare @option{-n} option). + +@item -r +@itemx --no-file-warnings +@opindex -r +@opindex --no-file-warnings +Do not print a warning message when an argument @var{file} cannot be +opened. (The exit status will still be nonzero, however.) + +@item -s[@var{char}] +@itemx --separator[=@var{char}] +@opindex -s +@opindex --separator +Separate columns by a single character @var{char}. The default for +@var{char} is the TAB character without @option{-w} and @samp{no +character} with @option{-w}. Without @option{-s} the default separator +@samp{space} is set. @option{-s[char]} turns off line truncation of all +three column options (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m}) unless +@option{-w} is set. This is a @acronym{POSIX}-compliant formulation. + + +@item -S@var{string} +@itemx --sep-string[=@var{string}] +@opindex -S +@opindex --sep-string +Use @var{string} to separate output columns. The @option{-S} option doesn't +affect the @option{-W/-w} option, unlike the @option{-s} option which does. It +does not affect line truncation or column alignment. +Without @option{-S}, and with @option{-J}, @command{pr} uses the default output +separator, TAB@. +Without @option{-S} or @option{-J}, @command{pr} uses a @samp{space} +(same as @option{-S"@w{ }"}). @option{--sep-string} with no +@samp{=@var{string}} is equivalent to @option{--sep-string=""}. + +@item -t +@itemx --omit-header +@opindex -t +@opindex --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. @option{-t} or @option{-T} may be +useful together with other options; e.g.: @option{-t -e4}, expand TAB characters +in the input file to 4 spaces but don't make any other changes. Use of +@option{-t} overrides @option{-h}. + +@item -T +@itemx --omit-pagination +@opindex -T +@opindex --omit-pagination +Do not print header [and footer]. In addition eliminate all form feeds +set in the input files. + +@item -v +@itemx --show-nonprinting +@opindex -v +@opindex --show-nonprinting +Print nonprinting characters in octal backslash notation. + +@item -w @var{page_width} +@itemx --width=@var{page_width} +@opindex -w +@opindex --width +Set page width to @var{page_width} characters for multiple text-column +output only (default for @var{page_width} is 72). @option{-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 @var{page_width} setting is possible with single column output. +A @acronym{POSIX}-compliant formulation. + +@item -W @var{page_width} +@itemx --page_width=@var{page_width} +@opindex -W +@opindex --page_width +Set the page width to @var{page_width} characters. That's valid with and +without a column option. Text lines are truncated, unless @option{-J} +is used. Together with one of the three column options +(@option{-@var{column}}, @option{-a -@var{column}} or @option{-m}) column +alignment is always used. The separator options @option{-S} or @option{-s} +don't affect the @option{-W} option. Default is 72 characters. Without +@option{-W @var{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 @option{-W 72 -J}. The header +line is never truncated. + +@end table + +@exitstatus + + +@node fold invocation +@section @command{fold}: Wrap input lines to fit in specified width + +@pindex fold +@cindex wrapping long input lines +@cindex folding long input lines + +@command{fold} writes each @var{file} (@option{-} means standard input), or +standard input if none are given, to standard output, breaking long +lines. Synopsis: + +@example +fold [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +By default, @command{fold} breaks lines wider than 80 columns. The output +is split into as many lines as necessary. + +@cindex screen columns +@command{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 @ref{Common options}. + +@table @samp + +@item -b +@itemx --bytes +@opindex -b +@opindex --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. + +@item -s +@itemx --spaces +@opindex -s +@opindex --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. + +@item -w @var{width} +@itemx --width=@var{width} +@opindex -w +@opindex --width +Use a maximum line length of @var{width} columns instead of 80. + +For compatibility @command{fold} supports an obsolete option syntax +@option{-@var{width}}. New scripts should use @option{-w @var{width}} +instead. + +@end table + +@exitstatus + + +@node Output of parts of files +@chapter Output of parts of files + +@cindex output of parts of files +@cindex parts of files, output of + +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 fixed-size pieces. +* csplit invocation:: Split a file into context-determined pieces. +@end menu + +@node head invocation +@section @command{head}: Output the first part of files + +@pindex head +@cindex initial part of files, outputting +@cindex first part of files, outputting + +@command{head} prints the first part (10 lines by default) of each +@var{file}; it reads from standard input if no files are given or +when given a @var{file} of @option{-}. Synopsis: + +@example +head [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +If more than one @var{file} is specified, @command{head} prints a +one-line header consisting of: + +@example +==> @var{file name} <== +@end example + +@noindent +before the output for each @var{file}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c @var{n} +@itemx --bytes=@var{n} +@opindex -c +@opindex --bytes +Print the first @var{n} bytes, instead of initial lines. Appending +@samp{b} multiplies @var{n} by 512, @samp{k} by 1024, and @samp{m} +by 1048576. +However, if @var{n} starts with a @samp{-}, +print all but the last @var{n} bytes of each file. + +@itemx -n @var{n} +@itemx --lines=@var{n} +@opindex -n +@opindex --lines +Output the first @var{n} lines. +However, if @var{n} starts with a @samp{-}, +print all but the last @var{n} lines of each file. + +@item -q +@itemx --quiet +@itemx --silent +@opindex -q +@opindex --quiet +@opindex --silent +Never print file name headers. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Always print file name headers. + +@end table + +For compatibility @command{head} also supports an obsolete option syntax +@option{-@var{count}@var{options}}, which is recognized only if it is +specified first. @var{count} is a decimal number optionally followed +by a size letter (@samp{b}, @samp{k}, @samp{m}) as in @option{-c}, or +@samp{l} to mean count by lines, or other option letters (@samp{cqv}). +Scripts intended for standard hosts should use @option{-c @var{count}} +or @option{-n @var{count}} instead. If your script must also run on +hosts that support only the obsolete syntax, it is usually simpler to +avoid @command{head}, e.g., by using @samp{sed 5q} instead of +@samp{head -5}. + +@exitstatus + + +@node tail invocation +@section @command{tail}: Output the last part of files + +@pindex tail +@cindex last part of files, outputting + +@command{tail} prints the last part (10 lines by default) of each +@var{file}; it reads from standard input if no files are given or +when given a @var{file} of @samp{-}. Synopsis: + +@example +tail [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +If more than one @var{file} is specified, @command{tail} prints a +one-line header consisting of: + +@example +==> @var{file name} <== +@end example + +@noindent +before the output for each @var{file}. + +@cindex BSD @command{tail} +@sc{gnu} @command{tail} can output any amount of data (some other versions of +@command{tail} cannot). It also has no @option{-r} option (print in +reverse), since reversing a file is really a different job from printing +the end of a file; BSD @command{tail} (which is the one with @option{-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 @sc{gnu} @command{tac} command. + +If any option-argument is a number @var{n} starting with a @samp{+}, +@command{tail} begins printing with the @var{n}th item from the start of +each file, instead of from the end. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c @var{bytes} +@itemx --bytes=@var{bytes} +@opindex -c +@opindex --bytes +Output the last @var{bytes} bytes, instead of final lines. Appending +@samp{b} multiplies @var{bytes} by 512, @samp{k} by 1024, and @samp{m} +by 1048576. + +@item -f +@itemx --follow[=@var{how}] +@opindex -f +@opindex --follow +@cindex growing files +@vindex name @r{follow option} +@vindex descriptor @r{follow option} +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, @command{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 @option{--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 +@option{--follow=name} to track the named file by reopening it periodically +to see if it has been removed and recreated by some other program. + +No matter which method you use, if the tracked file is determined to have +shrunk, @command{tail} prints a message saying the file has been truncated +and resumes tracking the end of the file from the newly-determined endpoint. + +When a file is removed, @command{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 @option{--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 @samp{descriptor} and @samp{name} may be specified only +with the long form of the option, not with @option{-f}. + +@vindex POSIXLY_CORRECT +If @env{POSIXLY_CORRECT} is set, the @option{-f} option is ignored if +no @var{file} operand is specified and standard input is a FIFO or a pipe. + +@item -F +@opindex -F +This option is the same as @option{--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. + +@itemx --retry +@opindex --retry +This option is useful mainly when following by name (i.e., with +@option{--follow=name}). +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. + +@itemx --sleep-interval=@var{number} +@opindex --sleep-interval +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. +Historical implementations of @command{tail} have required that +@var{number} be an integer. However, GNU @command{tail} accepts +an arbitrary floating point number (using a period before any +fractional digits). + +@itemx --pid=@var{pid} +@opindex --pid +When following by name or by descriptor, you may specify the process ID, +@var{pid}, of the sole writer of all @var{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 @command{make} and @command{tail} +like this then the tail process will stop when your build completes. +Without this option, you would have had to kill the @code{tail -f} +process yourself. + +@example +$ make >& makerr & tail --pid=$! -f makerr +@end example + +If you specify a @var{pid} that is not in use or that does not correspond +to the process that is writing to the tailed files, then @command{tail} +may terminate long before any @var{file}s stop growing or it may not +terminate until long after the real writer has terminated. +Note that @option{--pid} cannot be supported on some systems; @command{tail} +will print a warning if this is the case. + +@itemx --max-unchanged-stats=@var{n} +@opindex --max-unchanged-stats +When tailing a file by name, if there have been @var{n} (default +n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive +iterations for which the file has not changed, then +@code{open}/@code{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 following by name. + +@itemx -n @var{n} +@itemx --lines=@var{n} +@opindex -n +@opindex --lines +Output the last @var{n} lines. + +@item -q +@itemx --quiet +@itemx --silent +@opindex -q +@opindex --quiet +@opindex --silent +Never print file name headers. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Always print file name headers. + +@end table + +For compatibility @command{tail} also supports an obsolete usage +@samp{tail -[@var{count}][bcl][f] [@var{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, @var{count} is an optional decimal number optionally +followed by a size letter (@samp{b}, @samp{c}, @samp{l}) to mean count +by 512-byte blocks, bytes, or lines, optionally followed by @samp{f} +which has the same meaning as @option{-f}. + +@vindex _POSIX2_VERSION +On older systems, the leading @samp{-} can be replaced by @samp{+} in +the obsolete option syntax with the same meaning as in counts, and +obsolete usage overrides normal usage when the two conflict. +This obsolete behavior can be enabled or disabled with the +@env{_POSIX2_VERSION} environment variable (@pxref{Standards +conformance}). + +Scripts intended for use on standard hosts should avoid obsolete +syntax and should use @option{-c @var{count}[b]}, @option{-n +@var{count}}, and/or @option{-f} instead. If your script must also +run on hosts that support only the obsolete syntax, you can often +rewrite it to avoid problematic usages, e.g., by using @samp{sed -n +'$p'} rather than @samp{tail -1}. If that's not possible, the script +can use a test like @samp{if tail -c +1 </dev/null >/dev/null 2>&1; +then @dots{}} 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 @acronym{POSIX} +version. For example, avoid @samp{tail - main.c}, since it might be +interpreted as either @samp{tail main.c} or as @samp{tail -- - +main.c}; avoid @samp{tail -c 4}, since it might mean either @samp{tail +-c4} or @samp{tail -c 10 4}; and avoid @samp{tail +4}, since it might +mean either @samp{tail ./+4} or @samp{tail -n +4}. + +@exitstatus + + +@node split invocation +@section @command{split}: Split a file into fixed-size pieces + +@pindex split +@cindex splitting a file into pieces +@cindex pieces, splitting a file into + +@command{split} creates output files containing consecutive sections of +@var{input} (standard input if none is given or @var{input} is +@samp{-}). Synopsis: + +@example +split [@var{option}] [@var{input} [@var{prefix}]] +@end example + +By default, @command{split} puts 1000 lines of @var{input} (or whatever is +left over for the last section), into each output file. + +@cindex output file name prefix +The output files' names consist of @var{prefix} (@samp{x} by default) +followed by a group of characters (@samp{aa}, @samp{ab}, @dots{} by +default), such that concatenating the output files in traditional +sorted order by file name produces +the original input file. If the output file names are exhausted, +@command{split} reports an error without deleting the output files +that it did create. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a @var{length} +@itemx --suffix-length=@var{length} +@opindex -a +@opindex --suffix-length +Use suffixes of length @var{length}. The default @var{length} is 2. + +@item -l @var{lines} +@itemx --lines=@var{lines} +@opindex -l +@opindex --lines +Put @var{lines} lines of @var{input} into each output file. + +For compatibility @command{split} also supports an obsolete +option syntax @option{-@var{lines}}. New scripts should use @option{-l +@var{lines}} instead. + +@item -b @var{bytes} +@itemx --bytes=@var{bytes} +@opindex -b +@opindex --bytes +Put the first @var{bytes} bytes of @var{input} into each output file. +Appending @samp{b} multiplies @var{bytes} by 512, @samp{k} by 1024, and +@samp{m} by 1048576. + +@item -C @var{bytes} +@itemx --line-bytes=@var{bytes} +@opindex -C +@opindex --line-bytes +Put into each output file as many complete lines of @var{input} as +possible without exceeding @var{bytes} bytes. For lines longer than +@var{bytes} bytes, put @var{bytes} bytes into each output file until +less than @var{bytes} bytes of the line are left, then continue +normally. @var{bytes} has the same format as for the @option{--bytes} +option. + +@item -d +@itemx --numeric-suffixes +@opindex -d +@opindex --numeric-suffixes +Use digits in suffixes rather than lower-case letters. + +@itemx --verbose +@opindex --verbose +Write a diagnostic to standard error just before each output file is opened. + +@end table + +@exitstatus + + +@node csplit invocation +@section @command{csplit}: Split a file into context-determined pieces + +@pindex csplit +@cindex context splitting +@cindex splitting a file into pieces by context + +@command{csplit} creates zero or more output files containing sections of +@var{input} (standard input if @var{input} is @samp{-}). Synopsis: + +@example +csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{} +@end example + +The contents of the output files are determined by the @var{pattern} +arguments, as detailed below. An error occurs if a @var{pattern} +argument refers to a nonexistent line of the input file (e.g., if no +remaining line matches a given regular expression). After every +@var{pattern} has been matched, any remaining input is copied into one +last output file. + +By default, @command{csplit} prints the number of bytes written to each +output file after it has been created. + +The types of pattern arguments are: + +@table @samp + +@item @var{n} +Create an output file containing the input up to but not including line +@var{n} (a positive integer). If followed by a repeat count, also +create an output file containing the next @var{n} lines of the input +file once for each repeat. + +@item /@var{regexp}/[@var{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 +@var{regexp}. The optional @var{offset} is an integer. +If it is given, the input up to (but not including) the +matching line plus or minus @var{offset} is put into the output file, +and the line after that begins the next section of input. + +@item %@var{regexp}%[@var{offset}] +Like the previous type, except that it does not create an output +file, so that section of the input file is effectively ignored. + +@item @{@var{repeat-count}@} +Repeat the previous pattern @var{repeat-count} additional +times. The @var{repeat-count} can either be a positive integer or an +asterisk, meaning repeat as many times as necessary until the input is +exhausted. + +@end table + +The output files' names consist of a prefix (@samp{xx} by default) +followed by a suffix. By default, the suffix is an ascending sequence +of two-digit decimal numbers from @samp{00} to @samp{99}. In any case, +concatenating the output files in sorted order by file name produces the +original input file. + +By default, if @command{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 @ref{Common options}. + +@table @samp + +@item -f @var{prefix} +@itemx --prefix=@var{prefix} +@opindex -f +@opindex --prefix +@cindex output file name prefix +Use @var{prefix} as the output file name prefix. + +@item -b @var{suffix} +@itemx --suffix=@var{suffix} +@opindex -b +@opindex --suffix +@cindex output file name suffix +Use @var{suffix} as the output file name suffix. When this option is +specified, the suffix string must include exactly one +@code{printf(3)}-style conversion specification, possibly including +format specification flags, a field width, a precision specifications, +or all of these kinds of modifiers. The format letter must convert a +binary integer argument to readable form; thus, only @samp{d}, @samp{i}, +@samp{u}, @samp{o}, @samp{x}, and @samp{X} conversions are allowed. The +entire @var{suffix} is given (with the current output file number) to +@code{sprintf(3)} to form the file name suffixes for each of the +individual output files in turn. If this option is used, the +@option{--digits} option is ignored. + +@item -n @var{digits} +@itemx --digits=@var{digits} +@opindex -n +@opindex --digits +Use output file names containing numbers that are @var{digits} digits +long instead of the default 2. + +@item -k +@itemx --keep-files +@opindex -k +@opindex --keep-files +Do not remove output files when errors are encountered. + +@item -z +@itemx --elide-empty-files +@opindex -z +@opindex --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. + +@item -s +@itemx -q +@itemx --silent +@itemx --quiet +@opindex -s +@opindex -q +@opindex --silent +@opindex --quiet +Do not print counts of output file sizes. + +@end table + +@exitstatus + + +@node Summarizing files +@chapter Summarizing files + +@cindex 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. +* sha1sum invocation:: Print or check SHA-1 digests. +* sha2 utilities:: Print or check SHA-2 digests. +@end menu + + +@node wc invocation +@section @command{wc}: Print newline, word, and byte counts + +@pindex wc +@cindex byte count +@cindex character count +@cindex word count +@cindex line count + +@command{wc} counts the number of bytes, characters, whitespace-separated +words, and newlines in each given @var{file}, or standard input if none +are given or for a @var{file} of @samp{-}. Synopsis: + +@example +wc [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@cindex total counts +@command{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. If +more than one @var{file} is given, @command{wc} prints a final line +containing the cumulative counts, with the file name @file{total}. 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 @acronym{GNU} extension, if only one count is printed, +it is guaranteed to be printed without leading spaces. + +By default, @command{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 + +@example +wc --bytes --words +@end example + +@noindent +prints both the byte counts and the word counts. + +With the @option{--max-line-length} option, @command{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 program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c +@itemx --bytes +@opindex -c +@opindex --bytes +Print only the byte counts. + +@item -m +@itemx --chars +@opindex -m +@opindex --chars +Print only the character counts. + +@item -w +@itemx --words +@opindex -w +@opindex --words +Print only the word counts. + +@item -l +@itemx --lines +@opindex -l +@opindex --lines +Print only the newline counts. + +@item -L +@itemx --max-line-length +@opindex -L +@opindex --max-line-length +Print only the maximum line lengths. + +@itemx --files0-from=@var{FILE} +@opindex --files0-from=@var{FILE} +@cindex including files from @command{du} +Rather than processing files named on the command line, process those +named in file @var{FILE}; each name is terminated by a null byte. +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 @command{wc} via @command{xargs} is undesirable +because it splits the list into pieces and makes @command{wc} print a +total for each sublist rather than for the entire list. +One way to produce a list of null-byte-terminated file names is with @sc{gnu} +@command{find}, using its @option{-print0} predicate. For example, to find +the length of the longest line in any @file{.c} or @file{.h} file in the +current hierarchy, do this: + +@example +find . -name '*.[ch]' -print0 | wc -L --files0-from=- | tail -n1 +@end example + +Do not specify any @var{FILE} on the command line when using this option. + +@end table + +@exitstatus + + +@node sum invocation +@section @command{sum}: Print checksum and block counts + +@pindex sum +@cindex 16-bit checksum +@cindex checksum, 16-bit + +@command{sum} computes a 16-bit checksum for each given @var{file}, or +standard input if none are given or for a @var{file} of @samp{-}. Synopsis: + +@example +sum [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@command{sum} prints the checksum for each @var{file} followed by the +number of blocks in the file (rounded up). If more than one @var{file} +is given, file names are also printed (by default). (With the +@option{--sysv} option, corresponding file names are printed when there is +at least one file argument.) + +By default, @sc{gnu} @command{sum} computes checksums using an algorithm +compatible with BSD @command{sum} and prints file sizes in units of +1024-byte blocks. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -r +@opindex -r +@cindex BSD @command{sum} +Use the default (BSD compatible) algorithm. This option is included for +compatibility with the System V @command{sum}. Unless @option{-s} was also +given, it has no effect. + +@item -s +@itemx --sysv +@opindex -s +@opindex --sysv +@cindex System V @command{sum} +Compute checksums using an algorithm compatible with System V +@command{sum}'s default, and print file sizes in units of 512-byte blocks. + +@end table + +@command{sum} is provided for compatibility; the @command{cksum} program (see +next section) is preferable in new applications. + +@exitstatus + + +@node cksum invocation +@section @command{cksum}: Print CRC checksum and byte counts + +@pindex cksum +@cindex cyclic redundancy check +@cindex CRC checksum + +@command{cksum} computes a cyclic redundancy check (CRC) checksum for each +given @var{file}, or standard input if none are given or for a +@var{file} of @samp{-}. Synopsis: + +@example +cksum [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@command{cksum} prints the CRC checksum for each file along with the number +of bytes in the file, and the file name unless no arguments were given. + +@command{cksum} is typically used to ensure that files +transferred by unreliable means (e.g., netnews) have not been corrupted, +by comparing the @command{cksum} output for the received files with the +@command{cksum} output for the original files (typically given in the +distribution). + +The CRC algorithm is specified by the @acronym{POSIX} standard. It is not +compatible with the BSD or System V @command{sum} algorithms (see the +previous section); it is more robust. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node md5sum invocation +@section @command{md5sum}: Print or check MD5 digests + +@pindex md5sum +@cindex MD5 +@cindex 128-bit checksum +@cindex checksum, 128-bit +@cindex fingerprint, 128-bit +@cindex message-digest, 128-bit + +@command{md5sum} computes a 128-bit checksum (or @dfn{fingerprint} or +@dfn{message-digest}) for each specified @var{file}. + +Note: The MD5 digest is more reliable than a simple CRC (provided by +the @command{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 truly +secure against malicious tampering: although finding a file with a +given MD5 fingerprint, or modifying a file so as to retain its MD5 are +considered infeasible at the moment, it is known how to produce +different files with identical MD5 (a ``collision''), something which +can be a security issue in certain contexts. For more secure hashes, +consider using SHA-1 or SHA-2. @xref{sha1sum invocation}, and +@ref{sha2 utilities}. + +If a @var{file} is specified as @samp{-} or if no files are given +@command{md5sum} computes the checksum for the standard input. +@command{md5sum} can also determine whether a file and checksum are +consistent. Synopsis: + +@example +md5sum [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +For each @var{file}, @samp{md5sum} outputs the MD5 checksum, a flag +indicating a binary or text input file, and the file name. +If @var{file} contains a backslash or newline, 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. +If @var{file} is omitted or specified as @samp{-}, standard input is read. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -b +@itemx --binary +@opindex -b +@opindex --binary +@cindex binary input files +Treat each input file as binary, by reading it in binary mode and +outputting a @samp{*} flag. This is the inverse of @option{--text}. +On systems like @acronym{GNU} that do not distinguish between binary +and text files, this option merely flags each input file as binary: +the MD5 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. + +@item -c +@itemx --check +Read file names and checksum information (not data) from each +@var{file} (or from stdin if no @var{file} was specified) and report +whether the checksums match the contents of the named files. +The input to this mode of @command{md5sum} is usually the output of +a prior, checksum-generating run of @samp{md5sum}. +Each valid line of input consists of an MD5 checksum, a binary/text +flag, and then a file name. +Binary files are marked with @samp{*}, text with @samp{ }. +For each such line, @command{md5sum} reads the named file and computes its +MD5 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 @option{--status} option to inhibit that output. +If any listed file cannot be opened or read, if any valid line has +an MD5 checksum inconsistent with the associated file, or if no valid +line is found, @command{md5sum} exits with nonzero status. Otherwise, +it exits successfully. + +@itemx --status +@opindex --status +@cindex verifying MD5 checksums +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 +MD5 checksums, exit successfully. Otherwise exit with a status code +indicating there was a failure. + +@item -t +@itemx --text +@opindex -t +@opindex --text +@cindex text input files +Treat each input file as text, by reading it in text mode and +outputting a @samp{ } flag. This is the inverse of @option{--binary}. +This option is the default on systems like @acronym{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. + +@item -w +@itemx --warn +@opindex -w +@opindex --warn +@cindex verifying MD5 checksums +When verifying checksums, warn about improperly formatted MD5 checksum lines. +This option is useful only if all but a few lines in the checked input +are valid. + +@end table + +@exitstatus + + +@node sha1sum invocation +@section @command{sha1sum}: Print or check SHA-1 digests + +@pindex sha1sum +@cindex SHA-1 +@cindex 160-bit checksum +@cindex checksum, 160-bit +@cindex fingerprint, 160-bit +@cindex message-digest, 160-bit + +@command{sha1sum} computes a 160-bit checksum for each specified +@var{file}. The usage and options of this command are precisely the +same as for @command{md5sum}. @xref{md5sum invocation}. + +Note: The SHA-1 digest is more secure than MD5, and no collisions of +it are known (different files having the same fingerprint). However, +it is known that they can be produced with considerable, but not +unreasonable, resources. For this reason, it is generally considered +that SHA-1 should be gradually phased out in favor of the more secure +SHA-2 hash algorithms. @xref{sha2 utilities}. + + +@node sha2 utilities +@section sha2 utilities: Print or check SHA-2 digests + +@pindex sha224sum +@pindex sha256sum +@pindex sha384sum +@pindex sha512sum +@cindex SHA-2 +@cindex 224-bit checksum +@cindex 256-bit checksum +@cindex 384-bit checksum +@cindex 512-bit checksum +@cindex checksum, 224-bit +@cindex checksum, 256-bit +@cindex checksum, 384-bit +@cindex checksum, 512-bit +@cindex fingerprint, 224-bit +@cindex fingerprint, 256-bit +@cindex fingerprint, 384-bit +@cindex fingerprint, 512-bit +@cindex message-digest, 224-bit +@cindex message-digest, 256-bit +@cindex message-digest, 384-bit +@cindex message-digest, 512-bit + +The commands @command{sha224sum}, @command{sha256sum}, +@command{sha384sum} and @command{sha512sum} compute checksums of +various lengths (respectively 224, 256, 384 and 512 bits), +collectively known as the SHA-2 hashes. The usage and options of +these commands are precisely the same as for @command{md5sum}. +@xref{md5sum invocation}. + +Note: The SHA384 and SHA512 digests are considerably slower to +compute, especially on 32-bit computers, than SHA224 or SHA256. + + +@node Operating on sorted files +@chapter Operating on sorted files + +@cindex operating on sorted files +@cindex sorted files, operations on + +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. +* tsort background:: Where tsort came from. +@end menu + + +@node sort invocation +@section @command{sort}: Sort text files + +@pindex sort +@cindex sorting files + +@command{sort} sorts, merges, or compares all the lines from the given +files, or standard input if none are given or for a @var{file} of +@samp{-}. By default, @command{sort} writes the results to standard +output. Synopsis: + +@example +sort [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@command{sort} has three modes of operation: sort (the default), merge, +and check for sortedness. The following options change the operation +mode: + +@table @samp + +@item -c +@itemx --check +@itemx --check=diagnose-first +@opindex -c +@opindex --check +@cindex checking for sortedness +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. + +@item -C +@itemx --check=quiet +@itemx --check=silent +@opindex -c +@opindex --check +@cindex checking for sortedness +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 @option{-c}, except it does not print a diagnostic. + +@item -m +@itemx --merge +@opindex -m +@opindex --merge +@cindex merging sorted files +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. + +@end table + +@cindex sort stability +@cindex sort's last-resort comparison +A pair of lines is compared as follows: +@command{sort} compares each pair of fields, 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, @command{sort} uses a default key of +the entire line. Finally, as a last resort when all keys compare +equal, @command{sort} compares entire lines as if no ordering options +other than @option{--reverse} (@option{-r}) were specified. The +@option{--stable} (@option{-s}) option disables this @dfn{last-resort +comparison} so that lines in which all fields compare equal are left +in their original relative order. The @option{--unique} +(@option{-u}) option also disables the last-resort comparison. + +@vindex LC_ALL +@vindex LC_COLLATE +Unless otherwise specified, all comparisons use the character collating +sequence specified by the @env{LC_COLLATE} locale.@footnote{If you +use a non-@acronym{POSIX} locale (e.g., by setting @env{LC_ALL} +to @samp{en_US}), then @command{sort} may produce output that is sorted +differently than you're accustomed to. In that case, set the @env{LC_ALL} +environment variable to @samp{C}. Note that setting only @env{LC_COLLATE} +has two problems. First, it is ineffective if @env{LC_ALL} is also set. +Second, it has undefined behavior if @env{LC_CTYPE} (or @env{LANG}, if +@env{LC_CTYPE} is unset) is set to an incompatible value. For example, +you get undefined behavior if @env{LC_CTYPE} is @code{ja_JP.PCK} but +@env{LC_COLLATE} is @code{en_US.UTF-8}.} + +@sc{gnu} @command{sort} (as specified for all @sc{gnu} utilities) has no +limit on input line length or restrictions on bytes allowed within lines. +In addition, if the final byte of an input file is not a newline, @sc{gnu} +@command{sort} silently supplies one. A line's trailing newline is not +part of the line for comparison purposes. + +@cindex exit status of @command{sort} +Exit status: + +@display +0 if no error occurred +1 if invoked with @option{-c} or @option{-C} and the input is not sorted +2 if an error occurred +@end display + +@vindex TMPDIR +If the environment variable @env{TMPDIR} is set, @command{sort} uses its +value as the directory for temporary files instead of @file{/tmp}. The +@option{--temporary-directory} (@option{-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-@acronym{POSIX} +versions of @command{sort}, global options affect only later key fields, +so portable shell scripts should specify global options first. + +@table @samp + +@item -b +@itemx --ignore-leading-blanks +@opindex -b +@opindex --ignore-leading-blanks +@cindex blanks, ignoring leading +@vindex LC_CTYPE +Ignore leading blanks when finding sort keys in each line. +By default a blank is a space or a tab, but the @env{LC_CTYPE} locale +can change this. + +@item -d +@itemx --dictionary-order +@opindex -d +@opindex --dictionary-order +@cindex dictionary order +@cindex phone directory order +@cindex telephone directory order +@vindex LC_CTYPE +Sort in @dfn{phone directory} order: ignore all characters except +letters, digits and blanks when sorting. +By default letters and digits are those of @acronym{ASCII} and a blank +is a space or a tab, but the @env{LC_CTYPE} locale can change this. + +@item -f +@itemx --ignore-case +@opindex -f +@opindex --ignore-case +@cindex ignoring case +@cindex case folding +@vindex LC_CTYPE +Fold lowercase characters into the equivalent uppercase characters when +comparing so that, for example, @samp{b} and @samp{B} sort as equal. +The @env{LC_CTYPE} locale determines character types. + +@item -g +@itemx --general-numeric-sort +@opindex -g +@opindex --general-numeric-sort +@cindex general numeric sort +@vindex LC_NUMERIC +Sort numerically, using the standard C function @code{strtod} to convert +a prefix of each line to a double-precision floating point number. +This allows floating point numbers to be specified in scientific notation, +like @code{1.0e-34} and @code{10e100}. +The @env{LC_NUMERIC} locale determines the decimal-point character. +Do not report overflow, underflow, or conversion errors. +Use the following collating sequence: + +@itemize @bullet +@item +Lines that do not start with numbers (all considered to be equal). +@item +NaNs (``Not a Number'' values, in IEEE floating point arithmetic) +in a consistent but machine-dependent order. +@item +Minus infinity. +@item +Finite numbers in ascending numeric order (with @math{-0} and @math{+0} equal). +@item +Plus infinity. +@end itemize + +Use this option only if there is no alternative; it is much slower than +@option{--numeric-sort} (@option{-n}) and it can lose information when +converting to floating point. + +@item -i +@itemx --ignore-nonprinting +@opindex -i +@opindex --ignore-nonprinting +@cindex nonprinting characters, ignoring +@cindex unprintable characters, ignoring +@vindex LC_CTYPE +Ignore nonprinting characters. +The @env{LC_CTYPE} locale determines character types. +This option has no effect if the stronger @option{--dictionary-order} +(@option{-d}) option is also given. + +@item -M +@itemx --month-sort +@opindex -M +@opindex --month-sort +@cindex months, sorting by +@vindex LC_TIME +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 @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}. +Invalid names compare low to valid names. The @env{LC_TIME} locale +category determines the month spellings. +By default a blank is a space or a tab, but the @env{LC_CTYPE} locale +can change this. + +@item -n +@itemx --numeric-sort +@opindex -n +@opindex --numeric-sort +@cindex numeric sort +@vindex LC_NUMERIC +Sort numerically. The number begins each line and consists +of optional blanks, an optional @samp{-} 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 @samp{0}. The @env{LC_NUMERIC} +locale specifies the decimal-point character and thousands separator. +By default a blank is a space or a tab, but the @env{LC_CTYPE} locale +can change this. + +Comparison is exact; there is no rounding error. + +Neither a leading @samp{+} nor exponential notation is recognized. +To compare such strings numerically, use the +@option{--general-numeric-sort} (@option{-g}) option. + +@item -r +@itemx --reverse +@opindex -r +@opindex --reverse +@cindex reverse sorting +Reverse the result of comparison, so that lines with greater key values +appear earlier in the output instead of later. + +@item -R +@itemx --random-sort +@opindex -R +@opindex --random-sort +@cindex random sort +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 (@pxref{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 @command{sort} more +than once. + +The choice of hash function is affected by the +@option{--random-source} option. + +@end table + +Other options are: + +@table @samp + +@item --compress-program=@var{prog} +Compress any temporary files with the program @var{prog}. + +With no arguments, @var{prog} must compress standard input to standard +output, and when given the @option{-d} option it must decompress +standard input to standard output. + +Terminate with an error if @var{prog} exits with nonzero status. + +Whitespace and the backslash character should not appear in +@var{prog}; they are reserved for future use. + +@item -k @var{pos1}[,@var{pos2}] +@itemx --key=@var{pos1}[,@var{pos2}] +@opindex -k +@opindex --key +@cindex sort field +Specify a sort field that consists of the part of the line between +@var{pos1} and @var{pos2} (or the end of the line, if @var{pos2} is +omitted), @emph{inclusive}. + +Each @var{pos} has the form @samp{@var{f}[.@var{c}][@var{opts}]}, +where @var{f} is the number of the field to use, and @var{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 +@var{pos2} indicates the field's last character. If @samp{.@var{c}} is +omitted from @var{pos1}, it defaults to 1 (the beginning of the field); +if omitted from @var{pos2}, it defaults to 0 (the end of the field). +@var{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 @option{--key=2,2} +(@option{-k 2,2}). See below for more examples. + +@item -o @var{output-file} +@itemx --output=@var{output-file} +@opindex -o +@opindex --output +@cindex overwriting of input, allowed +Write output to @var{output-file} instead of standard output. +Normally, @command{sort} reads all input before opening +@var{output-file}, so you can safely sort a file in place by using +commands like @code{sort -o F F} and @code{cat F | sort -o F}. +However, @command{sort} with @option{--merge} (@option{-m}) can open +the output file before reading all input, so a command like @code{cat +F | sort -m -o F - G} is not safe as @command{sort} might start +writing @file{F} before @command{cat} is done reading it. + +@vindex POSIXLY_CORRECT +On newer systems, @option{-o} cannot appear after an input file if +@env{POSIXLY_CORRECT} is set, e.g., @samp{sort F -o F}. Portable +scripts should specify @option{-o @var{output-file}} before any input +files. + +@item --random-source=@var{file} +@opindex --random-source +@cindex random source for sorting +Use @var{file} as a source of random data used to determine which +random hash function to use with the @option{-R} option. @xref{Random +sources}. + +@item -s +@itemx --stable +@opindex -s +@opindex --stable +@cindex sort stability +@cindex sort's last-resort comparison + +Make @command{sort} stable by disabling its last-resort comparison. +This option has no effect if no fields or global ordering options +other than @option{--reverse} (@option{-r}) are specified. + +@item -S @var{size} +@itemx --buffer-size=@var{size} +@opindex -S +@opindex --buffer-size +@cindex size for main memory sorting +Use a main-memory sort buffer of the given @var{size}. By default, +@var{size} is in units of 1024 bytes. Appending @samp{%} causes +@var{size} to be interpreted as a percentage of physical memory. +Appending @samp{K} multiplies @var{size} by 1024 (the default), +@samp{M} by 1,048,576, @samp{G} by 1,073,741,824, and so on for +@samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}. Appending +@samp{b} causes @var{size} to be interpreted as a byte count, with no +multiplication. + +This option can improve the performance of @command{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 @var{size} if @command{sort} encounters input lines larger +than @var{size}. + +@item -t @var{separator} +@itemx --field-separator=@var{separator} +@opindex -t +@opindex --field-separator +@cindex field separator character +Use character @var{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 @env{LC_CTYPE} locale +can change this. + +That is, given the input line @w{@samp{ foo bar}}, @command{sort} breaks it +into fields @w{@samp{ foo}} and @w{@samp{ bar}}. The field separator is +not considered to be part of either the field preceding or the field +following, so with @samp{sort @w{-t " "}} the same input line has +three fields: an empty field, @samp{foo}, and @samp{bar}. +However, fields that extend to the end of the line, +as @option{-k 2}, or fields consisting of a range, as @option{-k 2,3}, +retain the field separators present between the endpoints of the range. + +To specify a null character (@acronym{ASCII} @sc{nul}) as +the field separator, use the two-character string @samp{\0}, e.g., +@samp{sort -t '\0'}. + +@item -T @var{tempdir} +@itemx --temporary-directory=@var{tempdir} +@opindex -T +@opindex --temporary-directory +@cindex temporary directory +@vindex TMPDIR +Use directory @var{tempdir} to store temporary files, overriding the +@env{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 +disks and controllers. + +@item -u +@itemx --unique +@opindex -u +@opindex --unique +@cindex uniquifying output + +Normally, output only the first of a sequence of lines that compare +equal. For the @option{--check} (@option{-c} or @option{-C}) option, +check that no pair of consecutive lines compares equal. + +This option also disables the default last-resort comparison. + +The commands @code{sort -u} and @code{sort | uniq} are equivalent, but +this equivalence does not extend to arbitrary @command{sort} options. +For example, @code{sort -n -u} inspects only the value of the initial +numeric string when checking for uniqueness, whereas @code{sort -n | +uniq} inspects the entire line. @xref{uniq invocation}. + +@item -z +@itemx --zero-terminated +@opindex -z +@opindex --zero-terminated +@cindex sort zero-terminated lines +Treat the input as a set of lines, each terminated by a null character +(@acronym{ASCII} @sc{nul}) instead of a line feed +(@acronym{ASCII} @sc{lf}). +This option can be useful in conjunction with @samp{perl -0} or +@samp{find -print0} and @samp{xargs -0} which do the same in order to +reliably handle arbitrary file names (even those containing blanks +or other special characters). + +@end table + +Historical (BSD and System V) implementations of @command{sort} have +differed in their interpretation of some options, particularly +@option{-b}, @option{-f}, and @option{-n}. @sc{gnu} sort follows the @acronym{POSIX} +behavior, which is usually (but not always!) like the System V behavior. +According to @acronym{POSIX}, @option{-n} no longer implies @option{-b}. For +consistency, @option{-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 @option{-b}. + +A position in a sort field specified with @option{-k} may have any +of the option letters @samp{Mbdfinr} appended to it, in which case the +global ordering options are not used for that particular field. The +@option{-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 @option{-t} +is not used, then @option{-k} is typically combined with @option{-b}, +@option{-g}, @option{-M}, or @option{-n}; 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 @option{-b} +option was specified, the @samp{.@var{c}} part of a field specification +is counted from the first nonblank character of the field. + +@vindex _POSIX2_VERSION +@vindex POSIXLY_CORRECT +On older systems, @command{sort} supports an obsolete origin-zero +syntax @samp{+@var{pos1} [-@var{pos2}]} for specifying sort keys. +This obsolete behavior can be enabled or disabled with the +@env{_POSIX2_VERSION} environment variable (@pxref{Standards +conformance}); it can also be enabled when @env{POSIXLY_CORRECT} is +not set by using the obsolete syntax with @samp{-@var{pos2}} present. + +Scripts intended for use on standard hosts should avoid obsolete +syntax and should use @option{-k} instead. For example, avoid +@samp{sort +2}, since it might be interpreted as either @samp{sort +./+2} or @samp{sort -k 3}. If your script must also run on hosts that +support only the obsolete syntax, it can use a test like @samp{if sort +-k 1 </dev/null >/dev/null 2>&1; then @dots{}} to decide which syntax +to use. + +Here are some examples to illustrate various combinations of options. + +@itemize @bullet + +@item +Sort in descending (reverse) numeric order. + +@example +sort -n -r +@end example + +@item +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. + +@example +sort -k 3b +@end example + +@item +Sort numerically on the second field and resolve ties by sorting +alphabetically on the third and fourth characters of field five. +Use @samp{:} as the field delimiter. + +@example +sort -t : -k 2,2n -k 5.3,5.4 +@end example + +Note that if you had written @option{-k 2n} instead of @option{-k 2,2n} +@command{sort} would have used all characters beginning in the second field +and extending to the end of the line as the primary @emph{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 @samp{n} modifier was applied to the field-end +specifier for the first key. It would have been equivalent to +specify @option{-k 2n,2} or @option{-k 2n,2n}. All modifiers except +@samp{b} apply to the associated @emph{field}, regardless of whether +the modifier character is attached to the field-start and/or the +field-end part of the key specifier. + +@item +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 @samp{:}. + +@example +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 +@end example + +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 @option{-k 5b,5b} and @option{-k 5b,5} are +equivalent, as the location of a field-end lacking a @samp{.@var{c}} +character position is not affected by whether initial blanks are +skipped. + +@item +Sort a set of log files, primarily by IPv4 address and secondarily by +time stamp. 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: + +@example +4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1 +211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2 +@end example + +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. + +@example +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 +@end example + +This example cannot be done with a single @command{sort} invocation, +since IPv4 address components are separated by @samp{.} while dates +come just after a space. So it is broken down into two invocations of +@command{sort}: the first sorts by time stamp and the second by IPv4 +address. The time stamp is sorted by year, then month, then day, and +finally by hour-minute-second field, using @option{-k} to isolate each +field. Except for hour-minute-second there's no need to specify the +end of each key field, since the @samp{n} and @samp{M} modifiers sort +based on leading prefixes that cannot cross field boundaries. The +IPv4 addresses are sorted lexicographically. The second sort uses +@samp{-s} so that ties in the primary key are broken by the secondary +key; the first sort uses @samp{-s} so that the combination of the two +sorts is stable. + +@item +Generate a tags file in case-insensitive sorted order. + +@smallexample +find src -type f -print0 | sort -z -f | xargs -0 etags --append +@end smallexample + +The use of @option{-print0}, @option{-z}, and @option{-0} in this case means +that file names that contain blanks or other special characters are +not broken up +by the sort operation. + +@c This example is a bit contrived and needs more explanation. +@c @item +@c Sort records separated by an arbitrary string by using a pipe to convert +@c each record delimiter string to @samp{\0}, then using sort's -z option, +@c and converting each @samp{\0} back to the original record delimiter. +@c +@c @example +@c printf 'c\n\nb\n\na\n'|perl -0pe 's/\n\n/\n\0/g'|sort -z|perl -0pe 's/\0/\n/g' +@c @end example + +@item +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. + +@example +ls */* | sort -t / -k 1,1R -k 2,2 +@end example + +@end itemize + + +@node shuf invocation +@section @command{shuf}: Shuffling text + +@pindex shuf +@cindex shuffling files + +@command{shuf} shuffles its input by outputting a random permutation +of its input lines. Each output permutation is equally likely. +Synopses: + +@example +shuf [@var{option}]@dots{} [@var{file}] +shuf -e [@var{option}]@dots{} [@var{arg}]@dots{} +shuf -i @var{lo}-@var{hi} [@var{option}]@dots{} +@end example + +@command{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: + +@table @samp + +@item -e +@itemx --echo +@opindex -c +@opindex --echo +@cindex command-line operands to shuffle +Treat each command-line operand as an input line. + +@item -i @var{lo}-@var{hi} +@itemx --input-range=@var{lo}-@var{hi} +@opindex -i +@opindex --input-range +@cindex input range to shuffle +Act as if input came from a file containing the range of unsigned +decimal integers @var{lo}@dots{}@var{hi}, one per line. + +@end table + +@command{shuf}'s other options can affect its behavior in all +operation modes: + +@table @samp + +@item -n @var{lines} +@itemx --head-lines=@var{lines} +@opindex -n +@opindex --head-lines +@cindex head of output +Output at most @var{lines} lines. By default, all input lines are +output. + +@item -o @var{output-file} +@itemx --output=@var{output-file} +@opindex -o +@opindex --output +@cindex overwriting of input, allowed +Write output to @var{output-file} instead of standard output. +@command{shuf} reads all input before opening +@var{output-file}, so you can safely shuffle a file in place by using +commands like @code{shuf -o F <F} and @code{cat F | shuf -o F}. + +@item --random-source=@var{file} +@opindex --random-source +@cindex random source for shuffling +Use @var{file} as a source of random data used to determine which +permutation to generate. @xref{Random sources}. + +@item -z +@itemx --zero-terminated +@opindex -z +@opindex --zero-terminated +@cindex sort zero-terminated lines +Treat the input and output as a set of lines, each terminated by a zero byte +(@acronym{ASCII} @sc{nul} (Null) character) instead of an +@acronym{ASCII} @sc{lf} (Line Feed). +This option can be useful in conjunction with @samp{perl -0} or +@samp{find -print0} and @samp{xargs -0} which do the same in order to +reliably handle arbitrary file names (even those containing blanks +or other special characters). + +@end table + +For example: + +@example +shuf <<EOF +A man, +a plan, +a canal: +Panama! +EOF +@end example + +@noindent +might produce the output + +@example +Panama! +A man, +a canal: +a plan, +@end example + +@noindent +Similarly, the command: + +@example +shuf -e clubs hearts diamonds spades +@end example + +@noindent +might output: + +@example +clubs +diamonds +spades +hearts +@end example + +@noindent +and the command @samp{shuf -i 1-4} might output: + +@example +4 +2 +1 +3 +@end example + +@noindent +These examples all have four input lines, so @command{shuf} might +produce any of the twenty-four possible permutations of the input. In +general, if there are @var{N} input lines, there are @var{N}! (i.e., +@var{N} factorial, or @var{N} * (@var{N} - 1) * @dots{} * 1) possible +output permutations. + +@exitstatus + + +@node uniq invocation +@section @command{uniq}: Uniquify files + +@pindex uniq +@cindex uniquify files + +@command{uniq} writes the unique lines in the given @file{input}, or +standard input if nothing is given or for an @var{input} name of +@samp{-}. Synopsis: + +@example +uniq [@var{option}]@dots{} [@var{input} [@var{output}]] +@end example + +By default, @command{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 @code{sort -u}. +@xref{sort invocation}. + +@vindex LC_COLLATE +Comparisons use the character collating sequence specified by the +@env{LC_COLLATE} locale category. + +If no @var{output} file is specified, @command{uniq} writes to standard +output. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -f @var{n} +@itemx --skip-fields=@var{n} +@opindex -f +@opindex --skip-fields +Skip @var{n} fields on each line before checking for uniqueness. Use +a null string for comparison if a line has fewer than @var{n} fields. Fields +are sequences of non-space non-tab characters that are separated from +each other by at least one space or tab. + +For compatibility @command{uniq} supports an obsolete option syntax +@option{-@var{n}}. New scripts should use @option{-f @var{n}} instead. + +@item -s @var{n} +@itemx --skip-chars=@var{n} +@opindex -s +@opindex --skip-chars +Skip @var{n} characters before checking for uniqueness. Use a null string +for comparison if a line has fewer than @var{n} characters. If you use both +the field and character skipping options, fields are skipped over first. + +@vindex _POSIX2_VERSION +On older systems, @command{uniq} supports an obsolete option syntax +@option{+@var{n}}. +This obsolete behavior can be enabled or disabled with the +@env{_POSIX2_VERSION} environment variable (@pxref{Standards +conformance}), but portable scripts should avoid commands whose +behavior depends on this variable. +For example, use @samp{uniq ./+10} or @samp{uniq -s 10} rather than +the ambiguous @samp{uniq +10}. + +@item -c +@itemx --count +@opindex -c +@opindex --count +Print the number of times each line occurred along with the line. + +@item -i +@itemx --ignore-case +@opindex -i +@opindex --ignore-case +Ignore differences in case when comparing lines. + +@item -d +@itemx --repeated +@opindex -d +@opindex --repeated +@cindex repeated lines, outputting +Discard lines that are not repeated. When used by itself, this option +causes @command{uniq} to print the first copy of each repeated line, +and nothing else. + +@item -D +@itemx --all-repeated[=@var{delimit-method}] +@opindex -D +@opindex --all-repeated +@cindex all repeated lines, outputting +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 @var{delimit-method} tells how to delimit +groups of repeated lines, and must be one of the following: + +@table @samp + +@item none +Do not delimit groups of repeated lines. +This is equivalent to @option{--all-repeated} (@option{-D}). + +@item prepend +Output a newline before each group of repeated lines. + +@item separate +Separate groups of repeated lines with a single newline. +This is the same as using @samp{prepend}, except that +there is no newline before the first group, and hence +may be better suited for output direct to users. +@end table + +Note that when groups are delimited and the input stream contains +two or more consecutive blank lines, then the output is ambiguous. +To avoid that, filter the input through @samp{tr -s '\n'} to replace +each sequence of consecutive newlines with a single newline. + +This is a @sc{gnu} extension. +@c FIXME: give an example showing *how* it's useful + +@item -u +@itemx --unique +@opindex -u +@opindex --unique +@cindex unique lines, outputting +Discard the first repeated line. When used by itself, this option +causes @command{uniq} to print unique lines, and nothing else. + +@item -w @var{n} +@itemx --check-chars=@var{n} +@opindex -w +@opindex --check-chars +Compare at most @var{n} characters on each line (after skipping any specified +fields and characters). By default the entire rest of the lines are +compared. + +@end table + +@exitstatus + + +@node comm invocation +@section @command{comm}: Compare two sorted files line by line + +@pindex comm +@cindex line-by-line comparison +@cindex comparing sorted files + +@command{comm} writes to standard output lines that are common, and lines +that are unique, to two input files; a file name of @samp{-} means +standard input. Synopsis: + +@example +comm [@var{option}]@dots{} @var{file1} @var{file2} +@end example + +@vindex LC_COLLATE +Before @command{comm} can be used, the input files must be sorted using the +collating sequence specified by the @env{LC_COLLATE} locale. +If an input file ends in a non-newline +character, a newline is silently appended. The @command{sort} command with +no options always outputs a file that is suitable input to @command{comm}. + +@cindex differing lines +@cindex common lines +With no options, @command{comm} produces three-column output. Column one +contains lines unique to @var{file1}, column two contains lines unique +to @var{file2}, and column three contains lines common to both files. +Columns are separated by a single TAB character. +@c FIXME: when there's an option to supply an alternative separator +@c string, append `by default' to the above sentence. + +@opindex -1 +@opindex -2 +@opindex -3 +The options @option{-1}, @option{-2}, and @option{-3} suppress printing of +the corresponding columns. Also see @ref{Common options}. + +Unlike some other comparison utilities, @command{comm} has an exit +status that does not depend on the result of the comparison. +Upon normal completion @command{comm} produces an exit code of zero. +If there is an error it exits with nonzero status. + + +@node tsort invocation +@section @command{tsort}: Topological sort + +@pindex tsort +@cindex topological sort + +@command{tsort} performs a topological sort on the given @var{file}, or +standard input if no input file is given or for a @var{file} of +@samp{-}. For more details and some history, see @ref{tsort background}. +Synopsis: + +@example +tsort [@var{option}] [@var{file}] +@end example + +@command{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 + +@example +tsort <<EOF +a b c +d +e f +b c d e +EOF +@end example + +@noindent +will produce the output + +@example +a +b +c +d +e +f +@end example + +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 @code{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. + +@example +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 +@end example + +then you can use @command{tsort} to produce an ordering of those +functions that satisfies your requirement. + +@example +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 +@end example + +@command{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 +@code{parse_options} may be placed anywhere in the list as long as it +precedes @code{main}. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@node tsort background +@section @command{tsort}: Background + +@command{tsort} exists because very early versions of the Unix linker processed +an archive file exactly once, and in order. As @command{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, @code{scanf} probably calls @code{read}. That means +that in a single pass through an archive, it was important for @code{scanf.o} +to appear before read.o, because otherwise a program which calls +@code{scanf} but not @code{read} might end up with an unexpected unresolved +reference to @code{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 @command{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 @command{tsort} over the @command{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 +@command{ranlib}, now generally built by @command{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. + +@exitstatus + + +@node ptx invocation +@section @command{ptx}: Produce permuted indexes + +@pindex ptx + +@command{ptx} reads a text file and essentially produces a permuted index, with +each keyword in its context. The calling sketch is either one of: + +@example +ptx [@var{option} @dots{}] [@var{file} @dots{}] +ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]] +@end example + +The @option{-G} (or its equivalent: @option{--traditional}) option disables +all @sc{gnu} extensions and reverts to traditional mode, thus introducing some +limitations and changing several of the program's default option values. +When @option{-G} is not specified, @sc{gnu} extensions are always enabled. +@sc{gnu} extensions to @command{ptx} are documented wherever appropriate in this +document. For the full list, see @xref{Compatibility in ptx}. + +Individual options are explained in the following sections. + +When @sc{gnu} extensions are enabled, there may be zero, one or several +@var{file}s after the options. If there is no @var{file}, the program +reads the standard input. If there is one or several @var{file}s, 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 @sc{gnu} extensions are @emph{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 @var{input} to be read +instead of the standard input. If two parameters are given, they give +respectively the name of the @var{input} file to read and the name of +the @var{output} file to produce. @emph{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 @command{ptx} +compatibility; @sc{gnu} Standards normally discourage output parameters not +introduced by an option. + +Note that for @emph{any} file named as the value of an option or as an +input text file, a single dash @kbd{-} 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:: +@end menu + + +@node General options in ptx +@subsection General options + +@table @samp + +@item -G +@itemx --traditional +As already explained, this option disables all @sc{gnu} extensions to +@command{ptx} and switches to traditional mode. + +@item --help +Print a short help on standard output, then exit without further +processing. + +@item --version +Print the program version on standard output, then exit without further +processing. + +@end table + +@exitstatus + + +@node Charset selection in ptx +@subsection Charset selection + +@c FIXME: People don't necessarily know what an IBM-PC was these days. +As it is set up now, the program assumes that the input file is coded +using 8-bit @acronym{ISO} 8859-1 code, also known as Latin-1 character set, +@emph{unless} it is compiled for MS-DOS, in which case it uses the +character set of the IBM-PC@. (@sc{gnu} @command{ptx} is not known to work on +smaller MS-DOS machines anymore.) Compared to 7-bit @acronym{ASCII}, the set +of characters which are letters is different; this alters the behavior +of regular expression matching. Thus, 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. + +@table @samp + +@item -f +@itemx --ignore-case +Fold lower case letters to upper case for sorting. + +@end table + + +@node Input processing in ptx +@subsection Word selection and input processing + +@table @samp + +@item -b @var{file} +@itemx --break-file=@var{file} + +This option provides an alternative (to @option{-W}) method of describing +which characters make up words. It introduces the name of a +file which contains a list of characters which can@emph{not} be part of +one word; this file is called the @dfn{Break file}. Any character which +is not part of the Break file is a word constituent. If both options +@option{-b} and @option{-W} are specified, then @option{-W} has precedence and +@option{-b} is ignored. + +When @sc{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 @sc{gnu} extensions +are disabled, spaces, tabs and newlines are always considered as break +characters even if not included in the Break file. + +@item -i @var{file} +@itemx --ignore-file=@var{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 +@dfn{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 +@option{-S} option. + +@item -o @var{file} +@itemx --only-file=@var{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 @dfn{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 @option{-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. + +@item -r +@itemx --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. For more information about reference +production, see @xref{Output formatting in ptx}. +Using this option changes the default value for option @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 +@emph{when} the context ends exactly at the newline. If option +@option{-r} is used with @option{-S} default value, or when @sc{gnu} extensions +are disabled, this condition is always met and references are completely +excluded from the output contexts. + +@item -S @var{regexp} +@itemx --sentence-regexp=@var{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 @sc{gnu} extensions are enabled and if @option{-r} option is not +used, end of sentences are used. In this case, this @var{regex} is +imported from @sc{gnu} Emacs: + +@example +[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]* +@end example + +Whenever @sc{gnu} extensions are disabled or if @option{-r} option is used, end +of lines are used; in this case, the default @var{regexp} is just: + +@example +\n +@end example + +Using an empty @var{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 @option{-F +""}. @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs +Manual}. + +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 @command{ptx} itself. + +@item -W @var{regexp} +@itemx --word-regexp=@var{regexp} + +This option selects which regular expression will describe each keyword. +By default, if @sc{gnu} extensions are enabled, a word is a sequence of +letters; the @var{regexp} used is @samp{\w+}. When @sc{gnu} extensions are +disabled, a word is by default anything which ends with a space, a tab +or a newline; the @var{regexp} used is @samp{[^ \t\n]+}. + +An empty @var{regexp} is equivalent to not using this option. +@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs +Manual}. + +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 @command{ptx} itself. + +@end table + + +@node Output formatting in ptx +@subsection Output formatting + +Output format is mainly controlled by the @option{-O} and @option{-T} options +described in the table below. When neither @option{-O} nor @option{-T} are +selected, and if @sc{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 @option{-A} and are output before the +left context, that is, if option @option{-R} is @emph{not} selected, then +a colon is added after the reference; this nicely interfaces with @sc{gnu} +Emacs @code{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. + +@table @samp + +@item -g @var{number} +@itemx --gap-size=@var{number} + +Select the size of the minimum white space gap between the fields on the +output line. + +@item -w @var{number} +@itemx --width=@var{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 @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. + +@item -A +@itemx --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 @option{-A} and @option{-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. + +@item -R +@itemx --right-side-refs + +In the default output format, when option @option{-R} is not used, any +references produced by the effect of options @option{-r} or @option{-A} are +placed to the far right of output lines, after the right context. With +default output format, when the @option{-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 @option{-R} is +ignored, with one exception: with @option{-R} the width of references +is @emph{not} taken into account in total output width given by @option{-w}. + +This option is automatically selected whenever @sc{gnu} extensions are +disabled. + +@item -F @var{string} +@itemx --flac-truncation=@var{string} + +This option will request that any truncation in the output be reported +using the string @var{string}. Most output fields theoretically extend +towards the beginning or the end of the current line, or current +sentence, as selected with option @option{-S}. But there is a maximum +allowed output line width, changeable through option @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 @option{-F /}. + +@var{string} may have more than one character, as in @option{-F ...}. +Also, in the particular case when @var{string} is empty (@option{-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 @command{ptx} itself. + +@item -M @var{string} +@itemx --macro-name=@var{string} + +Select another @var{string} to be used instead of @samp{xx}, while +generating output suitable for @command{nroff}, @command{troff} or @TeX{}. + +@item -O +@itemx --format=roff + +Choose an output format suitable for @command{nroff} or @command{troff} +processing. Each output line will look like: + +@smallexample +.xx "@var{tail}" "@var{before}" "@var{keyword_and_after}" "@var{head}" "@var{ref}" +@end smallexample + +so it will be possible to write a @samp{.xx} roff macro to take care of +the output typesetting. This is the default output format when @sc{gnu} +extensions are disabled. Option @option{-M} can be used to change +@samp{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: @kbd{"} is doubled +so it will be correctly processed by @command{nroff} or @command{troff}. + +@item -T +@itemx --format=tex + +Choose an output format suitable for @TeX{} processing. Each output +line will look like: + +@smallexample +\xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@{@var{after}@}@{@var{head}@}@{@var{ref}@} +@end smallexample + +@noindent +so it will be possible to write a @code{\xx} definition to take care of +the output typesetting. Note that when references are not being +produced, that is, neither option @option{-A} nor option @option{-r} is +selected, the last parameter of each @code{\xx} call is inhibited. +Option @option{-M} can be used to change @samp{xx} to another macro +name. + +In this output format, some special characters, like @kbd{$}, @kbd{%}, +@kbd{&}, @kbd{#} and @kbd{_} are automatically protected with a +backslash. Curly brackets @kbd{@{}, @kbd{@}} are protected with a +backslash and a pair of dollar signs (to force mathematical mode). The +backslash itself produces the sequence @code{\backslash@{@}}. +Circumflex and tilde diacritical marks produce the sequence @code{^\@{ @}} and +@code{~\@{ @}} 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 @acronym{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{}. + +@end table + + +@node Compatibility in ptx +@subsection The @sc{gnu} extensions to @command{ptx} + +This version of @command{ptx} contains a few features which do not exist in +System V @command{ptx}. These extra features are suppressed by using the +@option{-G} command line option, unless overridden by other command line +options. Some @sc{gnu} extensions cannot be recovered by overriding, so the +simple rule is to avoid @option{-G} if you care about @sc{gnu} extensions. +Here are the differences between this program and System V @command{ptx}. + +@itemize @bullet + +@item +This program can read many input files at once, it always writes the +resulting concordance on standard output. On the other hand, System V +@command{ptx} reads only one file and sends the result to standard output +or, if a second @var{file} parameter is given on the command, to that +@var{file}. + +Having output parameters not introduced by options is a dangerous +practice which @sc{gnu} avoids as far as possible. So, for using @command{ptx} +portably between @sc{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 @option{-G} option to +@command{ptx} calls in products using @command{ptx}, if the configurator finds +that the installed @command{ptx} accepts @option{-G}. + +@item +The only options available in System V @command{ptx} are options @option{-b}, +@option{-f}, @option{-g}, @option{-i}, @option{-o}, @option{-r}, @option{-t} and +@option{-w}. All other options are @sc{gnu} extensions and are not repeated in +this enumeration. Moreover, some options have a slightly different +meaning when @sc{gnu} extensions are enabled, as explained below. + +@item +By default, concordance output is not formatted for @command{troff} or +@command{nroff}. It is rather formatted for a dumb terminal. @command{troff} +or @command{nroff} output may still be selected through option @option{-O}. + +@item +Unless @option{-R} option is used, the maximum reference width is +subtracted from the total output line width. With @sc{gnu} extensions +disabled, width of references is not taken into account in the output +line width computations. + +@item +All 256 bytes, even null bytes, are always read and processed from +input file with no adverse effect, even if @sc{gnu} extensions are disabled. +However, System V @command{ptx} does not accept 8-bit characters, a few +control characters are rejected, and the tilde @kbd{~} is also rejected. + +@item +Input line length is only limited by available memory, even if @sc{gnu} +extensions are disabled. However, System V @command{ptx} processes only +the first 200 characters in each line. + +@item +The break (non-word) characters default to be every character except all +letters of the underlying character set, diacriticized or not. When @sc{gnu} +extensions are disabled, the break characters default to space, tab and +newline only. + +@item +The program makes better use of output line width. If @sc{gnu} extensions +are disabled, the program rather tries to imitate System V @command{ptx}, +but still, there are some slight disposition glitches this program does +not completely reproduce. + +@item +The user can specify both an Ignore file and an Only file. This is not +allowed with System V @command{ptx}. + +@end itemize + + +@node Operating on fields within a line +@chapter Operating on fields within a line + +@menu +* cut invocation:: Print selected parts of lines. +* paste invocation:: Merge lines of files. +* join invocation:: Join lines on a common field. +@end menu + + +@node cut invocation +@section @command{cut}: Print selected parts of lines + +@pindex cut +@command{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 +@samp{-}. Synopsis: + +@example +cut [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +In the table which follows, the @var{byte-list}, @var{character-list}, +and @var{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: @option{-@var{m}} means @samp{1-@var{m}}; @samp{@var{n}-} means +@samp{@var{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 @ref{Common +options}. + +@table @samp + +@item -b @var{byte-list} +@itemx --bytes=@var{byte-list} +@opindex -b +@opindex --bytes +Select for printing only the bytes in positions listed in +@var{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 @option{--output-delimiter}), then output that +string between ranges of selected bytes. + +@item -c @var{character-list} +@itemx --characters=@var{character-list} +@opindex -c +@opindex --characters +Select for printing only the characters in positions listed in +@var{character-list}. The same as @option{-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 +@option{--output-delimiter}), then output that string between ranges +of selected bytes. + +@item -f @var{field-list} +@itemx --fields=@var{field-list} +@opindex -f +@opindex --fields +Select for printing only the fields listed in @var{field-list}. +Fields are separated by a TAB character by default. Also print any +line that contains no delimiter character, unless the +@option{--only-delimited} (@option{-s}) option is specified + +@item -d @var{input_delim_byte} +@itemx --delimiter=@var{input_delim_byte} +@opindex -d +@opindex --delimiter +With @option{-f}, use the first byte of @var{input_delim_byte} as +the input fields separator (default is TAB). + +@item -n +@opindex -n +Do not split multi-byte characters (no-op for now). + +@item -s +@itemx --only-delimited +@opindex -s +@opindex --only-delimited +For @option{-f}, do not print lines that do not contain the field separator +character. Normally, any line without a field separator is printed verbatim. + +@item --output-delimiter=@var{output_delim_string} +@opindex --output-delimiter +With @option{-f}, output fields are separated by @var{output_delim_string}. +The default with @option{-f} is to use the input delimiter. +When using @option{-b} or @option{-c} to select ranges of byte or +character offsets (as opposed to ranges of fields), +output @var{output_delim_string} between non-overlapping +ranges of selected bytes. + +@item --complement +@opindex --complement +This option is a @acronym{GNU} extension. +Select for printing the complement of the bytes, characters or fields +selected with the @option{-b}, @option{-c} or @option{-f} options. +In other words, do @emph{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. + +@end table + +@exitstatus + + +@node paste invocation +@section @command{paste}: Merge lines of files + +@pindex paste +@cindex merging files + +@command{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 @samp{-} or if no input files +are given. + +For example: + +@example +$ cat num2 +1 +2 +$ cat let3 +a +b +c +$ paste num2 let3 +1 a +2 b + @ c +@end example + +Synopsis: + +@example +paste [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -s +@itemx --serial +@opindex -s +@opindex --serial +Paste the lines of one file at a time rather than one line from each +file. Using the above example data: + +@example +$ paste -s num2 let3 +1 2 +a b c +@end example + +@item -d @var{delim-list} +@itemx --delimiters=@var{delim-list} +@opindex -d +@opindex --delimiters +Consecutively use the characters in @var{delim-list} instead of +TAB to separate merged lines. When @var{delim-list} is +exhausted, start again at its beginning. Using the above example data: + +@example +$ paste -d '%_' num2 let3 num2 +1%a_1 +2%b_2 +%c_ +@end example + +@end table + +@exitstatus + + +@node join invocation +@section @command{join}: Join lines on a common field + +@pindex join +@cindex common field, joining on + +@command{join} writes to standard output a line for each pair of input +lines that have identical join fields. Synopsis: + +@example +join [@var{option}]@dots{} @var{file1} @var{file2} +@end example + +Either @var{file1} or @var{file2} (but not both) can be @samp{-}, +meaning standard input. @var{file1} and @var{file2} should be +sorted on the join fields. + +@vindex LC_COLLATE +Normally, the sort order is that of the +collating sequence specified by the @env{LC_COLLATE} locale. Unless +the @option{-t} option is given, the sort comparison ignores blanks at +the start of the join field, as in @code{sort -b}. If the +@option{--ignore-case} option is given, the sort comparison ignores +the case of characters in the join field, as in @code{sort -f}. + +The @command{sort} and @command{join} commands should use consistent +locales and options if the output of @command{sort} is fed to +@command{join}. You can use a command like @samp{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 @command{join} and @command{sort}. + +As a @acronym{GNU} extension, if the input has no unpairable lines 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: + +@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 +@end example + +The defaults are: +@itemize +@item the join field is the first field in each line; +@item fields in the input are separated by one or more blanks, with leading + blanks on the line ignored; +@item fields in the output are separated by a space; +@item each output line consists of the join field, the remaining +fields from @var{file1}, then the remaining fields from @var{file2}. +@end itemize + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a @var{file-number} +@opindex -a +Print a line for each unpairable line in file @var{file-number} (either +@samp{1} or @samp{2}), in addition to the normal output. + +@item -e @var{string} +@opindex -e +Replace those output fields that are missing in the input with +@var{string}. + +@item -i +@itemx --ignore-case +@opindex -i +@opindex --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 @samp{sort -f} to produce this ordering. + +@item -1 @var{field} +@opindex -1 +Join on field @var{field} (a positive integer) of file 1. + +@item -2 @var{field} +@opindex -2 +Join on field @var{field} (a positive integer) of file 2. + +@item -j @var{field} +Equivalent to @option{-1 @var{field} -2 @var{field}}. + +@item -o @var{field-list} +Construct each output line according to the format in @var{field-list}. +Each element in @var{field-list} is either the single character @samp{0} or +has the form @var{m.n} where the file number, @var{m}, is @samp{1} or +@samp{2} and @var{n} is a positive field number. + +A field specification of @samp{0} denotes the join field. +In most cases, the functionality of the @samp{0} field spec +may be reproduced using the explicit @var{m.n} that corresponds +to the join field. However, when printing unpairable lines +(using either of the @option{-a} or @option{-v} options), there is no way +to specify the join field using @var{m.n} in @var{field-list} +if there are unpairable lines in both files. +To give @command{join} that functionality, @acronym{POSIX} invented the @samp{0} +field specification notation. + +The elements in @var{field-list} +are separated by commas or blanks. +Blank separators typically need to be quoted for the shell. For +example, the commands @samp{join -o 1.2,2.2} and @samp{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 @var{field-list}. + +@item -t @var{char} +Use character @var{char} as the input and output field separator. +Treat as significant each occurrence of @var{char} in the input file. +Use @samp{sort -t @var{char}}, without the @option{-b} option of +@samp{sort}, to produce this ordering. + +@item -v @var{file-number} +Print a line for each unpairable line in file @var{file-number} +(either @samp{1} or @samp{2}), instead of the normal output. + +@end table + +@exitstatus + + +@node Operating on characters +@chapter Operating on characters + +@cindex operating on characters + +This 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. +@end menu + + +@node tr invocation +@section @command{tr}: Translate, squeeze, and/or delete characters + +@pindex tr + +Synopsis: + +@example +tr [@var{option}]@dots{} @var{set1} [@var{set2}] +@end example + +@command{tr} copies standard input to standard output, performing +one of the following operations: + +@itemize @bullet +@item +translate, and optionally squeeze repeated characters in the result, +@item +squeeze repeated characters, +@item +delete characters, +@item +delete characters, then squeeze repeated characters from the result. +@end itemize + +The @var{set1} and (if given) @var{set2} arguments define ordered +sets of characters, referred to below as @var{set1} and @var{set2}. These +sets are the characters of the input that @command{tr} operates on. +The @option{--complement} (@option{-c}, @option{-C}) option replaces +@var{set1} with its +complement (all of the characters that are not in @var{set1}). + +Currently @command{tr} fully supports only single-byte characters. +Eventually it will support multibyte characters; when it does, the +@option{-C} option will cause it to complement the set of characters, +whereas @option{-c} will cause it to complement the set of values. +This distinction will matter only when some values are not characters, +and this is possible only in locales using multibyte encodings when +the input contains encoding errors. + +The program accepts the @option{--help} and @option{--version} +options. @xref{Common options}. Options must precede operands. + +@exitstatus + +@menu +* Character sets:: Specifying sets of characters. +* Translating:: Changing one set of characters to another. +* Squeezing:: Squeezing repeats and deleting. +@end menu + + +@node Character sets +@subsection Specifying sets of characters + +@cindex specifying sets of characters + +The format of the @var{set1} and @var{set2} arguments resembles +the format of regular expressions; however, they are not regular +expressions, only lists of characters. Most characters simply +represent themselves in these strings, but the strings can contain +the shorthands listed below, for convenience. Some of them can be +used only in @var{set1} or @var{set2}, as noted below. + +@table @asis + +@item Backslash escapes +@cindex backslash escapes + +The following backslash escape sequences are recognized: + +@table @samp +@item \a +Control-G. +@item \b +Control-H. +@item \f +Control-L. +@item \n +Control-J. +@item \r +Control-M. +@item \t +Control-I. +@item \v +Control-K. +@item \@var{ooo} +The character with the value given by @var{ooo}, which is 1 to 3 +octal digits, +@item \\ +A backslash. +@end table + +While a backslash followed by a character not listed above is +interpreted as that character, the backslash also effectively +removes any special significance, so it is useful to escape +@samp{[}, @samp{]}, @samp{*}, and @samp{-}. + +@item Ranges +@cindex ranges + +The notation @samp{@var{m}-@var{n}} expands to all of the characters +from @var{m} through @var{n}, in ascending order. @var{m} should +collate before @var{n}; if it doesn't, an error results. As an example, +@samp{0-9} is the same as @samp{0123456789}. + +@sc{gnu} @command{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, @samp{tr -d '[0-9]'} deletes brackets +as well as digits. + +Many historically common and even accepted uses of ranges are not +portable. For example, on @acronym{EBCDIC} hosts using the @samp{A-Z} +range will not do what most would expect because @samp{A} through @samp{Z} +are not contiguous as they are in @acronym{ASCII}. +If you can rely on a @acronym{POSIX} compliant version of @command{tr}, then +the best 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. + +@item Repeated characters +@cindex repeated characters + +The notation @samp{[@var{c}*@var{n}]} in @var{set2} expands to @var{n} +copies of character @var{c}. Thus, @samp{[y*6]} is the same as +@samp{yyyyyy}. The notation @samp{[@var{c}*]} in @var{string2} expands +to as many copies of @var{c} as are needed to make @var{set2} as long as +@var{set1}. If @var{n} begins with @samp{0}, it is interpreted in +octal, otherwise in decimal. + +@item Character classes +@cindex character classes + +The notation @samp{[:@var{class}:]} expands to all of the characters in +the (predefined) class @var{class}. The characters expand in no +particular order, except for the @code{upper} and @code{lower} classes, +which expand in ascending order. When the @option{--delete} (@option{-d}) +and @option{--squeeze-repeats} (@option{-s}) options are both given, any +character class can be used in @var{set2}. Otherwise, only the +character classes @code{lower} and @code{upper} are accepted in +@var{set2}, and then only if the corresponding character class +(@code{upper} and @code{lower}, respectively) is specified in the same +relative position in @var{set1}. Doing this specifies case conversion. +The class names are given below; an error results when an invalid class +name is given. + +@table @code +@item alnum +@opindex alnum +Letters and digits. +@item alpha +@opindex alpha +Letters. +@item blank +@opindex blank +Horizontal whitespace. +@item cntrl +@opindex cntrl +Control characters. +@item digit +@opindex digit +Digits. +@item graph +@opindex graph +Printable characters, not including space. +@item lower +@opindex lower +Lowercase letters. +@item print +@opindex print +Printable characters, including space. +@item punct +@opindex punct +Punctuation characters. +@item space +@opindex space +Horizontal or vertical whitespace. +@item upper +@opindex upper +Uppercase letters. +@item xdigit +@opindex xdigit +Hexadecimal digits. +@end table + +@item Equivalence classes +@cindex equivalence classes + +The syntax @samp{[=@var{c}=]} expands to all of the characters that are +equivalent to @var{c}, in no particular order. Equivalence classes are +a relatively recent invention intended to support non-English alphabets. +But there seems to be no standard way to define them or determine their +contents. Therefore, they are not fully implemented in @sc{gnu} @command{tr}; +each character's equivalence class consists only of that character, +which is of no particular use. + +@end table + + +@node Translating +@subsection Translating + +@cindex translating characters + +@command{tr} performs translation when @var{set1} and @var{set2} are +both given and the @option{--delete} (@option{-d}) option is not given. +@command{tr} translates each character of its input that is in @var{set1} +to the corresponding character in @var{set2}. Characters not in +@var{set1} are passed through unchanged. When a character appears more +than once in @var{set1} and the corresponding characters in @var{set2} +are not all the same, only the final one is used. For example, these +two commands are equivalent: + +@example +tr aaa xyz +tr a z +@end example + +A common use of @command{tr} is to convert lowercase characters to +uppercase. This can be done in many ways. Here are three of them: + +@example +tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ +tr a-z A-Z +tr '[:lower:]' '[:upper:]' +@end example + +@noindent +But note that using ranges like @code{a-z} above is not portable. + +When @command{tr} is performing translation, @var{set1} and @var{set2} +typically have the same length. If @var{set1} is shorter than +@var{set2}, the extra characters at the end of @var{set2} are ignored. + +On the other hand, making @var{set1} longer than @var{set2} is not +portable; @acronym{POSIX} says that the result is undefined. In this situation, +BSD @command{tr} pads @var{set2} to the length of @var{set1} by repeating +the last character of @var{set2} as many times as necessary. System V +@command{tr} truncates @var{set1} to the length of @var{set2}. + +By default, @sc{gnu} @command{tr} handles this case like BSD @command{tr}. +When the @option{--truncate-set1} (@option{-t}) option is given, +@sc{gnu} @command{tr} handles this case like the System V @command{tr} +instead. This option is ignored for operations other than translation. + +Acting like System V @command{tr} in this case breaks the relatively common +BSD idiom: + +@example +tr -cs A-Za-z0-9 '\012' +@end example + +@noindent +because it converts only zero bytes (the first element in the +complement of @var{set1}), rather than all non-alphanumerics, to +newlines. + +@noindent +By the way, the above idiom is not portable because it uses ranges, and +it assumes that the octal code for newline is 012. +Assuming a @acronym{POSIX} compliant @command{tr}, here is a better way to write it: + +@example +tr -cs '[:alnum:]' '[\n*]' +@end example + + +@node Squeezing +@subsection Squeezing repeats and deleting + +@cindex squeezing repeat characters +@cindex deleting characters + +When given just the @option{--delete} (@option{-d}) option, @command{tr} +removes any input characters that are in @var{set1}. + +When given just the @option{--squeeze-repeats} (@option{-s}) option, +@command{tr} replaces each input sequence of a repeated character that +is in @var{set1} with a single occurrence of that character. + +When given both @option{--delete} and @option{--squeeze-repeats}, @command{tr} +first performs any deletions using @var{set1}, then squeezes repeats +from any remaining characters using @var{set2}. + +The @option{--squeeze-repeats} option may also be used when translating, +in which case @command{tr} first performs translation, then squeezes +repeats from any remaining characters using @var{set2}. + +Here are some examples to illustrate various combinations of options: + +@itemize @bullet + +@item +Remove all zero bytes: + +@example +tr -d '\0' +@end example + +@item +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: + +@example +tr -cs '[:alnum:]' '[\n*]' +@end example + +@item +Convert each sequence of repeated newlines to a single newline: + +@example +tr -s '\n' +@end example + +@item +Find doubled occurrences of words in a document. +@c Separate the following two "the"s, so typo checkers don't complain. +For example, people often write ``the @w{}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 @command{uniq} with the @option{-d} option to print out only the words +that were repeated. + +@example +#!/bin/sh +cat -- "$@@" \ + | tr -s '[:punct:][:blank:]' '[\n*]' \ + | tr '[:upper:]' '[:lower:]' \ + | uniq -d +@end example + +@item +Deleting a small set of characters is usually straightforward. For example, +to remove all @samp{a}s, @samp{x}s, and @samp{M}s you would do this: + +@example +tr -d axM +@end example + +However, when @samp{-} is one of those characters, it can be tricky because +@samp{-} has special meanings. Performing the same task as above but also +removing all @samp{-} characters, we might try @code{tr -d -axM}, but +that would fail because @command{tr} would try to interpret @option{-a} as +a command-line option. Alternatively, we could try putting the hyphen +inside the string, @code{tr -d a-xM}, but that wouldn't work either because +it would make @command{tr} interpret @code{a-x} as the range of characters +@samp{a}@dots{}@samp{x} rather than the three. +One way to solve the problem is to put the hyphen at the end of the list +of characters: + +@example +tr -d axM- +@end example + +Or you can use @samp{--} to terminate option processing: + +@example +tr -d -- -axM +@end example + +More generally, use the character class notation @code{[=c=]} +with @samp{-} (or any other character) in place of the @samp{c}: + +@example +tr -d '[=-=]axM' +@end example + +Note how single quotes are used in the above example to protect the +square brackets from interpretation by a shell. + +@end itemize + + +@node expand invocation +@section @command{expand}: Convert tabs to spaces + +@pindex expand +@cindex tabs to spaces, converting +@cindex converting tabs to spaces + +@command{expand} writes the contents of each given @var{file}, or standard +input if none are given or for a @var{file} of @samp{-}, to standard +output, with tab characters converted to the appropriate number of +spaces. Synopsis: + +@example +expand [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +By default, @command{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 @option{-t 8} (set +tabs every 8 columns). + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -t @var{tab1}[,@var{tab2}]@dots{} +@itemx --tabs=@var{tab1}[,@var{tab2}]@dots{} +@opindex -t +@opindex --tabs +@cindex tab stops, setting +If only one tab stop is given, set the tabs @var{tab1} spaces apart +(default is 8). Otherwise, set the tabs at columns @var{tab1}, +@var{tab2}, @dots{} (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. + +For compatibility, GNU @command{expand} also accepts the obsolete +option syntax, @option{-@var{t1}[,@var{t2}]@dots{}}. New scripts +should use @option{-t @var{t1}[,@var{t2}]@dots{}} instead. + +@item -i +@itemx --initial +@opindex -i +@opindex --initial +@cindex initial tabs, converting +Only convert initial tabs (those that precede all non-space or non-tab +characters) on each line to spaces. + +@end table + +@exitstatus + + +@node unexpand invocation +@section @command{unexpand}: Convert spaces to tabs + +@pindex unexpand + +@command{unexpand} writes the contents of each given @var{file}, or +standard input if none are given or for a @var{file} of @samp{-}, to +standard output, converting blanks at the beginning of each line into +as many tab characters as needed. In the default @acronym{POSIX} +locale, a @dfn{blank} is a space or a tab; other locales may specify +additional blank characters. Synopsis: + +@example +unexpand [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +By default, @command{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 @ref{Common options}. + +@table @samp + +@item -t @var{tab1}[,@var{tab2}]@dots{} +@itemx --tabs=@var{tab1}[,@var{tab2}]@dots{} +@opindex -t +@opindex --tabs +If only one tab stop is given, set the tabs @var{tab1} columns apart +instead of the default 8. Otherwise, set the tabs at columns +@var{tab1}, @var{tab2}, @dots{} (numbered from 0), and leave blanks +beyond the tab stops given unchanged. Tab stops can be separated by +blanks as well as by commas. This option implies the @option{-a} option. + +For compatibility, GNU @command{unexpand} supports the obsolete option syntax, +@option{-@var{tab1}[,@var{tab2}]@dots{}}, where tab stops must be +separated by commas. (Unlike @option{-t}, this obsolete option does +not imply @option{-a}.) New scripts should use @option{--first-only -t +@var{tab1}[,@var{tab2}]@dots{}} instead. + +@item -a +@itemx --all +@opindex -a +@opindex --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. + +@end table + +@exitstatus + + +@node Directory listing +@chapter Directory listing + +This chapter describes the @command{ls} command and its variants @command{dir} +and @command{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. +@end menu + + +@node ls invocation +@section @command{ls}: List directory contents + +@pindex ls +@cindex directory listing + +The @command{ls} program lists information about files (of any type, +including directories). Options and file arguments can be intermixed +arbitrarily, as usual. + +For non-option command-line arguments that are directories, by default +@command{ls} lists the contents of directories, not recursively, and +omitting files with names beginning with @samp{.}. For other non-option +arguments, by default @command{ls} lists just the file name. If no +non-option argument is specified, @command{ls} operates on the current +directory, acting as if it had been invoked with a single argument of @samp{.}. + +@vindex LC_ALL +By default, the output is sorted alphabetically, according to the locale +settings in effect.@footnote{If you use a non-@acronym{POSIX} +locale (e.g., by setting @env{LC_ALL} to @samp{en_US}), then @command{ls} may +produce output that is sorted differently than you're accustomed to. +In that case, set the @env{LC_ALL} environment variable to @samp{C}.} +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 @command{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 @command{ls}'s operation. + +@cindex exit status of @command{ls} +Exit status: + +@display +0 success +1 minor problems (e.g., a subdirectory was not found) +2 serious trouble (e.g., memory exhausted) +@end display + +Also see @ref{Common options}. + +@menu +* Which files are listed:: +* What information is listed:: +* Sorting the output:: +* More details about version sort:: +* General output formatting:: +* Formatting file timestamps:: +* Formatting the file names:: +@end menu + + +@node Which files are listed +@subsection Which files are listed + +These options determine which files @command{ls} lists information for. +By default, @command{ls} lists files and the contents of any +directories on the command line, except that in directories it ignores +files whose names start with @samp{.}. + +@table @samp + +@item -a +@itemx --all +@opindex -a +@opindex --all +In directories, do not ignore file names that start with @samp{.}. + +@item -A +@itemx --almost-all +@opindex -A +@opindex --almost-all +In directories, do not ignore all file names that start with @samp{.}; +ignore only @file{.} and @file{..}. The @option{--all} (@option{-a}) +option overrides this option. + +@item -B +@itemx --ignore-backups +@opindex -B +@opindex --ignore-backups +@cindex backup files, ignoring +In directories, ignore files that end with @samp{~}. This option is +equivalent to @samp{--ignore='*~' --ignore='.*~'}. + +@item -d +@itemx --directory +@opindex -d +@opindex --directory +List just the names of directories, as with other types of files, rather +than listing their contents. +@c The following sentence is the same as the one for -F. +Do not follow symbolic links listed on the +command line unless the @option{--dereference-command-line} (@option{-H}), +@option{--dereference} (@option{-L}), or +@option{--dereference-command-line-symlink-to-dir} options are specified. + +@item -H +@itemx --dereference-command-line +@opindex -H +@opindex --dereference-command-line +@cindex symbolic links, dereferencing +If a command line argument specifies a symbolic link, show information +for the file the link references rather than for the link itself. + +@itemx --dereference-command-line-symlink-to-dir +@opindex --dereference-command-line-symlink-to-dir +@cindex symbolic links, dereferencing +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 when no other dereferencing-related +option has been specified (@option{--classify} (@option{-F}), +@option{--directory} (@option{-d}), +(@option{-l}), +@option{--dereference} (@option{-L}), or +@option{--dereference-command-line} (@option{-H})). + +@item --group-directories-first +@opindex --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. + +@item --hide=PATTERN +@opindex --hide=@var{pattern} +In directories, ignore files whose names match the shell pattern +@var{pattern}, unless the @option{--all} (@option{-a}) or +@option{--almost-all} (@option{-A}) is also given. This +option acts like @option{--ignore=@var{pattern}} except that it has no +effect if @option{--all} (@option{-a}) or @option{--almost-all} +(@option{-A}) is also given. + +This option can be useful in shell aliases. For example, if +@command{lx} is an alias for @samp{ls --hide='*~'} and @command{ly} is +an alias for @samp{ls --ignore='*~'}, then the command @samp{lx -A} +lists the file @file{README~} even though @samp{ly -A} would not. + +@item -I @var{pattern} +@itemx --ignore=@var{pattern} +@opindex -I +@opindex --ignore=@var{pattern} +In directories, ignore files whose names match the shell pattern +(not regular expression) @var{pattern}. As +in the shell, an initial @samp{.} in a file name does not match a +wildcard at the start of @var{pattern}. Sometimes it is useful +to give this option several times. For example, + +@smallexample +$ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*' +@end smallexample + +The first option ignores names of length 3 or more that start with @samp{.}, +the second ignores all two-character names that start with @samp{.} +except @samp{..}, and the third ignores names that start with @samp{#}. + +@item -L +@itemx --dereference +@opindex -L +@opindex --dereference +@cindex symbolic links, dereferencing +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, @command{ls} still prints the name +of the link itself, not the name of the file that the link points to. + +@item -R +@itemx --recursive +@opindex -R +@opindex --recursive +@cindex recursive directory listing +@cindex directory listing, recursive +List the contents of all directories recursively. + +@end table + + +@node What information is listed +@subsection What information is listed + +These options affect the information that @command{ls} displays. By +default, only file names are shown. + +@table @samp + +@item --author +@opindex --author +@cindex hurd, author, printing +List each file's author when producing long format directory listings. +In GNU/Hurd, file authors can differ from their owners, but in other +operating systems the two are the same. + +@item -D +@itemx --dired +@opindex -D +@opindex --dired +@cindex dired Emacs mode support +With the long listing (@option{-l}) format, print an additional line after +the main output: + +@example +//DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{} +@end example + +@noindent +The @var{begN} and @var{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 (@option{-R}), output a similar +line with offsets for each subdirectory name: + +@example +//SUBDIRED// @var{beg1} @var{end1} @dots{} +@end example + +Finally, output a line of the form: + +@example +//DIRED-OPTIONS// --quoting-style=@var{word} +@end example + +@noindent +where @var{word} is the quoting style (@pxref{Formatting the file names}). + +Here is an actual example: + +@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 +@end example + +Note that the pairs of offsets on the @samp{//DIRED//} line above delimit +these names: @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper}, +@file{file}. +The offsets on the @samp{//SUBDIRED//} line delimit the following +directory names: @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}. + +Here is an example of how to extract the fifth entry name, @samp{deeper}, +corresponding to the pair of offsets, 222 and 228: + +@example +$ ls -gloRF --dired a > out +$ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo +deeper +@end example + +Note that although the listing above includes a trailing slash +for the @samp{deeper} entry, the offsets select the name without +the trailing slash. However, if you invoke @command{ls} with @option{--dired} +along with an option like @option{--escape} (aka @option{-b}) and operate +on a file whose name contains special characters, notice that the backslash +@emph{is} included: + +@example +$ 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 +@end example + +If you use a quoting style that adds quote marks +(e.g., @option{--quoting-style=c}), then the offsets include the quote marks. +So beware that the user may select the quoting style via the environment +variable @env{QUOTING_STYLE}. Hence, applications using @option{--dired} +should either specify an explicit @option{--quoting-style=literal} option +(aka @option{-N} or @option{--literal}) on the command line, or else be +prepared to parse the escaped names. + +@item --full-time +@opindex --full-time +Produce long format directory listings, and list times in full. It is +equivalent to using @option{--format=long} with +@option{--time-style=full-iso} (@pxref{Formatting file timestamps}). + +@item -g +@opindex -g +Produce long format directory listings, but don't display owner information. + +@item -G +@itemx --no-group +@opindex -G +@opindex --no-group +Inhibit display of group information in a long format directory listing. +(This is the default in some non-@sc{gnu} versions of @command{ls}, so we +provide this option for compatibility.) + +@optHumanReadable + +@item -i +@itemx --inode +@opindex -i +@opindex --inode +@cindex inode number, printing +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.) + +@item -l +@itemx --format=long +@itemx --format=verbose +@opindex -l +@opindex --format +@opindex long ls @r{format} +@opindex verbose ls @r{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 (@pxref{Formatting file timestamps}), normally +the modification time. Print question marks for information that +cannot be determined. + +Normally the size is printed as a byte count without punctuation, but +this can be overridden (@pxref{Block size}). For example, @option{-h} +prints an abbreviated, human-readable count, and +@samp{--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 +@samp{total @var{blocks}}, where @var{blocks} is the total disk allocation +for all files in that directory. The block size currently defaults to 1024 +bytes, but this can be overridden (@pxref{Block size}). +The @var{blocks} computed counts each hard link separately; +this is arguably a deficiency. + +The file type is one of the following characters: + +@c The commented-out entries are ones we're not sure about. + +@table @samp +@item - +regular file +@item b +block special file +@item c +character special file +@item C +high performance (``contiguous data'') file +@item d +directory +@item D +door (Solaris 2.5 and up) +@c @item F +@c semaphore, if this is a distinct file type +@item l +symbolic link +@c @item m +@c multiplexed file (7th edition Unix; obsolete) +@item M +off-line (``migrated'') file (Cray DMF) +@item n +network special file (HP-UX) +@item p +FIFO (named pipe) +@item P +port (Solaris 10 and up) +@c @item Q +@c message queue, if this is a distinct file type +@item s +socket +@c @item S +@c shared memory object, if this is a distinct file type +@c @item T +@c typed memory object, if this is a distinct file type +@c @item w +@c whiteout (4.4BSD; not implemented) +@item ? +some other file type +@end table + +@cindex permissions, output by @command{ls} +The file mode bits listed are similar to symbolic mode specifications +(@pxref{Symbolic Modes}). But @command{ls} combines multiple bits into the +third character of each set of permissions as follows: + +@table @samp +@item s +If the set-user-ID or set-group-ID bit and the corresponding executable bit +are both set. + +@item S +If the set-user-ID or set-group-ID bit is set but the corresponding +executable bit is not set. + +@item 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. @xref{Mode Structure}. + +@item T +If the restricted deletion flag or sticky bit is set but the +other-executable bit is not set. + +@item x +If the executable bit is set and none of the above apply. + +@item - +Otherwise. +@end table + +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. + +For a file with an extended access control list, a @samp{+} character is +listed. Basic access control lists are equivalent to the permissions +listed, and are not considered an alternate access method. + +@item -n +@itemx --numeric-uid-gid +@opindex -n +@opindex --numeric-uid-gid +@cindex numeric uid and gid +@cindex numeric user and group IDs +Produce long format directory listings, but +display numeric user and group IDs instead of the owner and group names. + +@item -o +@opindex -o +Produce long format directory listings, but don't display group information. +It is equivalent to using @option{--format=long} with @option{--no-group} . + +@item -s +@itemx --size +@opindex -s +@opindex --size +@cindex disk allocation +@cindex size of files, reporting +Print the disk allocation of each file to the left of the file name. +This is the amount of disk 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 disk allocation is printed in units of +1024 bytes, but this can be overridden (@pxref{Block size}). + +@cindex NFS mounts from BSD to HP-UX +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 @command{ls} program. + +@optSi + +@end table + + +@node Sorting the output +@subsection Sorting the output + +@cindex sorting @command{ls} output +These options change the order in which @command{ls} sorts the information +it outputs. By default, sorting is done by character code +(e.g., @acronym{ASCII} order). + +@table @samp + +@item -c +@itemx --time=ctime +@itemx --time=status +@opindex -c +@opindex --time +@opindex ctime@r{, printing or sorting by} +@opindex status time@r{, printing or sorting by} +@opindex use time@r{, printing or sorting files by} +If the long listing format (e.g., @option{-l}, @option{-o}) is being used, +print the status change time (the @samp{ctime} in the inode) instead of +the modification time. +When explicitly sorting by time (@option{--sort=time} or @option{-t}) +or when not using a long listing format, +sort according to the status change time. + +@item -f +@opindex -f +@cindex unsorted directory listing +@cindex directory order, listing by +Primarily, like @option{-U}---do not sort; list the files in whatever +order they are stored in the directory. But also enable @option{-a} (list +all files) and disable @option{-l}, @option{--color}, and @option{-s} (if they +were specified before the @option{-f}). + +@item -r +@itemx --reverse +@opindex -r +@opindex --reverse +@cindex reverse sorting +Reverse whatever the sorting method is---e.g., list files in reverse +alphabetical order, youngest first, smallest first, or whatever. + +@item -S +@itemx --sort=size +@opindex -S +@opindex --sort +@opindex size of files@r{, sorting files by} +Sort by file size, largest first. + +@item -t +@itemx --sort=time +@opindex -t +@opindex --sort +@opindex modification time@r{, sorting files by} +Sort by modification time (the @samp{mtime} in the inode), newest first. + +@item -u +@itemx --time=atime +@itemx --time=access +@itemx --time=use +@opindex -u +@opindex --time +@opindex use time@r{, printing or sorting files by} +@opindex atime@r{, printing or sorting files by} +@opindex access time@r{, printing or sorting files by} +If the long listing format (e.g., @option{--format=long}) is being used, +print the last access time (the @samp{atime} in the inode). +When explicitly sorting by time (@option{--sort=time} or @option{-t}) +or when not using a long listing format, sort according to the access time. + +@item -U +@itemx --sort=none +@opindex -U +@opindex --sort +@opindex none@r{, sorting option for @command{ls}} +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 @option{-f} does.) This is especially useful when listing very large +directories, since not doing any sorting can be noticeably faster. + +@item -v +@itemx --sort=version +@opindex -v +@opindex --sort +@opindex version@r{, sorting option for @command{ls}} +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. (@xref{More details about version sort}.) + +@item -X +@itemx --sort=extension +@opindex -X +@opindex --sort +@opindex extension@r{, sorting files by} +Sort directory contents alphabetically by file extension (characters +after the last @samp{.}); files with no extension are sorted first. + +@end table + + +@node More details about version sort +@subsection More details about version sort + +The version sort takes into account the fact that file names frequently include +indices or version numbers. Standard sorting functions usually do not produce +the ordering that people expect because comparisons are made on a +character-by-character basis. The version +sort addresses this problem, and is especially useful when browsing +directories that contain many files with indices/version numbers in their +names: + +@example +$ ls -1 $ ls -1v +foo.zml-1.gz foo.zml-1.gz +foo.zml-100.gz foo.zml-2.gz +foo.zml-12.gz foo.zml-6.gz +foo.zml-13.gz foo.zml-12.gz +foo.zml-2.gz foo.zml-13.gz +foo.zml-25.gz foo.zml-25.gz +foo.zml-6.gz foo.zml-100.gz +@end example + +Note also that numeric parts with leading zeros are considered as +fractional one: + +@example +$ ls -1 $ ls -1v +abc-1.007.tgz abc-1.007.tgz +abc-1.012b.tgz abc-1.01a.tgz +abc-1.01a.tgz abc-1.012b.tgz +@end example + +This functionality is implemented using the @code{strverscmp} function. +@xref{String/Array Comparison, , , libc, The GNU C Library Reference Manual}. +One result of that implementation decision is that @code{ls -v} does not +use the locale category, @env{LC_COLLATE}. As a result, non-numeric prefixes +are sorted as if @env{LC_COLLATE} were set to @code{C}. + +@node General output formatting +@subsection General output formatting + +These options affect the appearance of the overall output. + +@table @samp + +@item -1 +@itemx --format=single-column +@opindex -1 +@opindex --format +@opindex single-column @r{output of files} +List one file per line. This is the default for @command{ls} when standard +output is not a terminal. + +@item -C +@itemx --format=vertical +@opindex -C +@opindex --format +@opindex vertical @r{sorted files in columns} +List files in columns, sorted vertically. This is the default for +@command{ls} if standard output is a terminal. It is always the default +for the @command{dir} program. +@sc{gnu} @command{ls} uses variable width columns to display as many files as +possible in the fewest lines. + +@item --color [=@var{when}] +@opindex --color +@cindex color, distinguishing file types with +Specify whether to use color for distinguishing file types. @var{when} +may be omitted, or one of: +@itemize @bullet +@item none +@vindex none @r{color option} +- Do not use color at all. This is the default. +@item auto +@vindex auto @r{color option} +@cindex terminal, using color iff +- Only use color if standard output is a terminal. +@item always +@vindex always @r{color option} +- Always use color. +@end itemize +Specifying @option{--color} and no @var{when} is equivalent to +@option{--color=always}. +Piping a colorized listing through a pager like @command{more} or +@command{less} usually produces unreadable results. However, using +@code{more -f} does seem to work. + +@item -F +@itemx --classify +@itemx --indicator-style=classify +@opindex -F +@opindex --classify +@opindex --indicator-style +@cindex file type and executables, marking +@cindex executables and file type, marking +Append a character to each file name indicating the file type. Also, +for regular files that are executable, append @samp{*}. The file type +indicators are @samp{/} for directories, @samp{@@} for symbolic links, +@samp{|} for FIFOs, @samp{=} for sockets, @samp{>} for doors, +and nothing for regular files. +@c The following sentence is the same as the one for -d. +Do not follow symbolic links listed on the +command line unless the @option{--dereference-command-line} (@option{-H}), +@option{--dereference} (@option{-L}), or +@option{--dereference-command-line-symlink-to-dir} options are specified. + +@item --file-type +@itemx --indicator-style=file-type +@opindex --file-type +@opindex --indicator-style +@cindex file type, marking +Append a character to each file name indicating the file type. This is +like @option{-F}, except that executables are not marked. + +@item --indicator-style=@var{word} +@opindex --indicator-style +Append a character indicator with style @var{word} to entry names, +as follows: + +@table @samp +@item none +Do not append any character indicator; this is the default. +@item slash +Append @samp{/} for directories. This is the same as the @option{-p} +option. +@item file-type +Append @samp{/} for directories, @samp{@@} for symbolic links, @samp{|} +for FIFOs, @samp{=} for sockets, and nothing for regular files. This is +the same as the @option{--file-type} option. +@item classify +Append @samp{*} for executable regular files, otherwise behave as for +@samp{file-type}. This is the same as the @option{-F} or +@option{--classify} option. +@end table + +@item -k +@opindex -k +Print file sizes in 1024-byte blocks, overriding the default block +size (@pxref{Block size}). +This option is equivalent to @option{--block-size=1K}. + +@item -m +@itemx --format=commas +@opindex -m +@opindex --format +@opindex commas@r{, outputting between files} +List files horizontally, with as many as will fit on each line, +separated by @samp{, } (a comma and a space). + +@item -p +@itemx --indicator-style=slash +@opindex -p +@opindex --indicator-style +@cindex file type, marking +Append a @samp{/} to directory names. + +@item -x +@itemx --format=across +@itemx --format=horizontal +@opindex -x +@opindex --format +@opindex across@r{, listing files} +@opindex horizontal@r{, listing files} +List the files in columns, sorted horizontally. + +@item -T @var{cols} +@itemx --tabsize=@var{cols} +@opindex -T +@opindex --tabsize +Assume that each tab stop is @var{cols} columns wide. The default is 8. +@command{ls} uses tabs where possible in the output, for efficiency. If +@var{cols} is zero, do not use tabs at all. + +@c FIXME: remove in 2009, if Apple Terminal has been fixed for long enough. +Some terminal emulators (at least Apple Terminal 1.5 (133) from Mac OS X 10.4.8) +do not properly align columns to the right of a TAB following a +non-@acronym{ASCII} byte. If you use such a terminal emulator, use the +@option{-T0} option or put @code{TABSIZE=0} in your environment to tell +@command{ls} to align using spaces, not tabs. + +@item -w +@itemx --width=@var{cols} +@opindex -w +@opindex --width +@vindex COLUMNS +Assume the screen is @var{cols} columns wide. The default is taken +from the terminal settings if possible; otherwise the environment +variable @env{COLUMNS} is used if it is set; otherwise the default +is 80. + +@end table + + +@node Formatting file timestamps +@subsection Formatting file timestamps + +By default, file timestamps are listed in abbreviated form. Most +locales use a timestamp like @samp{2002-03-30 23:45}. However, the +default @acronym{POSIX} locale uses a date like @samp{Mar 30@ @ 2002} +for non-recent timestamps, and a date-without-year and time like +@samp{Mar 30 23:45} for recent timestamps. + +A timestamp is considered to be @dfn{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 @command{make} that rely on file timestamps. + +@vindex TZ +Time stamps are listed according to the time zone rules specified by +the @env{TZ} environment variable, or by the system default rules if +@env{TZ} is not set. @xref{TZ Variable,, Specifying the Time Zone +with @env{TZ}, libc, The GNU C Library}. + +The following option changes how file timestamps are printed. + +@table @samp +@item --time-style=@var{style} +@opindex --time-style +@cindex time style +List timestamps in style @var{style}. The @var{style} should +be one of the following: + +@table @samp +@item +@var{format} +@vindex LC_TIME +List timestamps using @var{format}, where @var{format} is interpreted +like the format argument of @command{date} (@pxref{date invocation}). +For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes +@command{ls} to list timestamps like @samp{2002-03-30 23:45:56}. As +with @command{date}, @var{format}'s interpretation is affected by the +@env{LC_TIME} locale category. + +If @var{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. + +@item full-iso +List timestamps in full using @acronym{ISO} 8601 date, time, and time zone +format with nanosecond precision, e.g., @samp{2002-03-30 +23:45:56.477817180 -0700}. This style is equivalent to +@samp{+%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 @command{make}'s behavior, since @acronym{GNU} @command{make} +uses the full timestamp to determine whether a file is out of date. + +@item long-iso +List @acronym{ISO} 8601 date and time in minutes, e.g., +@samp{2002-03-30 23:45}. These timestamps are shorter than +@samp{full-iso} timestamps, and are usually good enough for everyday +work. This style is equivalent to @samp{+%Y-%m-%d %H:%M}. + +@item iso +List @acronym{ISO} 8601 dates for non-recent timestamps (e.g., +@samp{2002-03-30@ }), and @acronym{ISO} 8601 month, day, hour, and +minute for recent timestamps (e.g., @samp{03-30 23:45}). These +timestamps are uglier than @samp{long-iso} timestamps, but they carry +nearly the same information in a smaller space and their brevity helps +@command{ls} output fit within traditional 80-column output lines. +The following two @command{ls} invocations are equivalent: + +@example +newline=' +' +ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M" +ls -l --time-style="iso" +@end example + +@item locale +@vindex LC_TIME +List timestamps in a locale-dependent form. For example, a Finnish +locale might list non-recent timestamps like @samp{maalis 30@ @ 2002} +and recent timestamps like @samp{maalis 30 23:45}. Locale-dependent +timestamps typically consume more space than @samp{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 @env{LC_TIME} locale category specifies the timestamp format. The +default @acronym{POSIX} locale uses timestamps like @samp{Mar 30@ +@ 2002} and @samp{Mar 30 23:45}; in this locale, the following two +@command{ls} invocations are equivalent: + +@example +newline=' +' +ls -l --time-style="+%b %e %Y$newline%b %e %H:%M" +ls -l --time-style="locale" +@end example + +Other locales behave differently. For example, in a German locale, +@option{--time-style="locale"} might be equivalent to +@option{--time-style="+%e. %b %Y $newline%e. %b %H:%M"} +and might generate timestamps like @samp{30. M@"ar 2002@ } and +@samp{30. M@"ar 23:45}. + +@item posix-@var{style} +@vindex LC_TIME +List @acronym{POSIX}-locale timestamps if the @env{LC_TIME} locale +category is @acronym{POSIX}, @var{style} timestamps otherwise. For +example, the @samp{posix-long-iso} style lists +timestamps like @samp{Mar 30@ @ 2002} and @samp{Mar 30 23:45} when in +the @acronym{POSIX} locale, and like @samp{2002-03-30 23:45} otherwise. +@end table +@end table + +@vindex TIME_STYLE +You can specify the default value of the @option{--time-style} option +with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set +the default style is @samp{locale}. @acronym{GNU} Emacs 21.3 and +later use the @option{--dired} option and therefore can parse any date +format, but if you are using Emacs 21.1 or 21.2 and specify a +non-@acronym{POSIX} locale you may need to set +@samp{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. + + +@node Formatting the file names +@subsection Formatting the file names + +These options change how file names themselves are printed. + +@table @samp + +@item -b +@itemx --escape +@itemx --quoting-style=escape +@opindex -b +@opindex --escape +@opindex --quoting-style +@cindex backslash sequences for file names +Quote nongraphic characters in file names using alphabetic and octal +backslash sequences like those used in C. + +@item -N +@itemx --literal +@itemx --quoting-style=literal +@opindex -N +@opindex --literal +@opindex --quoting-style +Do not quote file names. However, with @command{ls} nongraphic +characters are still printed as question marks if the output is a +terminal and you do not specify the @option{--show-control-chars} +option. + +@item -q +@itemx --hide-control-chars +@opindex -q +@opindex --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 +@command{ls}. + +@item -Q +@itemx --quote-name +@itemx --quoting-style=c +@opindex -Q +@opindex --quote-name +@opindex --quoting-style +Enclose file names in double quotes and quote nongraphic characters as +in C. + +@item --quoting-style=@var{word} +@opindex --quoting-style +@cindex quoting style +Use style @var{word} to quote file names and other strings that may +contain arbitrary characters. The @var{word} should +be one of the following: + +@table @samp +@item literal +Output strings as-is; this is the same as the @option{-N} or +@option{--literal} option. +@item shell +Quote strings for the shell if they contain shell metacharacters or would +cause ambiguous output. +The quoting is suitable for @acronym{POSIX}-compatible shells like +@command{bash}, but it does not always work for incompatible shells +like @command{csh}. +@item shell-always +Quote strings for the shell, even if they would normally not require quoting. +@item c +Quote strings as for C character string literals, including the +surrounding double-quote characters; this is the same as the +@option{-Q} or @option{--quote-name} option. +@item escape +Quote strings as for C character string literals, except omit the +surrounding double-quote +characters; this is the same as the @option{-b} or @option{--escape} option. +@item clocale +Quote strings as for C character string literals, except use +surrounding quotation marks appropriate for the +locale. +@item locale +@c Use @t instead of @samp to avoid duplicate quoting in some output styles. +Quote strings as for C character string literals, except use +surrounding quotation marks appropriate for the locale, and quote +@t{`like this'} instead of @t{"like +this"} in the default C locale. This looks nicer on many displays. +@end table + +You can specify the default value of the @option{--quoting-style} option +with the environment variable @env{QUOTING_STYLE}. If that environment +variable is not set, the default value is @samp{literal}, but this +default may change to @samp{shell} in a future version of this package. + +@item --show-control-chars +@opindex --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 +@command{ls}. + +@end table + + +@node dir invocation +@section @command{dir}: Briefly list directory contents + +@pindex dir +@cindex directory listing, brief + +@command{dir} is equivalent to @code{ls -C +-b}; that is, by default files are listed in columns, sorted vertically, +and special characters are represented by backslash escape sequences. + +@xref{ls invocation, @command{ls}}. + + +@node vdir invocation +@section @command{vdir}: Verbosely list directory contents + +@pindex vdir +@cindex directory listing, verbose + +@command{vdir} is equivalent to @code{ls -l +-b}; that is, by default files are listed in long format and special +characters are represented by backslash escape sequences. + +@node dircolors invocation +@section @command{dircolors}: Color setup for @command{ls} + +@pindex dircolors +@cindex color setup +@cindex setup for color + +@command{dircolors} outputs a sequence of shell commands to set up the +terminal for color output from @command{ls} (and @command{dir}, etc.). +Typical usage: + +@example +eval "`dircolors [@var{option}]@dots{} [@var{file}]`" +@end example + +If @var{file} is specified, @command{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 @samp{dircolors --print-database}. + +@vindex LS_COLORS +@vindex SHELL @r{environment variable, and color} +The output is a shell command to set the @env{LS_COLORS} environment +variable. You can specify the shell syntax to use on the command line, +or @command{dircolors} will guess it from the value of the @env{SHELL} +environment variable. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp +@item -b +@itemx --sh +@itemx --bourne-shell +@opindex -b +@opindex --sh +@opindex --bourne-shell +@cindex Bourne shell syntax for color setup +@cindex @command{sh} syntax for color setup +Output Bourne shell commands. This is the default if the @env{SHELL} +environment variable is set and does not end with @samp{csh} or +@samp{tcsh}. + +@item -c +@itemx --csh +@itemx --c-shell +@opindex -c +@opindex --csh +@opindex --c-shell +@cindex C shell syntax for color setup +@cindex @command{csh} syntax for color setup +Output C shell commands. This is the default if @code{SHELL} ends with +@command{csh} or @command{tcsh}. + +@item -p +@itemx --print-database +@opindex -p +@opindex --print-database +@cindex color database, printing +@cindex database for color setup, printing +@cindex printing color database +Print the (compiled-in) default color configuration database. This +output is itself a valid configuration file, and is fairly descriptive +of the possibilities. + +@end table + +@exitstatus + + +@node Basic operations +@chapter Basic operations + +@cindex manipulating files + +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. +@end menu + + +@node cp invocation +@section @command{cp}: Copy files and directories + +@pindex cp +@cindex copying files and directories +@cindex files, copying +@cindex directories, copying + +@command{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: + +@example +cp [@var{option}]@dots{} [-T] @var{source} @var{dest} +cp [@var{option}]@dots{} @var{source}@dots{} @var{directory} +cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{} +@end example + +@itemize @bullet +@item +If two file names are given, @command{cp} copies the first file to the +second. + +@item +If the @option{--target-directory} (@option{-t}) option is given, or +failing that if the last file is a directory and the +@option{--no-target-directory} (@option{-T}) option is not given, +@command{cp} copies each @var{source} file to the specified directory, +using the @var{source}s' names. +@end itemize + +Generally, files are written just as they are read. For exceptions, +see the @option{--sparse} option below. + +By default, @command{cp} does not copy directories. However, the +@option{-R}, @option{-a}, and @option{-r} options cause @command{cp} to +copy recursively by descending into source directories and copying files +to corresponding destination directories. + +By default, @command{cp} follows symbolic links only when not copying +recursively. This default can be overridden with the +@option{--archive} (@option{-a}), @option{-d}, @option{--dereference} +(@option{-L}), @option{--no-dereference} (@option{-P}), and +@option{-H} options. If more than one of these options is specified, +the last one silently overrides the others. + +By default, @command{cp} copies the contents of special files only +when not copying recursively. This default can be overridden with the +@option{--copy-contents} option. + +@cindex self-backups +@cindex backups, making only +@command{cp} generally refuses to copy a file onto itself, with the +following exception: if @option{--force --backup} is specified with +@var{source} and @var{dest} identical, and referring to a regular file, +@command{cp} will make a backup file, either regular or numbered, as +specified in the usual ways (@pxref{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 @ref{Common options}. + +@table @samp +@item -a +@itemx --archive +@opindex -a +@opindex --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., @samp{ls -U} may list the entries in a copied +directory in a different order). +Equivalent to @option{-dpPR}. + +@item -b +@itemx @w{@kbd{--backup}[=@var{method}]} +@opindex -b +@opindex --backup +@vindex VERSION_CONTROL +@cindex backups, making +@xref{Backup options}. +Make a backup of each file that would otherwise be overwritten or removed. +As a special case, @command{cp} makes a backup of @var{source} when the force +and backup options are given and @var{source} and @var{dest} are the same +name for an existing, regular file. One useful application of this +combination of options is this tiny Bourne shell script: + +@example +#!/bin/sh +# Usage: backup FILE... +# Create a @sc{gnu}-style backup of each listed FILE. +for i; do + cp --backup --force -- "$i" "$i" +done +@end example + +@item --copy-contents +@cindex directories, copying recursively +@cindex copying directories recursively +@cindex recursively copying directories +@cindex non-directories, copying as special files +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 @file{/dev} directory. In most cases, +@code{cp -R --copy-contents} will hang indefinitely trying to read +from FIFOs and special files like @file{/dev/console}, and it will +fill up your destination disk if you use it to copy @file{/dev/zero}. +This option has no effect unless copying recursively, and it does not +affect the copying of symbolic links. + +@item -d +@opindex -d +@cindex symbolic links, copying +@cindex hard links, preserving +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 @option{--no-dereference --preserve=links}. + +@item -f +@itemx --force +@opindex -f +@opindex --force +When copying without this option and an existing destination file cannot +be opened for writing, the copy fails. However, with @option{--force}), +when a destination file cannot be opened, @command{cp} then unlinks it and +tries to open it again. Contrast this behavior with that enabled by +@option{--link} and @option{--symbolic-link}, whereby the destination file +is never opened but rather is unlinked unconditionally. Also see the +description of @option{--remove-destination}. + +This option is independent of the @option{--interactive} or +@option{-i} option: neither cancels the effect of the other. + +@item -H +@opindex -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. + +@item -i +@itemx --interactive +@opindex -i +@opindex --interactive +When copying a file other than a directory, prompt whether to +overwrite an existing destination file. + +@item -l +@itemx --link +@opindex -l +@opindex --link +Make hard links instead of copies of non-directories. + +@item -L +@itemx --dereference +@opindex -L +@opindex --dereference +Always follow symbolic links. + +@item -P +@itemx --no-dereference +@opindex -P +@opindex --no-dereference +@cindex symbolic links, copying +Copy symbolic links as symbolic links rather than copying the files that +they point to. + +@item -p +@itemx @w{@kbd{--preserve}[=@var{attribute_list}]} +@opindex -p +@opindex --preserve +@cindex file information, preserving +Preserve the specified attributes of the original files. +If specified, the @var{attribute_list} must be a comma-separated list +of one or more of the following strings: + +@table @samp +@itemx mode +Preserve the file mode bits and access control lists. +@itemx 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. +@itemx timestamps +Preserve the times of last access and last modification, when possible. +In general, it is not possible to preserve these attributes +when the affected file is a symbolic link. +However, FreeBSD now provides the @code{lutimes} function, which makes +it possibile even for symbolic links. However, this implementation does +not yet take advantage of that. +@c FIXME: once we provide lutimes support, update the above. +@itemx links +Preserve in the destination files +any links between corresponding source files. +@c Give examples illustrating how hard links are preserved. +@c Also, show how soft links map to hard links with -L and -H. +@itemx all +Preserve all file attributes. +Equivalent to specifying all of the above. +@end table + +Using @option{--preserve} with no @var{attribute_list} is equivalent +to @option{--preserve=mode,ownership,timestamps}. + +In the absence of this option, each destination file is created with the +mode bits of the corresponding source file, minus the bits set in the +umask and minus the set-user-ID and set-group-ID bits. +@xref{File permissions}. + +@itemx @w{@kbd{--no-preserve}=@var{attribute_list}} +@cindex file information, preserving +Do not preserve the specified attributes. The @var{attribute_list} +has the same form as for @option{--preserve}. + +@itemx --parents +@opindex --parents +@cindex parent directories and @command{cp} +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 @command{cp} must be the name of an existing directory. +For example, the command: + +@example +cp --parents a/b/c existing_dir +@end example + +@noindent +copies the file @file{a/b/c} to @file{existing_dir/a/b/c}, creating +any missing intermediate directories. + +@itemx @w{@kbd{--reply}=@var{how}} +@opindex --reply +@cindex interactivity +@c FIXME: remove in 2008 +@strong{Deprecated: to be removed in 2008.}@* +Using @option{--reply=yes} makes @command{cp} act as if @samp{yes} were +given as a response to every prompt about a destination file. That effectively +cancels any preceding @option{--interactive} or @option{-i} option. +Specify @option{--reply=no} to make @command{cp} act as if @samp{no} were +given as a response to every prompt about a destination file. +Specify @option{--reply=query} to make @command{cp} prompt the user +about each existing destination file. + +@item -R +@itemx -r +@itemx --recursive +@opindex -R +@opindex -r +@opindex --recursive +@cindex directories, copying recursively +@cindex copying directories recursively +@cindex recursively copying directories +@cindex non-directories, copying as special files +Copy directories recursively. Symbolic links are not followed by +default; see the @option{--archive} (@option{-a}), @option{-d}, +@option{--dereference} (@option{-L}), @option{--no-dereference} +(@option{-P}), and @option{-H} options. Special files are copied by +creating a destination file of the same type as the source; see the +@option{--copy-contents} option. It is not portable to use +@option{-r} to copy symbolic links or special files. On some +non-@sc{gnu} systems, @option{-r} implies the equivalent of +@option{-L} and @option{--copy-contents} for historical reasons. +Also, it is not portable to use @option{-R} to copy symbolic links +unless you also specify @option{-P}, as @acronym{POSIX} allows +implementations that dereference symbolic links by default. + +@item --remove-destination +@opindex --remove-destination +Remove each existing destination file before attempting to open it +(contrast with @option{-f} above). + +@item --sparse=@var{when} +@opindex --sparse=@var{when} +@cindex sparse files, copying +@cindex holes, copying files with +@findex read @r{system call, and holes} +A @dfn{sparse file} contains @dfn{holes}---a sequence of zero bytes that +does not occupy any physical disk blocks; the @samp{read} system call +reads these as zeros. This can both save considerable disk space and +increase speed, since many binary files contain lots of consecutive zero +bytes. By default, @command{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 @var{when} value can be one of the following: + +@table @samp +@item 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. + +@item 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, @samp{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, @command{cp} does not even try to make it sparse. + +@item never +Never make the output file sparse. +This is useful in creating a file for use with the @command{mkswap} command, +since such a file must not have any holes. +@end table + +@optStripTrailingSlashes + +@item -s +@itemx --symbolic-link +@opindex -s +@opindex --symbolic-link +@cindex symbolic links, copying with +Make symbolic links instead of copies of non-directories. All source +file names must be absolute (starting with @samp{/}) 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. + +@optBackupSuffix + +@optTargetDirectory + +@optNoTargetDirectory + +@item -u +@itemx --update +@opindex -u +@opindex --update +@cindex newer files, copying only +Do not copy a non-directory that has an existing destination with the +same or newer modification time. If time stamps are being preserved, +the comparison is to the source time stamp truncated to the +resolutions of the destination file system and of the system calls +used to update time stamps; this avoids duplicate work if several +@samp{cp -pu} commands are executed with the same source and +destination. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print the name of each file before copying it. + +@item -x +@itemx --one-file-system +@opindex -x +@opindex --one-file-system +@cindex file systems, omitting copying to different +Skip subdirectories that are on different file systems from the one that +the copy started on. +However, mount point directories @emph{are} copied. + +@end table + +@exitstatus + + +@node dd invocation +@section @command{dd}: Convert and copy a file + +@pindex dd +@cindex converting while copying a file + +@command{dd} copies a file (from standard input to standard output, by +default) with a changeable I/O block size, while optionally performing +conversions on it. Synopses: + +@example +dd [@var{operand}]@dots{} +dd @var{option} +@end example + +The only options are @option{--help} and @option{--version}. +@xref{Common options}. @command{dd} accepts the following operands. + +@table @samp + +@item if=@var{file} +@opindex if +Read from @var{file} instead of standard input. + +@item of=@var{file} +@opindex of +Write to @var{file} instead of standard output. Unless +@samp{conv=notrunc} is given, @command{dd} truncates @var{file} to zero +bytes (or the size specified with @samp{seek=}). + +@item ibs=@var{bytes} +@opindex ibs +@cindex block size of input +@cindex input block size +Set the input block size to @var{bytes}. +This makes @command{dd} read @var{bytes} per block. + +@item obs=@var{bytes} +@opindex obs +@cindex block size of output +@cindex output block size +Set the output block size to @var{bytes}. +This makes @command{dd} write @var{bytes} per block. + +@item bs=@var{bytes} +@opindex bs +@cindex block size +Set both input and output block sizes to @var{bytes}. +This makes @command{dd} read and write @var{bytes} per block, +overriding any @samp{ibs} and @samp{obs} settings. + +@item cbs=@var{bytes} +@opindex cbs +@cindex block size of conversion +@cindex conversion block size +@cindex fixed-length records, converting to variable-length +@cindex variable-length records, converting to fixed-length +Set the conversion block size to @var{bytes}. +When converting variable-length records to fixed-length ones +(@option{conv=block}) or the reverse (@option{conv=unblock}), +use @var{bytes} as the fixed record length. + +@item skip=@var{blocks} +@opindex skip +Skip @var{blocks} @samp{ibs}-byte blocks in the input file before copying. + +@item seek=@var{blocks} +@opindex seek +Skip @var{blocks} @samp{obs}-byte blocks in the output file before copying. + +@item count=@var{blocks} +@opindex count +Copy @var{blocks} @samp{ibs}-byte blocks from the input file, instead +of everything until the end of the file. + +@item conv=@var{conversion}[,@var{conversion}]@dots{} +@opindex conv +Convert the file as specified by the @var{conversion} argument(s). +(No spaces around any comma(s).) + +Conversions: + +@table @samp + +@item ascii +@opindex ascii@r{, converting to} +Convert @acronym{EBCDIC} to @acronym{ASCII}, +using the conversion table specified by @acronym{POSIX}. +This provides a 1:1 translation for all 256 bytes. + +@item ebcdic +@opindex ebcdic@r{, converting to} +Convert @acronym{ASCII} to @acronym{EBCDIC}. +This is the inverse of the @samp{ascii} conversion. + +@item ibm +@opindex alternate ebcdic@r{, converting to} +Convert @acronym{ASCII} to alternate @acronym{EBCDIC}, +using the alternate conversion table specified by @acronym{POSIX}. +This is not a 1:1 translation, but reflects common historical practice +for @samp{~}, @samp{[}, and @samp{]}. + +The @samp{ascii}, @samp{ebcdic}, and @samp{ibm} conversions are +mutually exclusive. + +@item block +@opindex block @r{(space-padding)} +For each line in the input, output @samp{cbs} bytes, replacing the +input newline with a space and padding with spaces as necessary. + +@item unblock +@opindex unblock +Replace trailing spaces in each @samp{cbs}-sized input block with a +newline. + +The @samp{block} and @samp{unblock} conversions are mutually exclusive. + +@item lcase +@opindex lcase@r{, converting to} +Change uppercase letters to lowercase. + +@item ucase +@opindex ucase@r{, converting to} +Change lowercase letters to uppercase. + +The @samp{lcase} and @samp{ucase} conversions are mutually exclusive. + +@item swab +@opindex swab @r{(byte-swapping)} +@cindex byte-swapping +Swap every pair of input bytes. @sc{gnu} @command{dd}, unlike others, works +when an odd number of bytes are read---the last byte is simply copied +(since there is nothing to swap it with). + +@item noerror +@opindex noerror +@cindex read errors, ignoring +Continue after read errors. + +@item nocreat +@opindex nocreat +@cindex creating output file, avoiding +Do not create the output file; the output file must already exist. + +@item excl +@opindex excl +@cindex creating output file, requiring +Fail if the output file already exists; @command{dd} must create the +output file itself. + +The @samp{excl} and @samp{nocreat} conversions are mutually exclusive. + +@item notrunc +@opindex notrunc +@cindex truncating output file, avoiding +Do not truncate the output file. + +@item sync +@opindex sync @r{(padding with nulls)} +Pad every input block to size of @samp{ibs} with trailing zero bytes. +When used with @samp{block} or @samp{unblock}, pad with spaces instead of +zero bytes. + +@item fdatasync +@opindex fdatasync +@cindex synchronized data writes, before finishing +Synchronize output data just before finishing. This forces a physical +write of output data. + +@item fsync +@opindex fsync +@cindex synchronized data and metadata writes, before finishing +Synchronize output data and metadata just before finishing. This +forces a physical write of output data and metadata. + +@end table + +@item iflag=@var{flag}[,@var{flag}]@dots{} +@opindex iflag +Access the input file using the flags specified by the @var{flag} +argument(s). (No spaces around any comma(s).) + +@item oflag=@var{flag}[,@var{flag}]@dots{} +@opindex oflag +Access the output file using the flags specified by the @var{flag} +argument(s). (No spaces around any comma(s).) + +Here are the flags. Not every flag is supported on every operating +system. + +@table @samp + +@item append +@opindex append +@cindex appending to the output file +Write in append mode, so that even if some other process is writing to +this file, every @command{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 @samp{of=@var{file}} operand, +you should also specify @samp{conv=notrunc} unless you want the +output file to be truncated before being appended to. + +@item direct +@opindex direct +@cindex direct I/O +Use direct I/O for data, avoiding the buffer cache. + +@item directory +@opindex directory +@cindex directory I/O + +Fail unless the file is a directory. Most operating systems do not +allow I/O to a directory, so this flag has limited utility. + +@item dsync +@opindex dsync +@cindex synchronized data reads +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. + +@item sync +@opindex sync +@cindex synchronized data and metadata I/O +Use synchronized I/O for both data and metadata. + +@item nonblock +@opindex nonblock +@cindex nonblocking I/O +Use non-blocking I/O. + +@item noatime +@opindex noatime +@cindex access time +Do not update the file's access time. +Some older file systems silently ignore this flag, so it is a good +idea to test it on your files before relying on it. + +@item noctty +@opindex noctty +@cindex controlling terminal +Do not assign the file to be a controlling terminal for @command{dd}. +This has no effect when the file is not a terminal. +On many hosts (e.g., @acronym{GNU}/Linux hosts), this option has no effect +at all. + +@item nofollow +@opindex nofollow +@cindex symbolic links, following +Do not follow symbolic links. + +@item nolinks +@opindex nolinks +@cindex hard links +Fail if the file has multiple hard links. + +@item binary +@opindex binary +@cindex binary I/O +Use binary I/O. This option has an effect only on nonstandard +platforms that distinguish binary from text I/O. + +@item text +@opindex text +@cindex text I/O +Use text I/O. Like @samp{binary}, this option has no effect on +standard platforms. + +@end table + +These flags are not supported on all systems, and @samp{dd} rejects +attempts to use them when they are not supported. When reading from +standard input or writing to standard output, the @samp{nofollow} and +@samp{noctty} flags should not be specified, and the other flags +(e.g., @samp{nonblock}) can affect how other processes behave with the +affected file descriptors, even after @command{dd} exits. + +@end table + +@cindex multipliers after numbers +The numeric-valued strings above (@var{bytes} and @var{blocks}) can be +followed by a multiplier: @samp{b}=512, @samp{c}=1, +@samp{w}=2, @samp{x@var{m}}=@var{m}, or any of the +standard block size suffixes like @samp{k}=1024 (@pxref{Block size}). + +Use different @command{dd} invocations to use different block sizes for +skipping and I/O@. For example, the following shell commands copy data +in 512 KiB blocks between a disk and a tape, but do not save or restore a +4 KiB label at the start of the disk: + +@example +disk=/dev/rdsk/c0t1d0s2 +tape=/dev/rmt/0 + +# Copy all but the label from disk to tape. +(dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape + +# Copy from tape back to disk, but leave the disk label alone. +(dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk +@end example + +Sending an @samp{INFO} signal to a running @command{dd} +process makes it print I/O statistics to standard error +and then resume copying. In the example below, +@command{dd} is run in the background to copy 10 million blocks. +The @command{kill} command makes it output intermediate I/O statistics, +and when @command{dd} completes, it outputs the final statistics. + +@example +$ dd if=/dev/zero of=/dev/null count=10MB & pid=$! +$ kill -s INFO $pid; wait $pid +3385223+0 records in +3385223+0 records out +1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s +10000000+0 records in +10000000+0 records out +5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s +@end example + +@vindex POSIXLY_CORRECT +On systems lacking the @samp{INFO} signal @command{dd} responds to the +@samp{USR1} signal instead, unless the @env{POSIXLY_CORRECT} +environment variable is set. + +@exitstatus + + +@node install invocation +@section @command{install}: Copy files and set attributes + +@pindex install +@cindex copying files and setting attributes + +@command{install} copies files while setting their file mode bits and, if +possible, their owner and group. Synopses: + +@example +install [@var{option}]@dots{} [-T] @var{source} @var{dest} +install [@var{option}]@dots{} @var{source}@dots{} @var{directory} +install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{} +install [@var{option}]@dots{} -d @var{directory}@dots{} +@end example + +@itemize @bullet +@item +If two file names are given, @command{install} copies the first file to the +second. + +@item +If the @option{--target-directory} (@option{-t}) option is given, or +failing that if the last file is a directory and the +@option{--no-target-directory} (@option{-T}) option is not given, +@command{install} copies each @var{source} file to the specified +directory, using the @var{source}s' names. + +@item +If the @option{--directory} (@option{-d}) option is given, +@command{install} creates each @var{directory} and any missing parent +directories. Parent directories are created with mode +@samp{u=rwx,go=rx} (755), regardless of the @option{-m} option or the +current umask. @xref{Directory Setuid and Setgid}, for how the +set-user-ID and set-group-ID bits of parent directories are inherited. +@end itemize + +@cindex Makefiles, installing programs in +@command{install} is similar to @command{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. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@optBackup + +@item -c +@opindex -c +Ignored; for compatibility with old Unix versions of @command{install}. + +@item -d +@itemx --directory +@opindex -d +@opindex --directory +@cindex directories, creating with given attributes +@cindex parent directories, creating missing +@cindex leading directories, creating missing +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. + +@item -g @var{group} +@itemx --group=@var{group} +@opindex -g +@opindex --group +@cindex group ownership of installed files, setting +Set the group ownership of installed files or directories to +@var{group}. The default is the process's current group. @var{group} +may be either a group name or a numeric group ID. + +@item -m @var{mode} +@itemx --mode=@var{mode} +@opindex -m +@opindex --mode +@cindex permissions of installed files, setting +Set the file mode bits for the installed file or directory to @var{mode}, +which can be either an octal number, or a symbolic mode as in +@command{chmod}, with @samp{a=} (no access allowed to anyone) as the +point of departure (@pxref{File permissions}). +The default mode is @samp{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 @samp{755}, since it disables +instead of preserving set-user-ID and set-group-ID on directories. +@xref{Directory Setuid and Setgid}. + +@item -o @var{owner} +@itemx --owner=@var{owner} +@opindex -o +@opindex --owner +@cindex ownership of installed files, setting +@cindex appropriate privileges +@vindex root @r{as default owner} +If @command{install} has appropriate privileges (is run as root), set the +ownership of installed files or directories to @var{owner}. The default +is @code{root}. @var{owner} may be either a user name or a numeric user +ID. + +@item -p +@itemx --preserve-timestamps +@opindex -p +@opindex --preserve-timestamps +@cindex timestamps of installed files, preserving +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 times are both set to the time of installation. +This option is useful if you want to use the last modification times +of installed files to keep track of when they were last built as opposed +to when they were last installed. + +@item -s +@itemx --strip +@opindex -s +@opindex --strip +@cindex symbol table information, stripping +@cindex stripping symbol table information +Strip the symbol tables from installed binary executables. + +@optBackupSuffix + +@optTargetDirectory + +@optNoTargetDirectory + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print the name of each file before copying it. + +@end table + +@exitstatus + + +@node mv invocation +@section @command{mv}: Move (rename) files + +@pindex mv + +@command{mv} moves or renames files (or directories). Synopses: + +@example +mv [@var{option}]@dots{} [-T] @var{source} @var{dest} +mv [@var{option}]@dots{} @var{source}@dots{} @var{directory} +mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{} +@end example + +@itemize @bullet +@item +If two file names are given, @command{mv} moves the first file to the +second. + +@item +If the @option{--target-directory} (@option{-t}) option is given, or +failing that if the last file is a directory and the +@option{--no-target-directory} (@option{-T}) option is not given, +@command{mv} moves each @var{source} file to the specified +directory, using the @var{source}s' names. +@end itemize + +@command{mv} can move any type of file from one file system to another. +Prior to version @code{4.0} of the fileutils, +@command{mv} could move only regular files between file systems. +For example, now @command{mv} can move an entire directory hierarchy +including special device files from one partition to another. It first +uses some of the same code that's used by @code{cp -a} to copy the +requested directories and files, then (assuming the copy succeeded) +it removes the originals. If the copy fails, then the part that was +copied to the destination partition is removed. If you were to copy +three directories from one partition to another and the copy of the first +directory succeeded, but the second didn't, the first would be left on +the destination partition and the second and third would be left on the +original partition. + +@cindex prompting, and @command{mv} +If a destination file exists but is normally unwritable, standard input +is a terminal, and the @option{-f} or @option{--force} option is not given, +@command{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. + +@emph{Warning}: If you try to move a symlink that points to a directory, +and you specify the symlink with a trailing slash, then @command{mv} +doesn't move the symlink but instead moves the directory referenced +by the symlink. @xref{Trailing slashes}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@optBackup + +@item -f +@itemx --force +@opindex -f +@opindex --force +@cindex prompts, omitting +Do not prompt the user before removing a destination file. + +@item -i +@itemx --interactive +@opindex -i +@opindex --interactive +@cindex prompts, forcing +Prompt whether to overwrite each existing destination file, regardless +of its permissions. +If the response is not affirmative, the file is skipped. + +@itemx @w{@kbd{--reply}=@var{how}} +@opindex --reply +@cindex interactivity +@c FIXME: remove in 2008 +@strong{Deprecated: to be removed in 2008.}@* +Specifying @option{--reply=yes} is equivalent to using @option{--force}. +Specify @option{--reply=no} to make @command{mv} act as if @samp{no} were +given as a response to every prompt about a destination file. +Specify @option{--reply=query} to make @command{mv} prompt the user +about each existing destination file. +Note that @option{--reply=no} has an effect only when @command{mv} would prompt +without @option{-i} or equivalent, i.e., when a destination file exists and is +not writable, standard input is a terminal, and no @option{-f} (or equivalent) +option is specified. + +@item -u +@itemx --update +@opindex -u +@opindex --update +@cindex newer files, moving only +Do not move a non-directory that has an existing destination with the +same or newer modification time. +If the move is across file system boundaries, the comparison is to the +source time stamp truncated to the resolutions of the destination file +system and of the system calls used to update time stamps; this avoids +duplicate work if several @samp{mv -u} commands are executed with the +same source and destination. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print the name of each file before moving it. + +@optStripTrailingSlashes + +@optBackupSuffix + +@optTargetDirectory + +@optNoTargetDirectory + +@end table + +@exitstatus + + +@node rm invocation +@section @command{rm}: Remove files or directories + +@pindex rm +@cindex removing files or directories + +@command{rm} removes each given @var{file}. By default, it does not remove +directories. Synopsis: + +@example +rm [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +@cindex prompting, and @command{rm} +If the @option{-I} or @option{--interactive=once} option is given, +and there are more than three files or the @option{-r}, @option{-R}, +or @option{--recursive} are given, then @command{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 @option{-f} or @option{--force} option is not given, or the +@option{-i} or @option{--interactive=always} option @emph{is} given, +@command{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 +@file{.} or @file{..} is rejected without any prompting. + +@emph{Warning}: If you use @command{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 truly unrecoverable, consider using @command{shred}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -f +@itemx --force +@opindex -f +@opindex --force +Ignore nonexistent files and never prompt the user. +Ignore any previous @option{--interactive} (@option{-i}) option. + +@item -i +@opindex -i +Prompt whether to remove each file. +If the response is not affirmative, the file is skipped. +Ignore any previous @option{--force} (@option{-f}) option. +Equivalent to @option{--interactive=always}. + +@item -I +@opindex -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 @option{--force} (@option{-f}) option. Equivalent to +@option{--interactive=once}. + +@itemx --interactive [=@var{when}] +@opindex --interactive +Specify when to issue an interactive prompt. @var{when} may be +omitted, or one of: +@itemize @bullet +@item never +@vindex never @r{interactive option} +- Do not prompt at all. +@item once +@vindex once @r{interactive option} +- Prompt once if more than three files are named or if a recursive +removal is requested. Equivalent to @option{-I}. +@item always +@vindex always @r{interactive option} +- Prompt for every file being removed. Equivalent to @option{-i}. +@end itemize +Specifying @option{--interactive} and no @var{when} is equivalent to +@option{--interactive=always}. + +@itemx --one-file-system +@opindex --one-file-system +@cindex one file system, restricting @command{rm} to +When removing a hierarchy recursively, skip 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 @file{/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 @file{/home}. Then, when you use @command{rm -rf} to remove +your normally throw-away chroot, that command will remove everything +under @file{/home}, too. +Use the @option{--one-file-system} option, and it will +warn about and skip directories on other file systems. +Of course, this will not save your @file{/home} if it and your +chroot happen to be on the same file system. + +@itemx --preserve-root +@opindex --preserve-root +@cindex root directory, disallow recursive destruction +Fail upon any attempt to remove the root directory, @file{/}, +when used with the @option{--recursive} option. +This is the default behavior. +@xref{Treating / specially}. + +@itemx --no-preserve-root +@opindex --no-preserve-root +@cindex root directory, allow recursive destruction +Do not treat @file{/} specially when removing recursively. +This option is not recommended unless you really want to +remove all the files on your computer. +@xref{Treating / specially}. + +@item -r +@itemx -R +@itemx --recursive +@opindex -r +@opindex -R +@opindex --recursive +@cindex directories, removing (recursively) +Remove the listed directories and their contents recursively. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print the name of each file before removing it. + +@end table + +@cindex files beginning with @samp{-}, removing +@cindex @samp{-}, removing files beginning with +One common question is how to remove files whose names begin with a +@samp{-}. @sc{gnu} @command{rm}, like every program that uses the @code{getopt} +function to parse its arguments, lets you use the @samp{--} option to +indicate that all following arguments are non-options. To remove a file +called @file{-f} in the current directory, you could type either: + +@example +rm -- -f +@end example + +@noindent +or: + +@example +rm ./-f +@end example + +@opindex - @r{and Unix @command{rm}} +The Unix @command{rm} program's use of a single @samp{-} for this purpose +predates the development of the getopt standard syntax. + +@exitstatus + + +@node shred invocation +@section @command{shred}: Remove files more securely + +@pindex shred +@cindex data, erasing +@cindex erasing data + +@command{shred} overwrites devices or files, to help prevent even +very expensive hardware from recovering the data. + +Ordinarily when you remove a file (@pxref{rm invocation}), the data is +not actually destroyed. Only the index listing where the file is +stored is destroyed, and the storage is made available for reuse. +There are undelete utilities that will attempt to reconstruct the index +and can bring the file back if the parts were not reused. + +On a busy system with a nearly-full drive, space can get reused in a few +seconds. But there is no way to know for sure. If you have sensitive +data, you may want to be sure that recovery is not possible by actually +overwriting the file with non-sensitive data. + +However, even after doing that, it is possible to take the 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. If the data has only been overwritten once, it's not +even that hard. + +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 +like floppy disks, this is the preferred method. However, hard drives +are expensive and hard to melt, so the @command{shred} utility tries +to achieve a similar effect non-destructively. + +This uses many overwrite passes, with the data patterns chosen to +maximize the damage they do to the old data. While this will work on +floppies, the patterns are designed for best effect on hard drives. +For more details, see the source code and Peter Gutmann's paper +@uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html, +@cite{Secure Deletion of Data from Magnetic and Solid-State Memory}}, +from the proceedings of the Sixth @acronym{USENIX} Security Symposium (San Jose, +California, July 22--25, 1996). + +@strong{Please note} that @command{shred} relies on a very important assumption: +that the file system overwrites data in place. This is the traditional +way to do things, but many modern file system designs do not satisfy this +assumption. Exceptions include: + +@itemize @bullet + +@item +Log-structured or journaled file systems, such as those supplied with +AIX and Solaris, and JFS, ReiserFS, XFS, Ext3 (in @code{data=journal} mode), +BFS, NTFS, etc.@: when they are configured to journal @emph{data}. + +@item +File systems that write redundant data and carry on even if some writes +fail, such as RAID-based file systems. + +@item +File systems that make snapshots, such as Network Appliance's NFS server. + +@item +File systems that cache in temporary locations, such as NFS version 3 +clients. + +@item +Compressed file systems. +@end itemize + +In the particular case of ext3 file systems, the above disclaimer applies (and +@command{shred} is thus of limited effectiveness) only in @code{data=journal} +mode, which journals file data in addition to just metadata. In both +the @code{data=ordered} (default) and @code{data=writeback} modes, +@command{shred} works as usual. Ext3 journaling modes can be changed +by adding the @code{data=something} option to the mount options for a +particular file system in the @file{/etc/fstab} file, as documented in +the mount man page (man mount). + +If you are not sure how your file system operates, then you should assume +that it does not overwrite data in place, which means that 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 the problem of file system design mentioned above. +However, even shredding devices is not always completely reliable. For +example, most disks map out bad sectors invisibly to the application; if +the bad sectors contain sensitive data, @command{shred} won't be able to +destroy it. + +@command{shred} makes no attempt to detect or report this problem, just as +it makes no attempt to do anything about backups. However, since it is +more reliable to shred devices than files, @command{shred} by default does +not truncate or remove the output file. This default is more suitable +for devices, which typically cannot be truncated 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 @command{shred}, be sure that it is not backed up or mirrored. + +@example +shred [@var{option}]@dots{} @var{file}[@dots{}] +@end example + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -f +@itemx --force +@opindex -f +@opindex --force +@cindex force deletion +Override file permissions if necessary to allow overwriting. + +@item -@var{NUMBER} +@itemx -n @var{NUMBER} +@itemx --iterations=@var{NUMBER} +@opindex -n @var{NUMBER} +@opindex --iterations=@var{NUMBER} +@cindex iterations, selecting the number of +By default, @command{shred} uses 25 passes of overwrite. This is enough +for all of the useful overwrite patterns to be used at least once. +You can reduce this to save time, or increase it if you have a lot of +time to waste. + +@item --random-source=@var{file} +@opindex --random-source +@cindex random source for shredding +Use @var{file} as a source of random data used to overwrite and to +choose pass ordering. @xref{Random sources}. + +@item -s @var{BYTES} +@itemx --size=@var{BYTES} +@opindex -s @var{BYTES} +@opindex --size=@var{BYTES} +@cindex size of file to shred +Shred the first @var{BYTES} bytes of the file. The default is to shred +the whole file. @var{BYTES} can be followed by a size specification like +@samp{K}, @samp{M}, or @samp{G} to specify a multiple. @xref{Block size}. + +@item -u +@itemx --remove +@opindex -u +@opindex --remove +@cindex removing files after shredding +After shredding a file, truncate it (if possible) and then remove it. +If a file has multiple links, only the named links will be removed. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Display status updates as sterilization proceeds. + +@item -x +@itemx --exact +@opindex -x +@opindex --exact +By default, @command{shred} rounds the size of a regular file up to the next +multiple of the file system block size to fully erase the last block of the file. +Use @option{--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. + +@item -z +@itemx --zero +@opindex -z +@opindex --zero +Normally, the last pass that @command{shred} writes is made up of +random data. If this would be conspicuous on your hard drive (for +example, because it looks like encrypted data), or you just think +it's tidier, the @option{--zero} option adds an additional overwrite pass with +all zero bits. This is in addition to the number of passes specified +by the @option{--iterations} option. + +@end table + +You might use the following command to erase all trace of the +file system you'd created on the floppy disk in your first drive. +That command takes about 20 minutes to erase a ``1.44MB'' (actually +1440 KiB) floppy. + +@example +shred --verbose /dev/fd0 +@end example + +Similarly, to erase all data on a selected partition of +your hard disk, you could give a command like this: + +@example +shred --verbose /dev/sda5 +@end example + +A @var{file} of @samp{-} denotes standard output. +The intended use of this is to shred a removed temporary file. +For example: + +@example +i=`tempfile -m 0600` +exec 3<>"$i" +rm -- "$i" +echo "Hello, world" >&3 +shred - >&3 +exec 3>- +@end example + +However, the command @samp{shred - >file} does not shred the contents +of @var{file}, since the shell truncates @var{file} before invoking +@command{shred}. Use the command @samp{shred file} or (if using a +Bourne-compatible shell) the command @samp{shred - 1<>file} instead. + +@exitstatus + + +@node Special file types +@chapter Special file types + +@cindex special file types +@cindex file types, special + +This chapter describes commands which create special types of files (and +@command{rmdir}, which removes directories, one special file type). + +@cindex special file types +@cindex file types +Although Unix-like operating systems have markedly fewer special file +types than others, not @emph{everything} can be treated only as the +undifferentiated byte stream of @dfn{normal files}. For example, when a +file is created or removed, the system must record this information, +which it does in a @dfn{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 @dfn{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 the referent of a symbolic link. +* rmdir invocation:: Remove empty directories. +* unlink invocation:: Remove files via the unlink syscall +@end menu + + +@node link invocation +@section @command{link}: Make a hard link via the link syscall + +@pindex link +@cindex links, creating +@cindex hard links, creating +@cindex creating links (hard only) + +@command{link} creates a single hard link at a time. +It is a minimalist interface to the system-provided +@code{link} function. @xref{Hard Links, , , libc, +The GNU C Library Reference Manual}. +It avoids the bells and whistles of the more commonly-used +@command{ln} command (@pxref{ln invocation}). +Synopsis: + +@example +link @var{filename} @var{linkname} +@end example + +@var{filename} must specify an existing file, and @var{linkname} +must specify a nonexistent entry in an existing directory. +@command{link} simply calls @code{link (@var{filename}, @var{linkname})} +to create the link. + +On a @acronym{GNU} system, this command acts like @samp{ln --directory +--no-target-directory @var{filename} @var{linkname}}. However, the +@option{--directory} and @option{--no-target-directory} options are +not specified by @acronym{POSIX}, and the @command{link} command is +more portable in practice. + +@exitstatus + + +@node ln invocation +@section @command{ln}: Make links between files + +@pindex ln +@cindex links, creating +@cindex hard links, creating +@cindex symbolic (soft) links, creating +@cindex creating links (hard or soft) + +@cindex file systems and hard links +@command{ln} makes links between files. By default, it makes hard links; +with the @option{-s} option, it makes symbolic (or @dfn{soft}) links. +Synopses: + +@example +ln [@var{option}]@dots{} [-T] @var{target} @var{linkname} +ln [@var{option}]@dots{} @var{target} +ln [@var{option}]@dots{} @var{target}@dots{} @var{directory} +ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{} +@end example + +@itemize @bullet + +@item +If two file names are given, @command{ln} creates a link to the first +file from the second. + +@item +If one @var{target} is given, @command{ln} creates a link to that file +in the current directory. + +@item +If the @option{--target-directory} (@option{-t}) option is given, or +failing that if the last file is a directory and the +@option{--no-target-directory} (@option{-T}) option is not given, +@command{ln} creates a link to each @var{target} file in the specified +directory, using the @var{target}s' names. + +@end itemize + +Normally @command{ln} does not remove existing files. Use the +@option{--force} (@option{-f}) option to remove them unconditionally, +the @option{--interactive} (@option{-i}) option to remove them +conditionally, and the @option{--backup} (@option{-b}) option to +rename them. + +@cindex hard link, defined +@cindex inode, and hard links +A @dfn{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 @emph{is} the +file. On all existing implementations, you cannot make a hard link to +a directory, and hard links cannot cross file system boundaries. (These +restrictions are not mandated by @acronym{POSIX}, however.) + +@cindex dereferencing symbolic links +@cindex symbolic link, defined +@dfn{Symbolic links} (@dfn{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 @dfn{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. @xref{Symbolic Links,,, +libc, The GNU C Library Reference Manual}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@optBackup + +@item -d +@itemx -F +@itemx --directory +@opindex -d +@opindex -F +@opindex --directory +@cindex hard links to directories +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. + +@item -f +@itemx --force +@opindex -f +@opindex --force +Remove existing destination files. + +@item -i +@itemx --interactive +@opindex -i +@opindex --interactive +@cindex prompting, and @command{ln} +Prompt whether to remove existing destination files. + +@item -n +@itemx --no-dereference +@opindex -n +@opindex --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. @command{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, @command{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 @option{--no-target-directory} +(@option{-T}) option, so it has no effect if both options are given. + +@item -s +@itemx --symbolic +@opindex -s +@opindex --symbolic +Make symbolic links instead of hard links. This option merely produces +an error message on systems that do not support symbolic links. + +@optBackupSuffix + +@optTargetDirectory + +@optNoTargetDirectory + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print the name of each file after linking it successfully. + +@end table + +@exitstatus + +Examples: + +@smallexample +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 +@end smallexample + + +@node mkdir invocation +@section @command{mkdir}: Make directories + +@pindex mkdir +@cindex directories, creating +@cindex creating directories + +@command{mkdir} creates directories with the specified names. Synopsis: + +@example +mkdir [@var{option}]@dots{} @var{name}@dots{} +@end example + +@command{mkdir} creates each directory @var{name} in the order given. +It reports an error if @var{name} already exists, unless the +@option{-p} option is given and @var{name} is a directory. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -m @var{mode} +@itemx --mode=@var{mode} +@opindex -m +@opindex --mode +@cindex modes of created directories, setting +Set the file permission bits of created directories to @var{mode}, +which uses the same syntax as +in @command{chmod} and uses @samp{a=rwx} (read, write and execute allowed for +everyone) for the point of the departure. @xref{File permissions}. + +Normally the directory has the desired file mode bits at the moment it +is created. As a @acronym{GNU} extension, @var{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. @xref{Directory Setuid and Setgid}, for how the +set-user-ID and set-group-ID bits of directories are inherited unless +overridden in this way. + +@item -p +@itemx --parents +@opindex -p +@opindex --parents +@cindex parent directories, creating +Make any missing parent directories for each argument, setting their +file permission bits to the umask modified by @samp{u+wx}. Ignore +existing parent directories, and do not change their file permission +bits. + +To set the file permission bits of any newly-created parent +directories to a value that includes @samp{u+wx}, you can set the +umask before invoking @command{mkdir}. For example, if the shell +command @samp{(umask u=rwx,go=rx; mkdir -p P/Q)} creates the parent +@file{P} it sets the parent's permission bits to @samp{u=rwx,go=rx}. +To set a parent's special mode bits as well, you can invoke +@command{chmod} after @command{mkdir}. @xref{Directory Setuid and +Setgid}, for how the set-user-ID and set-group-ID bits of +newly-created parent directories are inherited. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Print a message for each created directory. This is most useful with +@option{--parents}. +@end table + +@exitstatus + + +@node mkfifo invocation +@section @command{mkfifo}: Make FIFOs (named pipes) + +@pindex mkfifo +@cindex FIFOs, creating +@cindex named pipes, creating +@cindex creating FIFOs (named pipes) + +@command{mkfifo} creates FIFOs (also called @dfn{named pipes}) with the +specified names. Synopsis: + +@example +mkfifo [@var{option}] @var{name}@dots{} +@end example + +A @dfn{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 option. Also see @ref{Common options}. + +@table @samp + +@item -m @var{mode} +@itemx --mode=@var{mode} +@opindex -m +@opindex --mode +@cindex modes of created FIFOs, setting +Set the mode of created FIFOs to @var{mode}, which is symbolic as in +@command{chmod} and uses @samp{a=rw} (read and write allowed for everyone) +for the point of departure. @var{mode} should specify only file +permission bits. @xref{File permissions}. + +@end table + +@exitstatus + + +@node mknod invocation +@section @command{mknod}: Make block or character special files + +@pindex mknod +@cindex block special files, creating +@cindex character special files, creating + +@command{mknod} creates a FIFO, character special file, or block special +file with the specified name. Synopsis: + +@example +mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}] +@end example + +@cindex special files +@cindex block special files +@cindex character special files +Unlike the phrase ``special file type'' above, the term @dfn{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 disk. (These files are typically created at +system-configuration time.) The @command{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 +@dfn{block special} files and @dfn{character special} files. + +The arguments after @var{name} specify the type of file to make: + +@table @samp + +@item p +@opindex p @r{for FIFO file} +for a FIFO + +@item b +@opindex b @r{for block special file} +for a block special file + +@item c +@c Don't document the `u' option -- it's just a synonym for `c'. +@c Do *any* versions of mknod still use it? +@c @itemx u +@opindex c @r{for character special file} +@c @opindex u @r{for character special file} +for a character special file + +@end table + +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 @samp{0x} or @samp{0X}, +it is interpreted as hexadecimal; otherwise, if it begins with @samp{0}, +as octal; otherwise, as decimal. + +The program accepts the following option. Also see @ref{Common options}. + +@table @samp + +@item -m @var{mode} +@itemx --mode=@var{mode} +@opindex -m +@opindex --mode +Set the mode of created files to @var{mode}, which is symbolic as in +@command{chmod} and uses @samp{a=rw} as the point of departure. +@var{mode} should specify only file permission bits. +@xref{File permissions}. + +@end table + +@exitstatus + + +@node readlink invocation +@section @command{readlink}: Print the referent of a symbolic link + +@pindex readlink +@cindex displaying value of a symbolic link + +@command{readlink} may work in one of two supported modes: + +@table @samp + +@item Readlink mode + +@command{readlink} outputs the value of the given symbolic link. +If @command{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. + +@item Canonicalize mode + +@command{readlink} outputs the absolute name of the given file which contains +no @file{.}, @file{..} components nor any repeated separators +(@file{/}) or symbolic links. + +@end table + +@example +readlink [@var{option}] @var{file} +@end example + +By default, @command{readlink} operates in readlink mode. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -f +@itemx --canonicalize +@opindex -f +@opindex --canonicalize +Activate canonicalize mode. +If any component of the file name except the last one is missing or unavailable, +@command{readlink} produces no output and exits with a nonzero exit code. + +@item -e +@itemx --canonicalize-existing +@opindex -e +@opindex --canonicalize-existing +Activate canonicalize mode. +If any component is missing or unavailable, @command{readlink} produces +no output and exits with a nonzero exit code. + +@item -m +@itemx --canonicalize-missing +@opindex -m +@opindex --canonicalize-missing +Activate canonicalize mode. +If any component is missing or unavailable, @command{readlink} treats it +as a directory. + +@item -n +@itemx --no-newline +@opindex -n +@opindex --no-newline +Do not output the trailing newline. + +@item -s +@itemx -q +@itemx --silent +@itemx --quiet +@opindex -s +@opindex -q +@opindex --silent +@opindex --quiet +Suppress most error messages. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Report error messages. + +@end table + +The @command{readlink} utility first appeared in OpenBSD 2.1. + +@exitstatus + + +@node rmdir invocation +@section @command{rmdir}: Remove empty directories + +@pindex rmdir +@cindex removing empty directories +@cindex directories, removing empty + +@command{rmdir} removes empty directories. Synopsis: + +@example +rmdir [@var{option}]@dots{} @var{directory}@dots{} +@end example + +If any @var{directory} argument does not refer to an existing empty +directory, it is an error. + +The program accepts the following option. Also see @ref{Common options}. + +@table @samp + +@item --ignore-fail-on-non-empty +@opindex --ignore-fail-on-non-empty +@cindex directory deletion, ignoring failures +Ignore each failure to remove a directory that is solely because +the directory is non-empty. + +@item -p +@itemx --parents +@opindex -p +@opindex --parents +@cindex parent directories, removing +Remove @var{directory}, then try to remove each component of @var{directory}. +So, for example, @samp{rmdir -p a/b/c} is similar to @samp{rmdir a/b/c a/b a}. +As such, it fails if any of those directories turns out not to be empty. +Use the @option{--ignore-fail-on-non-empty} option to make it so such +a failure does not evoke a diagnostic and does not cause @command{rmdir} to +exit unsuccessfully. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +@cindex directory deletion, reporting +Give a diagnostic for each successful removal. +@var{directory} is removed. + +@end table + +@xref{rm invocation}, for how to remove non-empty directories (recursively). + +@exitstatus + + +@node unlink invocation +@section @command{unlink}: Remove files via the unlink syscall + +@pindex unlink +@cindex removing files or directories (via the unlink syscall) + +@command{unlink} deletes a single specified file name. +It is a minimalist interface to the system-provided +@code{unlink} function. @xref{Deleting Files, , , libc, +The GNU C Library Reference Manual}. Synopsis: +It avoids the bells and whistles of the more commonly-used +@command{rm} command (@pxref{rm invocation}). + +@example +unlink @var{filename} +@end example + +On some systems @code{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 @code{unlink} can never delete the name of a directory. + +The @command{unlink} command honors the @option{--help} and +@option{--version} options. To remove a file whose name begins with +@samp{-}, prefix the name with @samp{./}, e.g., @samp{unlink ./--help}. + +@exitstatus + + +@node Changing file attributes +@chapter Changing file attributes + +@cindex changing file attributes +@cindex file attributes, changing +@cindex attributes, file + +A file is not merely its contents, a name, and a file type +(@pxref{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 +@dfn{attributes}. + +These commands change file attributes. + +@menu +* chgrp invocation:: Change file groups. +* chmod invocation:: Change access permissions. +* chown invocation:: Change file owners and groups. +* touch invocation:: Change file timestamps. +@end menu + + +@node chown invocation +@section @command{chown}: Change file owner and group + +@pindex chown +@cindex file ownership, changing +@cindex group ownership, changing +@cindex changing file ownership +@cindex changing group ownership + +@command{chown} changes the user and/or group ownership of each given @var{file} +to @var{new-owner} or to the user and group of an existing reference file. +Synopsis: + +@example +chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@} @var{file}@dots{} +@end example + +If used, @var{new-owner} specifies the new owner and/or group as follows +(with no embedded white space): + +@example +[@var{owner}] [ : [@var{group}] ] +@end example + +Specifically: + +@table @var +@item owner +If only an @var{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. + +@item owner@samp{:}group +If the @var{owner} is followed by a colon and a @var{group} (a +group name or numeric group ID), with no spaces between them, the group +ownership of the files is changed as well (to @var{group}). + +@item owner@samp{:} +If a colon but no group name follows @var{owner}, that user is +made the owner of the files and the group of the files is changed to +@var{owner}'s login group. + +@item @samp{:}group +If the colon and following @var{group} are given, but the owner +is omitted, only the group of the files is changed; in this case, +@command{chown} performs the same function as @command{chgrp}. + +@item @samp{:} +If only a colon is given, or if @var{new-owner} is empty, neither the +owner nor the group is changed. + +@end table + +If @var{owner} or @var{group} is intended to represent a numeric user +or group ID, then you may specify it with a leading @samp{+}. +@xref{Disambiguating names and IDs}. + +Some older scripts may still use @samp{.} in place of the @samp{:} separator. +@acronym{POSIX} 1003.1-2001 (@pxref{Standards conformance}) does not +require support for that, but for backward compatibility @acronym{GNU} +@command{chown} supports @samp{.} so long as no ambiguity results. +New scripts should avoid the use of @samp{.} because it is not +portable, and because it has undesirable results if the entire +@var{owner@samp{.}group} happens to identify a user whose name +contains @samp{.}. + +The @command{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 @code{chown} system call, which may +make system-dependent file mode modifications outside the control of +the @command{chown} command. For example, the @command{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 @ref{Common options}. + +@table @samp + +@item -c +@itemx --changes +@opindex -c +@opindex --changes +@cindex changed owners, verbosely describing +Verbosely describe the action for each @var{file} whose ownership +actually changes. + +@item -f +@itemx --silent +@itemx --quiet +@opindex -f +@opindex --silent +@opindex --quiet +@cindex error messages, omitting +Do not print error messages about files whose ownership cannot be +changed. + +@itemx @w{@kbd{--from}=@var{old-owner}} +@opindex --from +@cindex symbolic links, changing owner +Change a @var{file}'s ownership only if it has current attributes specified +by @var{old-owner}. @var{old-owner} has the same form as @var{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, @code{root} might run + +@smallexample +find / -owner OLDUSER -print0 | xargs -0 chown -h NEWUSER +@end smallexample + +But that is dangerous because the interval between when the @command{find} +tests the existing file's owner and when the @command{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: + +@example +find / -owner OLDUSER -exec chown -h NEWUSER @{@} \; +@end example + +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: + +@example +chown -h -R --from=OLDUSER NEWUSER / +@end example + +@item --dereference +@opindex --dereference +@cindex symbolic links, changing owner +@findex lchown +Do not act on symbolic links themselves but rather on what they point to. +This is the default. + +@item -h +@itemx --no-dereference +@opindex -h +@opindex --no-dereference +@cindex symbolic links, changing owner +@findex lchown +Act on symbolic links themselves instead of what they point to. +This mode relies on the @code{lchown} system call. +On systems that do not provide the @code{lchown} system call, +@command{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 @option{--verbose}. + +@itemx --preserve-root +@opindex --preserve-root +@cindex root directory, disallow recursive modification +Fail upon any attempt to recursively change the root directory, @file{/}. +Without @option{--recursive}, this option has no effect. +@xref{Treating / specially}. + +@itemx --no-preserve-root +@opindex --no-preserve-root +@cindex root directory, allow recursive modification +Cancel the effect of any preceding @option{--preserve-root} option. +@xref{Treating / specially}. + +@item --reference=@var{ref_file} +@opindex --reference +Change the user and group of each @var{file} to be the same as those of +@var{ref_file}. If @var{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. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Output a diagnostic for every file processed. +If a symbolic link is encountered during a recursive traversal +on a system without the @code{lchown} system call, and @option{--no-dereference} +is in effect, then issue a diagnostic saying neither the symbolic link nor +its referent is being changed. + +@item -R +@itemx --recursive +@opindex -R +@opindex --recursive +@cindex recursively changing file ownership +Recursively change ownership of directories and their contents. + +@choptH +@xref{Traversing symlinks}. + +@choptL +@xref{Traversing symlinks}. + +@choptP +@xref{Traversing symlinks}. + +@end table + +@exitstatus + +Examples: + +@smallexample +# 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 +@end smallexample + + +@node chgrp invocation +@section @command{chgrp}: Change group ownership + +@pindex chgrp +@cindex group ownership, changing +@cindex changing group ownership + +@command{chgrp} changes the group ownership of each given @var{file} +to @var{group} (which can be either a group name or a numeric group ID) +or to the group of an existing reference file. Synopsis: + +@example +chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@} @var{file}@dots{} +@end example + +If @var{group} is intended to represent a +numeric group ID, then you may specify it with a leading @samp{+}. +@xref{Disambiguating names and IDs}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c +@itemx --changes +@opindex -c +@opindex --changes +@cindex changed files, verbosely describing +Verbosely describe the action for each @var{file} whose group actually +changes. + +@item -f +@itemx --silent +@itemx --quiet +@opindex -f +@opindex --silent +@opindex --quiet +@cindex error messages, omitting +Do not print error messages about files whose group cannot be +changed. + +@item --dereference +@opindex --dereference +@cindex symbolic links, changing owner +@findex lchown +Do not act on symbolic links themselves but rather on what they point to. +This is the default. + +@item -h +@itemx --no-dereference +@opindex -h +@opindex --no-dereference +@cindex symbolic links, changing group +@findex lchown +Act on symbolic links themselves instead of what they point to. +This mode relies on the @code{lchown} system call. +On systems that do not provide the @code{lchown} system call, +@command{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 @option{--verbose}. + +@itemx --preserve-root +@opindex --preserve-root +@cindex root directory, disallow recursive modification +Fail upon any attempt to recursively change the root directory, @file{/}. +Without @option{--recursive}, this option has no effect. +@xref{Treating / specially}. + +@itemx --no-preserve-root +@opindex --no-preserve-root +@cindex root directory, allow recursive modification +Cancel the effect of any preceding @option{--preserve-root} option. +@xref{Treating / specially}. + +@item --reference=@var{ref_file} +@opindex --reference +Change the group of each @var{file} to be the same as that of +@var{ref_file}. If @var{ref_file} is a symbolic link, do not use the +group of the symbolic link, but rather that of the file it refers to. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Output a diagnostic for every file processed. +If a symbolic link is encountered during a recursive traversal +on a system without the @code{lchown} system call, and @option{--no-dereference} +is in effect, then issue a diagnostic saying neither the symbolic link nor +its referent is being changed. + +@item -R +@itemx --recursive +@opindex -R +@opindex --recursive +@cindex recursively changing group ownership +Recursively change the group ownership of directories and their contents. + +@choptH +@xref{Traversing symlinks}. + +@choptL +@xref{Traversing symlinks}. + +@choptP +@xref{Traversing symlinks}. + +@end table + +@exitstatus + +Examples: + +@smallexample +# Change the group of /u to "staff". +chgrp staff /u + +# Change the group of /u and subfiles to "staff". +chgrp -hR staff /u +@end smallexample + + +@node chmod invocation +@section @command{chmod}: Change access permissions + +@pindex chmod +@cindex changing access permissions +@cindex access permissions, changing +@cindex permissions, changing access + +@command{chmod} changes the access permissions of the named files. Synopsis: + +@example +chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@} @var{file}@dots{} +@end example + +@cindex symbolic links, permissions of +@command{chmod} never changes the permissions of symbolic links, since +the @command{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, @command{chmod} changes the permissions of the pointed-to file. +In contrast, @command{chmod} ignores symbolic links encountered during +recursive directory traversals. + +A successful use of @command{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 @var{mode} or +@var{ref_file} to be ignored. This behavior depends on the policy and +functionality of the underlying @code{chmod} system call. When in +doubt, check the underlying system behavior. + +If used, @var{mode} specifies the new file mode bits. +For details, see the section on @ref{File permissions}. +If you really want @var{mode} to have a leading @samp{-}, you should +use @option{--} first, e.g., @samp{chmod -- -w file}. Typically, +though, @samp{chmod a-w file} is preferable, and @command{chmod -w +file} (without the @option{--}) complains if it behaves differently +from what @samp{chmod a-w file} would do. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -c +@itemx --changes +@opindex -c +@opindex --changes +Verbosely describe the action for each @var{file} whose permissions +actually changes. + +@item -f +@itemx --silent +@itemx --quiet +@opindex -f +@opindex --silent +@opindex --quiet +@cindex error messages, omitting +Do not print error messages about files whose permissions cannot be +changed. + +@itemx --preserve-root +@opindex --preserve-root +@cindex root directory, disallow recursive modification +Fail upon any attempt to recursively change the root directory, @file{/}. +Without @option{--recursive}, this option has no effect. +@xref{Treating / specially}. + +@itemx --no-preserve-root +@opindex --no-preserve-root +@cindex root directory, allow recursive modification +Cancel the effect of any preceding @option{--preserve-root} option. +@xref{Treating / specially}. + +@item -v +@itemx --verbose +@opindex -v +@opindex --verbose +Verbosely describe the action or non-action taken for every @var{file}. + +@item --reference=@var{ref_file} +@opindex --reference +Change the mode of each @var{file} to be the same as that of @var{ref_file}. +@xref{File permissions}. +If @var{ref_file} is a symbolic link, do not use the mode +of the symbolic link, but rather that of the file it refers to. + +@item -R +@itemx --recursive +@opindex -R +@opindex --recursive +@cindex recursively changing access permissions +Recursively change permissions of directories and their contents. + +@end table + +@exitstatus + + +@node touch invocation +@section @command{touch}: Change file timestamps + +@pindex touch +@cindex changing file timestamps +@cindex file timestamps, changing +@cindex timestamps, changing file + +@command{touch} changes the access and/or modification times of the +specified files. Synopsis: + +@example +touch [@var{option}]@dots{} @var{file}@dots{} +@end example + +@cindex empty files, creating +Any @var{file} that does not exist is created empty. + +A @var{file} of @samp{-} causes @command{touch} to change the +times of the file associated with standard output. + +@cindex permissions, for changing file timestamps +If changing both the access and modification times to the current +time, @command{touch} can change the timestamps for files that the user +running it does not own but has write permission for. Otherwise, the +user must own the files. + +Although @command{touch} provides options for changing two of the times---the +times of last access and modification---of a file, there is actually +a third one as well: the inode change time. This is often referred to +as a file's @code{ctime}. +The inode change time represents the time when the file's meta-information +last changed. One common example of this is when the permissions of a +file change. Changing the permissions doesn't access the file, so +the 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. In any case, it is not possible, in normal +operations, for a user to change the ctime field to a user-specified value. + +@vindex TZ +Time stamps assume the time zone rules specified by the @env{TZ} +environment variable, or by the system default rules if @env{TZ} is +not set. @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, +libc, The GNU C Library}. You can avoid ambiguities during +daylight saving transitions by using @sc{utc} time stamps. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a +@itemx --time=atime +@itemx --time=access +@itemx --time=use +@opindex -a +@opindex --time +@opindex atime@r{, changing} +@opindex access @r{time, changing} +@opindex use @r{time, changing} +Change the access time only. + +@item -c +@itemx --no-create +@opindex -c +@opindex --no-create +Do not create files that do not exist. + +@item -d +@itemx --date=@var{time} +@opindex -d +@opindex --date +@opindex time +Use @var{time} instead of the current time. It can contain month names, +time zones, @samp{am} and @samp{pm}, @samp{yesterday}, etc. For +example, @option{--date="2004-02-27 14:19:13.489392193 +0530"} +specifies the instant of time that is 489,392,193 nanoseconds after +February 27, 2004 at 2:19:13 PM in a time zone that is 5 hours and 30 +minutes east of @acronym{UTC}. @xref{Date input formats}. +File systems that do not support high-resolution time stamps +silently ignore any excess precision here. + +@item -f +@opindex -f +@cindex BSD @command{touch} compatibility +Ignored; for compatibility with BSD versions of @command{touch}. + +@item -m +@itemx --time=mtime +@itemx --time=modify +@opindex -m +@opindex --time +@opindex mtime@r{, changing} +@opindex modify @r{time, changing} +Change the modification time only. + +@item -r @var{file} +@itemx --reference=@var{file} +@opindex -r +@opindex --reference +Use the times of the reference @var{file} instead of the current time. +If this option is combined with the @option{--date=@var{time}} +(@option{-d @var{time}}) option, the reference @var{file}'s time is +the origin for any relative @var{time}s given, but is otherwise ignored. +For example, @samp{-r foo -d '-5 seconds'} specifies a time stamp +equal to five seconds before the corresponding time stamp for @file{foo}. + +@item -t [[@var{CC}]@var{YY}]@var{MMDDhhmm}[.@var{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 @var{CC} +is 20 for years in the range 0 @dots{} 68, and 19 for years in +69 @dots{} 99. If no digits of the year are specified, +the argument is interpreted as a date in the current year. + +@end table + +@vindex _POSIX2_VERSION +On older systems, @command{touch} supports an obsolete syntax, as follows. +If no timestamp is given with any of the @option{-d}, @option{-r}, or +@option{-t} options, and if there are two or more @var{file}s and the +first @var{file} is of the form @samp{@var{MMDDhhmm}[@var{YY}]} and this +would be a valid argument to the @option{-t} option (if the @var{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. +This obsolete behavior can be enabled or disabled with the +@env{_POSIX2_VERSION} environment variable (@pxref{Standards +conformance}), but portable scripts should avoid commands whose +behavior depends on this variable. +For example, use @samp{touch ./12312359 main.c} or @samp{touch -t +12312359 main.c} rather than the ambiguous @samp{touch 12312359 main.c}. + +@exitstatus + + +@node Disk usage +@chapter Disk usage + +@cindex disk usage + +No disk can hold an infinite amount of data. These commands report +how much disk storage is in use or available, report other file and +file status information, and write buffers to disk. + +@menu +* df invocation:: Report file system disk space usage. +* du invocation:: Estimate file space usage. +* stat invocation:: Report file or file system status. +* sync invocation:: Synchronize memory and disk. +@end menu + + +@node df invocation +@section @command{df}: Report file system disk space usage + +@pindex df +@cindex file system disk usage +@cindex disk usage by file system + +@command{df} reports the amount of disk space used and available on +file systems. Synopsis: + +@example +df [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +With no arguments, @command{df} reports the space used and available on all +currently mounted file systems (of all types). Otherwise, @command{df} +reports on the file system containing each argument @var{file}. + +Normally the disk space is printed in units of +1024 bytes, but this can be overridden (@pxref{Block size}). +Non-integer quantities are rounded up to the next higher unit. + +@cindex disk device file +@cindex device file, disk +If an argument @var{file} is a disk device file containing a mounted +file system, @command{df} shows the space available on that file system +rather than on the file system containing the device node (i.e., the root +file system). @sc{gnu} @command{df} does not attempt to determine the disk usage +on unmounted file systems, because on most kinds of systems doing so +requires extremely nonportable intimate knowledge of file system +structures. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a +@itemx --all +@opindex -a +@opindex --all +@cindex automounter file systems +@cindex ignore file systems +Include in the listing dummy file systems, which +are omitted by default. Such file systems are typically special-purpose +pseudo-file-systems, such as automounter entries. + +@item -B @var{size} +@itemx --block-size=@var{size} +@opindex -B +@opindex --block-size +@cindex file system sizes +Scale sizes by @var{size} before printing them (@pxref{Block size}). +For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes. + +@optHumanReadable + +@item -H +@opindex -H +Equivalent to @option{--si}. + +@item -i +@itemx --inodes +@opindex -i +@opindex --inodes +@cindex inode usage +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 disk. + +@item -k +@opindex -k +@cindex kibibytes for file system sizes +Print sizes in 1024-byte blocks, overriding the default block size +(@pxref{Block size}). +This option is equivalent to @option{--block-size=1K}. + +@item -l +@itemx --local +@opindex -l +@opindex --local +@cindex file system types, limiting output to certain +Limit the listing to local file systems. By default, remote file systems +are also listed. + +@item --no-sync +@opindex --no-sync +@cindex file system space, retrieving old data more quickly +Do not invoke the @code{sync} system call before getting any usage data. +This may make @command{df} run significantly faster on systems with many +disks, but on some systems (notably SunOS) the results may be slightly +out of date. This is the default. + +@item -P +@itemx --portability +@opindex -P +@opindex --portability +@cindex one-line output format +@cindex @acronym{POSIX} output format +@cindex portable output format +@cindex output format, portable +Use the @acronym{POSIX} output format. This is like the default format except +for the following: + +@enumerate +@item +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. + +@item +The labels in the header output line are changed to conform to @acronym{POSIX}. + +@item +The default block size and output format are unaffected by the +@env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE} and @env{BLOCKSIZE} environment +variables. However, the default block size is still affected by +@env{POSIXLY_CORRECT}: it is 512 if @env{POSIXLY_CORRECT} is set, 1024 +otherwise. @xref{Block size}. +@end enumerate + +@optSi + +@item --sync +@opindex --sync +@cindex file system space, retrieving current data more slowly +Invoke the @code{sync} system call before getting any usage data. On +some systems (notably SunOS), doing this yields more up to date results, +but in general this option makes @command{df} much slower, especially when +there are many or very busy file systems. + +@item -t @var{fstype} +@itemx --type=@var{fstype} +@opindex -t +@opindex --type +@cindex file system types, limiting output to certain +Limit the listing to file systems of type @var{fstype}. Multiple +file system types can be specified by giving multiple @option{-t} options. +By default, nothing is omitted. + +@item -T +@itemx --print-type +@opindex -T +@opindex --print-type +@cindex file system types, printing +Print each file system's type. The types printed here are the same ones +you can include or exclude with @option{-t} and @option{-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): + +@table @samp + +@item nfs +@cindex @acronym{NFS} file system type +An @acronym{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. + +@item 4.2@r{, }ufs@r{, }efs@dots{} +@cindex Linux file system types +@cindex local file system types +@opindex 4.2 @r{file system type} +@opindex ufs @r{file system type} +@opindex efs @r{file system type} +A file system on a locally-mounted hard disk. (The system might even +support more than one type here; Linux does.) + +@item hsfs@r{, }cdfs +@cindex CD-ROM file system type +@cindex High Sierra file system +@opindex hsfs @r{file system type} +@opindex cdfs @r{file system type} +A file system on a CD-ROM drive. HP-UX uses @samp{cdfs}, most other +systems use @samp{hsfs} (@samp{hs} for ``High Sierra''). + +@item pcfs +@cindex PC file system +@cindex DOS file system +@cindex MS-DOS file system +@cindex diskette file system +@opindex pcfs +An MS-DOS file system, usually on a diskette. + +@end table + +@item -x @var{fstype} +@itemx --exclude-type=@var{fstype} +@opindex -x +@opindex --exclude-type +Limit the listing to file systems not of type @var{fstype}. +Multiple file system types can be eliminated by giving multiple +@option{-x} options. By default, no file system types are omitted. + +@item -v +Ignored; for compatibility with System V versions of @command{df}. + +@end table + +@exitstatus +Failure includes the case where no output is generated, so you can +inspect the exit status of a command like @samp{df -t ext3 -t reiserfs +@var{dir}} to test whether @var{dir} is on a file system of type +@samp{ext3} or @samp{reiserfs}. + + +@node du invocation +@section @command{du}: Estimate file space usage + +@pindex du +@cindex file space usage +@cindex disk usage for files + +@command{du} reports the amount of disk space used by the specified files +and for each subdirectory (of directory arguments). Synopsis: + +@example +du [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +With no arguments, @command{du} reports the disk space for the current +directory. Normally the disk space is printed in units of +1024 bytes, but this can be overridden (@pxref{Block size}). +Non-integer quantities are rounded up to the next higher unit. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a +@itemx --all +@opindex -a +@opindex --all +Show counts for all files, not just directories. + +@itemx --apparent-size +@opindex --apparent-size +Print apparent sizes, rather than disk usage. The apparent size of a +file is the number of bytes reported by @code{wc -c} on regular files, +or more generally, @code{ls -l --block-size=1} or @code{stat --format=%s}. +For example, a file containing the word @samp{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 disk space, depending on +the type and configuration of the file system on which the file resides. +However, a sparse file created with this command: + +@example +dd bs=1 seek=2GiB if=/dev/null of=big +@end example + +@noindent +has an apparent size of 2 GiB, yet on most modern +systems, it actually uses almost no disk space. + +@item -b +@itemx --bytes +@opindex -b +@opindex --bytes +Equivalent to @code{--apparent-size --block-size=1}. + +@item -B @var{size} +@itemx --block-size=@var{size} +@opindex -B +@opindex --block-size +@cindex file sizes +Scale sizes by @var{size} before printing them (@pxref{Block size}). +For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes. + +@item -c +@itemx --total +@opindex -c +@opindex --total +@cindex grand total of disk space +Print a grand total of all arguments after all arguments have +been processed. This can be used to find out the total disk usage of +a given set of files or directories. + +@item -D +@itemx --dereference-args +@opindex -D +@opindex --dereference-args +Dereference symbolic links that are command line arguments. +Does not affect other symbolic links. This is helpful for finding +out the disk usage of directories, such as @file{/usr/tmp}, which +are often symbolic links. + +@itemx --files0-from=@var{FILE} +@opindex --files0-from=@var{FILE} +@cindex including files from @command{du} +Rather than processing files named on the command line, process those +named in file @var{FILE}; each name is terminated by a null byte. +This is useful with the @option{--total} (@option{-c}) option when +the list of file names is so long that it may exceed a command line +length limitation. +In such cases, running @command{du} via @command{xargs} is undesirable +because it splits the list into pieces and makes @command{du} print a +total for each sublist rather than for the entire list. +One way to produce a list of null-byte-terminated file names is with @sc{gnu} +@command{find}, using its @option{-print0} predicate. +Do not specify any @var{FILE} on the command line when using this option. + +@optHumanReadable + +@item -H +@opindex -H +Currently, @option{-H} is the same as @option{--si}, +except that @option{-H} evokes a warning. +This option will be changed to be equivalent to +@option{--dereference-args} (@option{-D}). + +@item -k +@opindex -k +@cindex kibibytes for file sizes +Print sizes in 1024-byte blocks, overriding the default block size +(@pxref{Block size}). +This option is equivalent to @option{--block-size=1K}. + +@item -l +@itemx --count-links +@opindex -l +@opindex --count-links +@cindex hard links, counting in @command{du} +Count the size of all files, even if they have appeared already (as a +hard link). + +@item -L +@itemx --dereference +@opindex -L +@opindex --dereference +@cindex symbolic links, dereferencing in @command{du} +Dereference symbolic links (show the disk space used by the file +or directory that the link points to instead of the space used by +the link). + +@item -m +@opindex -m +@cindex mebibytes for file sizes +Print sizes in 1,048,576-byte blocks, overriding the default block size +(@pxref{Block size}). +This option is equivalent to @option{--block-size=1M}. + +@item -P +@itemx --no-dereference +@opindex -P +@opindex --no-dereference +@cindex symbolic links, dereferencing in @command{du} +For each symbolic links encountered by @command{du}, +consider the disk space used by the symbolic link. + +@item --max-depth=@var{DEPTH} +@opindex --max-depth=@var{DEPTH} +@cindex limiting output of @command{du} +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 @code{du --max-depth=0} is equivalent to @code{du -s}. + +@item -0 +@opindex -0 +@itemx --null +@opindex --null +@cindex output null-byte-terminated lines +Output a null byte at the end of each line, rather than a newline. +This option enables other programs to parse the output of @command{du} +even when that output would contain file names with embedded newlines. + +@itemx --si +@opindex --si +@cindex SI output +Append an SI-style abbreviation to each size, such as @samp{MB} for +megabytes. Powers of 1000 are used, not 1024; @samp{MB} stands for +1,000,000 bytes. Use the @option{-h} or @option{--human-readable} option if +you prefer powers of 1024. + +@item -s +@itemx --summarize +@opindex -s +@opindex --summarize +Display only a total for each argument. + +@item -S +@itemx --separate-dirs +@opindex -S +@opindex --separate-dirs +Report the size of each directory separately, not including the sizes +of subdirectories. + +@itemx --time +@opindex --time +@cindex last modified dates, displaying in @command{du} +Show time of the most recent modification of any file in the directory, +or any of its subdirectories. + +@itemx --time=ctime +@itemx --time=status +@itemx --time=use +@opindex --time +@opindex ctime@r{, show the most recent} +@opindex status time@r{, show the most recent} +@opindex use time@r{, show the most recent} +Show the most recent status change time (the @samp{ctime} in the inode) of +any file in the directory, instead of the modification time. + +@itemx --time=atime +@itemx --time=access +@opindex --time +@opindex atime@r{, show the most recent} +@opindex access time@r{, show the most recent} +Show the most recent access time (the @samp{atime} in the inode) of +any file in the directory, instead of the modification time. + +@item --time-style=@var{style} +@opindex --time-style +@cindex time style +List timestamps in style @var{style}. This option has an effect only if +the @option{--time} option is also specified. The @var{style} should +be one of the following: + +@table @samp +@item +@var{format} +@vindex LC_TIME +List timestamps using @var{format}, where @var{format} is interpreted +like the format argument of @command{date} (@pxref{date invocation}). +For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes +@command{du} to list timestamps like @samp{2002-03-30 23:45:56}. As +with @command{date}, @var{format}'s interpretation is affected by the +@env{LC_TIME} locale category. + +@item full-iso +List timestamps in full using @acronym{ISO} 8601 date, time, and time zone +format with nanosecond precision, e.g., @samp{2002-03-30 +23:45:56.477817180 -0700}. This style is equivalent to +@samp{+%Y-%m-%d %H:%M:%S.%N %z}. + +@item long-iso +List @acronym{ISO} 8601 date and time in minutes, e.g., +@samp{2002-03-30 23:45}. These timestamps are shorter than +@samp{full-iso} timestamps, and are usually good enough for everyday +work. This style is equivalent to @samp{+%Y-%m-%d %H:%M}. + +@item iso +List @acronym{ISO} 8601 dates for timestamps, e.g., @samp{2002-03-30}. +This style is equivalent to @samp{+%Y-%m-%d}. +@end table + +@vindex TIME_STYLE +You can specify the default value of the @option{--time-style} option +with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set +the default style is @samp{long-iso}. For compatibility with @command{ls}, +if @env{TIME_STYLE} begins with @samp{+} and contains a newline, +the newline and any later characters are ignored; if @env{TIME_STYLE} +begins with @samp{posix-} the @samp{posix-} is ignored; and if +@env{TIME_STYLE} is @samp{locale} it is ignored. + +@item -x +@itemx --one-file-system +@opindex -x +@opindex --one-file-system +@cindex one file system, restricting @command{du} to +Skip directories that are on different file systems from the one that +the argument being processed is on. + +@item --exclude=@var{PATTERN} +@opindex --exclude=@var{PATTERN} +@cindex excluding files from @command{du} +When recursing, skip subdirectories or files matching @var{PATTERN}. +For example, @code{du --exclude='*.o'} excludes files whose names +end in @samp{.o}. + +@item -X @var{FILE} +@itemx --exclude-from=@var{FILE} +@opindex -X @var{FILE} +@opindex --exclude-from=@var{FILE} +@cindex excluding files from @command{du} +Like @option{--exclude}, except take the patterns to exclude from @var{FILE}, +one per line. If @var{FILE} is @samp{-}, take the patterns from standard +input. + +@end table + +@cindex NFS mounts from BSD to HP-UX +On BSD systems, @command{du} reports sizes that are half the correct +values for files that are NFS-mounted from HP-UX systems. 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 @command{du} program. + +@exitstatus + + +@node stat invocation +@section @command{stat}: Report file or file system status + +@pindex stat +@cindex file status +@cindex file system status + +@command{stat} displays information about the specified file(s). Synopsis: + +@example +stat [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +With no option, @command{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, @command{stat} can +also give information about the files the links point to. + + +@table @samp + +@item -L +@itemx --dereference +@opindex -L +@opindex --dereference +@cindex symbolic links, dereferencing in @command{stat} +Change how @command{stat} treats symbolic links. +With this option, @command{stat} acts on the file referenced +by each symbolic link argument. +Without it, @command{stat} acts on any symbolic link argument directly. + +@item -f +@itemx --file-system +@opindex -f +@opindex --file-system +@cindex file systems +Report information about the file systems where the given files are located +instead of information about the files themselves. + +@item -c +@itemx --format=@var{format} +@opindex -c +@opindex --format=@var{format} +@cindex output format +Use @var{format} rather than the default format. +@var{format} is automatically newline-terminated, so +running a command like the following with two or more @var{file} +operands produces a line of output for each operand: +@example +$ stat --format=%d:%i / /usr +2050:2 +2057:2 +@end example + +@itemx --printf=@var{format} +@opindex --printf=@var{format} +@cindex output format +Use @var{format} rather than the default format. +Like @option{--format}, but interpret backslash escapes, +and do not output a mandatory trailing newline. +If you want a newline, include @samp{\n} in the @var{format}. +Here's how you would use @option{--printf} to print the device +and inode numbers of @file{/} and @file{/usr}: +@example +$ stat --printf='%d:%i\n' / /usr +2050:2 +2057:2 +@end example + +@item -t +@itemx --terse +@opindex -t +@opindex --terse +@cindex terse output +Print the information in terse form, suitable for parsing by other programs. + +The valid format sequences for files are: + +@itemize @bullet +@item %a - Access rights in octal +@item %A - Access rights in human readable form +@item %b - Number of blocks allocated (see @samp{%B}) +@item %B - The size in bytes of each block reported by @samp{%b} +@item %d - Device number in decimal +@item %D - Device number in hex +@item %f - Raw mode in hex +@item %F - File type +@item %g - Group ID of owner +@item %G - Group name of owner +@item %h - Number of hard links +@item %i - Inode number +@item %n - File name +@item %N - Quoted file name with dereference if symbolic link +@item %o - I/O block size +@item %s - Total size, in bytes +@item %t - Major device type in hex +@item %T - Minor device type in hex +@item %u - User ID of owner +@item %U - User name of owner +@item %x - Time of last access +@item %X - Time of last access as seconds since Epoch +@item %y - Time of last modification +@item %Y - Time of last modification as seconds since Epoch +@item %z - Time of last change +@item %Z - Time of last change as seconds since Epoch +@end itemize + +The valid format sequences for file systems are: + +@itemize @bullet +@item %a - Free blocks available to non-super-user +@item %b - Total data blocks in file system +@item %c - Total file nodes in file system +@item %d - Free file nodes in file system +@item %f - Free blocks in file system +@item %i - File System ID in hex +@item %l - Maximum length of file names +@item %n - File name +@item %s - Block size (for faster transfers) +@item %S - Fundamental block size (for block counts) +@item %t - Type in hex +@item %T - Type in human readable form +@end itemize + +@vindex TZ +Time stamps are listed according to the time zone rules specified by +the @env{TZ} environment variable, or by the system default rules if +@env{TZ} is not set. @xref{TZ Variable,, Specifying the Time Zone +with @env{TZ}, libc, The GNU C Library}. +@end table + +@exitstatus + + +@node sync invocation +@section @command{sync}: Synchronize data on disk with memory + +@pindex sync +@cindex synchronize disk and memory + +@cindex superblock, writing +@cindex inodes, written buffered +@command{sync} writes any data buffered in memory out to disk. 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 @command{sync} program does nothing but exercise the @code{sync} system +call. + +@cindex crashes and corruption +The kernel keeps data in memory to avoid doing (relatively slow) disk +reads and writes. This improves performance, but if the computer +crashes, data may be lost or the file system corrupted as a +result. The @command{sync} command ensures everything in memory +is written to disk. + +Any arguments are ignored, except for a lone @option{--help} or +@option{--version} (@pxref{Common options}). + +@exitstatus + + +@node Printing text +@chapter Printing text + +@cindex printing text, commands for +@cindex commands for 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. +@end menu + + +@node echo invocation +@section @command{echo}: Print a line of text + +@pindex echo +@cindex displaying text +@cindex printing text +@cindex text, displaying +@cindex arbitrary text, displaying + +@command{echo} writes each given @var{string} to standard output, with a +space between each and a newline after the last one. Synopsis: + +@example +echo [@var{option}]@dots{} [@var{string}]@dots{} +@end example + +The program accepts the following options. Also see @ref{Common options}. +Options must precede operands, and the normally-special argument +@samp{--} has no special meaning and is treated like any other +@var{string}. + +@table @samp +@item -n +@opindex -n +Do not output the trailing newline. + +@item -e +@opindex -e +@cindex backslash escapes +Enable interpretation of the following backslash-escaped characters in +each @var{string}: + +@table @samp +@item \a +alert (bell) +@item \b +backspace +@item \c +suppress trailing newline +@item \f +form feed +@item \n +new line +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \0@var{nnn} +the eight-bit value that is the octal number @var{nnn} +(zero to three octal digits) +@item \@var{nnn} +the eight-bit value that is the octal number @var{nnn} +(one to three octal digits) +@item \x@var{hh} +the eight-bit value that is the hexadecimal number @var{hh} +(one or two hexadecimal digits) +@end table + +@item -E +@opindex -E +@cindex backslash escapes +Disable interpretation of backslash escapes in each @var{string}. +This is the default. If @option{-e} and @option{-E} are both +specified, the last one given takes effect. + +@end table + +@vindex POSIXLY_CORRECT +If the @env{POSIXLY_CORRECT} environment variable is set, then when +@command{echo}'s first argument is not @option{-n} it outputs +option-like arguments instead of treating them as options. For +example, @code{echo -ne hello} outputs @samp{-ne hello} instead of +plain @samp{hello}. + +@acronym{POSIX} does not require support for any options, and says +that the behavior of @command{echo} is implementation-defined if any +@var{string} contains a backslash or if the first argument is +@option{-n}. Portable programs can use the @command{printf} command +if they need to omit trailing newlines or output control characters or +backslashes. @xref{printf invocation}. + +@exitstatus + + +@node printf invocation +@section @command{printf}: Format and print data + +@pindex printf +@command{printf} does formatted printing of text. Synopsis: + +@example +printf @var{format} [@var{argument}]@dots{} +@end example + +@command{printf} prints the @var{format} string, interpreting @samp{%} +directives and @samp{\} escapes to format numeric and string arguments +in a way that is mostly similar to the C @samp{printf} function. The +differences are as follows: + +@itemize @bullet + +@item +The @var{format} argument is reused as necessary to convert all the +given @var{argument}s. For example, the command @samp{printf %s a b} +outputs @samp{ab}. + +@item +Missing @var{argument}s are treated as null strings or as zeros, +depending on whether the context expects a string or a number. For +example, the command @samp{printf %sx%d} prints @samp{x0}. + +@item +@kindex \c +An additional escape, @samp{\c}, causes @command{printf} to produce no +further output. For example, the command @samp{printf 'A%sC\cD%sF' B +E} prints @samp{ABC}. + +@item +The hexadecimal escape sequence @samp{\x@var{hh}} has at most two +digits, as opposed to C where it can have an unlimited number of +digits. For example, the command @samp{printf '\x07e'} prints two +bytes, whereas the C statement @samp{printf ("\x07e")} prints just +one. + +@item +@kindex %b +@command{printf} has an additional directive, @samp{%b}, which prints its +argument string with @samp{\} escapes interpreted in the same way as in +the @var{format} string, except that octal escapes are of the form +@samp{\0@var{ooo}} where @var{ooo} is 0 to 3 octal digits. +If a precision is also given, it limits the number of bytes printed +from the converted string. + +@item +Numeric arguments must be single C constants, possibly with leading +@samp{+} or @samp{-}. For example, @samp{printf %.4d -3} outputs +@samp{-0003}. + +@item +@vindex POSIXLY_CORRECT +If the leading character of a numeric argument is @samp{"} or @samp{'} +then its value is the numeric value of the immediately following +character. Any remaining characters are silently ignored if the +@env{POSIXLY_CORRECT} environment variable is set; otherwise, a +warning is printed. For example, @samp{printf "%d" "'a"} outputs +@samp{97} on hosts that use the @acronym{ASCII} character set, since +@samp{a} has the numeric value 97 in @acronym{ASCII}. + +@end itemize + +@vindex LC_NUMERIC +A floating-point argument must use a period before any fractional +digits, but is printed according to the @env{LC_NUMERIC} category of the +current locale. For example, in a locale whose radix character is a +comma, the command @samp{printf %g 3.14} outputs @samp{3,14} whereas +the command @samp{printf %g 3,14} is an error. + +@kindex \@var{ooo} +@kindex \x@var{hh} +@command{printf} interprets @samp{\@var{ooo}} in @var{format} as an octal number +(if @var{ooo} is 1 to 3 octal digits) specifying a character to print, +and @samp{\x@var{hh}} as a hexadecimal number (if @var{hh} is 1 to 2 hex +digits) specifying a character to print. + +@kindex \uhhhh +@kindex \Uhhhhhhhh +@cindex Unicode +@cindex ISO/IEC 10646 +@vindex LC_CTYPE +@command{printf} interprets two character syntaxes introduced in +@acronym{ISO} C 99: +@samp{\u} for 16-bit Unicode (@acronym{ISO}/@acronym{IEC} 10646) +characters, specified as +four hexadecimal digits @var{hhhh}, and @samp{\U} for 32-bit Unicode +characters, specified as eight hexadecimal digits @var{hhhhhhhh}. +@command{printf} outputs the Unicode characters +according to the @env{LC_CTYPE} locale. + +The processing of @samp{\u} and @samp{\U} requires a full-featured +@code{iconv} facility. It is activated on systems with glibc 2.2 (or newer), +or when @code{libiconv} is installed prior to this package. Otherwise +@samp{\u} and @samp{\U} will print as-is. + +The only options are a lone @option{--help} or +@option{--version}. @xref{Common options}. +Options must precede operands. + +The Unicode character syntaxes are useful for writing strings in a locale +independent way. For example, a string containing the Euro currency symbol + +@example +$ /usr/local/bin/printf '\u20AC 14.95' +@end example + +@noindent +will be output correctly in all locales supporting the Euro symbol +(@acronym{ISO}-8859-15, UTF-8, and others). Similarly, a Chinese string + +@example +$ /usr/local/bin/printf '\u4e2d\u6587' +@end example + +@noindent +will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc). + +Note that in these examples, the full name of @command{printf} has been +given, to distinguish it from the GNU @code{bash} built-in function +@command{printf}. + +For larger strings, you don't need to look up the hexadecimal code +values of each character one by one. @acronym{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: + +@smallexample +$ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \ + '\u4e2d\u6587\n' > sample.txt +$ recode BIG5..JAVA < sample.txt \ + | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \ + > sample.sh +@end smallexample + +@exitstatus + + +@node yes invocation +@section @command{yes}: Print a string until interrupted + +@pindex yes +@cindex repeated output of a string + +@command{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 @samp{y} followed by a newline forever until killed. + +Upon a write error, @command{yes} exits with status @samp{1}. + +The only options are a lone @option{--help} or @option{--version}. +To output an argument that begins with +@samp{-}, precede it with @option{--}, e.g., @samp{yes -- --help}. +@xref{Common options}. + + +@node Conditions +@chapter Conditions + +@cindex conditions +@cindex commands for exit status +@cindex exit status commands + +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 @code{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. +@end menu + + +@node false invocation +@section @command{false}: Do nothing, unsuccessfully + +@pindex false +@cindex do nothing, unsuccessfully +@cindex failure exit status +@cindex exit status of @command{false} + +@command{false} does nothing except return an exit status of 1, meaning +@dfn{failure}. It can be used as a place holder in shell scripts +where an unsuccessful command is needed. +In most modern shells, @command{false} is a built-in command, so when +you use @samp{false} in a script, you're probably using the built-in +command, not the one documented here. + +@command{false} honors the @option{--help} and @option{--version} options. + +This version of @command{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 @command{false} (unlike all other programs documented herein) +exits unsuccessfully, even when invoked with +@option{--help} or @option{--version}. + +Portable programs should not assume that the exit status of +@command{false} is 1, as it is greater than 1 on some +non-@acronym{GNU} hosts. + + +@node true invocation +@section @command{true}: Do nothing, successfully + +@pindex true +@cindex do nothing, successfully +@cindex no-op +@cindex successful exit +@cindex exit status of @command{true} + +@command{true} does nothing except return an exit status of 0, meaning +@dfn{success}. It can be used as a place holder in shell scripts +where a successful command is needed, although the shell built-in +command @code{:} (colon) may do the same thing faster. +In most modern shells, @command{true} is a built-in command, so when +you use @samp{true} in a script, you're probably using the built-in +command, not the one documented here. + +@command{true} honors the @option{--help} and @option{--version} options. + +Note, however, that it is possible to cause @command{true} +to exit with nonzero status: with the @option{--help} or @option{--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: + +@example +$ ./true --version >&- +./true: write error: Bad file number +$ ./true --version > /dev/full +./true: write error: No space left on device +@end example + +This version of @command{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. + +@node test invocation +@section @command{test}: Check file types and compare values + +@pindex test +@cindex check file types +@cindex compare values +@cindex expression evaluation + +@command{test} returns a status of 0 (true) or 1 (false) depending on the +evaluation of the conditional expression @var{expr}. Each part of the +expression must be a separate argument. + +@command{test} has file status checks, string operators, and numeric +comparison operators. + +@command{test} has an alternate form that uses opening and closing +square brackets instead a leading @samp{test}. For example, instead +of @samp{test -d /}, you can write @samp{[ -d / ]}. The square +brackets must be separate arguments; for example, @samp{[-d /]} does +not have the desired effect. Since @samp{test @var{expr}} and @samp{[ +@var{expr} ]} have the same meaning, only the former form is discussed +below. + +Synopses: + +@example +test @var{expression} +test +[ @var{expression} ] +[ ] +[ @var{option} +@end example + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because most shells have a built-in @command{test} command, using an +unadorned @command{test} in a script or interactively may get you +different functionality than that described here. + +If @var{expression} is omitted, @command{test} returns false. +If @var{expression} is a single argument, +@command{test} returns false if the argument is null and true otherwise. The argument +can be any string, including strings like @samp{-d}, @samp{-1}, +@samp{--}, @samp{--help}, and @samp{--version} that most other +programs would treat as options. To get help and version information, +invoke the commands @samp{[ --help} and @samp{[ --version}, without +the usual closing brackets. @xref{Common options}. + +@cindex exit status of @command{test} +Exit status: + +@display +0 if the expression is true, +1 if the expression is false, +2 if an error occurred. +@end display + +@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 +@end menu + + +@node File type tests +@subsection File type tests + +@cindex file type tests + +These options test for particular types of files. (Everything's a file, +but not all files are the same!) + +@table @samp + +@item -b @var{file} +@opindex -b +@cindex block special check +True if @var{file} exists and is a block special device. + +@item -c @var{file} +@opindex -c +@cindex character special check +True if @var{file} exists and is a character special device. + +@item -d @var{file} +@opindex -d +@cindex directory check +True if @var{file} exists and is a directory. + +@item -f @var{file} +@opindex -f +@cindex regular file check +True if @var{file} exists and is a regular file. + +@item -h @var{file} +@itemx -L @var{file} +@opindex -L +@opindex -h +@cindex symbolic link check +True if @var{file} exists and is a symbolic link. +Unlike all other file-related tests, this test does not dereference +@var{file} if it is a symbolic link. + +@item -p @var{file} +@opindex -p +@cindex named pipe check +True if @var{file} exists and is a named pipe. + +@item -S @var{file} +@opindex -S +@cindex socket check +True if @var{file} exists and is a socket. + +@item -t @var{fd} +@opindex -t +@cindex terminal check +True if @var{fd} is a file descriptor that is associated with a +terminal. + +@end table + + +@node Access permission tests +@subsection Access permission tests + +@cindex access permission tests +@cindex permission tests + +These options test for particular access permissions. + +@table @samp + +@item -g @var{file} +@opindex -g +@cindex set-group-ID check +True if @var{file} exists and has its set-group-ID bit set. + +@item -k @var{file} +@opindex -k +@cindex sticky bit check +True if @var{file} exists and has its @dfn{sticky} bit set. + +@item -r @var{file} +@opindex -r +@cindex readable file check +True if @var{file} exists and read permission is granted. + +@item -u @var{file} +@opindex -u +@cindex set-user-ID check +True if @var{file} exists and has its set-user-ID bit set. + +@item -w @var{file} +@opindex -w +@cindex writable file check +True if @var{file} exists and write permission is granted. + +@item -x @var{file} +@opindex -x +@cindex executable file check +True if @var{file} exists and execute permission is granted +(or search permission, if it is a directory). + +@item -O @var{file} +@opindex -O +@cindex owned by effective user ID check +True if @var{file} exists and is owned by the current effective user ID. + +@item -G @var{file} +@opindex -G +@cindex owned by effective group ID check +True if @var{file} exists and is owned by the current effective group ID. + +@end table + +@node File characteristic tests +@subsection File characteristic tests + +@cindex file characteristic tests + +These options test other file characteristics. + +@table @samp + +@item -e @var{file} +@opindex -e +@cindex existence-of-file check +True if @var{file} exists. + +@item -s @var{file} +@opindex -s +@cindex nonempty file check +True if @var{file} exists and has a size greater than zero. + +@item @var{file1} -nt @var{file2} +@opindex -nt +@cindex newer-than file check +True if @var{file1} is newer (according to modification date) than +@var{file2}, or if @var{file1} exists and @var{file2} does not. + +@item @var{file1} -ot @var{file2} +@opindex -ot +@cindex older-than file check +True if @var{file1} is older (according to modification date) than +@var{file2}, or if @var{file2} exists and @var{file1} does not. + +@item @var{file1} -ef @var{file2} +@opindex -ef +@cindex same file check +@cindex hard link check +True if @var{file1} and @var{file2} have the same device and inode +numbers, i.e., if they are hard links to each other. + +@end table + + +@node String tests +@subsection String tests + +@cindex string tests + +These options test string characteristics. You may need to quote +@var{string} arguments for the shell. For example: + +@example +test -n "$V" +@end example + +The quotes here prevent the wrong arguments from being passed to +@command{test} if @samp{$V} is empty or contains special characters. + +@table @samp + +@item -z @var{string} +@opindex -z +@cindex zero-length string check +True if the length of @var{string} is zero. + +@item -n @var{string} +@itemx @var{string} +@opindex -n +@cindex nonzero-length string check +True if the length of @var{string} is nonzero. + +@item @var{string1} = @var{string2} +@opindex = +@cindex equal string check +True if the strings are equal. + +@item @var{string1} != @var{string2} +@opindex != +@cindex not-equal string check +True if the strings are not equal. + +@end table + + +@node Numeric tests +@subsection Numeric tests + +@cindex numeric tests +@cindex arithmetic tests + +Numeric relationals. The arguments must be entirely numeric (possibly +negative), or the special expression @w{@code{-l @var{string}}}, which +evaluates to the length of @var{string}. + +@table @samp + +@item @var{arg1} -eq @var{arg2} +@itemx @var{arg1} -ne @var{arg2} +@itemx @var{arg1} -lt @var{arg2} +@itemx @var{arg1} -le @var{arg2} +@itemx @var{arg1} -gt @var{arg2} +@itemx @var{arg1} -ge @var{arg2} +@opindex -eq +@opindex -ne +@opindex -lt +@opindex -le +@opindex -gt +@opindex -ge +These arithmetic binary operators return true if @var{arg1} is equal, +not-equal, less-than, less-than-or-equal, greater-than, or +greater-than-or-equal than @var{arg2}, respectively. + +@end table + +For example: + +@example +test -1 -gt -2 && echo yes +@result{} yes +test -l abc -gt 1 && echo yes +@result{} yes +test 0x100 -eq 1 +@error{} test: integer expression expected before -eq +@end example + + +@node Connectives for test +@subsection Connectives for @command{test} + +@cindex logical connectives +@cindex connectives, logical + +The usual logical connectives. + +@table @samp + +@item ! @var{expr} +@opindex ! +True if @var{expr} is false. + +@item @var{expr1} -a @var{expr2} +@opindex -a +@cindex logical and operator +@cindex and operator +True if both @var{expr1} and @var{expr2} are true. + +@item @var{expr1} -o @var{expr2} +@opindex -o +@cindex logical or operator +@cindex or operator +True if either @var{expr1} or @var{expr2} is true. + +@end table + + +@node expr invocation +@section @command{expr}: Evaluate expressions + +@pindex expr +@cindex expression evaluation +@cindex evaluation of expressions + +@command{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 @samp{-}. +@command{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 @command{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 @command{expr}'s +operators like @code{+}, so you cannot safely pass an arbitrary string +@code{$str} to expr merely by quoting it to the shell. One way to +work around this is to use the @sc{gnu} extension @code{+}, +(e.g., @code{+ "$str" = foo}); a more portable way is to use +@code{@w{" $str"}} and to adjust the rest of the expression to take +the leading space into account (e.g., @code{@w{" $str" = " foo"}}). + +You should not pass a negative integer or a string with leading +@samp{-} as @command{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. + +@cindex parentheses for grouping +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. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. Options must precede operands. + +@cindex exit status of @command{expr} +Exit status: + +@display +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). +@end display + +@menu +* String expressions:: + : match substr index length +* Numeric expressions:: + - * / % +* Relations for expr:: | & < <= = == != >= > +* Examples of expr:: Examples. +@end menu + + +@node String expressions +@subsection String expressions + +@cindex string expressions +@cindex expressions, string + +@command{expr} supports pattern matching and other string operators. These +have lower precedence than both the numeric and relational operators (in +the next sections). + +@table @samp + +@item @var{string} : @var{regex} +@cindex pattern matching +@cindex regular expression matching +@cindex matching patterns +Perform pattern matching. The arguments are converted to strings and the +second is considered to be a (basic, a la GNU @code{grep}) regular +expression, with a @code{^} implicitly prepended. The first argument is +then matched against this regular expression. + +If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the +@code{:} expression returns the part of @var{string} that matched the +subexpression; otherwise, it returns the number of characters matched. + +If the match fails, the @code{:} operator returns the null string if +@samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0. + +@kindex \( @r{regexp operator} +Only the first @samp{\( @dots{} \)} pair is relevant to the return +value; additional pairs are meaningful only for grouping the regular +expression operators. + +@kindex \+ @r{regexp operator} +@kindex \? @r{regexp operator} +@kindex \| @r{regexp operator} +In the regular expression, @code{\+}, @code{\?}, and @code{\|} are +operators which respectively match one or more, zero or one, or separate +alternatives. SunOS and other @command{expr}'s treat these as regular +characters. (@acronym{POSIX} allows either behavior.) +@xref{Top, , Regular Expression Library, regex, Regex}, for details of +regular expression syntax. Some examples are in @ref{Examples of expr}. + +@item match @var{string} @var{regex} +@findex match +An alternative way to do pattern matching. This is the same as +@w{@samp{@var{string} : @var{regex}}}. + +@item substr @var{string} @var{position} @var{length} +@findex substr +Returns the substring of @var{string} beginning at @var{position} +with length at most @var{length}. If either @var{position} or +@var{length} is negative, zero, or non-numeric, returns the null string. + +@item index @var{string} @var{charset} +@findex index +Returns the first position in @var{string} where the first character in +@var{charset} was found. If no character in @var{charset} is found in +@var{string}, return 0. + +@item length @var{string} +@findex length +Returns the length of @var{string}. + +@item + @var{token} +@kindex + +Interpret @var{token} as a string, even if it is a keyword like @var{match} +or an operator like @code{/}. +This makes it possible to test @code{expr length + "$x"} or +@code{expr + "$x" : '.*/\(.\)'} and have it do the right thing even if +the value of @var{$x} happens to be (for example) @code{/} or @code{index}. +This operator is a @acronym{GNU} extension. Portable shell scripts should use +@code{@w{" $token"} : @w{' \(.*\)'}} instead of @code{+ "$token"}. + +@end table + +To make @command{expr} interpret keywords as strings, you must use the +@code{quote} operator. + + +@node Numeric expressions +@subsection Numeric expressions + +@cindex numeric expressions +@cindex expressions, numeric + +@command{expr} supports the usual numeric operators, in order of increasing +precedence. The string operators (previous section) have lower precedence, +the connectives (next section) have higher. + +@table @samp + +@item + - +@kindex + +@kindex - +@cindex addition +@cindex subtraction +Addition and subtraction. Both arguments are converted to integers; +an error occurs if this cannot be done. + +@item * / % +@kindex * +@kindex / +@kindex % +@cindex multiplication +@cindex division +@cindex remainder +Multiplication, division, remainder. Both arguments are converted to +integers; an error occurs if this cannot be done. + +@end table + + +@node Relations for expr +@subsection Relations for @command{expr} + +@cindex connectives, logical +@cindex logical connectives +@cindex relations, numeric or string + +@command{expr} supports the usual logical connectives and relations. These +are higher precedence than either the string or numeric operators +(previous sections). Here is the list, lowest-precedence operator first. + +@table @samp + +@item | +@kindex | +@cindex logical or operator +@cindex or operator +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. + +@item & +@kindex & +@cindex logical and operator +@cindex and operator +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. + +@item < <= = == != >= > +@kindex < +@kindex <= +@kindex = +@kindex == +@kindex > +@kindex >= +@cindex comparison operators +@vindex LC_COLLATE +Compare the arguments and return 1 if the relation is true, 0 otherwise. +@code{==} is a synonym for @code{=}. @command{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 @env{LC_COLLATE} locale. + +@end table + + +@node Examples of expr +@subsection Examples of using @command{expr} + +@cindex examples of @command{expr} +Here are a few examples, including quoting for shell metacharacters. + +To add 1 to the shell variable @code{foo}, in Bourne-compatible shells: + +@example +foo=`expr $foo + 1` +@end example + +To print the non-directory part of the file name stored in +@code{$fname}, which need not contain a @code{/}: + +@example +expr $fname : '.*/\(.*\)' '|' $fname +@end example + +An example showing that @code{\+} is an operator: + +@example +expr aaa : 'a\+' +@result{} 3 +@end example + +@example +expr abc : 'a\(.\)c' +@result{} b +expr index abcdef cz +@result{} 3 +expr index index a +@error{} expr: syntax error +expr index quote index a +@result{} 0 +@end example + + +@node Redirection +@chapter Redirection + +@cindex redirection +@cindex commands for redirection + +Unix shells commonly provide several forms of @dfn{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. +@end menu + + +@node tee invocation +@section @command{tee}: Redirect output to multiple files + +@pindex tee +@cindex pipe fitting +@cindex destinations, multiple output +@cindex read from stdin and write to stdout and files + +The @command{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: + +@example +tee [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +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 @option{-a} option is used. + +A @var{file} of @samp{-} causes @command{tee} to send another copy of +input to standard output, but this is typically not that useful as the +copies are interleaved. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp +@item -a +@itemx --append +@opindex -a +@opindex --append +Append standard input to the given files rather than overwriting +them. + +@item -i +@itemx --ignore-interrupts +@opindex -i +@opindex --ignore-interrupts +Ignore interrupt signals. + +@end table + +@exitstatus + + +@node File name manipulation +@chapter File name manipulation + +@cindex file name manipulation +@cindex manipulation of file names +@cindex commands for 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 non-directory suffix from a file name. +* pathchk invocation:: Check file name portability. +@end menu + + +@node basename invocation +@section @command{basename}: Strip directory and suffix from a file name + +@pindex basename +@cindex strip directory and suffix from file names +@cindex directory, stripping from file names +@cindex suffix, stripping from file names +@cindex file names, stripping directory and suffix +@cindex leading directory components, stripping + +@command{basename} removes any leading directory components from +@var{name}. Synopsis: + +@example +basename @var{name} [@var{suffix}] +@end example + +If @var{suffix} is specified and is identical to the end of @var{name}, +it is removed from @var{name} as well. Note that since trailing slashes +are removed prior to suffix matching, @var{suffix} will do nothing if it +contains slashes. @command{basename} prints the result on standard +output. + +@c This test is used both here and in the section on dirname. +@macro basenameAndDirname +Together, @command{basename} and @command{dirname} are designed such +that if @samp{ls "$name"} succeeds, then the command sequence @samp{cd +"$(dirname "$name")"; ls "$(basename "$name")"} will, too. This works +for everything except file names containing a trailing newline. +@end macro +@basenameAndDirname + +@acronym{POSIX} allows the implementation to define the results if +@var{name} is empty or @samp{//}. In the former case, @acronym{GNU} +@command{basename} returns the empty string. In the latter case, the +result is @samp{//} on platforms where @var{//} is distinct from +@var{/}, and @samp{/} on platforms where there is no difference. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. Options must precede operands. + +@exitstatus + +Examples: + +@smallexample +# Output "sort". +basename /usr/bin/sort + +# Output "stdio". +basename include/stdio.h .h +@end smallexample + + +@node dirname invocation +@section @command{dirname}: Strip non-directory suffix from a file name + +@pindex dirname +@cindex directory components, printing +@cindex stripping non-directory suffix +@cindex non-directory suffix, stripping + +@command{dirname} prints all but the final slash-delimited component of +a string (presumably a file name). Synopsis: + +@example +dirname @var{name} +@end example + +If @var{name} is a single component, @command{dirname} prints @samp{.} +(meaning the current directory). + +@basenameAndDirname + +@acronym{POSIX} allows the implementation to define the results if +@var{name} is @samp{//}. With @acronym{GNU} @command{dirname}, the +result is @samp{//} on platforms where @var{//} is distinct from +@var{/}, and @samp{/} on platforms where there is no difference. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + +Examples: + +@smallexample +# Output "/usr/bin". +dirname /usr/bin/sort + +# Output ".". +dirname stdio.h +@end smallexample + + +@node pathchk invocation +@section @command{pathchk}: Check file name portability + +@pindex pathchk +@cindex file names, checking validity and portability +@cindex valid file names, checking for +@cindex portable file names, checking for + +@command{pathchk} checks portability of file names. Synopsis: + +@example +pathchk [@var{option}]@dots{} @var{name}@dots{} +@end example + +For each @var{name}, @command{pathchk} prints a message if any of +these conditions is true: + +@enumerate +@item +One of the existing directories in @var{name} does not have search +(execute) permission, +@item +The length of @var{name} is larger than the maximum supported by the +operating system. +@item +The length of one component of @var{name} is longer than +its file system's maximum. +@end enumerate + +A nonexistent @var{name} is not an error, so long a file with that +name could be created under the above conditions. + +The program accepts the following options. Also see @ref{Common options}. +Options must precede operands. + +@table @samp + +@item -p +@opindex -p +Instead of performing checks based on the underlying file system, +print a message if any of these conditions is true: + +@enumerate +@item +A file name is empty. + +@item +The length of a file name or one of its components exceeds the +@acronym{POSIX} minimum limits for portability. + +@item +A file name contains a character outside the portable file name +character set, namely, the ASCII letters and digits, @samp{-}, +@samp{.}, @samp{/}, and @samp{_}. +@end enumerate + +@item -P +@opindex -P +Print a message if a file name is empty, or if it contains a component +that begins with @samp{-}. + +@item --portability +@opindex --portability +Print a message if a file name is not portable to all @acronym{POSIX} +hosts. This option is equivalent to @samp{-p -P}. + +@end table + +@cindex exit status of @command{pathchk} +Exit status: + +@display +0 if all specified file names passed all checks, +1 otherwise. +@end display + + +@node Working context +@chapter Working context + +@cindex working context +@cindex commands for printing the 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. +@end menu + + +@node pwd invocation +@section @command{pwd}: Print working directory + +@pindex pwd +@cindex print name of current directory +@cindex current working directory, printing +@cindex working directory, printing + +@cindex symbolic links and @command{pwd} +@command{pwd} prints the fully resolved name of the current directory. +That is, all components of the printed name will be actual directory +names---none will be symbolic links. + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because most shells have a built-in @command{pwd} command, using an +unadorned @command{pwd} in a script or interactively may get you +different functionality than that described here. + +The only options are a lone @option{--help} or +@option{--version}. @xref{Common options}. + +@exitstatus + + +@node stty invocation +@section @command{stty}: Print or change terminal characteristics + +@pindex stty +@cindex change or print terminal settings +@cindex terminal settings +@cindex line settings of terminal + +@command{stty} prints or changes terminal characteristics, such as baud rate. +Synopses: + +@example +stty [@var{option}] [@var{setting}]@dots{} +stty [@var{option}] +@end example + +If given no line settings, @command{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 @samp{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 +@option{--file} option. + +@command{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 @ref{Common options}. + +@table @samp +@item -a +@itemx --all +@opindex -a +@opindex --all +Print all current settings in human-readable form. This option may not +be used in combination with any line settings. + +@item -F @var{device} +@itemx --file=@var{device} +@opindex -F +@opindex --file +Set the line opened by the file name specified in @var{device} instead of +the tty line connected to standard input. This option is necessary +because opening a @acronym{POSIX} tty requires use of the @code{O_NONDELAY} flag to +prevent a @acronym{POSIX} tty from blocking until the carrier detect line is high if +the @code{clocal} flag is not set. Hence, it is not always possible +to allow the shell to open the device in the traditional manner. + +@item -g +@itemx --save +@opindex -g +@opindex --save +@cindex machine-readable @command{stty} output +Print all current settings in a form that can be used as an argument to +another @command{stty} command to restore the current settings. This option +may not be used in combination with any line settings. + +@end table + +Many settings can be turned off by preceding them with a @samp{-}. +Such arguments are marked below with ``May be negated'' in their +description. The descriptions themselves refer to the positive +case, that is, when @emph{not} negated (unless stated otherwise, +of course). + +Some settings are not available on all @acronym{POSIX} systems, since they use +extensions. Such arguments are marked below with ``Non-@acronym{POSIX}'' in their +description. On non-@acronym{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. + +@exitstatus + +@menu +* Control:: Control settings +* Input:: Input settings +* Output:: Output settings +* Local:: Local settings +* Combination:: Combination settings +* Characters:: Special characters +* Special:: Special settings +@end menu + + +@node Control +@subsection Control settings + +@cindex control settings +Control settings: + +@table @samp +@item parenb +@opindex parenb +@cindex two-way parity +Generate parity bit in output and expect parity bit in input. +May be negated. + +@item parodd +@opindex parodd +@cindex odd parity +@cindex even parity +Set odd parity (even if negated). May be negated. + +@item cs5 +@itemx cs6 +@itemx cs7 +@itemx cs8 +@opindex cs@var{n} +@cindex character size +@cindex eight-bit characters +Set character size to 5, 6, 7, or 8 bits. + +@item hup +@itemx hupcl +@opindex hup[cl] +Send a hangup signal when the last process closes the tty. May be +negated. + +@item cstopb +@opindex cstopb +@cindex stop bits +Use two stop bits per character (one if negated). May be negated. + +@item cread +@opindex cread +Allow input to be received. May be negated. + +@item clocal +@opindex clocal +@cindex modem control +Disable modem control signals. May be negated. + +@item crtscts +@opindex crtscts +@cindex hardware flow control +@cindex flow control, hardware +@cindex RTS/CTS flow control +Enable RTS/CTS flow control. Non-@acronym{POSIX}. May be negated. +@end table + + +@node Input +@subsection Input settings + +@cindex input settings + +@table @samp +@item ignbrk +@opindex ignbrk +@cindex breaks, ignoring +Ignore break characters. May be negated. + +@item brkint +@opindex brkint +@cindex breaks, cause interrupts +Make breaks cause an interrupt signal. May be negated. + +@item ignpar +@opindex ignpar +@cindex parity, ignoring +Ignore characters with parity errors. May be negated. + +@item parmrk +@opindex parmrk +@cindex parity errors, marking +Mark parity errors (with a 255-0-character sequence). May be negated. + +@item inpck +@opindex inpck +Enable input parity checking. May be negated. + +@item istrip +@opindex istrip +@cindex eight-bit input +Clear high (8th) bit of input characters. May be negated. + +@item inlcr +@opindex inlcr +@cindex newline, translating to return +Translate newline to carriage return. May be negated. + +@item igncr +@opindex igncr +@cindex return, ignoring +Ignore carriage return. May be negated. + +@item icrnl +@opindex icrnl +@cindex return, translating to newline +Translate carriage return to newline. May be negated. + +@item iutf8 +@opindex iutf8 +@cindex input encoding, UTF-8 +Assume input characters are UTF-8 encoded. May be negated. + +@item ixon +@opindex ixon +@kindex C-s/C-q flow control +@cindex XON/XOFF flow control +Enable XON/XOFF flow control (that is, @kbd{CTRL-S}/@kbd{CTRL-Q}). May +be negated. + +@item ixoff +@itemx tandem +@opindex ixoff +@opindex tandem +@cindex software flow control +@cindex flow control, software +Enable sending of @code{stop} character when the system input buffer +is almost full, and @code{start} character when it becomes almost +empty again. May be negated. + +@item iuclc +@opindex iuclc +@cindex uppercase, translating to lowercase +Translate uppercase characters to lowercase. Non-@acronym{POSIX}. May be +negated. + +@item ixany +@opindex ixany +Allow any character to restart output (only the start character +if negated). Non-@acronym{POSIX}. May be negated. + +@item imaxbel +@opindex imaxbel +@cindex beeping at input buffer full +Enable beeping and not flushing input buffer if a character arrives +when the input buffer is full. Non-@acronym{POSIX}. May be negated. +@end table + + +@node Output +@subsection Output settings + +@cindex output settings +These arguments specify output-related operations. + +@table @samp +@item opost +@opindex opost +Postprocess output. May be negated. + +@item olcuc +@opindex olcuc +@cindex lowercase, translating to output +Translate lowercase characters to uppercase. Non-@acronym{POSIX}. May be +negated. + +@item ocrnl +@opindex ocrnl +@cindex return, translating to newline +Translate carriage return to newline. Non-@acronym{POSIX}. May be negated. + +@item onlcr +@opindex onlcr +@cindex newline, translating to crlf +Translate newline to carriage return-newline. Non-@acronym{POSIX}. May be +negated. + +@item onocr +@opindex onocr +Do not print carriage returns in the first column. Non-@acronym{POSIX}. +May be negated. + +@item onlret +@opindex onlret +Newline performs a carriage return. Non-@acronym{POSIX}. May be negated. + +@item ofill +@opindex ofill +@cindex pad instead of timing for delaying +Use fill (padding) characters instead of timing for delays. Non-@acronym{POSIX}. +May be negated. + +@item ofdel +@opindex ofdel +@cindex pad character +Use delete characters for fill instead of null characters. Non-@acronym{POSIX}. +May be negated. + +@item nl1 +@itemx nl0 +@opindex nl@var{n} +Newline delay style. Non-@acronym{POSIX}. + +@item cr3 +@itemx cr2 +@itemx cr1 +@itemx cr0 +@opindex cr@var{n} +Carriage return delay style. Non-@acronym{POSIX}. + +@item tab3 +@itemx tab2 +@itemx tab1 +@itemx tab0 +@opindex tab@var{n} +Horizontal tab delay style. Non-@acronym{POSIX}. + +@item bs1 +@itemx bs0 +@opindex bs@var{n} +Backspace delay style. Non-@acronym{POSIX}. + +@item vt1 +@itemx vt0 +@opindex vt@var{n} +Vertical tab delay style. Non-@acronym{POSIX}. + +@item ff1 +@itemx ff0 +@opindex ff@var{n} +Form feed delay style. Non-@acronym{POSIX}. +@end table + + +@node Local +@subsection Local settings + +@cindex local settings + +@table @samp +@item isig +@opindex isig +Enable @code{interrupt}, @code{quit}, and @code{suspend} special +characters. May be negated. + +@item icanon +@opindex icanon +Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt} +special characters. May be negated. + +@item iexten +@opindex iexten +Enable non-@acronym{POSIX} special characters. May be negated. + +@item echo +@opindex echo +Echo input characters. May be negated. + +@item echoe +@itemx crterase +@opindex echoe +@opindex crterase +Echo @code{erase} characters as backspace-space-backspace. May be +negated. + +@item echok +@opindex echok +@cindex newline echoing after @code{kill} +Echo a newline after a @code{kill} character. May be negated. + +@item echonl +@opindex echonl +@cindex newline, echoing +Echo newline even if not echoing other characters. May be negated. + +@item noflsh +@opindex noflsh +@cindex flushing, disabling +Disable flushing after @code{interrupt} and @code{quit} special +characters. May be negated. + +@item xcase +@opindex xcase +@cindex case translation +Enable input and output of uppercase characters by preceding their +lowercase equivalents with @samp{\}, when @code{icanon} is set. +Non-@acronym{POSIX}. May be negated. + +@item tostop +@opindex tostop +@cindex background jobs, stopping at terminal write +Stop background jobs that try to write to the terminal. Non-@acronym{POSIX}. +May be negated. + +@item echoprt +@itemx prterase +@opindex echoprt +@opindex prterase +Echo erased characters backward, between @samp{\} and @samp{/}. +Non-@acronym{POSIX}. May be negated. + +@item echoctl +@itemx ctlecho +@opindex echoctl +@opindex ctlecho +@cindex control characters, using @samp{^@var{c}} +@cindex hat notation for control characters +Echo control characters in hat notation (@samp{^@var{c}}) instead +of literally. Non-@acronym{POSIX}. May be negated. + +@item echoke +@itemx crtkill +@opindex echoke +@opindex crtkill +Echo the @code{kill} special character by erasing each character on +the line as indicated by the @code{echoprt} and @code{echoe} settings, +instead of by the @code{echoctl} and @code{echok} settings. Non-@acronym{POSIX}. +May be negated. +@end table + + +@node Combination +@subsection Combination settings + +@cindex combination settings +Combination settings: + +@table @samp +@item evenp +@opindex evenp +@itemx parity +@opindex parity +Same as @code{parenb -parodd cs7}. May be negated. If negated, same +as @code{-parenb cs8}. + +@item oddp +@opindex oddp +Same as @code{parenb parodd cs7}. May be negated. If negated, same +as @code{-parenb cs8}. + +@item nl +@opindex nl +Same as @code{-icrnl -onlcr}. May be negated. If negated, same as +@code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}. + +@item ek +@opindex ek +Reset the @code{erase} and @code{kill} special characters to their default +values. + +@item sane +@opindex sane +Same as: + +@c This is too long to write inline. +@example +cread -ignbrk brkint -inlcr -igncr icrnl -ixoff +-iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr +-onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 +ff0 isig icanon iexten echo echoe echok -echonl +-noflsh -xcase -tostop -echoprt echoctl echoke +@end example + +@noindent +and also sets all special characters to their default values. + +@item cooked +@opindex cooked +Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus +sets the @code{eof} and @code{eol} characters to their default values +if they are the same as the @code{min} and @code{time} characters. +May be negated. If negated, same as @code{raw}. + +@item raw +@opindex raw +Same as: + +@example +-ignbrk -brkint -ignpar -parmrk -inpck -istrip +-inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany +-imaxbel -opost -isig -icanon -xcase min 1 time 0 +@end example + +@noindent +May be negated. If negated, same as @code{cooked}. + +@item cbreak +@opindex cbreak +Same as @option{-icanon}. May be negated. If negated, same as +@code{icanon}. + +@item pass8 +@opindex pass8 +@cindex eight-bit characters +Same as @code{-parenb -istrip cs8}. May be negated. If negated, +same as @code{parenb istrip cs7}. + +@item litout +@opindex litout +Same as @option{-parenb -istrip -opost cs8}. May be negated. +If negated, same as @code{parenb istrip opost cs7}. + +@item decctlq +@opindex decctlq +Same as @option{-ixany}. Non-@acronym{POSIX}. May be negated. + +@item tabs +@opindex tabs +Same as @code{tab0}. Non-@acronym{POSIX}. May be negated. If negated, same +as @code{tab3}. + +@item lcase +@itemx LCASE +@opindex lcase +@opindex LCASE +Same as @code{xcase iuclc olcuc}. Non-@acronym{POSIX}. May be negated. + +@item crt +@opindex crt +Same as @code{echoe echoctl echoke}. + +@item dec +@opindex dec +Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}. +@end table + + +@node Characters +@subsection Special characters + +@cindex special characters +@cindex characters, special + +The special characters' default values vary from system to system. +They are set with the syntax @samp{name value}, where the names are +listed below and the value can be given either literally, in hat +notation (@samp{^@var{c}}), or as an integer which may start with +@samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or +any other digit to indicate decimal. + +@cindex disabling special characters +@kindex u@r{, and disabling special characters} +For GNU stty, giving a value of @code{^-} or @code{undef} disables that +special character. (This is incompatible with Ultrix @command{stty}, +which uses a value of @samp{u} to disable a special character. GNU +@command{stty} treats a value @samp{u} like any other, namely to set that +special character to @key{U}.) + +@table @samp + +@item intr +@opindex intr +Send an interrupt signal. + +@item quit +@opindex quit +Send a quit signal. + +@item erase +@opindex erase +Erase the last character typed. + +@item kill +@opindex kill +Erase the current line. + +@item eof +@opindex eof +Send an end of file (terminate the input). + +@item eol +@opindex eol +End the line. + +@item eol2 +@opindex eol2 +Alternate character to end the line. Non-@acronym{POSIX}. + +@item swtch +@opindex swtch +Switch to a different shell layer. Non-@acronym{POSIX}. + +@item start +@opindex start +Restart the output after stopping it. + +@item stop +@opindex stop +Stop the output. + +@item susp +@opindex susp +Send a terminal stop signal. + +@item dsusp +@opindex dsusp +Send a terminal stop signal after flushing the input. Non-@acronym{POSIX}. + +@item rprnt +@opindex rprnt +Redraw the current line. Non-@acronym{POSIX}. + +@item werase +@opindex werase +Erase the last word typed. Non-@acronym{POSIX}. + +@item lnext +@opindex lnext +Enter the next character typed literally, even if it is a special +character. Non-@acronym{POSIX}. +@end table + + +@node Special +@subsection Special settings + +@cindex special settings + +@table @samp +@item min @var{n} +@opindex min +Set the minimum number of characters that will satisfy a read until +the time value has expired, when @option{-icanon} is set. + +@item time @var{n} +@opindex time +Set the number of tenths of a second before reads time out if the minimum +number of characters have not been read, when @option{-icanon} is set. + +@item ispeed @var{n} +@opindex ispeed +Set the input speed to @var{n}. + +@item ospeed @var{n} +@opindex ospeed +Set the output speed to @var{n}. + +@item rows @var{n} +@opindex rows +Tell the tty kernel driver that the terminal has @var{n} rows. Non-@acronym{POSIX}. + +@item cols @var{n} +@itemx columns @var{n} +@opindex cols +@opindex columns +Tell the kernel that the terminal has @var{n} columns. Non-@acronym{POSIX}. + +@item size +@opindex size +@vindex LINES +@vindex COLUMNS +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 @env{LINES} and @env{COLUMNS} +instead; however, GNU @command{stty} does not know anything about them.) +Non-@acronym{POSIX}. + +@item line @var{n} +@opindex line +Use line discipline @var{n}. Non-@acronym{POSIX}. + +@item speed +@opindex speed +Print the terminal speed. + +@item @var{n} +@cindex baud rate, setting +@c FIXME: Is this still true that the baud rate can't be set +@c higher than 38400? +Set the input and output speeds to @var{n}. @var{n} can be one +of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 +19200 38400 @code{exta} @code{extb}. @code{exta} is the same as +19200; @code{extb} is the same as 38400. 0 hangs up the line if +@option{-clocal} is set. +@end table + + +@node printenv invocation +@section @command{printenv}: Print all or some environment variables + +@pindex printenv +@cindex printing all or some environment variables +@cindex environment variables, printing + +@command{printenv} prints environment variable values. Synopsis: + +@example +printenv [@var{option}] [@var{variable}]@dots{} +@end example + +If no @var{variable}s are specified, @command{printenv} prints the value of +every environment variable. Otherwise, it prints the value of each +@var{variable} that is set, and nothing for those that are not set. + +The only options are a lone @option{--help} or @option{--version}. +@xref{Common options}. + +@cindex exit status of @command{printenv} +Exit status: + +@display +0 if all variables specified were found +1 if at least one specified variable was not found +2 if a write error occurred +@end display + + +@node tty invocation +@section @command{tty}: Print file name of terminal on standard input + +@pindex tty +@cindex print terminal file name +@cindex terminal file name, printing + +@command{tty} prints the file name of the terminal connected to its standard +input. It prints @samp{not a tty} if standard input is not a terminal. +Synopsis: + +@example +tty [@var{option}]@dots{} +@end example + +The program accepts the following option. Also see @ref{Common options}. + +@table @samp + +@item -s +@itemx --silent +@itemx --quiet +@opindex -s +@opindex --silent +@opindex --quiet +Print nothing; only return an exit status. + +@end table + +@cindex exit status of @command{tty} +Exit status: + +@display +0 if standard input is a terminal +1 if standard input is not a terminal +2 if given incorrect arguments +3 if a write error occurs +@end display + + +@node User information +@chapter User information + +@cindex user information, commands for +@cindex commands for printing 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. +@end menu + + +@node id invocation +@section @command{id}: Print user identity + +@pindex id +@cindex real user and group IDs, printing +@cindex effective user and group IDs, printing +@cindex printing real and effective user and group IDs + +@command{id} prints information about the given user, or the process +running it if no user is specified. Synopsis: + +@example +id [@var{option}]@dots{} [@var{username}] +@end example + +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. + +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 @command{id} to print only part of the above information. +Also see @ref{Common options}. + +@table @samp +@item -g +@itemx --group +@opindex -g +@opindex --group +Print only the group ID. + +@item -G +@itemx --groups +@opindex -G +@opindex --groups +Print only the group ID and the supplementary groups. + +@item -n +@itemx --name +@opindex -n +@opindex --name +Print the user or group name instead of the ID number. Requires +@option{-u}, @option{-g}, or @option{-G}. + +@item -r +@itemx --real +@opindex -r +@opindex --real +Print the real, instead of effective, user or group ID. Requires +@option{-u}, @option{-g}, or @option{-G}. + +@item -u +@itemx --user +@opindex -u +@opindex --user +Print only the user ID. + +@end table + +@exitstatus + + +@node logname invocation +@section @command{logname}: Print current login name + +@pindex logname +@cindex printing user's login name +@cindex login name, printing +@cindex user name, printing + +@flindex utmp +@command{logname} prints the calling user's name, as found in a +system-maintained file (often @file{/var/run/utmp} or +@file{/etc/utmp}), and exits with a status of 0. If there is no entry +for the calling process, @command{logname} prints +an error message and exits with a status of 1. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node whoami invocation +@section @command{whoami}: Print effective user ID + +@pindex whoami +@cindex effective user ID, printing +@cindex printing the effective user ID + +@command{whoami} prints the user name associated with the current +effective user ID. It is equivalent to the command @samp{id -un}. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node groups invocation +@section @command{groups}: Print group names a user is in + +@pindex groups +@cindex printing groups a user is in +@cindex supplementary groups, printing + +@command{groups} prints the names of the primary and any supplementary +groups for each given @var{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. Synopsis: + +@example +groups [@var{username}]@dots{} +@end example + +The group lists are equivalent to the output of the command @samp{id -Gn}. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node users invocation +@section @command{users}: Print login names of users currently logged in + +@pindex users +@cindex printing current usernames +@cindex usernames, printing current + +@cindex login sessions, printing users with +@command{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: + +@example +users [@var{file}] +@end example + +@flindex utmp +@flindex wtmp +With no @var{file} argument, @command{users} extracts its information from +a system-maintained file (often @file{/var/run/utmp} or +@file{/etc/utmp}). If a file argument is given, @command{users} uses +that file instead. A common choice is @file{/var/log/wtmp}. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node who invocation +@section @command{who}: Print who is currently logged in + +@pindex who +@cindex printing current user information +@cindex information, about current users + +@command{who} prints information about users who are currently logged on. +Synopsis: + +@example +@command{who} [@var{option}] [@var{file}] [am i] +@end example + +@cindex terminal lines, currently used +@cindex login time +@cindex remote hostname +If given no non-option arguments, @command{who} prints the following +information for each user currently logged on: login name, terminal +line, login time, and remote hostname or X display. + +@flindex utmp +@flindex wtmp +If given one non-option argument, @command{who} uses that instead of +a default system-maintained file (often @file{/var/run/utmp} or +@file{/etc/utmp}) as the name of the file containing the record of +users logged on. @file{/var/log/wtmp} is commonly given as an argument +to @command{who} to look at who has previously logged on. + +@opindex am i +@opindex who am i +If given two non-option arguments, @command{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 @samp{am +i}, as in @samp{who am i}. + +@vindex TZ +Time stamps are listed according to the time zone rules specified by +the @env{TZ} environment variable, or by the system default rules if +@env{TZ} is not set. @xref{TZ Variable,, Specifying the Time Zone +with @env{TZ}, libc, The GNU C Library}. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a +@itemx --all +@opindex -a +@opindex --all +Same as @samp{-b -d --login -p -r -t -T -u}. + +@item -b +@itemx --boot +@opindex -b +@opindex --boot +Print the date and time of last system boot. + +@item -d +@itemx --dead +@opindex -d +@opindex --dead +Print information corresponding to dead processes. + +@item -H +@itemx --heading +@opindex -H +@opindex --heading +Print column headings. + +@item -m +@opindex -m +Same as @samp{who am i}. + +@item -q +@itemx --count +@opindex -q +@opindex --count +Print only the login names and the number of users logged on. +Overrides all other options. + +@item -s +@opindex -s +Ignored; for compatibility with other versions of @command{who}. + +@itemx -u +@opindex -u +@cindex idle time +After the login time, print the number of hours and minutes that the +user has been idle. @samp{.} means the user was active in the last minute. +@samp{old} means the user has been idle for more than 24 hours. + +@item -l +@itemx --login +@opindex -l +@opindex --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 @samp{LOGIN}. + +@itemx --lookup +@opindex --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. + +@item -H +@itemx --heading +@opindex -H +@opindex --heading +Print a line of column headings. + +@item -w +@itemx -T +@itemx --mesg +@itemx --message +@itemx --writable +@opindex -w +@opindex -T +@opindex --mesg +@opindex --message +@opindex --writable +@cindex message status +@pindex write@r{, allowed} +After each login name print a character indicating the user's message status: + +@display +@samp{+} allowing @code{write} messages +@samp{-} disallowing @code{write} messages +@samp{?} cannot find terminal device +@end display + +@end table + +@exitstatus + + +@node System context +@chapter System context + +@cindex system context +@cindex context, system +@cindex commands for system context + +This section describes commands that print or change system-wide +information. + +@menu +* date invocation:: Print or set system date and time. +* uname invocation:: Print system information. +* hostname invocation:: Print or set system name. +* hostid invocation:: Print numeric host identifier. +@end menu + + +@node date invocation +@section @command{date}: Print or set system date and time + +@pindex date +@cindex time, printing or setting +@cindex printing the current time + +Synopses: + +@example +date [@var{option}]@dots{} [+@var{format}] +date [-u|--utc|--universal] @c this avoids a newline in the output +[ MMDDhhmm[[CC]YY][.ss] ] +@end example + +@vindex LC_TIME +Invoking @command{date} with no @var{format} argument is equivalent to invoking +it with a default format that depends on the @env{LC_TIME} locale category. +In the default C locale, this format is @samp{'+%a %b %e %H:%M:%S %Z %Y'}, +so the output looks like @samp{Thu Mar @ 3 13:47:51 PST 2005}. + +@vindex TZ +Normally, @command{date} uses the time zone rules indicated by the +@env{TZ} environment variable, or the system default rules if @env{TZ} +is not set. @xref{TZ Variable,, Specifying the Time Zone with +@env{TZ}, libc, The GNU C Library}. + +@findex strftime @r{and @command{date}} +@cindex time formats +@cindex formatting times +If given an argument that starts with a @samp{+}, @command{date} prints the +current date and time (or the date and time specified by the +@option{--date} option, see below) in the format defined by that argument, +which is similar to that of the @code{strftime} function. Except for +conversion specifiers, which start with @samp{%}, characters in the +format string are printed unchanged. The conversion specifiers are +described below. + +@exitstatus + +@menu +* 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. +* Examples of date:: Examples. +@end menu + +@node Time conversion specifiers +@subsection Time conversion specifiers + +@cindex time conversion specifiers +@cindex conversion specifiers, time + +@command{date} conversion specifiers related to times. + +@table @samp +@item %H +hour (@samp{00}@dots{}@samp{23}) +@item %I +hour (@samp{01}@dots{}@samp{12}) +@item %k +hour (@samp{ 0}@dots{}@samp{23}). +This is a @acronym{GNU} extension. +@item %l +hour (@samp{ 1}@dots{}@samp{12}). +This is a @acronym{GNU} extension. +@item %M +minute (@samp{00}@dots{}@samp{59}) +@item %N +nanoseconds (@samp{000000000}@dots{}@samp{999999999}). +This is a @acronym{GNU} extension. +@item %p +locale's equivalent of either @samp{AM} or @samp{PM}; +blank in many locales. +Noon is treated as @samp{PM} and midnight as @samp{AM}. +@item %P +like @samp{%p}, except lower case. +This is a @acronym{GNU} extension. +@item %r +locale's 12-hour clock time (e.g., @samp{11:11:04 PM}) +@item %R +24-hour hour and minute. Same as @samp{%H:%M}. +This is a @acronym{GNU} extension. +@item %s +@cindex epoch, seconds since +@cindex seconds since the epoch +@cindex beginning of time +seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC. +Leap seconds are not counted unless leap second support is available. +@xref{%s-examples}, for examples. +This is a @acronym{GNU} extension. +@item %S +second (@samp{00}@dots{}@samp{60}). +This may be @samp{60} if leap seconds are supported. +@item %T +24-hour hour, minute, and second. Same as @samp{%H:%M:%S}. +@item %X +locale's time representation (e.g., @samp{23:13:48}) +@item %z +@w{@acronym{RFC} 2822/@acronym{ISO} 8601} style numeric time zone +(e.g., @samp{-0600} or @samp{+0530}), or nothing 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 @env{TZ} environment variable. +The time (and optionally, the time zone rules) can be overridden +by the @option{--date} option. +This is a @acronym{GNU} extension. +@item %:z +@w{@acronym{RFC} 3339/@acronym{ISO} 8601} style numeric time zone with +@samp{:} (e.g., @samp{-06:00} or @samp{+05:30}), or nothing if no time +zone is determinable. +This is a @acronym{GNU} extension. +@item %::z +Numeric time zone to the nearest second with @samp{:} (e.g., +@samp{-06:00:00} or @samp{+05:30:00}), or nothing if no time zone is +determinable. +This is a @acronym{GNU} extension. +@item %:::z +Numeric time zone with @samp{:} using the minimum necessary precision +(e.g., @samp{-06}, @samp{+05:30}, or @samp{-04:56:02}), or nothing if +no time zone is determinable. +This is a @acronym{GNU} extension. +@item %Z +alphabetic time zone abbreviation (e.g., @samp{EDT}), or nothing if no +time zone is determinable. See @samp{%z} for how it is determined. +@end table + + +@node Date conversion specifiers +@subsection Date conversion specifiers + +@cindex date conversion specifiers +@cindex conversion specifiers, date + +@command{date} conversion specifiers related to dates. + +@table @samp +@item %a +locale's abbreviated weekday name (e.g., @samp{Sun}) +@item %A +locale's full weekday name, variable length (e.g., @samp{Sunday}) +@item %b +locale's abbreviated month name (e.g., @samp{Jan}) +@item %B +locale's full month name, variable length (e.g., @samp{January}) +@item %c +locale's date and time (e.g., @samp{Thu Mar @ 3 23:05:25 2005}) +@item %C +century. This is like @samp{%Y}, except the last two digits are omitted. +For example, it is @samp{20} if @samp{%Y} is @samp{2000}, +and is @samp{-0} if @samp{%Y} is @samp{-001}. +It is normally at least two characters, but it may be more. +@item %d +day of month (e.g., @samp{01}) +@item %D +date; same as @samp{%m/%d/%y} +@item %e +day of month, space padded; same as @samp{%_d} +@item %F +full date in @acronym{ISO} 8601 format; same as @samp{%Y-%m-%d}. +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@dots{}9999. +This is a @acronym{GNU} extension. +@item %g +year corresponding to the @acronym{ISO} week number, but without the century +(range @samp{00} through @samp{99}). This has the same format and value +as @samp{%y}, except that if the @acronym{ISO} week number (see +@samp{%V}) belongs +to the previous or next year, that year is used instead. +This is a @acronym{GNU} extension. +@item %G +year corresponding to the @acronym{ISO} week number. This has the +same format and value as @samp{%Y}, except that if the @acronym{ISO} +week number (see +@samp{%V}) belongs to the previous or next year, that year is used +instead. +It is normally useful only if @samp{%V} is also used; +for example, the format @samp{%G-%m-%d} is probably a mistake, +since it combines the ISO week number year with the conventional month and day. +This is a @acronym{GNU} extension. +@item %h +same as @samp{%b} +@item %j +day of year (@samp{001}@dots{}@samp{366}) +@item %m +month (@samp{01}@dots{}@samp{12}) +@item %u +day of week (@samp{1}@dots{}@samp{7}) with @samp{1} corresponding to Monday +@item %U +week number of year, with Sunday as the first day of the week +(@samp{00}@dots{}@samp{53}). +Days in a new year preceding the first Sunday are in week zero. +@item %V +@acronym{ISO} week number, that is, the +week number of year, with Monday as the first day of the week +(@samp{01}@dots{}@samp{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 @acronym{ISO} 8601 +standard.) +@item %w +day of week (@samp{0}@dots{}@samp{6}) with 0 corresponding to Sunday +@item %W +week number of year, with Monday as first day of week +(@samp{00}@dots{}@samp{53}). +Days in a new year preceding the first Monday are in week zero. +@item %x +locale's date representation (e.g., @samp{12/31/99}) +@item %y +last two digits of year (@samp{00}@dots{}@samp{99}) +@item %Y +year. This is normally at least four characters, but it may be more. +Year @samp{0000} precedes year @samp{0001}, and year @samp{-001} +precedes year @samp{0000}. +@end table + + +@node Literal conversion specifiers +@subsection Literal conversion specifiers + +@cindex literal conversion specifiers +@cindex conversion specifiers, literal + +@command{date} conversion specifiers that produce literal strings. + +@table @samp +@item %% +a literal % +@item %n +a newline +@item %t +a horizontal tab +@end table + + +@node Padding and other flags +@subsection Padding and other flags + +@cindex numeric field padding +@cindex padding of numeric fields +@cindex fields, padding numeric + +Unless otherwise specified, @command{date} normally pads numeric fields +with zeros, so that, for +example, numeric months are always output as two digits. +Seconds since the epoch are not padded, though, +since there is no natural width for them. + +As a @acronym{GNU} extension, @command{date} recognizes any of the +following optional flags after the @samp{%}: + +@table @samp +@item - +(hyphen) Do not pad the field; useful if the output is intended for +human consumption. +@item _ +(underscore) Pad with spaces; useful if you need a fixed +number of characters in the output, but zeros are too distracting. +@item 0 +(zero) Pad with zeros even if the conversion specifier +would normally pad with spaces. +@item ^ +Use upper case characters if possible. +@item # +Use opposite case characters if possible. +A field that is normally upper case becomes lower case, and vice versa. +@end table + +@noindent +Here are some examples of padding: + +@example +date +%d/%m -d "Feb 1" +@result{} 01/02 +date +%-d/%-m -d "Feb 1" +@result{} 1/2 +date +%_d/%_m -d "Feb 1" +@result{} 1/ 2 +@end example + +As a @acronym{GNU} extension, you can specify the field width +(after any flag, if present) as a decimal number. If the natural size of the +output is of the field has less than the specified number of characters, +the result is written right adjusted and padded to the given +size. For example, @samp{%9B} prints the right adjusted month name in +a field of width 9. + +An optional modifier can follow the optional flag and width +specification. The modifiers are: + +@table @samp +@item E +Use the locale's alternate representation for date and time. This +modifier applies to the @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X}, +@samp{%y} and @samp{%Y} conversion specifiers. In a Japanese locale, for +example, @samp{%Ex} might yield a date format based on the Japanese +Emperors' reigns. + +@item O +Use the locale's alternate numeric symbols for numbers. This modifier +applies only to numeric conversion specifiers. +@end table + +If the format supports the modifier but no alternate representation +is available, it is ignored. + + +@node Setting the time +@subsection Setting the time + +@cindex setting the time +@cindex time setting +@cindex appropriate privileges + +If given an argument that does not start with @samp{+}, @command{date} sets +the system clock to the date and time specified by that argument (as +described below). You must have appropriate privileges to set the +system clock. The @option{--date} and @option{--set} options may not be +used with such an argument. The @option{--universal} option may be used +with such an argument to indicate that the specified date and time are +relative to Coordinated Universal Time rather than to the local time +zone. + +The argument must consist entirely of digits, which have the following +meaning: + +@table @samp +@item MM +month +@item DD +day within month +@item hh +hour +@item mm +minute +@item CC +first two digits of year (optional) +@item YY +last two digits of year (optional) +@item ss +second (optional) +@end table + +The @option{--set} option also sets the system clock; see the next section. + + +@node Options for date +@subsection Options for @command{date} + +@cindex @command{date} options +@cindex options for @command{date} + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -d @var{datestr} +@itemx --date=@var{datestr} +@opindex -d +@opindex --date +@cindex parsing date strings +@cindex date strings, parsing +@cindex arbitrary date strings, parsing +@opindex yesterday +@opindex tomorrow +@opindex next @var{day} +@opindex last @var{day} +Display the date and time specified in @var{datestr} instead of the +current date and time. @var{datestr} can be in almost any common +format. It can contain month names, time zones, @samp{am} and @samp{pm}, +@samp{yesterday}, etc. For example, @option{--date="2004-02-27 +14:19:13.489392193 +0530"} specifies the instant of time that is +489,392,193 nanoseconds after February 27, 2004 at 2:19:13 PM in a +time zone that is 5 hours and 30 minutes east of @acronym{UTC}. +@xref{Date input formats}. + +@item -f @var{datefile} +@itemx --file=@var{datefile} +@opindex -f +@opindex --file +Parse each line in @var{datefile} as with @option{-d} and display the +resulting date and time. If @var{datefile} is @samp{-}, use standard +input. This is useful when you have many dates to process, because the +system overhead of starting up the @command{date} executable many times can +be considerable. + +@item -r @var{file} +@itemx --reference=@var{file} +@opindex -r +@opindex --reference +Display the date and time of the last modification of @var{file}, +instead of the current date and time. + +@item -R +@itemx --rfc-822 +@itemx --rfc-2822 +@opindex -R +@opindex --rfc-822 +@opindex --rfc-2822 +Display the date and time using the format @samp{%a, %d %b %Y %H:%M:%S +%z}, evaluated in the C locale so abbreviations are always in English. +For example: + +@example +Fri, 09 Sep 2005 13:51:39 -0700 +@end example + +This format conforms to +@uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet +@acronym{RFCs} 2822} and +@uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, 822}, the +current and previous standards for Internet email. + +@item --rfc-3339=@var{timespec} +@opindex --rfc-3339=@var{timespec} +Display the date using a format specified by +@uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet +@acronym{RFC} 3339}. This is a subset of the @acronym{ISO} 8601 +format, except that it also permits applications to use a space rather +than a @samp{T} to separate dates from times. Unlike the other +standard formats, @acronym{RFC} 3339 format is always suitable as +input for the @option{--date} (@option{-d}) and @option{--file} +(@option{-f}) options, regardless of the current locale. + +The argument @var{timespec} specifies how much of the time to include. +It can be one of the following: + +@table @samp +@item date +Print just the full-date, e.g., @samp{2005-09-14}. +This is equivalent to the format @samp{%Y-%m-%d}. + +@item seconds +Print the full-date and full-time separated by a space, e.g., +@samp{2005-09-14 00:56:06+05:30}. The output ends with a numeric +time-offset; here the @samp{+05:30} means that local time is five +hours and thirty minutes east of @acronym{UTC}. This is equivalent to +the format @samp{%Y-%m-%d %H:%M:%S%:z}. + +@item ns +Like @samp{seconds}, but also print nanoseconds, e.g., +@samp{2005-09-14 00:56:06.998458565+05:30}. +This is equivalent to the format @samp{%Y-%m-%d %H:%M:%S.%N%:z}. + +@end table + +@item -s @var{datestr} +@itemx --set=@var{datestr} +@opindex -s +@opindex --set +Set the date and time to @var{datestr}. See @option{-d} above. + +@item -u +@itemx --utc +@itemx --universal +@opindex -u +@opindex --utc +@opindex --universal +@cindex Coordinated Universal Time +@cindex UTC +@cindex Greenwich Mean Time +@cindex GMT +@vindex TZ +Use Coordinated Universal Time (@acronym{UTC}) by operating as if the +@env{TZ} environment variable were set to the string @samp{UTC0}. +Coordinated +Universal Time is often called ``Greenwich Mean Time'' (@sc{gmt}) for +historical reasons. +@end table + + +@node Examples of date +@subsection Examples of @command{date} + +@cindex examples of @command{date} + +Here are a few examples. Also see the documentation for the @option{-d} +option in the previous section. + +@itemize @bullet + +@item +To print the date of the day before yesterday: + +@example +date --date='2 days ago' +@end example + +@item +To print the date of the day three months and one day hence: + +@example +date --date='3 months 1 day' +@end example + +@item +To print the day of year of Christmas in the current year: + +@example +date --date='25 Dec' +%j +@end example + +@item +To print the current full month name and the day of the month: + +@example +date '+%B %d' +@end example + +But this may not be what you want because for the first nine days of +the month, the @samp{%d} expands to a zero-padded two-digit field, +for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}. + +@item +To print a date without the leading zero for one-digit days +of the month, you can use the (@acronym{GNU} extension) +@samp{-} flag to suppress +the padding altogether: + +@example +date -d 1may '+%B %-d +@end example + +@item +To print the current date and time in the format required by many +non-@acronym{GNU} versions of @command{date} when setting the system clock: + +@example +date +%m%d%H%M%Y.%S +@end example + +@item +To set the system clock forward by two minutes: + +@example +date --set='+2 minutes' +@end example + +@item +To print the date in @acronym{RFC} 2822 format, +use @samp{date --rfc-2822}. Here is some example output: + +@example +Fri, 09 Sep 2005 13:51:39 -0700 +@end example + +@anchor{%s-examples} +@item +To convert a date string to the number of seconds since the epoch +(which is 1970-01-01 00:00:00 UTC), use the @option{--date} option with +the @samp{%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: + +@example +date --date='1970-01-01 00:02:00 +0000' +%s +120 +@end example + +If you do not specify time zone information in the date string, +@command{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: + +@example +# local time zone used +date --date='1970-01-01 00:02:00' +%s +18120 +@end example + +@item +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 @samp{946684800} and casually note ``Oh, that's the first second +of the year 2000 in Greenwich, England.'' + +@example +date --date='2000-01-01 UTC' +%s +946684800 +@end example + +An alternative is to use the @option{--utc} (@option{-u}) option. +Then you may omit @samp{UTC} from the date string. Although this +produces the same result for @samp{%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 @samp{%z}. + +@example +date -u --date=2000-01-01 +%s +946684800 +@end example + +To convert such an unwieldy number of seconds back to +a more readable form, use a command like this: + +@smallexample +# local time zone used +date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z" +1999-12-31 19:00:00 -0500 +@end smallexample + +Or if you do not mind depending on the @samp{@@} feature present since +coreutils 5.3.0, you could shorten this to: + +@smallexample +date -d @@946684800 +"%F %T %z" +1999-12-31 19:00:00 -0500 +@end smallexample + +Often it is better to output UTC-relative date and time: + +@smallexample +date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z" +2000-01-01 00:00:00 +0000 +@end smallexample + +@end itemize + + +@node uname invocation +@section @command{uname}: Print system information + +@pindex uname +@cindex print system information +@cindex system information, printing + +@command{uname} prints information about the machine and operating system +it is run on. If no options are given, @command{uname} acts as if the +@option{-s} option were given. Synopsis: + +@example +uname [@var{option}]@dots{} +@end example + +If multiple options or @option{-a} are given, the selected information is +printed in this order: + +@example +@var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version} +@var{machine} @var{processor} @var{hardware-platform} @var{operating-system} +@end example + +The information may contain internal spaces, so such output cannot be +parsed reliably. In the following example, @var{release} is +@samp{2.2.18ss.e820-bda652a #4 SMP Tue Jun 5 11:24:08 PDT 2001}: + +@smallexample +uname -a +@result{} Linux dum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686 unknown unknown GNU/Linux +@end smallexample + + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp + +@item -a +@itemx --all +@opindex -a +@opindex --all +Print all of the below information, except omit the processor type +and the hardware platform name if they are unknown. + +@item -i +@itemx --hardware-platform +@opindex -i +@opindex --hardware-platform +@cindex implementation, hardware +@cindex hardware platform +@cindex platform, hardware +Print the hardware platform name +(sometimes called the hardware implementation). +Print @samp{unknown} if the kernel does not make this information +easily available, as is the case with Linux kernels. + +@item -m +@itemx --machine +@opindex -m +@opindex --machine +@cindex machine type +@cindex hardware class +@cindex hardware type +Print the machine hardware name (sometimes called the hardware class +or hardware type). + +@item -n +@itemx --nodename +@opindex -n +@opindex --nodename +@cindex hostname +@cindex node name +@cindex network node name +Print the network node hostname. + +@item -p +@itemx --processor +@opindex -p +@opindex --processor +@cindex host processor type +Print the processor type (sometimes called the instruction set +architecture or ISA). +Print @samp{unknown} if the kernel does not make this information +easily available, as is the case with Linux kernels. + +@item -o +@itemx --operating-system +@opindex -o +@opindex --operating-system +@cindex operating system name +Print the name of the operating system. + +@item -r +@itemx --kernel-release +@opindex -r +@opindex --kernel-release +@cindex kernel release +@cindex release of kernel +Print the kernel release. + +@item -s +@itemx --kernel-name +@opindex -s +@opindex --kernel-name +@cindex kernel name +@cindex name of kernel +Print the kernel name. +@acronym{POSIX} 1003.1-2001 (@pxref{Standards conformance}) calls this +``the implementation of the operating system'', because the +@acronym{POSIX} specification itself has no notion of ``kernel''. +The kernel name might be the same as the operating system name printed +by the @option{-o} or @option{--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. + +@item -v +@itemx --kernel-version +@opindex -v +@opindex --kernel-version +@cindex kernel version +@cindex version of kernel +Print the kernel version. + +@end table + +@exitstatus + + +@node hostname invocation +@section @command{hostname}: Print or set system name + +@pindex hostname +@cindex setting the hostname +@cindex printing the hostname +@cindex system name, printing +@cindex appropriate privileges + +With no arguments, @command{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: + +@example +hostname [@var{name}] +@end example + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node hostid invocation +@section @command{hostid}: Print numeric host identifier. + +@pindex hostid +@cindex printing the host identifier + +@command{hostid} prints the numeric identifier of the current host +in hexadecimal. This command accepts no arguments. +The only options are @option{--help} and @option{--version}. +@xref{Common options}. + +For example, here's what it prints on one system I use: + +@example +$ hostid +1bac013d +@end example + +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. + +@exitstatus + + +@node Modified command invocation +@chapter Modified command invocation + +@cindex modified command invocation +@cindex invocation of commands, modified +@cindex commands for invoking other commands + +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. +* su invocation:: Modify user and group ID. +@end menu + + +@node chroot invocation +@section @command{chroot}: Run a command with a different root directory + +@pindex chroot +@cindex running a program in a specified root directory +@cindex root directory, running a program in a specified + +@command{chroot} runs a command with a specified root directory. +On many systems, only the super-user can do this. +Synopses: + +@example +chroot @var{newroot} [@var{command} [@var{args}]@dots{}] +chroot @var{option} +@end example + +Ordinarily, file names are looked up starting at the root of the +directory structure, i.e., @file{/}. @command{chroot} changes the root to +the directory @var{newroot} (which must exist) and then runs +@var{command} with optional @var{args}. If @var{command} is not +specified, the default is the value of the @env{SHELL} environment +variable or @command{/bin/sh} if not set, invoked with the @option{-i} option. +@var{command} must not be a special built-in utility +(@pxref{Special built-in utilities}). + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. Options must precede operands. + +Here are a few tips to help avoid common problems in using chroot. +To start with a simple example, make @var{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 @command{ls} executable, +and put it in @file{/tmp/empty}, you can run this command as root: + +@example +$ chroot /tmp/empty /ls -Rl / +@end example + +Then you'll see output like this: + +@example +/: +total 1023 +-rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls +@end example + +If you want to use a dynamically linked executable, say @command{bash}, +then first run @samp{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. + +@cindex exit status of @command{chroot} +Exit status: + +@display +1 if @command{chroot} itself fails +126 if @var{command} is found but cannot be invoked +127 if @var{command} cannot be found +the exit status of @var{command} otherwise +@end display + + +@node env invocation +@section @command{env}: Run a command in a modified environment + +@pindex env +@cindex environment, running a program in a modified +@cindex modified environment, running a program in a +@cindex running a program in a modified environment + +@command{env} runs a command with a modified environment. Synopses: + +@example +env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c +[@var{command} [@var{args}]@dots{}] +env +@end example + +Operands of the form @samp{@var{variable}=@var{value}} set +the environment variable @var{variable} to value @var{value}. +@var{value} may be empty (@samp{@var{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 @samp{=} and the null character (@acronym{ASCII} +@sc{nul}). However, it is wise to limit yourself to names that +consist solely of underscores, digits, and @acronym{ASCII} letters, +and that begin with a non-digit, as applications like the shell do not +work well with other names. + +@vindex PATH +The first operand that does not contain the character @samp{=} +specifies the program to invoke; it is +searched for according to the @env{PATH} environment variable. Any +remaining arguments are passed as arguments to that program. +The program should not be a special built-in utility +(@pxref{Special built-in utilities}). + +@cindex environment, printing + +If no command name is specified following the environment +specifications, the resulting environment is printed. This is like +specifying the @command{printenv} program. + +The program accepts the following options. Also see @ref{Common options}. +Options must precede operands. + +@table @samp + +@item -u @var{name} +@itemx --unset=@var{name} +@opindex -u +@opindex --unset +Remove variable @var{name} from the environment, if it was in the +environment. + +@item - +@itemx -i +@itemx --ignore-environment +@opindex - +@opindex -i +@opindex --ignore-environment +Start with an empty environment, ignoring the inherited environment. + +@end table + +@cindex exit status of @command{env} +Exit status: + +@display +0 if no @var{command} is specified and the environment is output +1 if @command{env} itself fails +126 if @var{command} is found but cannot be invoked +127 if @var{command} cannot be found +the exit status of @var{command} otherwise +@end display + + +@node nice invocation +@section @command{nice}: Run a command with modified niceness + +@pindex nice +@cindex niceness +@cindex scheduling, affecting +@cindex appropriate privileges + +@command{nice} prints or modifies a process's @dfn{niceness}, +a parameter that affects whether the process is scheduled favorably. +Synopsis: + +@example +nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}] +@end example + +If no arguments are given, @command{nice} prints the current niceness. +Otherwise, @command{nice} runs the given @var{command} with its +niceness adjusted. By default, its niceness is incremented by 10. + +Nicenesses range at least from @minus{}20 (resulting in the most +favorable scheduling) through 19 (the least favorable). Some systems +may have a wider range of nicenesses; 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, @acronym{POSIX} defines the behavior of @command{nice} in +terms of a @dfn{nice value}, which is the nonnegative difference +between a niceness and the minimum niceness. Though @command{nice} +conforms to @acronym{POSIX}, its documentation and diagnostics use the +term ``niceness'' for compatibility with historical practice. + +@var{command} must not be a special built-in utility (@pxref{Special +built-in utilities}). + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because many shells have a built-in @command{nice} command, using an +unadorned @command{nice} in a script or interactively may get you +different functionality than that described here. + +The program accepts the following option. Also see @ref{Common options}. +Options must precede operands. + +@table @samp +@item -n @var{adjustment} +@itemx --adjustment=@var{adjustment} +@opindex -n +@opindex --adjustment +Add @var{adjustment} instead of 10 to the command's niceness. If +@var{adjustment} is negative and you lack appropriate privileges, +@command{nice} issues a warning but otherwise acts as if you specified +a zero adjustment. + +For compatibility @command{nice} also supports an obsolete +option syntax @option{-@var{adjustment}}. New scripts should use +@option{-n @var{adjustment}} instead. + +@end table + +@cindex exit status of @command{nice} +Exit status: + +@display +0 if no @var{command} is specified and the niceness is output +1 if @command{nice} itself fails +126 if @var{command} is found but cannot be invoked +127 if @var{command} cannot be found +the exit status of @var{command} otherwise +@end display + +It is sometimes useful to run a non-interactive program with reduced niceness. + +@example +$ nice factor 4611686018427387903 +@end example + +Since @command{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 @samp{10}: + +@example +$ nice +0 +$ nice nice +10 +$ nice -n 10 nice +10 +@end example + +The @var{adjustment} is relative to the current niceness. In the +next example, the first @command{nice} invocation runs the second one +with niceness 10, and it in turn runs the final one with a niceness +that is 3 more: + +@example +$ nice nice -n 3 nice +13 +@end example + +Specifying a niceness larger than the supported range +is the same as specifying the maximum supported value: + +@example +$ nice -n 10000000000 nice +19 +@end example + +Only a privileged user may run a process with lower niceness: + +@example +$ nice -n -1 nice +nice: cannot set niceness: Permission denied +0 +$ sudo nice -n -1 nice +-1 +@end example + + +@node nohup invocation +@section @command{nohup}: Run a command immune to hangups + +@pindex nohup +@cindex hangups, immunity to +@cindex immunity to hangups +@cindex logging out and continuing to run + +@flindex nohup.out +@command{nohup} runs the given @var{command} with hangup signals ignored, +so that the command can continue running in the background after you log +out. Synopsis: + +@example +nohup @var{command} [@var{arg}]@dots{} +@end example + +If standard input is a terminal, it is redirected from +@file{/dev/null} so that terminal sessions do not mistakenly consider +the terminal to be used by the command. This is a @acronym{GNU} +extension; programs intended to be portable to non-@acronym{GNU} hosts +should use @samp{nohup @var{command} [@var{arg}]@dots{} </dev/null} +instead. + +@flindex nohup.out +If standard output is a terminal, the command's standard output is appended +to the file @file{nohup.out}; if that cannot be written to, it is appended +to the file @file{$HOME/nohup.out}; and if that cannot be written to, the +command is not run. +Any @file{nohup.out} or @file{$HOME/nohup.out} file created by +@command{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 @file{nohup.out} or +@file{$HOME/nohup.out} as above. + +@command{nohup} does not automatically put the command it runs in the +background; you must do that explicitly, by ending the command line +with an @samp{&}. Also, @command{nohup} does not alter the +niceness of @var{command}; use @command{nice} for that, +e.g., @samp{nohup nice @var{command}}. + +@var{command} must not be a special built-in utility (@pxref{Special +built-in utilities}). + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. Options must precede operands. + +@cindex exit status of @command{nohup} +Exit status: + +@display +126 if @var{command} is found but cannot be invoked +127 if @command{nohup} itself fails or if @var{command} cannot be found +the exit status of @var{command} otherwise +@end display + + +@node su invocation +@section @command{su}: Run a command with substitute user and group ID + +@pindex su +@cindex substitute user and group IDs +@cindex user ID, switching +@cindex super-user, becoming +@cindex root, becoming + +@command{su} allows one user to temporarily become another user. It runs a +command (often an interactive shell) with the real and effective user +ID, group ID, and supplemental groups of a given @var{user}. Synopsis: + +@example +su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}] +@end example + +@cindex passwd entry, and @command{su} shell +@flindex /bin/sh +@flindex /etc/passwd +If no @var{user} is given, the default is @code{root}, the super-user. +The shell to use is taken from @var{user}'s @code{passwd} entry, or +@file{/bin/sh} if none is specified there. If @var{user} has a +password, @command{su} prompts for the password unless run by a user with +effective user ID of zero (the super-user). + +@vindex HOME +@vindex SHELL +@vindex USER +@vindex LOGNAME +@cindex login shell +By default, @command{su} does not change the current directory. +It sets the environment variables @env{HOME} and @env{SHELL} +from the password entry for @var{user}, and if @var{user} is not +the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}. +By default, the shell is not a login shell. + +Any additional @var{arg}s are passed as additional arguments to the +shell. + +@cindex @option{-su} +GNU @command{su} does not treat @file{/bin/sh} or any other shells specially +(e.g., by setting @code{argv[0]} to @option{-su}, passing @option{-c} only +to certain shells, etc.). + +@findex syslog +@command{su} can optionally be compiled to use @code{syslog} to report +failed, and optionally successful, @command{su} attempts. (If the system +supports @code{syslog}.) However, GNU @command{su} does not check if the +user is a member of the @code{wheel} group; see below. + +The program accepts the following options. Also see @ref{Common options}. + +@table @samp +@item -c @var{command} +@itemx --command=@var{command} +@opindex -c +@opindex --command +Pass @var{command}, a single command line to run, to the shell with +a @option{-c} option instead of starting an interactive shell. + +@item -f +@itemx --fast +@opindex -f +@opindex --fast +@flindex .cshrc +@cindex file name pattern expansion, disabled +@cindex globbing, disabled +Pass the @option{-f} option to the shell. This probably only makes sense +if the shell run is @command{csh} or @command{tcsh}, for which the @option{-f} +option prevents reading the startup file (@file{.cshrc}). With +Bourne-like shells, the @option{-f} option disables file name pattern +expansion (globbing), which is not likely to be useful. + +@item - +@itemx -l +@itemx --login +@opindex - +@opindex -l +@opindex --login +@c other variables already indexed above +@vindex TERM +@vindex PATH +@cindex login shell, creating +Make the shell a login shell. This means the following. Unset all +environment variables except @env{TERM}, @env{HOME}, and @env{SHELL} +(which are set as described above), and @env{USER} and @env{LOGNAME} +(which are set, even for the super-user, as described above), and set +@env{PATH} to a compiled-in default value. Change to @var{user}'s home +directory. Prepend @samp{-} to the shell's name, intended to make it +read its login startup file(s). + +@item -m +@itemx -p +@itemx --preserve-environment +@opindex -m +@opindex -p +@opindex --preserve-environment +@cindex environment, preserving +@flindex /etc/shells +@cindex restricted shell +Do not change the environment variables @env{HOME}, @env{USER}, +@env{LOGNAME}, or @env{SHELL}. Run the shell given in the environment +variable @env{SHELL} instead of the shell from @var{user}'s passwd +entry, unless the user running @command{su} is not the super-user and +@var{user}'s shell is restricted. A @dfn{restricted shell} is one that +is not listed in the file @file{/etc/shells}, or in a compiled-in list +if that file does not exist. Parts of what this option does can be +overridden by @option{--login} and @option{--shell}. + +@item -s @var{shell} +@itemx --shell=@var{shell} +@opindex -s +@opindex --shell +Run @var{shell} instead of the shell from @var{user}'s passwd entry, +unless the user running @command{su} is not the super-user and @var{user}'s +shell is restricted (see @option{-m} just above). + +@end table + +@cindex exit status of @command{su} +Exit status: + +@display +1 if @command{su} itself fails +126 if subshell is found but cannot be invoked +127 if subshell cannot be found +the exit status of the subshell otherwise +@end display + +@cindex wheel group, not supported +@cindex group wheel, not supported +@cindex fascism +@subsection Why GNU @command{su} does not support the @samp{wheel} group + +(This section is by Richard Stallman.) + +@cindex Twenex +@cindex MIT AI lab +Sometimes a few of the users try to hold total power over all the +rest. For example, in 1984, a few users at the MIT AI lab decided to +seize power by changing the operator password on the Twenex system and +keeping it secret from everyone else. (I was able to thwart this coup +and give power back to the users by patching the kernel, but I +wouldn't know how to do that in Unix.) + +However, occasionally the rulers do tell someone. Under the usual +@command{su} mechanism, once someone learns the root password who +sympathizes with the ordinary users, he or she can tell the rest. The +``wheel group'' feature would make this impossible, and thus cement the +power of the rulers. + +I'm on the side of the masses, not that of the rulers. If you are +used to supporting the bosses and sysadmins in whatever they do, you +might find this idea strange at first. + + +@node Process control +@chapter Process control + +@cindex processes, commands for controlling +@cindex commands for controlling processes + +@menu +* kill invocation:: Sending a signal to processes. +@end menu + + +@node kill invocation +@section @command{kill}: Send a signal to processes + +@pindex kill +@cindex send a signal to processes + +The @command{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: + +@example +kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{} +kill [-l | --list | -t | --table] [@var{signal}]@dots{} +@end example + +The first form of the @command{kill} command sends a signal to all +@var{pid} arguments. The default signal to send if none is specified +is @samp{TERM}. The special signal number @samp{0} does not denote a +valid signal, but can be used to test whether the @var{pid} arguments +specify processes to which a signal could be sent. + +If @var{pid} is positive, the signal is sent to the process with the +process ID @var{pid}. If @var{pid} is zero, the signal is sent to all +processes in the process group of the current process. If @var{pid} +is @minus{}1, the signal is sent to all processes for which the user has +permission to send a signal. If @var{pid} is less than @minus{}1, the signal +is sent to all processes in the process group that equals the absolute +value of @var{pid}. + +If @var{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 @var{PID} argument is desired as the first one, it +should be preceded by @option{--}. However, as a common extension to +@acronym{POSIX}, @option{--} is not required with @samp{kill +-@var{signal} -@var{pid}}. The following commands are equivalent: + +@example +kill -15 -1 +kill -TERM -1 +kill -s TERM -- -1 +kill -- -1 +@end example + +The first form of the @command{kill} command succeeds if every @var{pid} +argument specifies at least one process that the signal was sent to. + +The second form of the @command{kill} command lists signal information. +Either the @option{-l} or @option{--list} option, or the @option{-t} +or @option{--table} option must be specified. Without any +@var{signal} argument, all supported signals are listed. The output +of @option{-l} or @option{--list} is a list of the signal names, one +per line; if @var{signal} is already a name, the signal number is +printed instead. The output of @option{-t} or @option{--table} is a +table of signal numbers, names, and descriptions. This form of the +@command{kill} command succeeds if all @var{signal} arguments are valid +and if there is no output error. + +The @command{kill} command also supports the @option{--help} and +@option{--version} options. @xref{Common options}. + +A @var{signal} may be a signal name like @samp{HUP}, or a signal +number like @samp{1}, or an exit status of a process terminated by the +signal. A signal name can be given in canonical form or prefixed by +@samp{SIG}. The case of the letters is ignored, except for the +@option{-@var{signal}} option which must use upper case to avoid +ambiguity with lower case option letters. The following signal names +and numbers are supported on all @acronym{POSIX} compliant systems: + +@table @samp +@item HUP +1. Hangup. +@item INT +2. Terminal interrupt. +@item QUIT +3. Terminal quit. +@item ABRT +6. Process abort. +@item KILL +9. Kill (cannot be caught or ignored). +@item ALRM +14. Alarm Clock. +@item TERM +15. Termination. +@end table + +@noindent +Other supported signal names have system-dependent corresponding +numbers. All systems conforming to @acronym{POSIX} 1003.1-2001 also +support the following signals: + +@table @samp +@item BUS +Access to an undefined portion of a memory object. +@item CHLD +Child process terminated, stopped, or continued. +@item CONT +Continue executing, if stopped. +@item FPE +Erroneous arithmetic operation. +@item ILL +Illegal Instruction. +@item PIPE +Write on a pipe with no one to read it. +@item SEGV +Invalid memory reference. +@item STOP +Stop executing (cannot be caught or ignored). +@item TSTP +Terminal stop. +@item TTIN +Background process attempting read. +@item TTOU +Background process attempting write. +@item URG +High bandwidth data is available at a socket. +@item USR1 +User-defined signal 1. +@item USR2 +User-defined signal 2. +@end table + +@noindent +@acronym{POSIX} 1003.1-2001 systems that support the @acronym{XSI} extension +also support the following signals: + +@table @samp +@item POLL +Pollable event. +@item PROF +Profiling timer expired. +@item SYS +Bad system call. +@item TRAP +Trace/breakpoint trap. +@item VTALRM +Virtual timer expired. +@item XCPU +CPU time limit exceeded. +@item XFSZ +File size limit exceeded. +@end table + +@noindent +@acronym{POSIX} 1003.1-2001 systems that support the @acronym{XRT} extension +also support at least eight real-time signals called @samp{RTMIN}, +@samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX}. + + +@node Delaying +@chapter Delaying + +@cindex delaying commands +@cindex commands for delaying + +@c Perhaps @command{wait} or other commands should be described here also? + +@menu +* sleep invocation:: Delay for a specified time. +@end menu + + +@node sleep invocation +@section @command{sleep}: Delay for a specified time + +@pindex sleep +@cindex delay for a specified time + +@command{sleep} pauses for an amount of time specified by the sum of +the values of the command line arguments. +Synopsis: + +@example +sleep @var{number}[smhd]@dots{} +@end example + +@cindex time units +Each argument is a number followed by an optional unit; the default +is seconds. The units are: + +@table @samp +@item s +seconds +@item m +minutes +@item h +hours +@item d +days +@end table + +Historical implementations of @command{sleep} have required that +@var{number} be an integer, and only accepted a single argument +without a suffix. However, GNU @command{sleep} accepts +arbitrary floating point numbers (using a period before any fractional +digits). + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +@exitstatus + + +@node Numeric operations +@chapter Numeric operations + +@cindex numeric operations +These programs do numerically-related operations. + +@menu +* factor invocation:: Show factors of numbers. +* seq invocation:: Print sequences of numbers. +@end menu + + +@node factor invocation +@section @command{factor}: Print prime factors + +@pindex factor +@cindex prime factors + +@command{factor} prints prime factors. Synopses: + +@example +factor [@var{number}]@dots{} +factor @var{option} +@end example + +If no @var{number} is specified on the command line, @command{factor} reads +numbers from standard input, delimited by newlines, tabs, or spaces. + +The only options are @option{--help} and @option{--version}. @xref{Common +options}. + +The algorithm it uses is not very sophisticated, so for some inputs +@command{factor} runs for a long time. The hardest numbers to factor are +the products of large primes. Factoring the product of the two largest 32-bit +prime numbers takes about 80 seconds of CPU time on a 1.6 GHz Athlon. + +@example +$ p=`echo '4294967279 * 4294967291'|bc` +$ factor $p +18446743979220271189: 4294967279 4294967291 +@end example + +Similarly, it takes about 80 seconds for GNU factor (from coreutils-5.1.2) +to ``factor'' the largest 64-bit prime: + +@example +$ factor 18446744073709551557 + 18446744073709551557: 18446744073709551557 +@end example + +In contrast, @command{factor} factors the largest 64-bit number in just +over a tenth of a second: + +@example +$ factor `echo '2^64-1'|bc` +18446744073709551615: 3 5 17 257 641 65537 6700417 +@end example + +@exitstatus + + +@node seq invocation +@section @command{seq}: Print numeric sequences + +@pindex seq +@cindex numeric sequences +@cindex sequence of numbers + +@command{seq} prints a sequence of numbers to standard output. Synopses: + +@example +seq [@var{option}]@dots{} @var{last} +seq [@var{option}]@dots{} @var{first} @var{last} +seq [@var{option}]@dots{} @var{first} @var{increment} @var{last} +@end example + +@command{seq} prints the numbers from @var{first} to @var{last} by +@var{increment}. By default, each number is printed on a separate line. +When @var{increment} is not specified, it defaults to @samp{1}, +even when @var{first} is larger than @var{last}. +@var{first} also defaults to @samp{1}. So @code{seq 1} prints +@samp{1}, but @code{seq 0} and @code{seq 10 5} produce no output. +Floating-point numbers +may be specified (using a period before any fractional digits). + +The program accepts the following options. Also see @ref{Common options}. +Options must precede operands. + +@table @samp +@item -f @var{format} +@itemx --format=@var{format} +@opindex -f @var{format} +@opindex --format=@var{format} +@cindex formatting of numbers in @command{seq} +Print all numbers using @var{format}. +@var{format} must contain exactly one of the @samp{printf}-style +floating point conversion specifications @samp{%a}, @samp{%e}, +@samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F}, @samp{%G}. +The @samp{%} may be followed by zero or more flags taken from the set +@samp{-+#0 '}, then an optional width containing one or more digits, +then an optional precision consisting of a @samp{.} followed by zero +or more digits. @var{format} may also contain any number of @samp{%%} +conversion specifications. All conversion specifications have the +same meaning as with @samp{printf}. + +The default format is derived from @var{first}, @var{step}, and +@var{last}. If these all use a fixed point decimal representation, +the default format is @samp{%.@var{p}f}, where @var{p} is the minimum +precision that can represent the output numbers exactly. Otherwise, +the default format is @samp{%g}. + +@item -s @var{string} +@itemx --separator=@var{string} +@cindex separator for numbers in @command{seq} +Separate numbers with @var{string}; default is a newline. +The output always terminates with a newline. + +@item -w +@itemx --equal-width +Print all numbers with the same width, by padding with leading zeros. +@var{first}, @var{step}, and @var{last} should all use a fixed point +decimal representation. +(To have other kinds of padding, use @option{--format}). + +@end table + +You can get finer-grained control over output with @option{-f}: + +@example +$ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6 +(-9.00E+05) +( 2.00E+05) +( 1.30E+06) +@end example + +If you want hexadecimal integer output, you can use @command{printf} +to perform the conversion: + +@example +$ printf '%x\n' `seq 1048575 1024 1050623` +fffff +1003ff +1007ff +@end example + +For very long lists of numbers, use xargs to avoid +system limitations on the length of an argument list: + +@example +$ seq 1000000 | xargs printf '%x\n' | tail -n 3 +f423e +f423f +f4240 +@end example + +To generate octal output, use the printf @code{%o} format instead +of @code{%x}. + +On most systems, seq can produce whole-number output for values up to +at least @code{2^53}. Larger integers are approximated. The details +differ depending on your floating-point implementation, but a common +case is that @command{seq} works with integers through @code{2^64}, +and larger integers may not be numerically correct: + +@example +$ seq 18446744073709551616 1 18446744073709551618 +18446744073709551616 +18446744073709551616 +18446744073709551618 +@end example + +Be careful when using @command{seq} with a fractional @var{increment}; +otherwise you may see surprising results. Most people would expect to +see @code{0.000003} printed as the last number in this example: + +@example +$ seq -s ' ' 0 0.000001 0.000003 +0.000000 0.000001 0.000002 +@end example + +But that doesn't happen on many systems because @command{seq} is +implemented using binary floating point arithmetic (via the C +@code{long double} type)---which means decimal fractions like @code{0.000001} +cannot be represented exactly. That in turn means some nonintuitive +conditions like @w{@code{0.000001 * 3 > 0.000003}} will end up being true. + +To work around that in the above example, use a slightly larger number as +the @var{last} value: + +@example +$ seq -s ' ' 0 0.000001 0.0000031 +0.000000 0.000001 0.000002 0.000003 +@end example + +In general, when using an @var{increment} with a fractional part, where +(@var{last} - @var{first}) / @var{increment} is (mathematically) a whole +number, specify a slightly larger (or smaller, if @var{increment} is negative) +value for @var{last} to ensure that @var{last} is the final value printed +by seq. + +@exitstatus + + +@node File permissions +@chapter File permissions +@include perm.texi + +@include getdate.texi + +@c What's GNU? +@c Arnold Robbins +@node Opening the software toolbox +@chapter Opening the Software Toolbox + +An earlier version of this chapter appeared in +@uref{http://www.linuxjournal.com/article.php?sid=2762, the +@cite{What's GNU?} column of @cite{Linux Journal}, 2 (June, 1994)}. +It was written by Arnold Robbins. + +@menu +* Toolbox introduction:: Toolbox introduction +* I/O redirection:: I/O redirection +* The who command:: The @command{who} command +* The cut command:: The @command{cut} command +* The sort command:: The @command{sort} command +* The uniq command:: The @command{uniq} command +* Putting the tools together:: Putting the tools together +@end menu + + +@node Toolbox introduction +@unnumberedsec 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 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 + +@enumerate a +@item +difficult to write, + +@item +difficult to maintain and +debug, and + +@item +difficult to extend to meet new situations. +@end enumerate + +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.) + +@node I/O redirection +@unnumberedsec 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 disk 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 @dfn{filters}, by analogy to filters in a +water pipeline. + +With the Unix shell, it's very easy to set up data pipelines: + +@smallexample +program_to_create_data | filter1 | ... | filterN > final.pretty.data +@end smallexample + +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 @command{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 @command{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 @acronym{ASCII} @sc{lf} (Line Feed) character, +conventionally called a ``newline'' in the Unix literature. (This is +@code{'\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. + +@node The who command +@unnumberedsec The @command{who} Command + +The first program is the @command{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: + +@example +$ who +@print{} arnold console Jan 22 19:57 +@print{} miriam ttyp0 Jan 23 14:19(:0.0) +@print{} bill ttyp1 Jan 21 09:32(:0.0) +@print{} arnold ttyp2 Jan 23 20:48(:0.0) +@end example + +Here, the @samp{$} is the usual shell prompt, at which I typed @samp{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 @command{who} is nice, +but the data is not all that exciting. + +@node The cut command +@unnumberedsec The @command{cut} Command + +The next program we'll look at is the @command{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 @file{/etc/passwd} +file. The @file{/etc/passwd} file has seven fields, separated by +colons: + +@example +arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash +@end example + +To get the first and fifth fields, we would use @command{cut} like this: + +@example +$ cut -d: -f1,5 /etc/passwd +@print{} root:Operator +@dots{} +@print{} arnold:Arnold D. Robbins +@print{} miriam:Miriam A. Robbins +@dots{} +@end example + +With the @option{-c} option, @command{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: + +@c Is using cal ok? Looked at gcal, but I don't like it. +@example +$ cal | cut -c 3-5 +@print{}Mo +@print{} +@print{} 6 +@print{} 13 +@print{} 20 +@print{} 27 +@end example + +@node The sort command +@unnumberedsec The @command{sort} Command + +Next we'll look at the @command{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 @command{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. + + +@node The uniq command +@unnumberedsec The @command{uniq} Command + +Finally (at least for now), we'll look at the @command{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 @command{uniq} comes in. The @command{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 @option{-c} option, which prints each unique line, preceded +by a count of the number of times that line occurred in the input. + + +@node Putting the tools together +@unnumberedsec 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: + +@example +$ who | cut -c1-8 +@print{} arnold +@print{} miriam +@print{} bill +@print{} arnold +@end example + +Next, sort the list: + +@example +$ who | cut -c1-8 | sort +@print{} arnold +@print{} arnold +@print{} bill +@print{} miriam +@end example + +Finally, run the sorted list through @command{uniq}, to weed out duplicates: + +@example +$ who | cut -c1-8 | sort | uniq +@print{} arnold +@print{} bill +@print{} miriam +@end example + +The @command{sort} command actually has a @option{-u} option that does what +@command{uniq} does. However, @command{uniq} has other uses for which one +cannot substitute @samp{sort -u}. + +The administrator puts this pipeline into a shell script, and makes it available for +all the users on the system (@samp{#} is the system administrator, +or @code{root}, prompt): + +@example +# cat > /usr/local/bin/listusers +who | cut -c1-8 | sort | uniq +^D +# chmod +x /usr/local/bin/listusers +@end example + +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 +@emph{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 @command{tr} command, which stands for ``transliterate.'' +The @command{tr} command works on a character-by-character basis, changing +characters. Normally it is used for things like mapping upper case to +lower case: + +@example +$ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]' +@print{} this example has mixed case! +@end example + +There are several options of interest: + +@table @code +@item -c +work on the complement of the listed characters, i.e., +operations apply to characters not in the given set + +@item -d +delete characters in the first set from the output + +@item -s +squeeze repeated characters in the output into just one character. +@end table + +We will be using all three options in a moment. + +The other command we'll look at is @command{comm}. The @command{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 @option{-1}, @option{-2}, and +@option{-3} command line options @emph{omit} the respective columns. (This is +non-intuitive and takes a little getting used to.) For example: + +@example +$ cat f1 +@print{} 11111 +@print{} 22222 +@print{} 33333 +@print{} 44444 +$ cat f2 +@print{} 00000 +@print{} 22222 +@print{} 33333 +@print{} 55555 +$ comm f1 f2 +@print{} 00000 +@print{} 11111 +@print{} 22222 +@print{} 33333 +@print{} 44444 +@print{} 55555 +@end example + +The file name @file{-} tells @command{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. + +@example +$ tr '[:upper:]' '[:lower:]' < whats.gnu | ... +@end example + +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. + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ... +@end smallexample + +The second @command{tr} command operates on the complement of the listed +characters, which are all the letters, the digits, the underscore, and +the blank. The @samp{\n} represents the newline character; it has to +be left alone. (The @acronym{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. + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | +> tr -s ' ' '\n' | ... +@end smallexample + +This command turns blanks into newlines. The @option{-s} option squeezes +multiple newline characters in the output into just one. This helps us +avoid blank lines. (The @samp{>} 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: + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | +> tr -s ' ' '\n' | sort | uniq -c | ... +@end smallexample + +At this point, the data might look something like this: + +@example + 60 a + 2 able + 6 about + 1 above + 2 accomplish + 1 acquire + 1 actually + 2 additional +@end example + +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 @command{sort} options: + +@table @code +@item -n +do a numeric sort, not a textual one + +@item -r +reverse the order of the sort +@end table + +The final pipeline looks like this: + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | +> tr -s ' ' '\n' | sort | uniq -c | sort -n -r +@print{} 156 the +@print{} 60 a +@print{} 58 to +@print{} 51 of +@print{} 51 and +@dots{} +@end smallexample + +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 @file{/usr/dict/words}. +On my GNU/Linux system,@footnote{Redhat Linux 6.1, for the November 2000 +revision of this article.} +this is a is a sorted, 45,402 word dictionary. + +Now, how to compare our file with the dictionary? As before, we generate +a sorted list of words, one per line: + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | +> tr -s ' ' '\n' | sort -u | ... +@end smallexample + +Now, all we need is a list of words that are @emph{not} in the +dictionary. Here is where the @command{comm} command comes in. + +@smallexample +$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | +> tr -s ' ' '\n' | sort -u | +> comm -23 - /usr/dict/words +@end smallexample + +The @option{-2} and @option{-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. + +@table @command +@item grep +search files for text that matches a regular expression + +@item wc +count lines, words, characters + +@item tee +a T-fitting for data pipes, copies data to files and to standard output + +@item sed +the stream editor, an advanced tool + +@item awk +a data manipulation language, another advanced tool +@end table + +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: + +@enumerate 1 +@item +Each program should do one thing well. No more, no less. + +@item +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. + +@item +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.) + +@item +Let someone else do the hard part. + +@item +Know your toolbox! Use each program appropriately. If you don't have an +appropriate tool, build one. +@end enumerate + +As of this writing, all the programs we've discussed are available via +anonymous @command{ftp} from: @* +@uref{ftp://gnudist.gnu.org/textutils/textutils-1.22.tar.gz}. (There may +be more recent versions available now.) + +None of what I have presented in this column is new. The Software Tools +philosophy was first introduced in the book @cite{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 @command{ratfor} (RATional +FORtran). At the time, C was not as ubiquitous as it is now; FORTRAN +was. The last chapter presented a @command{ratfor} to FORTRAN +processor, written in @command{ratfor}. @command{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 @cite{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 +@uref{http://cm.bell-labs.com/who/bwk, Brian Kernighan's home page}. +For a number of years, there was an active +Software Tools Users Group, whose members had ported the original +@command{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. + +@node Copying This Manual +@appendix Copying This Manual + +@menu +* GNU Free Documentation License:: License for copying this manual. +@end menu + +@include fdl.texi + +@node Index +@unnumbered Index + +@printindex cp + +@shortcontents +@contents +@bye + +@c Local variables: +@c texinfo-column-for-description: 32 +@c End: diff --git a/doc/fdl.texi b/doc/fdl.texi new file mode 100644 index 0000000..9c6d9af --- /dev/null +++ b/doc/fdl.texi @@ -0,0 +1,452 @@ + +@node GNU Free Documentation License +@appendixsec GNU Free Documentation License + +@cindex FDL, GNU Free Documentation License +@center Version 1.2, November 2002 + +@display +Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{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. + +@item +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 +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{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. + +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. + +@item +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. + +@item +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. + +@item +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: + +@enumerate A +@item +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. + +@item +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. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +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. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +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. + +@item +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. + +@item +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. + +@item +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. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +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. + +@item +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.'' + +@item +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. + +@item +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. + +@item +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. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + +@item +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 +@uref{http://www.gnu.org/copyleft/}. + +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. +@end enumerate + +@page +@heading 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: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + 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''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with...Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +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. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/doc/getdate.texi b/doc/getdate.texi new file mode 100644 index 0000000..eae4526 --- /dev/null +++ b/doc/getdate.texi @@ -0,0 +1,553 @@ +@c GNU date syntax documentation + +@c Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@c 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + +@c Permission is granted to copy, distribute and/or modify this document +@c under the terms of the GNU Free Documentation License, Version 1.2 or +@c any later version published by the Free Software Foundation; with no +@c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +@c Texts. A copy of the license is included in the ``GNU Free +@c Documentation License'' file as part of this distribution. + +@node Date input formats +@chapter Date input formats + +@cindex date input formats +@findex get_date + +First, a quote: + +@quotation +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. + +@dots{} 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. @dots{} + +--- Robert Grudin, @cite{Time and the Art of Living}. +@end quotation + +This section describes the textual date representations that @sc{gnu} +programs accept. These are the strings you, as a user, can supply as +arguments to the various programs. The C interface (via the +@code{get_date} function) is not described here. + +@menu +* General date syntax:: Common rules. +* Calendar date items:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @@1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al. +@end menu + + +@node General date syntax +@section General date syntax + +@cindex general date syntax + +@cindex items in date strings +A @dfn{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: + +@itemize @bullet +@item calendar date items +@item time of day items +@item time zone items +@item day of the week items +@item relative items +@item pure numbers. +@end itemize + +@noindent We describe each of these item types in turn, below. + +@cindex numbers, written-out +@cindex ordinal numbers +@findex first @r{in date strings} +@findex next @r{in date strings} +@findex last @r{in date strings} +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 +@samp{last} stands for @math{-1}, @samp{this} stands for 0, and +@samp{first} and @samp{next} both stand for 1. Because the word +@samp{second} stands for the unit of time there is no way to write the +ordinal number 2, but for convenience @samp{third} stands for 3, +@samp{fourth} for 4, @samp{fifth} for 5, +@samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8, +@samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and +@samp{twelfth} for 12. + +@cindex months, written-out +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. + +@cindex language, in dates +In the current implementation, only English is supported for words and +abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first}, +@samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}. + +@cindex language, in dates +@cindex time zone item +The output of the @command{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 @samp{IST}. When using +@command{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 @samp{UTC} and @samp{Z}. Here are some +ways to do this: + +@example +$ LC_ALL=C TZ=UTC0 date +Mon Mar 1 00:21:42 UTC 2004 +$ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' +2004-03-01 00:21:42Z +$ date --iso-8601=ns | tr T ' ' # --iso-8601 is a GNU extension. +2004-02-29 16:21:42,692722128-0800 +$ date --rfc-2822 # a GNU extension +Sun, 29 Feb 2004 16:21:42 -0800 +$ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. +2004-02-29 16:21:42 -0800 +$ date +'@@%s.%N' # %s and %N are GNU extensions. +@@1078100502.692722128 +@end example + +@cindex case, ignored in dates +@cindex comments, in dates +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 @samp{2005-02-29} or times like @samp{24:00} are +rejected. In the typical case of a host that does not support leap +seconds, a time like @samp{23:59:60} is rejected even if it +corresponds to a valid leap second. + + +@node Calendar date items +@section Calendar date items + +@cindex calendar date item + +A @dfn{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: + +@example +1972-09-24 # @sc{iso} 8601. +72-9-24 # Assume 19xx for 69 through 99, + # 20xx for 00 through 68. +72-09-24 # Leading zeros are ignored. +9/24/72 # Common U.S. writing. +24 September 1972 +24 Sept 72 # September has a special abbreviation. +24 Sep 72 # Three-letter abbreviations always allowed. +Sep 24, 1972 +24-sep-72 +24sep72 +@end example + +The year can also be omitted. In this case, the last specified year is +used, or the current year if none. For example: + +@example +9/24 +sep 24 +@end example + +Here are the rules. + +@cindex @sc{iso} 8601 date format +@cindex date format, @sc{iso} 8601 +For numeric months, the @sc{iso} 8601 format +@samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is +any positive number, @var{month} is a number between 01 and 12, and +@var{day} is a number between 01 and 31. A leading zero must be present +if a number is less than ten. If @var{year} is 68 or smaller, then 2000 +is added to it; otherwise, if @var{year} is less than 100, +then 1900 is added to it. The construct +@samp{@var{month}/@var{day}/@var{year}}, popular in the United States, +is accepted. Also @samp{@var{month}/@var{day}}, omitting the year. + +@cindex month names in date strings +@cindex abbreviations for months +Literal months may be spelled out in full: @samp{January}, +@samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June}, +@samp{July}, @samp{August}, @samp{September}, @samp{October}, +@samp{November} or @samp{December}. Literal months may be abbreviated +to their first three letters, possibly followed by an abbreviating dot. +It is also permitted to write @samp{Sept} instead of @samp{September}. + +When months are written literally, the calendar date may be given as any +of the following: + +@example +@var{day} @var{month} @var{year} +@var{day} @var{month} +@var{month} @var{day} @var{year} +@var{day}-@var{month}-@var{year} +@end example + +Or, omitting the year: + +@example +@var{month} @var{day} +@end example + + +@node Time of day items +@section Time of day items + +@cindex time of day item + +A @dfn{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: + +@example +20:02:00.000000 +20:02 +8:02pm +20:02-0500 # In @sc{est} (U.S. Eastern Standard Time). +@end example + +More generally, the time of day may be given as +@samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is +a number between 0 and 23, @var{minute} is a number between 0 and +59, and @var{second} is a number between 0 and 59 possibly followed by +@samp{.} or @samp{,} and a fraction containing one or more digits. +Alternatively, +@samp{:@var{second}} can be omitted, in which case it is taken to +be zero. On the rare hosts that support leap seconds, @var{second} +may be 60. + +@findex am @r{in date strings} +@findex pm @r{in date strings} +@findex midnight @r{in date strings} +@findex noon @r{in date strings} +If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.} +or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and +@samp{:@var{minute}} may be omitted (taken to be zero). @samp{am} +indicates the first half of the day, @samp{pm} indicates the second +half of the day. In this notation, 12 is the predecessor of 1: +midnight is @samp{12am} while noon is @samp{12pm}. +(This is the zero-oriented interpretation of @samp{12am} and @samp{12pm}, +as opposed to the old tradition derived from Latin +which uses @samp{12m} for noon and @samp{12pm} for midnight.) + +@cindex time zone correction +@cindex minutes, time zone correction by +The time may alternatively be followed by a time zone correction, +expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+} +or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number +of zone minutes. You can also separate @var{hh} from @var{mm} with a colon. +When a time zone correction is given this way, it +forces interpretation of the time relative to +Coordinated Universal Time (@sc{utc}), overriding any previous +specification for the time zone or the local time zone. For example, +@samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours +ahead of @sc{utc} (e.g., India). The @var{minute} +part of the time of day may not be elided when a time zone correction +is used. This is the best way to specify a time zone correction by +fractional parts of an hour. + +Either @samp{am}/@samp{pm} or a time zone correction may be specified, +but not both. + + +@node Time zone items +@section Time zone items + +@cindex time zone item + +A @dfn{time zone item} specifies an international time zone, indicated +by a small set of letters, e.g., @samp{UTC} or @samp{Z} +for Coordinated Universal +Time. Any included periods are ignored. By following a +non-daylight-saving time zone by the string @samp{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 @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to +@samp{+05:30}. + +Time zone items other than @samp{UTC} and @samp{Z} +are obsolescent and are not recommended, because they +are ambiguous; for example, @samp{EST} has a different meaning in +Australia than in the United States. Instead, it's better to use +unambiguous numeric time zone corrections like @samp{-0500}, as +described in the previous section. + +If neither a time zone item nor a time zone correction is supplied, +time stamps are interpreted using the rules of the default time zone +(@pxref{Specifying time zone rules}). + + +@node Day of week items +@section Day of week items + +@cindex day of week item + +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: @samp{Sunday}, +@samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday}, +@samp{Friday} or @samp{Saturday}. Days may be abbreviated to their +first three letters, optionally followed by a period. The special +abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for +@samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are +also allowed. + +@findex next @var{day} +@findex last @var{day} +A number may precede a day of the week item to move forward +supplementary weeks. It is best used in expression like @samp{third +monday}. In this context, @samp{last @var{day}} or @samp{next +@var{day}} is also acceptable; they move one week before or after +the day that @var{day} by itself would represent. + +A comma following a day of the week item is ignored. + + +@node Relative items in date strings +@section Relative items in date strings + +@cindex relative items in date strings +@cindex displacement of dates + +@dfn{Relative items} adjust a date (or the current date if none) forward +or backward. The effects of relative items accumulate. Here are some +examples: + +@example +1 year +1 year ago +3 years +2 days +@end example + +@findex year @r{in date strings} +@findex month @r{in date strings} +@findex fortnight @r{in date strings} +@findex week @r{in date strings} +@findex day @r{in date strings} +@findex hour @r{in date strings} +@findex minute @r{in date strings} +The unit of time displacement may be selected by the string @samp{year} +or @samp{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 @samp{fortnight} which is worth 14 days, @samp{week} worth 7 +days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes, +@samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or +@samp{sec} worth one second. An @samp{s} suffix on these units is +accepted and ignored. + +@findex ago @r{in date strings} +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 @samp{ago} is equivalent to preceding the unit by a +multiplier with value @math{-1}. + +@findex day @r{in date strings} +@findex tomorrow @r{in date strings} +@findex yesterday @r{in date strings} +The string @samp{tomorrow} is worth one day in the future (equivalent +to @samp{day}), the string @samp{yesterday} is worth +one day in the past (equivalent to @samp{day ago}). + +@findex now @r{in date strings} +@findex today @r{in date strings} +@findex this @r{in date strings} +The strings @samp{now} or @samp{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 @samp{12:00 today}. The string @samp{this} also has +the meaning of a zero-valued time displacement, but is preferred in +date strings like @samp{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, @samp{2003-07-31 -1 month} might evaluate to 2003-07-01, +because 2003-06-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: + +@example +$ date -R +Thu, 31 Jul 2003 13:02:39 -0700 +$ date --date='-1 month' +'Last month was %B?' +Last month was July? +$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' +Last month was June! +@end example + +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 @env{TZ} environment variable to +@samp{UTC0} before embarking on calendrical calculations. + +@node Pure numbers in date strings +@section Pure numbers in date strings + +@cindex 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 @var{yyyy}@var{mm}@var{dd} and no +other calendar date item (@pxref{Calendar date items}) appears before it +in the date string, then @var{yyyy} is read as the year, @var{mm} as the +month number and @var{dd} as the day of the month, for the specified +calendar date. + +If the decimal number is of the form @var{hh}@var{mm} and no other time +of day item appears before it in the date string, then @var{hh} is read +as the hour of the day and @var{mm} as the minute of the hour, for the +specified time of day. @var{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. + + +@node Seconds since the Epoch +@section Seconds since the Epoch + +If you precede a number with @samp{@@}, it represents an internal time +stamp as a count of seconds. The number can contain an internal +decimal point (either @samp{.} or @samp{,}); 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 time stamp. + +@cindex beginning of time, for @acronym{POSIX} +@cindex epoch, for @acronym{POSIX} +Internally, computer times are represented as a count of seconds since +an epoch---a well-defined point of time. On @acronym{GNU} and +@acronym{POSIX} systems, the epoch is 1970-01-01 00:00:00 @sc{utc}, so +@samp{@@0} represents this time, @samp{@@1} represents 1970-01-01 +00:00:01 @sc{utc}, and so forth. @acronym{GNU} and most other +@acronym{POSIX}-compliant systems support such times as an extension +to @acronym{POSIX}, using negative counts, so that @samp{@@-1} +represents 1969-12-31 23:59:59 @sc{utc}. + +Traditional Unix 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 @sc{utc}. More modern systems use 64-bit counts +of seconds with nanosecond subcounts, and can represent all the times +in the known lifetime of the universe to a resolution of 1 nanosecond. + +On most hosts, these counts ignore the presence of leap seconds. +For example, on most hosts @samp{@@915148799} represents 1998-12-31 +23:59:59 @sc{utc}, @samp{@@915148800} represents 1999-01-01 00:00:00 +@sc{utc}, and there is no way to represent the intervening leap second +1998-12-31 23:59:60 @sc{utc}. + +@node Specifying time zone rules +@section Specifying time zone rules + +@vindex TZ +Normally, dates are interpreted using the rules of the current time +zone, which in turn are specified by the @env{TZ} environment +variable, or by a system default if @env{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 @samp{TZ="@var{rule}"}. The +two quote characters (@samp{"}) must be present in the date, and any +quotes or backslashes within @var{rule} must be escaped by a +backslash. + +For example, with the @acronym{GNU} @command{date} command you can +answer the question ``What time is it in New York when a Paris clock +shows 6:30am on October 31, 2004?'' by using a date beginning with +@samp{TZ="Europe/Paris"} as shown in the following shell transcript: + +@example +$ export TZ="America/New_York" +$ date --date='TZ="Europe/Paris" 2004-10-31 06:30' +Sun Oct 31 01:30:00 EDT 2004 +@end example + +In this example, the @option{--date} operand begins with its own +@env{TZ} setting, so the rest of that operand is processed according +to @samp{Europe/Paris} rules, treating the string @samp{2004-10-31 +06:30} as if it were in Paris. However, since the output of the +@command{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 2004, but this example refers to a brief Halloween period +when the gap was five hours.) + +A @env{TZ} value is a rule that typically names a location in the +@uref{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}. +A recent catalog of location names appears in the +@uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time +Gateway}. A few non-@acronym{GNU} hosts require a colon before a +location name in a @env{TZ} setting, e.g., +@samp{TZ=":America/New_York"}. + +The @samp{tz} database includes a wide variety of locations ranging +from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but +if you are at sea and have your own private time zone, or if you are +using a non-@acronym{GNU} host that does not support the @samp{tz} +database, you may need to use a @acronym{POSIX} rule instead. Simple +@acronym{POSIX} rules like @samp{UTC0} specify a time zone without +daylight saving time; other rules can specify simple daylight saving +regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ}, +libc, The GNU C Library}. + +@node Authors of get_date +@section Authors of @code{get_date} + +@cindex authors of @code{get_date} + +@cindex Bellovin, Steven M. +@cindex Salz, Rich +@cindex Berets, Jim +@cindex MacKenzie, David +@cindex Meyering, Jim +@cindex Eggert, Paul +@code{get_date} was originally implemented by Steven M. Bellovin +(@email{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 (@email{rsalz@@bbn.com}) +and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various +revisions for the @sc{gnu} system were made by David MacKenzie, Jim Meyering, +Paul Eggert and others. + +@cindex Pinard, F. +@cindex Berry, K. +This chapter was originally produced by Fran@,{c}ois Pinard +(@email{pinard@@iro.umontreal.ca}) from the @file{getdate.y} source code, +and then edited by K.@: Berry (@email{kb@@cs.umb.edu}). diff --git a/doc/perm.texi b/doc/perm.texi new file mode 100644 index 0000000..78b5919 --- /dev/null +++ b/doc/perm.texi @@ -0,0 +1,604 @@ +@c File mode bits + +@c Copyright (C) 1994, 1996, 1999, 2000, 2001, 2003, 2004, 2005, 2006 +@c Free Software Foundation, Inc. + +@c Permission is granted to copy, distribute and/or modify this document +@c under the terms of the GNU Free Documentation License, Version 1.2 or +@c any later version published by the Free Software Foundation; with no +@c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +@c Texts. A copy of the license is included in the ``GNU Free +@c Documentation License'' file as part of this distribution. + +Each file has a set of @dfn{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. +* Directory Setuid and Setgid:: Set-user-ID and set-group-ID on directories. +@end menu + +@node Mode Structure +@section Structure of File Mode Bits + +The file mode bits have two parts: the @dfn{file permission bits}, +which control ordinary access to the file, and @dfn{special mode +bits}, which affect only some files. + +There are three kinds of permissions that a user can have for a file: + +@enumerate +@item +@cindex read permission +permission to read the file. For directories, this means permission to +list the contents of the directory. +@item +@cindex write permission +permission to write to (change) the file. For directories, this means +permission to create and remove files in the directory. +@item +@cindex execute/search permission +permission to execute the file (run it as a program). For directories, +this means permission to access files in the directory. +@end enumerate + +There are three categories of users who may have different permissions +to perform any of the above operations on a file: + +@enumerate +@item +the file's owner; +@item +other users who are in the file's group; +@item +everyone else. +@end enumerate + +@cindex owner, default +@cindex group owner, default +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 @command{chown} and +@command{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: + +@enumerate +@item +@cindex set-user-ID +@cindex setuid +Set the process's effective user ID to that of the file upon execution +(called the @dfn{set-user-ID bit}, or sometimes the @dfn{setuid bit}). +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. +@item +@cindex set-group-ID +@cindex setgid +Set the process's effective group ID to that of the file upon execution +(called the @dfn{set-group-ID bit}, or sometimes the @dfn{setgid bit}). +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. +@item +@cindex sticky +@cindex swap space, saving text image in +@cindex text image, saving in swap space +@cindex restricted deletion flag +Prevent unprivileged users from removing or renaming a file in a directory +unless they own the file or the directory; this is called the +@dfn{restricted deletion flag} for the directory, and is commonly +found on world-writable directories like @file{/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; this is called the +@dfn{sticky bit}. +@end enumerate + +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: +@c should probably say a lot more about ACLs... someday + +@table @asis +@item ext2 +On @acronym{GNU} and @acronym{GNU}/Linux the file attributes specific to +the ext2 file system are set using @command{chattr}. + +@item FFS +On FreeBSD the file flags specific to the FFS +file system are set using @command{chflags}. +@end table + +Even if a file's mode bits allow an operation on that file, +that operation may still fail, because: + +@itemize +@item +the file-system-specific attributes or flags do not permit it; or + +@item +the file system is mounted as read-only. +@end itemize + +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 @code{chmod a+w FILE}. + +@node Symbolic Modes +@section Symbolic Modes + +@cindex symbolic modes +@dfn{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 @code{umask} as well +(@pxref{Umask and Protection}). + +The format of symbolic modes is: + +@example +@r{[}ugoa@dots{}@r{][}+-=@r{]}@var{perms}@dots{}@r{[},@dots{}@r{]} +@end example + +@noindent +where @var{perms} is either zero or more letters from the set +@samp{rwxXst}, or a single letter from the set @samp{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. +@end menu + +@node Setting Permissions +@subsection 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: + +@example +@var{users} @var{operation} @var{permissions} +@end example + +@noindent +The spaces between the three parts above are shown for readability only; +symbolic modes cannot contain spaces. + +The @var{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; +@pxref{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. + +@table @code +@item u +@cindex owner of file, permissions for +the user who owns the file; +@item g +@cindex group, permissions for +other users who are in the file's group; +@item o +@cindex other permissions +all other users; +@item a +all users; the same as @samp{ugo}. +@end table + +The @var{operation} part tells how to change the affected users' access +to the file, and is one of the following symbols: + +@table @code +@item + +@cindex adding permissions +to add the @var{permissions} to whatever permissions the @var{users} +already have for the file; +@item - +@cindex removing permissions +@cindex subtracting permissions +to remove the @var{permissions} from whatever permissions the +@var{users} already have for the file; +@item = +@cindex setting permissions +to make the @var{permissions} the only permissions that the @var{users} +have for the file. +@end table + +The @var{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 +@var{users} part, the order does not matter when more than one letter is +given. Omitting the @var{permissions} part is useful only with the +@samp{=} operation, where it gives the specified @var{users} no access +at all to the file. + +@table @code +@item r +@cindex read permission, symbolic +the permission the @var{users} have to read the file; +@item w +@cindex write permission, symbolic +the permission the @var{users} have to write to the file; +@item x +@cindex execute/search permission, symbolic +the permission the @var{users} have to execute the file, +or search it if it is a directory. +@end table + +For example, to give everyone permission to read and write a regular file, +but not to execute it, use: + +@example +a=rw +@end example + +To remove write permission for all users other than the file's +owner, use: + +@example +go-w +@end example + +@noindent +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. + +@example +go= +@end example + +@noindent +Another way to specify the same thing is: + +@example +og-rwx +@end example + +@node Copying Permissions +@subsection Copying Existing Permissions + +@cindex copying existing permissions +@cindex permissions, copying existing +You can base a file's permissions on its existing permissions. To do +this, instead of using a series of @samp{r}, @samp{w}, or @samp{x} +letters after the +operator, you use the letter @samp{u}, @samp{g}, or @samp{o}. For +example, the mode + +@example +o+g +@end example + +@noindent +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 (@samp{rw-rw-r--}), the above mode would change +it to mode 666 (@samp{rw-rw-rw-}). If the file had started out as mode +741 (@samp{rwxr----x}), the above mode would change it to mode 745 +(@samp{rwxr--r-x}). The @samp{-} and @samp{=} operations work +analogously. + +@node Changing Special Mode Bits +@subsection Changing Special Mode Bits + +@cindex changing special mode bits +In addition to changing a file's read, write, and execute/search permissions, +you can change its special mode bits. @xref{Mode Structure}, for a +summary of these special mode bits. + +To change the file mode bits to set the user ID on execution, use +@samp{u} in the @var{users} part of the symbolic mode and +@samp{s} in the @var{permissions} part. + +To change the file mode bits to set the group ID on execution, use +@samp{g} in the @var{users} part of the symbolic mode and +@samp{s} in the @var{permissions} part. + +To set both user and group ID on execution, omit the @var{users} part +of the symbolic mode (or use @samp{a}) and use @samp{s} in the +@var{permissions} part. + +To change the file mode bits to set the restricted deletion flag or sticky bit, +omit the @var{users} part of the symbolic mode (or use @samp{a}) and use +@samp{t} in the @var{permissions} part. + +For example, to set the set-user-ID mode bit of a program, +you can use the mode: + +@example +u+s +@end example + +To remove both set-user-ID and set-group-ID mode bits from +it, you can use the mode: + +@example +a-s +@end example + +To set the restricted deletion flag or sticky bit, you can use +the mode: + +@example ++t +@end example + +The combination @samp{o+s} has no effect. On @acronym{GNU} systems +the combinations @samp{u+t} and @samp{g+t} have no effect, and +@samp{o+t} acts like plain @samp{+t}. + +The @samp{=} operator is not very useful with special mode bits. +For example, the mode: + +@example +o=t +@end example + +@noindent +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. + +@xref{Directory Setuid and Setgid}, for additional rules concerning +set-user-ID and set-group-ID bits and directories. + +@node Conditional Executability +@subsection Conditional Executability + +@cindex conditional executability +There is one more special type of symbolic permission: if you use +@samp{X} instead of @samp{x}, execute/search permission is affected only if the +file is a directory or already had execute permission. + +For example, this mode: + +@example +a+X +@end example + +@noindent +gives all users permission to search directories, or to execute files if +anyone could execute them before. + +@node Multiple Changes +@subsection Making Multiple Changes + +@cindex multiple changes to permissions +The format of symbolic modes is actually more complex than described +above (@pxref{Setting Permissions}). It provides two ways to make +multiple changes to files' mode bits. + +The first way is to specify multiple @var{operation} and +@var{permissions} parts after a @var{users} part in the symbolic mode. + +For example, the mode: + +@example +og+rX-w +@end example + +@noindent +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: + +@example +og+rX +og-w +@end example + +The second way to make multiple changes is to specify more than one +simple symbolic mode, separated by commas. For example, the mode: + +@example +a+r,go-w +@end example + +@noindent +gives everyone permission to read the file and removes write +permission on it for all users except its owner. Another example: + +@example +u=rwx,g=rx,o= +@end example + +@noindent +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: + +@example +a+r,g+x-w +@end example + +@noindent +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: + +@example +u+r,g+rx,o+r,g-w +@end example + +@node Umask and Protection +@subsection The Umask and Protection + +@cindex umask and modes +@cindex modes and umask +If the @var{users} part of a symbolic mode is omitted, it defaults to +@samp{a} (affect all users), except that any permissions that are +@emph{set} in the system variable @code{umask} are @emph{not affected}. +The value of @code{umask} can be set using the +@code{umask} command. Its default value varies from system to system. + +@cindex giving away permissions +Omitting the @var{users} part of a symbolic mode is generally not useful +with operations other than @samp{+}. It is useful with @samp{+} because +it allows you to use @code{umask} as an easily customizable protection +against giving away more permission to files than you intended to. + +As an example, if @code{umask} has the value 2, which removes write +permission for users who are not in the file's group, then the mode: + +@example ++w +@end example + +@noindent +adds permission to write to the file to its owner and to other users who +are in the file's group, but @emph{not} to other users. In contrast, +the mode: + +@example +a+w +@end example + +@noindent +ignores @code{umask}, and @emph{does} give write permission for +the file to all users. + +@node Numeric Modes +@section Numeric Modes + +@cindex numeric modes +@cindex file mode bits, numeric +@cindex octal numbers for file modes +As an +alternative to giving a symbolic mode, you can give an octal (base 8) +number that represents the mode. +This number is always interpreted in octal; you do not have to add a +leading @samp{0}, as you do in C. Mode @samp{0055} is the same as +mode @samp{55}. + +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. +(As discussed in the next section, the set-user-ID and set-group-ID +bits of directories are an exception to this general limitation.) + +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, which are represented as one octal digit. 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 lowest valued bit: + +@example +Value in Corresponding +Mode Mode Bit + + Other users not in the file's group: + 1 Execute/search + 2 Write + 4 Read + + Other users in the file's group: + 10 Execute/search + 20 Write + 40 Read + + The file's owner: + 100 Execute/search + 200 Write + 400 Read + + Special mode bits: +1000 Restricted deletion flag or sticky bit +2000 Set group ID on execution +4000 Set user ID on execution +@end example + +For example, numeric mode @samp{4755} corresponds to symbolic mode +@samp{u=rwxs,go=rx}, and numeric mode @samp{664} corresponds to symbolic mode +@samp{ug=rw,o=r}. Numeric mode @samp{0} corresponds to symbolic mode +@samp{a=}. + +@node Directory Setuid and Setgid +@section 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 @command{chmod} or +@command{chown} to share new files. + +These convenience mechanisms rely on the set-user-ID and set-group-ID +bits of directories. If commands like @command{chmod} and +@command{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 @command{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 sets them in +a numeric mode. For example, on systems that support +set-group-ID inheritance: + +@example +# 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 +@end example + +If you want to try to set these bits, you must mention them +explicitly in the symbolic or numeric modes, e.g.: + +@example +# These commands try to set the set-user-ID +# and set-group-ID bits of the subdirectories. +mkdir G H +chmod 6755 G +chmod u=rwx,go=rx,a+s H +mkdir -m 6755 I +mkdir -m u=rwx,go=rx,a+s J +@end example + +If you want to try to clear these bits, you must mention them +explicitly in a symbolic mode, e.g.: + +@example +# This command tries to clear the set-user-ID +# and set-group-ID bits of the directory D. +chmod a-s D +@end example + +This behavior is a @acronym{GNU} extension. Portable scripts should +not rely on requests to set or clear these bits on directories, as +@acronym{POSIX} allows implementations to ignore these requests. diff --git a/doc/stamp-vti b/doc/stamp-vti new file mode 100644 index 0000000..f556ae3 --- /dev/null +++ b/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 22 March 2007 +@set UPDATED-MONTH March 2007 +@set EDITION 6.9 +@set VERSION 6.9 diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 0000000..f556ae3 --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 22 March 2007 +@set UPDATED-MONTH March 2007 +@set EDITION 6.9 +@set VERSION 6.9 |