doc: provide an example for prefixing all tail output lines
[coreutils.git] / doc / coreutils.texi
blob88e16503d06445efdfd80ecb4a0bd20c9e1445cf
1 \input texinfo
2 @c %**start of header
3 @setfilename coreutils.info
4 @settitle GNU Coreutils
5 @documentencoding UTF-8
6 @allowcodebreaks false
8 @c %**end of header
10 @include version.texi
11 @include constants.texi
13 @c Define new indices.
14 @defcodeindex op
15 @defcodeindex fl
17 @c Put everything in one index (arbitrarily chosen to be the concept index).
18 @syncodeindex fl cp
19 @syncodeindex fn cp
20 @syncodeindex ky cp
21 @syncodeindex op cp
22 @syncodeindex pg cp
23 @syncodeindex vr cp
25 @dircategory Basics
26 @direntry
27 * Coreutils: (coreutils).       Core GNU (file, text, shell) utilities.
28 * Common options: (coreutils)Common options.
29 * File permissions: (coreutils)File permissions.  Access modes.
30 * Date input formats: (coreutils)Date input formats.
31 @end direntry
33 @c FIXME: the following need documentation
34 @c * [: (coreutils)[ invocation.                   File/string tests.
35 @c * pinky: (coreutils)pinky invocation.           FIXME.
37 @dircategory Individual utilities
38 @direntry
39 * arch: (coreutils)arch invocation.             Print machine hardware name.
40 * base32: (coreutils)base32 invocation.         Base32 encode/decode data.
41 * base64: (coreutils)base64 invocation.         Base64 encode/decode data.
42 * basename: (coreutils)basename invocation.     Strip directory and suffix.
43 * cat: (coreutils)cat invocation.               Concatenate and write files.
44 * chcon: (coreutils)chcon invocation.           Change SELinux CTX of files.
45 * chgrp: (coreutils)chgrp invocation.           Change file groups.
46 * chmod: (coreutils)chmod invocation.           Change access permissions.
47 * chown: (coreutils)chown invocation.           Change file owners and groups.
48 * chroot: (coreutils)chroot invocation.         Specify the root directory.
49 * cksum: (coreutils)cksum invocation.           Print POSIX CRC checksum.
50 * comm: (coreutils)comm invocation.             Compare sorted files by line.
51 * coreutils: (coreutils)Multi-call invocation.  Multi-call program.
52 * cp: (coreutils)cp invocation.                 Copy files.
53 * csplit: (coreutils)csplit invocation.         Split by context.
54 * cut: (coreutils)cut invocation.               Print selected parts of lines.
55 * date: (coreutils)date invocation.             Print/set system date and time.
56 * dd: (coreutils)dd invocation.                 Copy and convert a file.
57 * df: (coreutils)df invocation.                 Report file system disk usage.
58 * dir: (coreutils)dir invocation.               List directories briefly.
59 * dircolors: (coreutils)dircolors invocation.   Color setup for ls.
60 * dirname: (coreutils)dirname invocation.       Strip last file name component.
61 * du: (coreutils)du invocation.                 Report on disk usage.
62 * echo: (coreutils)echo invocation.             Print a line of text.
63 * env: (coreutils)env invocation.               Modify the environment.
64 * expand: (coreutils)expand invocation.         Convert tabs to spaces.
65 * expr: (coreutils)expr invocation.             Evaluate expressions.
66 * factor: (coreutils)factor invocation.         Print prime factors
67 * false: (coreutils)false invocation.           Do nothing, unsuccessfully.
68 * fmt: (coreutils)fmt invocation.               Reformat paragraph text.
69 * fold: (coreutils)fold invocation.             Wrap long input lines.
70 * groups: (coreutils)groups invocation.         Print group names a user is in.
71 * head: (coreutils)head invocation.             Output the first part of files.
72 * hostid: (coreutils)hostid invocation.         Print numeric host identifier.
73 * hostname: (coreutils)hostname invocation.     Print or set system name.
74 * id: (coreutils)id invocation.                 Print user identity.
75 * install: (coreutils)install invocation.       Copy files and set attributes.
76 * join: (coreutils)join invocation.             Join lines on a common field.
77 * kill: (coreutils)kill invocation.             Send a signal to processes.
78 * link: (coreutils)link invocation.             Make hard links between files.
79 * ln: (coreutils)ln invocation.                 Make links between files.
80 * logname: (coreutils)logname invocation.       Print current login name.
81 * ls: (coreutils)ls invocation.                 List directory contents.
82 * md5sum: (coreutils)md5sum invocation.         Print or check MD5 digests.
83 * mkdir: (coreutils)mkdir invocation.           Create directories.
84 * mkfifo: (coreutils)mkfifo invocation.         Create FIFOs (named pipes).
85 * mknod: (coreutils)mknod invocation.           Create special files.
86 * mktemp: (coreutils)mktemp invocation.         Create temporary files.
87 * mv: (coreutils)mv invocation.                 Rename files.
88 * nice: (coreutils)nice invocation.             Modify niceness.
89 * nl: (coreutils)nl invocation.                 Number lines and write files.
90 * nohup: (coreutils)nohup invocation.           Immunize to hangups.
91 * nproc: (coreutils)nproc invocation.           Print the number of processors.
92 * numfmt: (coreutils)numfmt invocation.         Reformat numbers.
93 * od: (coreutils)od invocation.                 Dump files in octal, etc.
94 * paste: (coreutils)paste invocation.           Merge lines of files.
95 * pathchk: (coreutils)pathchk invocation.       Check file name portability.
96 * pr: (coreutils)pr invocation.                 Paginate or columnate files.
97 * printenv: (coreutils)printenv invocation.     Print environment variables.
98 * printf: (coreutils)printf invocation.         Format and print data.
99 * ptx: (coreutils)ptx invocation.               Produce permuted indexes.
100 * pwd: (coreutils)pwd invocation.               Print working directory.
101 * readlink: (coreutils)readlink invocation.     Print referent of a symlink.
102 * realpath: (coreutils)realpath invocation.     Print resolved file names.
103 * rm: (coreutils)rm invocation.                 Remove files.
104 * rmdir: (coreutils)rmdir invocation.           Remove empty directories.
105 * runcon: (coreutils)runcon invocation.         Run in specified SELinux CTX.
106 * seq: (coreutils)seq invocation.               Print numeric sequences
107 * sha1sum: (coreutils)sha1sum invocation.       Print or check SHA-1 digests.
108 * sha2: (coreutils)sha2 utilities.              Print or check SHA-2 digests.
109 * shred: (coreutils)shred invocation.           Remove files more securely.
110 * shuf: (coreutils)shuf invocation.             Shuffling text files.
111 * sleep: (coreutils)sleep invocation.           Delay for a specified time.
112 * sort: (coreutils)sort invocation.             Sort text files.
113 * split: (coreutils)split invocation.           Split into pieces.
114 * stat: (coreutils)stat invocation.             Report file(system) status.
115 * stdbuf: (coreutils)stdbuf invocation.         Modify stdio buffering.
116 * stty: (coreutils)stty invocation.             Print/change terminal settings.
117 * sum: (coreutils)sum invocation.               Print traditional checksum.
118 * sync: (coreutils)sync invocation.             Synchronize memory to disk.
119 * tac: (coreutils)tac invocation.               Reverse files.
120 * tail: (coreutils)tail invocation.             Output the last part of files.
121 * tee: (coreutils)tee invocation.               Redirect to multiple files.
122 * test: (coreutils)test invocation.             File/string tests.
123 * timeout: (coreutils)timeout invocation.       Run with time limit.
124 * touch: (coreutils)touch invocation.           Change file timestamps.
125 * tr: (coreutils)tr invocation.                 Translate characters.
126 * true: (coreutils)true invocation.             Do nothing, successfully.
127 * truncate: (coreutils)truncate invocation.     Shrink/extend size of a file.
128 * tsort: (coreutils)tsort invocation.           Topological sort.
129 * tty: (coreutils)tty invocation.               Print terminal name.
130 * uname: (coreutils)uname invocation.           Print system information.
131 * unexpand: (coreutils)unexpand invocation.     Convert spaces to tabs.
132 * uniq: (coreutils)uniq invocation.             Uniquify files.
133 * unlink: (coreutils)unlink invocation.         Removal via unlink(2).
134 * uptime: (coreutils)uptime invocation.         Print uptime and load.
135 * users: (coreutils)users invocation.           Print current user names.
136 * vdir: (coreutils)vdir invocation.             List directories verbosely.
137 * wc: (coreutils)wc invocation.                 Line, word, and byte counts.
138 * who: (coreutils)who invocation.               Print who is logged in.
139 * whoami: (coreutils)whoami invocation.         Print effective user ID.
140 * yes: (coreutils)yes invocation.               Print a string indefinitely.
141 @end direntry
143 @copying
144 This manual documents version @value{VERSION} of the GNU core
145 utilities, including the standard programs for text and file manipulation.
147 Copyright @copyright{} 1994-2015 Free Software Foundation, Inc.
149 @quotation
150 Permission is granted to copy, distribute and/or modify this document
151 under the terms of the GNU Free Documentation License, Version 1.3 or
152 any later version published by the Free Software Foundation; with no
153 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
154 Texts.  A copy of the license is included in the section entitled ``GNU
155 Free Documentation License''.
156 @end quotation
157 @end copying
159 @titlepage
160 @title GNU @code{Coreutils}
161 @subtitle Core GNU utilities
162 @subtitle for version @value{VERSION}, @value{UPDATED}
163 @author David MacKenzie et al.
165 @page
166 @vskip 0pt plus 1filll
167 @insertcopying
168 @end titlepage
169 @shortcontents
170 @contents
172 @ifnottex
173 @node Top
174 @top GNU Coreutils
176 @insertcopying
177 @end ifnottex
179 @cindex core utilities
180 @cindex text utilities
181 @cindex shell utilities
182 @cindex file utilities
184 @menu
185 * Introduction::                 Caveats, overview, and authors
186 * Common options::               Common options
187 * Output of entire files::       cat tac nl od base32 base64
188 * Formatting file contents::     fmt pr fold
189 * Output of parts of files::     head tail split csplit
190 * Summarizing files::            wc sum cksum md5sum sha1sum sha2
191 * Operating on sorted files::    sort shuf uniq comm ptx tsort
192 * Operating on fields::          cut paste join
193 * Operating on characters::      tr expand unexpand
194 * Directory listing::            ls dir vdir dircolors
195 * Basic operations::             cp dd install mv rm shred
196 * Special file types::         mkdir rmdir unlink mkfifo mknod ln link readlink
197 * Changing file attributes::     chgrp chmod chown touch
198 * Disk usage::                   df du stat sync truncate
199 * Printing text::                echo printf yes
200 * Conditions::                   false true test expr
201 * Redirection::                  tee
202 * File name manipulation::       dirname basename pathchk mktemp realpath
203 * Working context::              pwd stty printenv tty
204 * User information::             id logname whoami groups users who
205 * System context::               date arch nproc uname hostname hostid uptime
206 * SELinux context::              chcon runcon
207 * Modified command invocation::  chroot env nice nohup stdbuf timeout
208 * Process control::              kill
209 * Delaying::                     sleep
210 * Numeric operations::           factor numfmt seq
211 * File permissions::             Access modes
212 * Date input formats::           Specifying date strings
213 * Opening the software toolbox:: The software tools philosophy
214 * GNU Free Documentation License:: Copying and sharing this manual
215 * Concept index::                General index
217 @detailmenu
218  --- The Detailed Node Listing ---
220 Common Options
222 * Exit status::                  Indicating program success or failure
223 * Backup options::               Backup options
224 * Block size::                   Block size
225 * Floating point::               Floating point number representation
226 * Signal specifications::        Specifying signals
227 * Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
228 * Random sources::               Sources of random data
229 * Target directory::             Target directory
230 * Trailing slashes::             Trailing slashes
231 * Traversing symlinks::          Traversing symlinks to directories
232 * Treating / specially::         Treating / specially
233 * Standards conformance::        Standards conformance
234 * Multi-call invocation::        Multi-call program invocation
236 Output of entire files
238 * cat invocation::               Concatenate and write files
239 * tac invocation::               Concatenate and write files in reverse
240 * nl invocation::                Number lines and write files
241 * od invocation::                Write files in octal or other formats
242 * base32 invocation::            Transform data into printable data
243 * base64 invocation::            Transform data into printable data
245 Formatting file contents
247 * fmt invocation::               Reformat paragraph text
248 * pr invocation::                Paginate or columnate files for printing
249 * fold invocation::              Wrap input lines to fit in specified width
251 Output of parts of files
253 * head invocation::              Output the first part of files
254 * tail invocation::              Output the last part of files
255 * split invocation::             Split a file into fixed-size pieces
256 * csplit invocation::            Split a file into context-determined pieces
258 Summarizing files
260 * wc invocation::                Print newline, word, and byte counts
261 * sum invocation::               Print checksum and block counts
262 * cksum invocation::             Print CRC checksum and byte counts
263 * md5sum invocation::            Print or check MD5 digests
264 * sha1sum invocation::           Print or check SHA-1 digests
265 * sha2 utilities::               Print or check SHA-2 digests
267 Operating on sorted files
269 * sort invocation::              Sort text files
270 * shuf invocation::              Shuffle text files
271 * uniq invocation::              Uniquify files
272 * comm invocation::              Compare two sorted files line by line
273 * ptx invocation::               Produce a permuted index of file contents
274 * tsort invocation::             Topological sort
276 @command{ptx}: Produce permuted indexes
278 * General options in ptx::       Options which affect general program behavior
279 * Charset selection in ptx::     Underlying character set considerations
280 * Input processing in ptx::      Input fields, contexts, and keyword selection
281 * Output formatting in ptx::     Types of output format, and sizing the fields
282 * Compatibility in ptx::         The GNU extensions to @command{ptx}
284 Operating on fields
286 * cut invocation::               Print selected parts of lines
287 * paste invocation::             Merge lines of files
288 * join invocation::              Join lines on a common field
290 Operating on characters
292 * tr invocation::                Translate, squeeze, and/or delete characters
293 * expand invocation::            Convert tabs to spaces
294 * unexpand invocation::          Convert spaces to tabs
296 @command{tr}: Translate, squeeze, and/or delete characters
298 * Character sets::               Specifying sets of characters
299 * Translating::                  Changing one set of characters to another
300 * Squeezing::                    Squeezing repeats and deleting
302 Directory listing
304 * ls invocation::                List directory contents
305 * dir invocation::               Briefly list directory contents
306 * vdir invocation::              Verbosely list directory contents
307 * dircolors invocation::         Color setup for @command{ls}
309 @command{ls}:  List directory contents
311 * Which files are listed::       Which files are listed
312 * What information is listed::   What information is listed
313 * Sorting the output::           Sorting the output
314 * Details about version sort::   More details about version sort
315 * General output formatting::    General output formatting
316 * Formatting the file names::    Formatting the file names
318 Basic operations
320 * cp invocation::                Copy files and directories
321 * dd invocation::                Convert and copy a file
322 * install invocation::           Copy files and set attributes
323 * mv invocation::                Move (rename) files
324 * rm invocation::                Remove files or directories
325 * shred invocation::             Remove files more securely
327 Special file types
329 * link invocation::              Make a hard link via the link syscall
330 * ln invocation::                Make links between files
331 * mkdir invocation::             Make directories
332 * mkfifo invocation::            Make FIFOs (named pipes)
333 * mknod invocation::             Make block or character special files
334 * readlink invocation::          Print value of a symlink or canonical file name
335 * rmdir invocation::             Remove empty directories
336 * unlink invocation::            Remove files via unlink syscall
338 Changing file attributes
340 * chown invocation::             Change file owner and group
341 * chgrp invocation::             Change group ownership
342 * chmod invocation::             Change access permissions
343 * touch invocation::             Change file timestamps
345 Disk usage
347 * df invocation::                Report file system disk space usage
348 * du invocation::                Estimate file space usage
349 * stat invocation::              Report file or file system status
350 * sync invocation::              Synchronize cached writes to persistent storage
351 * truncate invocation::          Shrink or extend the size of a file
353 Printing text
355 * echo invocation::              Print a line of text
356 * printf invocation::            Format and print data
357 * yes invocation::               Print a string until interrupted
359 Conditions
361 * false invocation::             Do nothing, unsuccessfully
362 * true invocation::              Do nothing, successfully
363 * test invocation::              Check file types and compare values
364 * expr invocation::              Evaluate expressions
366 @command{test}: Check file types and compare values
368 * File type tests::              File type tests
369 * Access permission tests::      Access permission tests
370 * File characteristic tests::    File characteristic tests
371 * String tests::                 String tests
372 * Numeric tests::                Numeric tests
374 @command{expr}: Evaluate expression
376 * String expressions::           + : match substr index length
377 * Numeric expressions::          + - * / %
378 * Relations for expr::           | & < <= = == != >= >
379 * Examples of expr::             Examples of using @command{expr}
381 Redirection
383 * tee invocation::               Redirect output to multiple files or processes
385 File name manipulation
387 * basename invocation::          Strip directory and suffix from a file name
388 * dirname invocation::           Strip last file name component
389 * pathchk invocation::           Check file name validity and portability
390 * mktemp invocation::            Create temporary file or directory
391 * realpath invocation::          Print resolved file names
393 Working context
395 * pwd invocation::               Print working directory
396 * stty invocation::              Print or change terminal characteristics
397 * printenv invocation::          Print all or some environment variables
398 * tty invocation::               Print file name of terminal on standard input
400 @command{stty}: Print or change terminal characteristics
402 * Control::                      Control settings
403 * Input::                        Input settings
404 * Output::                       Output settings
405 * Local::                        Local settings
406 * Combination::                  Combination settings
407 * Characters::                   Special characters
408 * Special::                      Special settings
410 User information
412 * id invocation::                Print user identity
413 * logname invocation::           Print current login name
414 * whoami invocation::            Print effective user ID
415 * groups invocation::            Print group names a user is in
416 * users invocation::             Print login names of users currently logged in
417 * who invocation::               Print who is currently logged in
419 System context
421 * arch invocation::              Print machine hardware name
422 * date invocation::              Print or set system date and time
423 * nproc invocation::             Print the number of processors
424 * uname invocation::             Print system information
425 * hostname invocation::          Print or set system name
426 * hostid invocation::            Print numeric host identifier
427 * uptime invocation::            Print system uptime and load
429 @command{date}: Print or set system date and time
431 * Time conversion specifiers::   %[HIklMNpPrRsSTXzZ]
432 * Date conversion specifiers::   %[aAbBcCdDeFgGhjmuUVwWxyY]
433 * Literal conversion specifiers:: %[%nt]
434 * Padding and other flags::      Pad with zeros, spaces, etc.
435 * Setting the time::             Changing the system clock
436 * Options for date::             Instead of the current time
437 * Date input formats::           Specifying date strings
438 * Examples of date::             Examples
440 SELinux context
442 * chcon invocation::             Change SELinux context of file
443 * runcon invocation::            Run a command in specified SELinux context
445 Modified command invocation
447 * chroot invocation::            Run a command with a different root directory
448 * env invocation::               Run a command in a modified environment
449 * nice invocation::              Run a command with modified niceness
450 * nohup invocation::             Run a command immune to hangups
451 * stdbuf invocation::            Run a command with modified I/O buffering
452 * timeout invocation::           Run a command with a time limit
454 Process control
456 * kill invocation::              Sending a signal to processes.
458 Delaying
460 * sleep invocation::             Delay for a specified time
462 Numeric operations
464 * factor invocation::            Print prime factors
465 * numfmt invocation::            Reformat numbers
466 * seq invocation::               Print numeric sequences
468 File permissions
470 * Mode Structure::               Structure of file mode bits
471 * Symbolic Modes::               Mnemonic representation of file mode bits
472 * Numeric Modes::                File mode bits as octal numbers
473 * Directory Setuid and Setgid::  Set-user-ID and set-group-ID on directories
475 Date input formats
477 * General date syntax::          Common rules
478 * Calendar date items::          19 Dec 1994
479 * Time of day items::            9:20pm
480 * Time zone items::              EST, PDT, UTC, @dots{}
481 * Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500
482 * Day of week items::            Monday and others
483 * Relative items in date strings:: next tuesday, 2 years ago
484 * Pure numbers in date strings:: 19931219, 1440
485 * Seconds since the Epoch::      @@1078100502
486 * Specifying time zone rules::   TZ="America/New_York", TZ="UTC0"
487 * Authors of parse_datetime::    Bellovin, Eggert, Salz, Berets, et al.
489 Opening the software toolbox
491 * Toolbox introduction::         Toolbox introduction
492 * I/O redirection::              I/O redirection
493 * The who command::              The @command{who} command
494 * The cut command::              The @command{cut} command
495 * The sort command::             The @command{sort} command
496 * The uniq command::             The @command{uniq} command
497 * Putting the tools together::   Putting the tools together
499 Copying This Manual
501 * GNU Free Documentation License::     Copying and sharing this manual
503 @end detailmenu
504 @end menu
507 @node Introduction
508 @chapter Introduction
510 This manual is a work in progress: many sections make no attempt to explain
511 basic concepts in a way suitable for novices.  Thus, if you are interested,
512 please get involved in improving this manual.  The entire GNU community
513 will benefit.
515 @cindex POSIX
516 The GNU utilities documented here are mostly compatible with the
517 POSIX standard.
518 @cindex bugs, reporting
519 Please report bugs to @email{bug-coreutils@@gnu.org}.  Remember
520 to include the version number, machine architecture, input files, and
521 any other information needed to reproduce the bug: your input, what you
522 expected, what you got, and why it is wrong.  Diffs are welcome, but
523 please include a description of the problem as well, since this is
524 sometimes difficult to infer.  @xref{Bugs, , , gcc, Using and Porting GNU CC}.
526 @cindex Berry, K.
527 @cindex Paterson, R.
528 @cindex Stallman, R.
529 @cindex Pinard, F.
530 @cindex MacKenzie, D.
531 @cindex Meyering, J.
532 @cindex Youmans, B.
533 This manual was originally derived from the Unix man pages in the
534 distributions, which were written by David MacKenzie and updated by Jim
535 Meyering.  What you are reading now is the authoritative documentation
536 for these utilities; the man pages are no longer being maintained.  The
537 original @command{fmt} man page was written by Ross Paterson.  Fran@,{c}ois
538 Pinard did the initial conversion to Texinfo format.  Karl Berry did the
539 indexing, some reorganization, and editing of the results.  Brian
540 Youmans of the Free Software Foundation office staff combined the
541 manuals for textutils, fileutils, and sh-utils to produce the present
542 omnibus manual.  Richard Stallman contributed his usual invaluable
543 insights to the overall process.
545 @node Common options
546 @chapter Common options
548 @macro optBackup
549 @item -b
550 @itemx --backup[=@var{method}]
551 @opindex -b
552 @opindex --backup
553 @vindex VERSION_CONTROL
554 @cindex backups, making
555 @xref{Backup options}.
556 Make a backup of each file that would otherwise be overwritten or removed.
557 @end macro
559 @macro optBackupSuffix
560 @item -S @var{suffix}
561 @itemx --suffix=@var{suffix}
562 @opindex -S
563 @opindex --suffix
564 Append @var{suffix} to each backup file made with @option{-b}.
565 @xref{Backup options}.
566 @end macro
568 @macro optTargetDirectory
569 @item -t @var{directory}
570 @itemx --target-directory=@var{directory}
571 @opindex -t
572 @opindex --target-directory
573 @cindex target directory
574 @cindex destination directory
575 Specify the destination @var{directory}.
576 @xref{Target directory}.
577 @end macro
579 @macro optNoTargetDirectory
580 @item -T
581 @itemx --no-target-directory
582 @opindex -T
583 @opindex --no-target-directory
584 @cindex target directory
585 @cindex destination directory
586 Do not treat the last operand specially when it is a directory or a
587 symbolic link to a directory.  @xref{Target directory}.
588 @end macro
590 @macro outputNUL
591 @cindex output NUL-byte-terminated lines
592 Output a zero byte (ASCII NUL) at the end of each line,
593 rather than a newline.  This option enables other programs to parse the
594 output even when that output would contain data with embedded newlines.
595 @end macro
597 @macro optNull
598 @item -0
599 @itemx --null
600 @opindex -0
601 @opindex --null
602 @outputNUL
603 @end macro
605 @macro optZero
606 @item -z
607 @itemx --zero
608 @opindex -z
609 @opindex --zero
610 @outputNUL
611 @end macro
613 @macro optZeroTerminated
614 @item -z
615 @itemx --zero-terminated
616 @opindex -z
617 @opindex --zero-terminated
618 @cindex process zero-terminated items
619 Delimit items with a zero byte rather than a newline (ASCII LF).
620 I.e., treat input as items separated by ASCII NUL
621 and terminate output items with ASCII NUL.
622 This option can be useful in conjunction with @samp{perl -0} or
623 @samp{find -print0} and @samp{xargs -0} which do the same in order to
624 reliably handle arbitrary file names (even those containing blanks
625 or other special characters).
626 @end macro
628 @macro optSi
629 @item --si
630 @opindex --si
631 @cindex SI output
632 Append an SI-style abbreviation to each size, such as @samp{M} for
633 megabytes.  Powers of 1000 are used, not 1024; @samp{M} stands for
634 1,000,000 bytes.  This option is equivalent to
635 @option{--block-size=si}.  Use the @option{-h} or
636 @option{--human-readable} option if
637 you prefer powers of 1024.
638 @end macro
640 @macro optHumanReadable
641 @item -h
642 @itemx --human-readable
643 @opindex -h
644 @opindex --human-readable
645 @cindex human-readable output
646 Append a size letter to each size, such as @samp{M} for mebibytes.
647 Powers of 1024 are used, not 1000; @samp{M} stands for 1,048,576 bytes.
648 This option is equivalent to @option{--block-size=human-readable}.
649 Use the @option{--si} option if you prefer powers of 1000.
650 @end macro
652 @macro optStripTrailingSlashes
653 @item --strip-trailing-slashes
654 @opindex --strip-trailing-slashes
655 @cindex stripping trailing slashes
656 Remove any trailing slashes from each @var{source} argument.
657 @xref{Trailing slashes}.
658 @end macro
660 @macro mayConflictWithShellBuiltIn{cmd}
661 @cindex conflicts with shell built-ins
662 @cindex built-in shell commands, conflicts with
663 Due to shell aliases and built-in @command{\cmd\} functions, using an
664 unadorned @command{\cmd\} interactively or in a script may get you
665 different functionality than that described here.  Invoke it via
666 @command{env} (i.e., @code{env \cmd\ @dots{}}) to avoid interference
667 from the shell.
669 @end macro
671 @macro multiplierSuffixes{varName}
672 @var{\varName\} may be, or may be an integer optionally followed by,
673 one of the following multiplicative suffixes:
674 @example
675 @samp{b}  =>            512 ("blocks")
676 @samp{KB} =>           1000 (KiloBytes)
677 @samp{K}  =>           1024 (KibiBytes)
678 @samp{MB} =>      1000*1000 (MegaBytes)
679 @samp{M}  =>      1024*1024 (MebiBytes)
680 @samp{GB} => 1000*1000*1000 (GigaBytes)
681 @samp{G}  => 1024*1024*1024 (GibiBytes)
682 @end example
683 and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
684 @end macro
686 @c FIXME: same as above, but no ``blocks'' line.
687 @macro multiplierSuffixesNoBlocks{varName}
688 @var{\varName\} may be, or may be an integer optionally followed by,
689 one of the following multiplicative suffixes:
690 @example
691 @samp{KB} =>           1000 (KiloBytes)
692 @samp{K}  =>           1024 (KibiBytes)
693 @samp{MB} =>      1000*1000 (MegaBytes)
694 @samp{M}  =>      1024*1024 (MebiBytes)
695 @samp{GB} => 1000*1000*1000 (GigaBytes)
696 @samp{G}  => 1024*1024*1024 (GibiBytes)
697 @end example
698 and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
699 @end macro
701 @cindex common options
703 Certain options are available in all of these programs.  Rather than
704 writing identical descriptions for each of the programs, they are
705 described here.  (In fact, every GNU program accepts (or should accept)
706 these options.)
708 @vindex POSIXLY_CORRECT
709 Normally options and operands can appear in any order, and programs act
710 as if all the options appear before any operands.  For example,
711 @samp{sort -r passwd -t :} acts like @samp{sort -r -t : passwd}, since
712 @samp{:} is an option-argument of @option{-t}.  However, if the
713 @env{POSIXLY_CORRECT} environment variable is set, options must appear
714 before operands, unless otherwise specified for a particular command.
716 A few programs can usefully have trailing operands with leading
717 @samp{-}.  With such a program, options must precede operands even if
718 @env{POSIXLY_CORRECT} is not set, and this fact is noted in the
719 program description.  For example, the @command{env} command's options
720 must appear before its operands, since in some cases the operands
721 specify a command that itself contains options.
723 Most programs that accept long options recognize unambiguous
724 abbreviations of those options.  For example, @samp{rmdir
725 --ignore-fail-on-non-empty} can be invoked as @samp{rmdir
726 --ignore-fail} or even @samp{rmdir --i}.  Ambiguous options, such as
727 @samp{ls --h}, are identified as such.
729 Some of these programs recognize the @option{--help} and @option{--version}
730 options only when one of them is the sole command line argument.  For
731 these programs, abbreviations of the long options are not always recognized.
733 @table @samp
735 @item --help
736 @opindex --help
737 @cindex help, online
738 Print a usage message listing all available options, then exit successfully.
740 @item --version
741 @opindex --version
742 @cindex version number, finding
743 Print the version number, then exit successfully.
745 @item --
746 @opindex --
747 @cindex option delimiter
748 Delimit the option list.  Later arguments, if any, are treated as
749 operands even if they begin with @samp{-}.  For example, @samp{sort --
750 -r} reads from the file named @file{-r}.
752 @end table
754 @cindex standard input
755 @cindex standard output
756 A single @samp{-} operand is not really an option, though it looks like one.  It
757 stands for a file operand, and some tools treat it as standard input, or as
758 standard output if that is clear from the context.  For example, @samp{sort -}
759 reads from standard input, and is equivalent to plain @samp{sort}.  Unless
760 otherwise specified, a @samp{-} can appear as any operand that requires a file
761 name.
763 @menu
764 * Exit status::                 Indicating program success or failure.
765 * Backup options::              -b -S, in some programs.
766 * Block size::                  BLOCK_SIZE and --block-size, in some programs.
767 * Floating point::              Floating point number representation.
768 * Signal specifications::       Specifying signals using the --signal option.
769 * Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
770 * Random sources::              --random-source, in some programs.
771 * Target directory::            Specifying a target directory, in some programs.
772 * Trailing slashes::            --strip-trailing-slashes, in some programs.
773 * Traversing symlinks::         -H, -L, or -P, in some programs.
774 * Treating / specially::        --preserve-root and --no-preserve-root.
775 * Special built-in utilities::  @command{break}, @command{:}, @dots{}
776 * Standards conformance::       Conformance to the POSIX standard.
777 * Multi-call invocation::       Multi-call program invocation.
778 @end menu
781 @node Exit status
782 @section Exit status
784 @macro exitstatus
785 An exit status of zero indicates success,
786 and a nonzero value indicates failure.
787 @end macro
789 Nearly every command invocation yields an integral @dfn{exit status}
790 that can be used to change how other commands work.
791 For the vast majority of commands, an exit status of zero indicates
792 success.  Failure is indicated by a nonzero value---typically
793 @samp{1}, though it may differ on unusual platforms as POSIX
794 requires only that it be nonzero.
796 However, some of the programs documented here do produce
797 other exit status values and a few associate different
798 meanings with the values @samp{0} and @samp{1}.
799 Here are some of the exceptions:
800 @command{chroot}, @command{env}, @command{expr}, @command{nice},
801 @command{nohup}, @command{numfmt}, @command{printenv}, @command{sort},
802 @command{stdbuf}, @command{test}, @command{timeout}, @command{tty}.
805 @node Backup options
806 @section Backup options
808 @cindex backup options
810 Some GNU programs (at least @command{cp}, @command{install},
811 @command{ln}, and @command{mv}) optionally make backups of files
812 before writing new versions.
813 These options control the details of these backups.  The options are also
814 briefly mentioned in the descriptions of the particular programs.
816 @table @samp
818 @item -b
819 @itemx --backup[=@var{method}]
820 @opindex -b
821 @opindex --backup
822 @vindex VERSION_CONTROL
823 @cindex backups, making
824 Make a backup of each file that would otherwise be overwritten or removed.
825 Without this option, the original versions are destroyed.
826 Use @var{method} to determine the type of backups to make.
827 When this option is used but @var{method} is not specified,
828 then the value of the @env{VERSION_CONTROL}
829 environment variable is used.  And if @env{VERSION_CONTROL} is not set,
830 the default backup type is @samp{existing}.
832 Note that the short form of this option, @option{-b} does not accept any
833 argument.  Using @option{-b} is equivalent to using @option{--backup=existing}.
835 @vindex version-control @r{Emacs variable}
836 This option corresponds to the Emacs variable @samp{version-control};
837 the values for @var{method} are the same as those used in Emacs.
838 This option also accepts more descriptive names.
839 The valid @var{method}s are (unique abbreviations are accepted):
841 @table @samp
842 @item none
843 @itemx off
844 @opindex none @r{backup method}
845 Never make backups.
847 @item numbered
848 @itemx t
849 @opindex numbered @r{backup method}
850 Always make numbered backups.
852 @item existing
853 @itemx nil
854 @opindex existing @r{backup method}
855 Make numbered backups of files that already have them, simple backups
856 of the others.
858 @item simple
859 @itemx never
860 @opindex simple @r{backup method}
861 Always make simple backups.  Please note @samp{never} is not to be
862 confused with @samp{none}.
864 @end table
866 @item -S @var{suffix}
867 @itemx --suffix=@var{suffix}
868 @opindex -S
869 @opindex --suffix
870 @cindex backup suffix
871 @vindex SIMPLE_BACKUP_SUFFIX
872 Append @var{suffix} to each backup file made with @option{-b}.  If this
873 option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX}
874 environment variable is used.  And if @env{SIMPLE_BACKUP_SUFFIX} is not
875 set, the default is @samp{~}, just as in Emacs.
877 @end table
879 @node Block size
880 @section Block size
882 @cindex block size
884 Some GNU programs (at least @command{df}, @command{du}, and
885 @command{ls}) display sizes in ``blocks''.  You can adjust the block size
886 and method of display to make sizes easier to read.  The block size
887 used for display is independent of any file system block size.
888 Fractional block counts are rounded up to the nearest integer.
890 @opindex --block-size=@var{size}
891 @vindex BLOCKSIZE
892 @vindex BLOCK_SIZE
893 @vindex DF_BLOCK_SIZE
894 @vindex DU_BLOCK_SIZE
895 @vindex LS_BLOCK_SIZE
896 @vindex POSIXLY_CORRECT@r{, and block size}
898 The default block size is chosen by examining the following environment
899 variables in turn; the first one that is set determines the block size.
901 @table @code
903 @item DF_BLOCK_SIZE
904 This specifies the default block size for the @command{df} command.
905 Similarly, @env{DU_BLOCK_SIZE} specifies the default for @command{du} and
906 @env{LS_BLOCK_SIZE} for @command{ls}.
908 @item BLOCK_SIZE
909 This specifies the default block size for all three commands, if the
910 above command-specific environment variables are not set.
912 @item BLOCKSIZE
913 This specifies the default block size for all values that are normally
914 printed as blocks, if neither @env{BLOCK_SIZE} nor the above
915 command-specific environment variables are set.  Unlike the other
916 environment variables, @env{BLOCKSIZE} does not affect values that are
917 normally printed as byte counts, e.g., the file sizes contained in
918 @code{ls -l} output.
920 @item POSIXLY_CORRECT
921 If neither @env{@var{command}_BLOCK_SIZE}, nor @env{BLOCK_SIZE}, nor
922 @env{BLOCKSIZE} is set, but this variable is set, the block size
923 defaults to 512.
925 @end table
927 If none of the above environment variables are set, the block size
928 currently defaults to 1024 bytes in most contexts, but this number may
929 change in the future.  For @command{ls} file sizes, the block size
930 defaults to 1 byte.
932 @cindex human-readable output
933 @cindex SI output
935 A block size specification can be a positive integer specifying the number
936 of bytes per block, or it can be @code{human-readable} or @code{si} to
937 select a human-readable format.  Integers may be followed by suffixes
938 that are upward compatible with the
939 @uref{http://www.bipm.org/en/publications/si-brochure/chapter3.html,
940 SI prefixes}
941 for decimal multiples and with the
942 @uref{http://physics.nist.gov/cuu/Units/binary.html, ISO/IEC 80000-13
943 (formerly IEC 60027-2) prefixes} for binary multiples.
945 With human-readable formats, output sizes are followed by a size letter
946 such as @samp{M} for megabytes.  @code{BLOCK_SIZE=human-readable} uses
947 powers of 1024; @samp{M} stands for 1,048,576 bytes.
948 @code{BLOCK_SIZE=si} is similar, but uses powers of 1000 and appends
949 @samp{B}; @samp{MB} stands for 1,000,000 bytes.
951 @vindex LC_NUMERIC
952 A block size specification preceded by @samp{'} causes output sizes to
953 be displayed with thousands separators.  The @env{LC_NUMERIC} locale
954 specifies the thousands separator and grouping.  For example, in an
955 American English locale, @samp{--block-size="'1kB"} would cause a size
956 of 1234000 bytes to be displayed as @samp{1,234}.  In the default C
957 locale, there is no thousands separator so a leading @samp{'} has no
958 effect.
960 An integer block size can be followed by a suffix to specify a
961 multiple of that size.  A bare size letter,
962 or one followed by @samp{iB}, specifies
963 a multiple using powers of 1024.  A size letter followed by @samp{B}
964 specifies powers of 1000 instead.  For example, @samp{1M} and
965 @samp{1MiB} are equivalent to @samp{1048576}, whereas @samp{1MB} is
966 equivalent to @samp{1000000}.
968 A plain suffix without a preceding integer acts as if @samp{1} were
969 prepended, except that it causes a size indication to be appended to
970 the output.  For example, @samp{--block-size="kB"} displays 3000 as
971 @samp{3kB}.
973 The following suffixes are defined.  Large sizes like @code{1Y}
974 may be rejected by your computer due to limitations of its arithmetic.
976 @table @samp
977 @item kB
978 @cindex kilobyte, definition of
979 kilobyte: @math{10^3 = 1000}.
980 @item k
981 @itemx K
982 @itemx KiB
983 @cindex kibibyte, definition of
984 kibibyte: @math{2^{10} = 1024}.  @samp{K} is special: the SI prefix is
985 @samp{k} and the ISO/IEC 80000-13 prefix is @samp{Ki}, but tradition and
986 POSIX use @samp{k} to mean @samp{KiB}.
987 @item MB
988 @cindex megabyte, definition of
989 megabyte: @math{10^6 = 1,000,000}.
990 @item M
991 @itemx MiB
992 @cindex mebibyte, definition of
993 mebibyte: @math{2^{20} = 1,048,576}.
994 @item GB
995 @cindex gigabyte, definition of
996 gigabyte: @math{10^9 = 1,000,000,000}.
997 @item G
998 @itemx GiB
999 @cindex gibibyte, definition of
1000 gibibyte: @math{2^{30} = 1,073,741,824}.
1001 @item TB
1002 @cindex terabyte, definition of
1003 terabyte:  @math{10^{12} = 1,000,000,000,000}.
1004 @item T
1005 @itemx TiB
1006 @cindex tebibyte, definition of
1007 tebibyte: @math{2^{40} = 1,099,511,627,776}.
1008 @item PB
1009 @cindex petabyte, definition of
1010 petabyte: @math{10^{15} = 1,000,000,000,000,000}.
1011 @item P
1012 @itemx PiB
1013 @cindex pebibyte, definition of
1014 pebibyte: @math{2^{50} = 1,125,899,906,842,624}.
1015 @item EB
1016 @cindex exabyte, definition of
1017 exabyte: @math{10^{18} = 1,000,000,000,000,000,000}.
1018 @item E
1019 @itemx EiB
1020 @cindex exbibyte, definition of
1021 exbibyte: @math{2^{60} = 1,152,921,504,606,846,976}.
1022 @item ZB
1023 @cindex zettabyte, definition of
1024 zettabyte: @math{10^{21} = 1,000,000,000,000,000,000,000}
1025 @item Z
1026 @itemx ZiB
1027 @math{2^{70} = 1,180,591,620,717,411,303,424}.
1028 @item YB
1029 @cindex yottabyte, definition of
1030 yottabyte: @math{10^{24} = 1,000,000,000,000,000,000,000,000}.
1031 @item Y
1032 @itemx YiB
1033 @math{2^{80} = 1,208,925,819,614,629,174,706,176}.
1034 @end table
1036 @opindex -k
1037 @opindex -h
1038 @opindex --block-size
1039 @opindex --human-readable
1040 @opindex --si
1042 Block size defaults can be overridden by an explicit
1043 @option{--block-size=@var{size}} option.  The @option{-k}
1044 option is equivalent to @option{--block-size=1K}, which
1045 is the default unless the @env{POSIXLY_CORRECT} environment variable is
1046 set.  The @option{-h} or @option{--human-readable} option is equivalent to
1047 @option{--block-size=human-readable}.  The @option{--si} option is
1048 equivalent to @option{--block-size=si}.  Note for @command{ls}
1049 the @option{-k} option does not control the display of the
1050 apparent file sizes, whereas the @option{--block-size} option does.
1052 @node Floating point
1053 @section Floating point numbers
1054 @cindex floating point
1055 @cindex IEEE floating point
1057 Commands that accept or produce floating point numbers employ the
1058 floating point representation of the underlying system, and suffer
1059 from rounding error, overflow, and similar floating-point issues.
1060 Almost all modern systems use IEEE-754 floating point, and it is
1061 typically portable to assume IEEE-754 behavior these days.  IEEE-754
1062 has positive and negative infinity, distinguishes positive from
1063 negative zero, and uses special values called NaNs to represent
1064 invalid computations such as dividing zero by itself.  For more
1065 information, please see David Goldberg's paper
1066 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, What Every
1067 Computer Scientist Should Know About Floating-Point Arithmetic}.
1069 @vindex LC_NUMERIC
1070 Commands that accept floating point numbers as options, operands or
1071 input use the standard C functions @code{strtod} and @code{strtold} to
1072 convert from text to floating point numbers.  These floating point
1073 numbers therefore can use scientific notation like @code{1.0e-34} and
1074 @code{-10e100}.  Commands that parse floating point also understand
1075 case-insensitive @code{inf}, @code{infinity}, and @code{NaN}, although
1076 whether such values are useful depends on the command in question.
1077 Modern C implementations also accept hexadecimal floating point
1078 numbers such as @code{-0x.ep-3}, which stands for @minus{}14/16 times
1079 @math{2^-3}, which equals @minus{}0.109375.  The @env{LC_NUMERIC}
1080 locale determines the decimal-point character.  @xref{Parsing of
1081 Floats,,, libc, The GNU C Library Reference Manual}.
1083 @node Signal specifications
1084 @section Signal specifications
1085 @cindex signals, specifying
1087 A @var{signal} may be a signal name like @samp{HUP}, or a signal
1088 number like @samp{1}, or an exit status of a process terminated by the
1089 signal.  A signal name can be given in canonical form or prefixed by
1090 @samp{SIG}@.  The case of the letters is ignored.  The following signal names
1091 and numbers are supported on all POSIX compliant systems:
1093 @table @samp
1094 @item HUP
1095 1.  Hangup.
1096 @item INT
1097 2.  Terminal interrupt.
1098 @item QUIT
1099 3.  Terminal quit.
1100 @item ABRT
1101 6.  Process abort.
1102 @item KILL
1103 9.  Kill (cannot be caught or ignored).
1104 @item ALRM
1105 14.  Alarm Clock.
1106 @item TERM
1107 15.  Termination.
1108 @end table
1110 @noindent
1111 Other supported signal names have system-dependent corresponding
1112 numbers.  All systems conforming to POSIX 1003.1-2001 also
1113 support the following signals:
1115 @table @samp
1116 @item BUS
1117 Access to an undefined portion of a memory object.
1118 @item CHLD
1119 Child process terminated, stopped, or continued.
1120 @item CONT
1121 Continue executing, if stopped.
1122 @item FPE
1123 Erroneous arithmetic operation.
1124 @item ILL
1125 Illegal Instruction.
1126 @item PIPE
1127 Write on a pipe with no one to read it.
1128 @item SEGV
1129 Invalid memory reference.
1130 @item STOP
1131 Stop executing (cannot be caught or ignored).
1132 @item TSTP
1133 Terminal stop.
1134 @item TTIN
1135 Background process attempting read.
1136 @item TTOU
1137 Background process attempting write.
1138 @item URG
1139 High bandwidth data is available at a socket.
1140 @item USR1
1141 User-defined signal 1.
1142 @item USR2
1143 User-defined signal 2.
1144 @end table
1146 @noindent
1147 POSIX 1003.1-2001 systems that support the XSI extension
1148 also support the following signals:
1150 @table @samp
1151 @item POLL
1152 Pollable event.
1153 @item PROF
1154 Profiling timer expired.
1155 @item SYS
1156 Bad system call.
1157 @item TRAP
1158 Trace/breakpoint trap.
1159 @item VTALRM
1160 Virtual timer expired.
1161 @item XCPU
1162 CPU time limit exceeded.
1163 @item XFSZ
1164 File size limit exceeded.
1165 @end table
1167 @noindent
1168 POSIX 1003.1-2001 systems that support the XRT extension
1169 also support at least eight real-time signals called @samp{RTMIN},
1170 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX}.
1172 @node Disambiguating names and IDs
1173 @section chown, chgrp, chroot, id: Disambiguating user names and IDs
1174 @cindex user names, disambiguating
1175 @cindex user IDs, disambiguating
1176 @cindex group names, disambiguating
1177 @cindex group IDs, disambiguating
1178 @cindex disambiguating group names and IDs
1180 Since the @var{user} and @var{group} arguments to these commands
1181 may be specified as names or numeric IDs, there is an
1182 apparent ambiguity.
1183 What if a user or group @emph{name} is a string of digits?
1184 @footnote{Using a number as a user name is common in some environments.}
1185 Should the command interpret it as a user name or as an ID@?
1186 POSIX requires that these commands
1187 first attempt to resolve the specified string as a name, and
1188 only once that fails, then try to interpret it as an ID@.
1189 This is troublesome when you want to specify a numeric ID, say 42,
1190 and it must work even in a pathological situation where
1191 @samp{42} is a user name that maps to some other user ID, say 1000.
1192 Simply invoking @code{chown 42 F}, will set @file{F}s owner ID to
1193 1000---not what you intended.
1195 GNU @command{chown}, @command{chgrp}, @command{chroot}, and @command{id}
1196 provide a way to work around this, that at the same time may result in a
1197 significant performance improvement by eliminating a database look-up.
1198 Simply precede each numeric user ID and/or group ID with a @samp{+},
1199 in order to force its interpretation as an integer:
1201 @example
1202 chown +42 F
1203 chgrp +$numeric_group_id another-file
1204 chown +0:+0 /
1205 @end example
1207 The name look-up process is skipped for each @samp{+}-prefixed string,
1208 because a string containing @samp{+} is never a valid user or group name.
1209 This syntax is accepted on most common Unix systems, but not on Solaris 10.
1211 @node Random sources
1212 @section Sources of random data
1214 @cindex random sources
1216 The @command{shuf}, @command{shred}, and @command{sort} commands
1217 sometimes need random data to do their work.  For example, @samp{sort
1218 -R} must choose a hash function at random, and it needs random data to
1219 make this selection.
1221 By default these commands use an internal pseudo-random generator
1222 initialized by a small amount of entropy, but can be directed to use
1223 an external source with the @option{--random-source=@var{file}} option.
1224 An error is reported if @var{file} does not contain enough bytes.
1226 For example, the device file @file{/dev/urandom} could be used as the
1227 source of random data.  Typically, this device gathers environmental
1228 noise from device drivers and other sources into an entropy pool, and
1229 uses the pool to generate random bits.  If the pool is short of data,
1230 the device reuses the internal pool to produce more bits, using a
1231 cryptographically secure pseudo-random number generator.  But be aware
1232 that this device is not designed for bulk random data generation
1233 and is relatively slow.
1235 @file{/dev/urandom} suffices for most practical uses, but applications
1236 requiring high-value or long-term protection of private data may
1237 require an alternate data source like @file{/dev/random} or
1238 @file{/dev/arandom}.  The set of available sources depends on your
1239 operating system.
1241 To reproduce the results of an earlier invocation of a command, you
1242 can save some random data into a file and then use that file as the
1243 random source in earlier and later invocations of the command.
1244 @cindex random seed
1245 Rather than depending on a file, one can generate a reproducible
1246 arbitrary amount of pseudo-random data given a seed value, using
1247 for example:
1249 @example
1250 get_seeded_random()
1252   seed="$1"
1253   openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
1254     </dev/zero 2>/dev/null
1257 shuf -i1-100 --random-source=<(get_seeded_random 42)
1258 @end example
1260 @node Target directory
1261 @section Target directory
1263 @cindex target directory
1265 The @command{cp}, @command{install}, @command{ln}, and @command{mv}
1266 commands normally treat the last operand specially when it is a
1267 directory or a symbolic link to a directory.  For example, @samp{cp
1268 source dest} is equivalent to @samp{cp source dest/source} if
1269 @file{dest} is a directory.  Sometimes this behavior is not exactly
1270 what is wanted, so these commands support the following options to
1271 allow more fine-grained control:
1273 @table @samp
1275 @item -T
1276 @itemx --no-target-directory
1277 @opindex --no-target-directory
1278 @cindex target directory
1279 @cindex destination directory
1280 Do not treat the last operand specially when it is a directory or a
1281 symbolic link to a directory.  This can help avoid race conditions in
1282 programs that operate in a shared area.  For example, when the command
1283 @samp{mv /tmp/source /tmp/dest} succeeds, there is no guarantee that
1284 @file{/tmp/source} was renamed to @file{/tmp/dest}: it could have been
1285 renamed to @file{/tmp/dest/source} instead, if some other process
1286 created @file{/tmp/dest} as a directory.  However, if @file{mv
1287 -T /tmp/source /tmp/dest} succeeds, there is no
1288 question that @file{/tmp/source} was renamed to @file{/tmp/dest}.
1290 In the opposite situation, where you want the last operand to be
1291 treated as a directory and want a diagnostic otherwise, you can use
1292 the @option{--target-directory} (@option{-t}) option.
1294 @item -t @var{directory}
1295 @itemx --target-directory=@var{directory}
1296 @opindex --target-directory
1297 @cindex target directory
1298 @cindex destination directory
1299 Use @var{directory} as the directory component of each destination
1300 file name.
1302 The interface for most programs is that after processing options and a
1303 finite (possibly zero) number of fixed-position arguments, the remaining
1304 argument list is either expected to be empty, or is a list of items
1305 (usually files) that will all be handled identically.  The @command{xargs}
1306 program is designed to work well with this convention.
1308 The commands in the @command{mv}-family are unusual in that they take
1309 a variable number of arguments with a special case at the @emph{end}
1310 (namely, the target directory).  This makes it nontrivial to perform some
1311 operations, e.g., ``move all files from here to ../d/'', because
1312 @code{mv * ../d/} might exhaust the argument space, and @code{ls | xargs ...}
1313 doesn't have a clean way to specify an extra final argument for each
1314 invocation of the subject command.  (It can be done by going through a
1315 shell command, but that requires more human labor and brain power than
1316 it should.)
1318 The @option{--target-directory} (@option{-t}) option allows the @command{cp},
1319 @command{install}, @command{ln}, and @command{mv} programs to be used
1320 conveniently with @command{xargs}.  For example, you can move the files
1321 from the current directory to a sibling directory, @code{d} like this:
1323 @smallexample
1324 ls | xargs mv -t ../d --
1325 @end smallexample
1327 However, this doesn't move files whose names begin with @samp{.}.
1328 If you use the GNU @command{find} program, you can move those
1329 files too, with this command:
1331 @example
1332 find . -mindepth 1 -maxdepth 1 \
1333   | xargs mv -t ../d
1334 @end example
1336 But both of the above approaches fail if there are no files in the
1337 current directory, or if any file has a name containing a blank or
1338 some other special characters.
1339 The following example removes those limitations and requires both
1340 GNU @command{find} and GNU @command{xargs}:
1342 @example
1343 find . -mindepth 1 -maxdepth 1 -print0 \
1344   | xargs --null --no-run-if-empty \
1345       mv -t ../d
1346 @end example
1348 @end table
1350 @noindent
1351 The @option{--target-directory} (@option{-t}) and
1352 @option{--no-target-directory} (@option{-T})
1353 options cannot be combined.
1355 @node Trailing slashes
1356 @section Trailing slashes
1358 @cindex trailing slashes
1360 Some GNU programs (at least @command{cp} and @command{mv}) allow you to
1361 remove any trailing slashes from each @var{source} argument before
1362 operating on it.  The @option{--strip-trailing-slashes} option enables
1363 this behavior.
1365 This is useful when a @var{source} argument may have a trailing slash and
1366 @c FIXME: mv's behavior in this case is system-dependent
1367 specify a symbolic link to a directory.  This scenario is in fact rather
1368 common because some shells can automatically append a trailing slash when
1369 performing file name completion on such symbolic links.  Without this
1370 option, @command{mv}, for example, (via the system's rename function) must
1371 interpret a trailing slash as a request to dereference the symbolic link
1372 and so must rename the indirectly referenced @emph{directory} and not
1373 the symbolic link.  Although it may seem surprising that such behavior
1374 be the default, it is required by POSIX and is consistent with
1375 other parts of that standard.
1377 @node Traversing symlinks
1378 @section Traversing symlinks
1380 @cindex symbolic link to directory, controlling traversal of
1382 The following options modify how @command{chown} and @command{chgrp}
1383 @c FIXME: note that 'du' has these options, too, but they have slightly
1384 @c different meaning.
1385 traverse a hierarchy when the @option{--recursive} (@option{-R})
1386 option is also specified.
1387 If more than one of the following options is specified, only the final
1388 one takes effect.
1389 These options specify whether processing a symbolic link to a directory
1390 entails operating on just the symbolic link or on all files in the
1391 hierarchy rooted at that directory.
1393 These options are independent of @option{--dereference} and
1394 @option{--no-dereference} (@option{-h}), which control whether to modify
1395 a symlink or its referent.
1397 @table @samp
1399 @macro choptH
1400 @item -H
1401 @opindex -H
1402 @cindex symbolic link to directory, traverse if on the command line
1403 If @option{--recursive} (@option{-R}) is specified and
1404 a command line argument is a symbolic link to a directory, traverse it.
1405 @end macro
1406 @choptH
1408 @macro choptL
1409 @item -L
1410 @opindex -L
1411 @cindex symbolic link to directory, traverse each that is encountered
1412 In a recursive traversal, traverse every symbolic link to a directory
1413 that is encountered.
1414 @end macro
1415 @choptL
1417 @macro choptP
1418 @item -P
1419 @opindex -P
1420 @cindex symbolic link to directory, never traverse
1421 Do not traverse any symbolic links.
1422 This is the default if none of @option{-H}, @option{-L},
1423 or @option{-P} is specified.
1424 @end macro
1425 @choptP
1427 @end table
1430 @node Treating / specially
1431 @section Treating @file{/} specially
1433 Certain commands can operate destructively on entire hierarchies.
1434 For example, if a user with appropriate privileges mistakenly runs
1435 @samp{rm -rf / tmp/junk}, that may remove
1436 all files on the entire system.  Since there are so few
1437 legitimate uses for such a command,
1438 GNU @command{rm} normally declines to operate on any directory
1439 that resolves to @file{/}.  If you really want to try to remove all
1440 the files on your system, you can use the @option{--no-preserve-root}
1441 option, but the default behavior, specified by the
1442 @option{--preserve-root} option, is safer for most purposes.
1444 The commands @command{chgrp}, @command{chmod} and @command{chown}
1445 can also operate destructively on entire hierarchies, so they too
1446 support these options.  Although, unlike @command{rm}, they don't
1447 actually unlink files, these commands are arguably more dangerous
1448 when operating recursively on @file{/}, since they often work much
1449 more quickly, and hence damage more files before an alert user can
1450 interrupt them.  Tradition and POSIX require these commands
1451 to operate recursively on @file{/}, so they default to
1452 @option{--no-preserve-root}, but using the @option{--preserve-root}
1453 option makes them safer for most purposes.  For convenience you can
1454 specify @option{--preserve-root} in an alias or in a shell function.
1456 Note that the @option{--preserve-root} option also ensures
1457 that @command{chgrp} and @command{chown} do not modify @file{/}
1458 even when dereferencing a symlink pointing to @file{/}.
1460 @node Special built-in utilities
1461 @section Special built-in utilities
1463 Some programs like @command{nice} can invoke other programs; for
1464 example, the command @samp{nice cat file} invokes the program
1465 @command{cat} by executing the command @samp{cat file}.  However,
1466 @dfn{special built-in utilities} like @command{exit} cannot be invoked
1467 this way.  For example, the command @samp{nice exit} does not have a
1468 well-defined behavior: it may generate an error message instead of
1469 exiting.
1471 Here is a list of the special built-in utilities that are standardized
1472 by POSIX 1003.1-2004.
1474 @quotation
1475 @t{.@: : break continue eval exec exit export readonly
1476 return set shift times trap unset}
1477 @end quotation
1479 For example, because @samp{.}, @samp{:}, and @samp{exec} are special,
1480 the commands @samp{nice . foo.sh}, @samp{nice :}, and @samp{nice exec
1481 pwd} do not work as you might expect.
1483 Many shells extend this list.  For example, Bash has several extra
1484 special built-in utilities like @command{history}, and
1485 @command{suspend}, and with Bash the command @samp{nice suspend}
1486 generates an error message instead of suspending.
1488 @node Standards conformance
1489 @section Standards conformance
1491 @vindex POSIXLY_CORRECT
1492 In a few cases, the GNU utilities' default behavior is
1493 incompatible with the POSIX standard.  To suppress these
1494 incompatibilities, define the @env{POSIXLY_CORRECT} environment
1495 variable.  Unless you are checking for POSIX conformance, you
1496 probably do not need to define @env{POSIXLY_CORRECT}.
1498 Newer versions of POSIX are occasionally incompatible with older
1499 versions.  For example, older versions of POSIX required the
1500 command @samp{sort +1} to sort based on the second and succeeding
1501 fields in each input line, but starting with POSIX 1003.1-2001
1502 the same command is required to sort the file named @file{+1}, and you
1503 must instead use the command @samp{sort -k 2} to get the field-based
1504 sort.
1506 @vindex _POSIX2_VERSION
1507 The GNU utilities normally conform to the version of POSIX
1508 that is standard for your system.  To cause them to conform to a
1509 different version of POSIX, define the @env{_POSIX2_VERSION}
1510 environment variable to a value of the form @var{yyyymm} specifying
1511 the year and month the standard was adopted.  Three values are currently
1512 supported for @env{_POSIX2_VERSION}: @samp{199209} stands for
1513 POSIX 1003.2-1992, @samp{200112} stands for POSIX
1514 1003.1-2001, and @samp{200809} stands for POSIX 1003.1-2008.
1515 For example, if you have a newer system but are running software
1516 that assumes an older version of POSIX and uses @samp{sort +1}
1517 or @samp{tail +10}, you can work around any compatibility problems by setting
1518 @samp{_POSIX2_VERSION=199209} in your environment.
1520 @c This node is named "Multi-call invocation", not the usual
1521 @c "coreutils invocation", so that shell commands like
1522 @c 'info coreutils "touch invocation"' work as expected.
1523 @node Multi-call invocation
1524 @section @command{coreutils}: Multi-call program
1526 @pindex multicall
1527 @cindex combined
1528 @cindex calling combined multi-call program
1530 The @command{coreutils} command invokes an individual utility, either
1531 implicitly selected by the last component of the name used to invoke
1532 @command{coreutils}, or explicitly with the
1533 @option{--coreutils-prog} option.  Synopsis:
1535 @example
1536 coreutils @option{--coreutils-prog=PROGRAM} @dots{}
1537 @end example
1539 The @command{coreutils} command is not installed by default, so
1540 portable scripts should not rely on its existence.
1542 @node Output of entire files
1543 @chapter Output of entire files
1545 @cindex output of entire files
1546 @cindex entire files, output of
1548 These commands read and write entire files, possibly transforming them
1549 in some way.
1551 @menu
1552 * cat invocation::              Concatenate and write files.
1553 * tac invocation::              Concatenate and write files in reverse.
1554 * nl invocation::               Number lines and write files.
1555 * od invocation::               Write files in octal or other formats.
1556 * base32 invocation::           Transform data into printable data.
1557 * base64 invocation::           Transform data into printable data.
1558 @end menu
1560 @node cat invocation
1561 @section @command{cat}: Concatenate and write files
1563 @pindex cat
1564 @cindex concatenate and write files
1565 @cindex copying files
1567 @command{cat} copies each @var{file} (@samp{-} means standard input), or
1568 standard input if none are given, to standard output.  Synopsis:
1570 @example
1571 cat [@var{option}] [@var{file}]@dots{}
1572 @end example
1574 The program accepts the following options.  Also see @ref{Common options}.
1576 @table @samp
1578 @item -A
1579 @itemx --show-all
1580 @opindex -A
1581 @opindex --show-all
1582 Equivalent to @option{-vET}.
1584 @item -b
1585 @itemx --number-nonblank
1586 @opindex -b
1587 @opindex --number-nonblank
1588 Number all nonempty output lines, starting with 1.
1590 @item -e
1591 @opindex -e
1592 Equivalent to @option{-vE}.
1594 @item -E
1595 @itemx --show-ends
1596 @opindex -E
1597 @opindex --show-ends
1598 Display a @samp{$} after the end of each line.
1600 @item -n
1601 @itemx --number
1602 @opindex -n
1603 @opindex --number
1604 Number all output lines, starting with 1.  This option is ignored
1605 if @option{-b} is in effect.
1607 @item -s
1608 @itemx --squeeze-blank
1609 @opindex -s
1610 @opindex --squeeze-blank
1611 @cindex squeezing empty lines
1612 Suppress repeated adjacent empty lines; output just one empty line
1613 instead of several.
1615 @item -t
1616 @opindex -t
1617 Equivalent to @option{-vT}.
1619 @item -T
1620 @itemx --show-tabs
1621 @opindex -T
1622 @opindex --show-tabs
1623 Display TAB characters as @samp{^I}.
1625 @item -u
1626 @opindex -u
1627 Ignored; for POSIX compatibility.
1629 @item -v
1630 @itemx --show-nonprinting
1631 @opindex -v
1632 @opindex --show-nonprinting
1633 Display control characters except for LFD and TAB using
1634 @samp{^} notation and precede characters that have the high bit set with
1635 @samp{M-}.
1637 @end table
1639 On systems like MS-DOS that distinguish between text and binary files,
1640 @command{cat} normally reads and writes in binary mode.  However,
1641 @command{cat} reads in text mode if one of the options
1642 @option{-bensAE} is used or if @command{cat} is reading from standard
1643 input and standard input is a terminal.  Similarly, @command{cat}
1644 writes in text mode if one of the options @option{-bensAE} is used or
1645 if standard output is a terminal.
1647 @exitstatus
1649 Examples:
1651 @smallexample
1652 # Output f's contents, then standard input, then g's contents.
1653 cat f - g
1655 # Copy standard input to standard output.
1657 @end smallexample
1660 @node tac invocation
1661 @section @command{tac}: Concatenate and write files in reverse
1663 @pindex tac
1664 @cindex reversing files
1666 @command{tac} copies each @var{file} (@samp{-} means standard input), or
1667 standard input if none are given, to standard output, reversing the
1668 records (lines by default) in each separately.  Synopsis:
1670 @example
1671 tac [@var{option}]@dots{} [@var{file}]@dots{}
1672 @end example
1674 @dfn{Records} are separated by instances of a string (newline by
1675 default).  By default, this separator string is attached to the end of
1676 the record that it follows in the file.
1678 The program accepts the following options.  Also see @ref{Common options}.
1680 @table @samp
1682 @item -b
1683 @itemx --before
1684 @opindex -b
1685 @opindex --before
1686 The separator is attached to the beginning of the record that it
1687 precedes in the file.
1689 @item -r
1690 @itemx --regex
1691 @opindex -r
1692 @opindex --regex
1693 Treat the separator string as a regular expression.
1695 @item -s @var{separator}
1696 @itemx --separator=@var{separator}
1697 @opindex -s
1698 @opindex --separator
1699 Use @var{separator} as the record separator, instead of newline.
1701 @end table
1703 On systems like MS-DOS that distinguish between text and binary files,
1704 @command{tac} reads and writes in binary mode.
1706 @exitstatus
1708 Example:
1710 @example
1711 # Reverse a file character by character.
1712 tac -r -s 'x\|[^x]'
1713 @end example
1716 @node nl invocation
1717 @section @command{nl}: Number lines and write files
1719 @pindex nl
1720 @cindex numbering lines
1721 @cindex line numbering
1723 @command{nl} writes each @var{file} (@samp{-} means standard input), or
1724 standard input if none are given, to standard output, with line numbers
1725 added to some or all of the lines.  Synopsis:
1727 @example
1728 nl [@var{option}]@dots{} [@var{file}]@dots{}
1729 @end example
1731 @cindex logical pages, numbering on
1732 @command{nl} decomposes its input into (logical) pages; by default, the
1733 line number is reset to 1 at the top of each logical page.  @command{nl}
1734 treats all of the input files as a single document; it does not reset
1735 line numbers or logical pages between files.
1737 @cindex headers, numbering
1738 @cindex body, numbering
1739 @cindex footers, numbering
1740 A logical page consists of three sections: header, body, and footer.
1741 Any of the sections can be empty.  Each can be numbered in a different
1742 style from the others.
1744 The beginnings of the sections of logical pages are indicated in the
1745 input file by a line containing exactly one of these delimiter strings:
1747 @table @samp
1748 @item \:\:\:
1749 start of header;
1750 @item \:\:
1751 start of body;
1752 @item \:
1753 start of footer.
1754 @end table
1756 The two characters from which these strings are made can be changed from
1757 @samp{\} and @samp{:} via options (see below), but the pattern and
1758 length of each string cannot be changed.
1760 A section delimiter is replaced by an empty line on output.  Any text
1761 that comes before the first section delimiter string in the input file
1762 is considered to be part of a body section, so @command{nl} treats a
1763 file that contains no section delimiters as a single body section.
1765 The program accepts the following options.  Also see @ref{Common options}.
1767 @table @samp
1769 @item -b @var{style}
1770 @itemx --body-numbering=@var{style}
1771 @opindex -b
1772 @opindex --body-numbering
1773 Select the numbering style for lines in the body section of each
1774 logical page.  When a line is not numbered, the current line number
1775 is not incremented, but the line number separator character is still
1776 prepended to the line.  The styles are:
1778 @table @samp
1779 @item a
1780 number all lines,
1781 @item t
1782 number only nonempty lines (default for body),
1783 @item n
1784 do not number lines (default for header and footer),
1785 @item p@var{bre}
1786 number only lines that contain a match for the basic regular
1787 expression @var{bre}.
1788 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep Manual}.
1789 @end table
1791 @item -d @var{cd}
1792 @itemx --section-delimiter=@var{cd}
1793 @opindex -d
1794 @opindex --section-delimiter
1795 @cindex section delimiters of pages
1796 Set the section delimiter characters to @var{cd}; default is
1797 @samp{\:}.  If only @var{c} is given, the second remains @samp{:}.
1798 (Remember to protect @samp{\} or other metacharacters from shell
1799 expansion with quotes or extra backslashes.)
1801 @item -f @var{style}
1802 @itemx --footer-numbering=@var{style}
1803 @opindex -f
1804 @opindex --footer-numbering
1805 Analogous to @option{--body-numbering}.
1807 @item -h @var{style}
1808 @itemx --header-numbering=@var{style}
1809 @opindex -h
1810 @opindex --header-numbering
1811 Analogous to @option{--body-numbering}.
1813 @item -i @var{number}
1814 @itemx --line-increment=@var{number}
1815 @opindex -i
1816 @opindex --line-increment
1817 Increment line numbers by @var{number} (default 1).
1819 @item -l @var{number}
1820 @itemx --join-blank-lines=@var{number}
1821 @opindex -l
1822 @opindex --join-blank-lines
1823 @cindex empty lines, numbering
1824 @cindex blank lines, numbering
1825 Consider @var{number} (default 1) consecutive empty lines to be one
1826 logical line for numbering, and only number the last one.  Where fewer
1827 than @var{number} consecutive empty lines occur, do not number them.
1828 An empty line is one that contains no characters, not even spaces
1829 or tabs.
1831 @item -n @var{format}
1832 @itemx --number-format=@var{format}
1833 @opindex -n
1834 @opindex --number-format
1835 Select the line numbering format (default is @code{rn}):
1837 @table @samp
1838 @item ln
1839 @opindex ln @r{format for @command{nl}}
1840 left justified, no leading zeros;
1841 @item rn
1842 @opindex rn @r{format for @command{nl}}
1843 right justified, no leading zeros;
1844 @item rz
1845 @opindex rz @r{format for @command{nl}}
1846 right justified, leading zeros.
1847 @end table
1849 @item -p
1850 @itemx --no-renumber
1851 @opindex -p
1852 @opindex --no-renumber
1853 Do not reset the line number at the start of a logical page.
1855 @item -s @var{string}
1856 @itemx --number-separator=@var{string}
1857 @opindex -s
1858 @opindex --number-separator
1859 Separate the line number from the text line in the output with
1860 @var{string} (default is the TAB character).
1862 @item -v @var{number}
1863 @itemx --starting-line-number=@var{number}
1864 @opindex -v
1865 @opindex --starting-line-number
1866 Set the initial line number on each logical page to @var{number} (default 1).
1868 @item -w @var{number}
1869 @itemx --number-width=@var{number}
1870 @opindex -w
1871 @opindex --number-width
1872 Use @var{number} characters for line numbers (default 6).
1874 @end table
1876 @exitstatus
1879 @node od invocation
1880 @section @command{od}: Write files in octal or other formats
1882 @pindex od
1883 @cindex octal dump of files
1884 @cindex hex dump of files
1885 @cindex ASCII dump of files
1886 @cindex file contents, dumping unambiguously
1888 @command{od} writes an unambiguous representation of each @var{file}
1889 (@samp{-} means standard input), or standard input if none are given.
1890 Synopses:
1892 @smallexample
1893 od [@var{option}]@dots{} [@var{file}]@dots{}
1894 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1895 od [@var{option}]@dots{} --traditional [@var{file}]@c
1896  [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1897 @end smallexample
1899 Each line of output consists of the offset in the input, followed by
1900 groups of data from the file.  By default, @command{od} prints the offset in
1901 octal, and each group of file data is a C @code{short int}'s worth of input
1902 printed as a single octal number.
1904 If @var{offset} is given, it specifies how many input bytes to skip
1905 before formatting and writing.  By default, it is interpreted as an
1906 octal number, but the optional trailing decimal point causes it to be
1907 interpreted as decimal.  If no decimal is specified and the offset
1908 begins with @samp{0x} or @samp{0X} it is interpreted as a hexadecimal
1909 number.  If there is a trailing @samp{b}, the number of bytes skipped
1910 will be @var{offset} multiplied by 512.
1912 If a command is of both the first and second forms, the second form is
1913 assumed if the last operand begins with @samp{+} or (if there are two
1914 operands) a digit.  For example, in @samp{od foo 10} and @samp{od +10}
1915 the @samp{10} is an offset, whereas in @samp{od 10} the @samp{10} is a
1916 file name.
1918 The program accepts the following options.  Also see @ref{Common options}.
1920 @table @samp
1922 @item -A @var{radix}
1923 @itemx --address-radix=@var{radix}
1924 @opindex -A
1925 @opindex --address-radix
1926 @cindex radix for file offsets
1927 @cindex file offset radix
1928 Select the base in which file offsets are printed.  @var{radix} can
1929 be one of the following:
1931 @table @samp
1932 @item d
1933 decimal;
1934 @item o
1935 octal;
1936 @item x
1937 hexadecimal;
1938 @item n
1939 none (do not print offsets).
1940 @end table
1942 The default is octal.
1944 @item --endian=@var{order}
1945 @opindex --endian
1946 @cindex byte-swapping
1947 @cindex endianness
1948 Reorder input bytes, to handle inputs with differing byte orders,
1949 or to provide consistent output independent of the endian convention
1950 of the current system.  Swapping is performed according to the
1951 specified @option{--type} size and endian @var{order}, which can be
1952 @samp{little} or @samp{big}.
1954 @item -j @var{bytes}
1955 @itemx --skip-bytes=@var{bytes}
1956 @opindex -j
1957 @opindex --skip-bytes
1958 Skip @var{bytes} input bytes before formatting and writing.  If
1959 @var{bytes} begins with @samp{0x} or @samp{0X}, it is interpreted in
1960 hexadecimal; otherwise, if it begins with @samp{0}, in octal; otherwise,
1961 in decimal.
1962 @multiplierSuffixes{bytes}
1964 @item -N @var{bytes}
1965 @itemx --read-bytes=@var{bytes}
1966 @opindex -N
1967 @opindex --read-bytes
1968 Output at most @var{bytes} bytes of the input.  Prefixes and suffixes on
1969 @code{bytes} are interpreted as for the @option{-j} option.
1971 @item -S @var{bytes}
1972 @itemx --strings[=@var{bytes}]
1973 @opindex -S
1974 @opindex --strings
1975 @cindex string constants, outputting
1976 Instead of the normal output, output only @dfn{string constants}: at
1977 least @var{bytes} consecutive ASCII graphic characters,
1978 followed by a zero byte (ASCII NUL).
1979 Prefixes and suffixes on @var{bytes} are interpreted as for the
1980 @option{-j} option.
1982 If @var{bytes} is omitted with @option{--strings}, the default is 3.
1984 @item -t @var{type}
1985 @itemx --format=@var{type}
1986 @opindex -t
1987 @opindex --format
1988 Select the format in which to output the file data.  @var{type} is a
1989 string of one or more of the below type indicator characters.  If you
1990 include more than one type indicator character in a single @var{type}
1991 string, or use this option more than once, @command{od} writes one copy
1992 of each output line using each of the data types that you specified,
1993 in the order that you specified.
1995 Adding a trailing ``z'' to any type specification appends a display
1996 of the single byte character representation of the printable characters
1997 to the output line generated by the type specification.
1999 @table @samp
2000 @item a
2001 named character, ignoring high-order bit
2002 @item c
2003 printable single byte character, C backslash escape
2004 or a 3 digit octal sequence
2005 @item d
2006 signed decimal
2007 @item f
2008 floating point (@pxref{Floating point})
2009 @item o
2010 octal
2011 @item u
2012 unsigned decimal
2013 @item x
2014 hexadecimal
2015 @end table
2017 The type @code{a} outputs things like @samp{sp} for space, @samp{nl} for
2018 newline, and @samp{nul} for a zero byte.  Only the least significant
2019 seven bits of each byte is used; the high-order bit is ignored.
2020 Type @code{c} outputs
2021 @samp{ }, @samp{\n}, and @code{\0}, respectively.
2023 @cindex type size
2024 Except for types @samp{a} and @samp{c}, you can specify the number
2025 of bytes to use in interpreting each number in the given data type
2026 by following the type indicator character with a decimal integer.
2027 Alternately, you can specify the size of one of the C compiler's
2028 built-in data types by following the type indicator character with
2029 one of the following characters.  For integers (@samp{d}, @samp{o},
2030 @samp{u}, @samp{x}):
2032 @table @samp
2033 @item C
2034 char
2035 @item S
2036 short
2037 @item I
2039 @item L
2040 long
2041 @end table
2043 For floating point (@code{f}):
2045 @table @asis
2046 @item F
2047 float
2048 @item D
2049 double
2050 @item L
2051 long double
2052 @end table
2054 @item -v
2055 @itemx --output-duplicates
2056 @opindex -v
2057 @opindex --output-duplicates
2058 Output consecutive lines that are identical.  By default, when two or
2059 more consecutive output lines would be identical, @command{od} outputs only
2060 the first line, and puts just an asterisk on the following line to
2061 indicate the elision.
2063 @item -w[@var{n}]
2064 @itemx --width[=@var{n}]
2065 @opindex -w
2066 @opindex --width
2067 Dump @code{n} input bytes per output line.  This must be a multiple of
2068 the least common multiple of the sizes associated with the specified
2069 output types.
2071 If this option is not given at all, the default is 16.  If @var{n} is
2072 omitted, the default is 32.
2074 @end table
2076 The next several options are shorthands for format specifications.
2077 GNU @command{od} accepts any combination of shorthands and format
2078 specification options.  These options accumulate.
2080 @table @samp
2082 @item -a
2083 @opindex -a
2084 Output as named characters.  Equivalent to @samp{-t a}.
2086 @item -b
2087 @opindex -b
2088 Output as octal bytes.  Equivalent to @samp{-t o1}.
2090 @item -c
2091 @opindex -c
2092 Output as printable single byte characters, C backslash escapes
2093 or 3 digit octal sequences.  Equivalent to @samp{-t c}.
2095 @item -d
2096 @opindex -d
2097 Output as unsigned decimal two-byte units.  Equivalent to @samp{-t u2}.
2099 @item -f
2100 @opindex -f
2101 Output as floats.  Equivalent to @samp{-t fF}.
2103 @item -i
2104 @opindex -i
2105 Output as decimal ints.  Equivalent to @samp{-t dI}.
2107 @item -l
2108 @opindex -l
2109 Output as decimal long ints.  Equivalent to @samp{-t dL}.
2111 @item -o
2112 @opindex -o
2113 Output as octal two-byte units.  Equivalent to @option{-t o2}.
2115 @item -s
2116 @opindex -s
2117 Output as decimal two-byte units.  Equivalent to @option{-t d2}.
2119 @item -x
2120 @opindex -x
2121 Output as hexadecimal two-byte units.  Equivalent to @samp{-t x2}.
2123 @item --traditional
2124 @opindex --traditional
2125 Recognize the non-option label argument that traditional @command{od}
2126 accepted.  The following syntax:
2128 @smallexample
2129 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
2130 @end smallexample
2132 @noindent
2133 can be used to specify at most one file and optional arguments
2134 specifying an offset and a pseudo-start address, @var{label}.
2135 The @var{label} argument is interpreted
2136 just like @var{offset}, but it specifies an initial pseudo-address.  The
2137 pseudo-addresses are displayed in parentheses following any normal
2138 address.
2140 @end table
2142 @exitstatus
2145 @node base32 invocation
2146 @section @command{base32}: Transform data into printable data
2148 @pindex base32
2149 @cindex base32 encoding
2151 @command{base32} transforms data read from a file, or standard input,
2152 into (or from) base32 encoded form.  The base32 encoded form uses
2153 printable ASCII characters to represent binary data.
2154 The usage and options of this command are precisely the
2155 same as for @command{base64}.  @xref{base64 invocation}.
2158 @node base64 invocation
2159 @section @command{base64}: Transform data into printable data
2161 @pindex base64
2162 @cindex base64 encoding
2164 @command{base64} transforms data read from a file, or standard input,
2165 into (or from) base64 encoded form.  The base64 encoded form uses
2166 printable ASCII characters to represent binary data.
2167 Synopses:
2169 @smallexample
2170 base64 [@var{option}]@dots{} [@var{file}]
2171 base64 --decode [@var{option}]@dots{} [@var{file}]
2172 @end smallexample
2174 The base64 encoding expands data to roughly 133% of the original.
2175 The base32 encoding expands data to roughly 160% of the original.
2176 The format conforms to
2177 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc4648.txt, RFC 4648}.
2179 The program accepts the following options.  Also see @ref{Common options}.
2181 @table @samp
2183 @item -w @var{cols}
2184 @itemx --wrap=@var{cols}
2185 @opindex -w
2186 @opindex --wrap
2187 @cindex wrap data
2188 @cindex column to wrap data after
2189 During encoding, wrap lines after @var{cols} characters.  This must be
2190 a positive number.
2192 The default is to wrap after 76 characters.  Use the value 0 to
2193 disable line wrapping altogether.
2195 @item -d
2196 @itemx --decode
2197 @opindex -d
2198 @opindex --decode
2199 @cindex Decode base64 data
2200 @cindex Base64 decoding
2201 Change the mode of operation, from the default of encoding data, to
2202 decoding data.  Input is expected to be base64 encoded data, and the
2203 output will be the original data.
2205 @item -i
2206 @itemx --ignore-garbage
2207 @opindex -i
2208 @opindex --ignore-garbage
2209 @cindex Ignore garbage in base64 stream
2210 When decoding, newlines are always accepted.
2211 During decoding, ignore unrecognized bytes,
2212 to permit distorted data to be decoded.
2214 @end table
2216 @exitstatus
2219 @node Formatting file contents
2220 @chapter Formatting file contents
2222 @cindex formatting file contents
2224 These commands reformat the contents of files.
2226 @menu
2227 * fmt invocation::              Reformat paragraph text.
2228 * pr invocation::               Paginate or columnate files for printing.
2229 * fold invocation::             Wrap input lines to fit in specified width.
2230 @end menu
2233 @node fmt invocation
2234 @section @command{fmt}: Reformat paragraph text
2236 @pindex fmt
2237 @cindex reformatting paragraph text
2238 @cindex paragraphs, reformatting
2239 @cindex text, reformatting
2241 @command{fmt} fills and joins lines to produce output lines of (at most)
2242 a given number of characters (75 by default).  Synopsis:
2244 @example
2245 fmt [@var{option}]@dots{} [@var{file}]@dots{}
2246 @end example
2248 @command{fmt} reads from the specified @var{file} arguments (or standard
2249 input if none are given), and writes to standard output.
2251 By default, blank lines, spaces between words, and indentation are
2252 preserved in the output; successive input lines with different
2253 indentation are not joined; tabs are expanded on input and introduced on
2254 output.
2256 @cindex line-breaking
2257 @cindex sentences and line-breaking
2258 @cindex Knuth, Donald E.
2259 @cindex Plass, Michael F.
2260 @command{fmt} prefers breaking lines at the end of a sentence, and tries to
2261 avoid line breaks after the first word of a sentence or before the last
2262 word of a sentence.  A @dfn{sentence break} is defined as either the end
2263 of a paragraph or a word ending in any of @samp{.?!}, followed by two
2264 spaces or end of line, ignoring any intervening parentheses or quotes.
2265 Like @TeX{}, @command{fmt} reads entire ``paragraphs'' before choosing line
2266 breaks; the algorithm is a variant of that given by Donald E. Knuth
2267 and Michael F. Plass in ``Breaking Paragraphs Into Lines'',
2268 @cite{Software---Practice & Experience} @b{11}, 11 (November 1981),
2269 1119--1184.
2271 The program accepts the following options.  Also see @ref{Common options}.
2273 @table @samp
2275 @item -c
2276 @itemx --crown-margin
2277 @opindex -c
2278 @opindex --crown-margin
2279 @cindex crown margin
2280 @dfn{Crown margin} mode: preserve the indentation of the first two
2281 lines within a paragraph, and align the left margin of each subsequent
2282 line with that of the second line.
2284 @item -t
2285 @itemx --tagged-paragraph
2286 @opindex -t
2287 @opindex --tagged-paragraph
2288 @cindex tagged paragraphs
2289 @dfn{Tagged paragraph} mode: like crown margin mode, except that if
2290 indentation of the first line of a paragraph is the same as the
2291 indentation of the second, the first line is treated as a one-line
2292 paragraph.
2294 @item -s
2295 @itemx --split-only
2296 @opindex -s
2297 @opindex --split-only
2298 Split lines only.  Do not join short lines to form longer ones.  This
2299 prevents sample lines of code, and other such ``formatted'' text from
2300 being unduly combined.
2302 @item -u
2303 @itemx --uniform-spacing
2304 @opindex -u
2305 @opindex --uniform-spacing
2306 Uniform spacing.  Reduce spacing between words to one space, and spacing
2307 between sentences to two spaces.
2309 @item -@var{width}
2310 @itemx -w @var{width}
2311 @itemx --width=@var{width}
2312 @opindex -@var{width}
2313 @opindex -w
2314 @opindex --width
2315 Fill output lines up to @var{width} characters (default 75 or @var{goal}
2316 plus 10, if @var{goal} is provided).
2318 @item -g @var{goal}
2319 @itemx --goal=@var{goal}
2320 @opindex -g
2321 @opindex --goal
2322 @command{fmt} initially tries to make lines @var{goal} characters wide.
2323 By default, this is 7% shorter than @var{width}.
2325 @item -p @var{prefix}
2326 @itemx --prefix=@var{prefix}
2327 Only lines beginning with @var{prefix} (possibly preceded by whitespace)
2328 are subject to formatting.  The prefix and any preceding whitespace are
2329 stripped for the formatting and then re-attached to each formatted output
2330 line.  One use is to format certain kinds of program comments, while
2331 leaving the code unchanged.
2333 @end table
2335 @exitstatus
2337 @node pr invocation
2338 @section @command{pr}: Paginate or columnate files for printing
2340 @pindex pr
2341 @cindex printing, preparing files for
2342 @cindex multicolumn output, generating
2343 @cindex merging files in parallel
2345 @command{pr} writes each @var{file} (@samp{-} means standard input), or
2346 standard input if none are given, to standard output, paginating and
2347 optionally outputting in multicolumn format; optionally merges all
2348 @var{file}s, printing all in parallel, one per column.  Synopsis:
2350 @example
2351 pr [@var{option}]@dots{} [@var{file}]@dots{}
2352 @end example
2354 @vindex LC_MESSAGES
2355 By default, a 5-line header is printed at each page: two blank lines;
2356 a line with the date, the file name, and the page count; and two more
2357 blank lines.  A footer of five blank lines is also printed.
2358 The default @var{page_length} is 66
2359 lines.  The default number of text lines is therefore 56.
2360 The text line of the header takes the form
2361 @samp{@var{date} @var{string} @var{page}}, with spaces inserted around
2362 @var{string} so that the line takes up the full @var{page_width}.  Here,
2363 @var{date} is the date (see the @option{-D} or @option{--date-format}
2364 option for details), @var{string} is the centered header string, and
2365 @var{page} identifies the page number.  The @env{LC_MESSAGES} locale
2366 category affects the spelling of @var{page}; in the default C locale, it
2367 is @samp{Page @var{number}} where @var{number} is the decimal page
2368 number.
2370 Form feeds in the input cause page breaks in the output.  Multiple form
2371 feeds produce empty pages.
2373 Columns are of equal width, separated by an optional string (default
2374 is @samp{space}).  For multicolumn output, lines will always be truncated to
2375 @var{page_width} (default 72), unless you use the @option{-J} option.
2376 For single
2377 column output no line truncation occurs by default.  Use @option{-W} option to
2378 truncate lines in that case.
2380 The program accepts the following options.  Also see @ref{Common options}.
2382 @table @samp
2384 @item +@var{first_page}[:@var{last_page}]
2385 @itemx --pages=@var{first_page}[:@var{last_page}]
2386 @c The two following @opindex lines evoke warnings because they contain ':'
2387 @c The 'info' spec does not permit that.  If we use those lines, we end
2388 @c up with truncated index entries that don't work.
2389 @c @opindex +@var{first_page}[:@var{last_page}]
2390 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2391 @opindex +@var{page_range}
2392 @opindex --pages=@var{page_range}
2393 Begin printing with page @var{first_page} and stop with @var{last_page}.
2394 Missing @samp{:@var{last_page}} implies end of file.  While estimating
2395 the number of skipped pages each form feed in the input file results
2396 in a new page.  Page counting with and without @samp{+@var{first_page}}
2397 is identical.  By default, counting starts with the first page of input
2398 file (not first page printed).  Line numbering may be altered by @option{-N}
2399 option.
2401 @item -@var{column}
2402 @itemx --columns=@var{column}
2403 @opindex -@var{column}
2404 @opindex --columns
2405 @cindex down columns
2406 With each single @var{file}, produce @var{column} columns of output
2407 (default is 1) and print columns down, unless @option{-a} is used.  The
2408 column width is automatically decreased as @var{column} increases; unless
2409 you use the @option{-W/-w} option to increase @var{page_width} as well.
2410 This option might well cause some lines to be truncated.  The number of
2411 lines in the columns on each page are balanced.  The options @option{-e}
2412 and @option{-i} are on for multiple text-column output.  Together with
2413 @option{-J} option column alignment and line truncation is turned off.
2414 Lines of full length are joined in a free field format and @option{-S}
2415 option may set field separators.  @option{-@var{column}} may not be used
2416 with @option{-m} option.
2418 @item -a
2419 @itemx --across
2420 @opindex -a
2421 @opindex --across
2422 @cindex across columns
2423 With each single @var{file}, print columns across rather than down.  The
2424 @option{-@var{column}} option must be given with @var{column} greater than one.
2425 If a line is too long to fit in a column, it is truncated.
2427 @item -c
2428 @itemx --show-control-chars
2429 @opindex -c
2430 @opindex --show-control-chars
2431 Print control characters using hat notation (e.g., @samp{^G}); print
2432 other nonprinting characters in octal backslash notation.  By default,
2433 nonprinting characters are not changed.
2435 @item -d
2436 @itemx --double-space
2437 @opindex -d
2438 @opindex --double-space
2439 @cindex double spacing
2440 Double space the output.
2442 @item -D @var{format}
2443 @itemx --date-format=@var{format}
2444 @cindex time formats
2445 @cindex formatting times
2446 Format header dates using @var{format}, using the same conventions as
2447 for the command @samp{date +@var{format}}.  @xref{date invocation}.
2448 Except for directives, which start with
2449 @samp{%}, characters in @var{format} are printed unchanged.  You can use
2450 this option to specify an arbitrary string in place of the header date,
2451 e.g., @option{--date-format="Monday morning"}.
2453 @vindex POSIXLY_CORRECT
2454 @vindex LC_TIME
2455 The default date format is @samp{%Y-%m-%d %H:%M} (for example,
2456 @samp{2001-12-04 23:59});
2457 but if the @env{POSIXLY_CORRECT} environment variable is set
2458 and the @env{LC_TIME} locale category specifies the POSIX
2459 locale, the default is @samp{%b %e %H:%M %Y} (for example,
2460 @samp{Dec@ @ 4 23:59 2001}.
2462 @vindex TZ
2463 Time stamps are listed according to the time zone rules specified by
2464 the @env{TZ} environment variable, or by the system default rules if
2465 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
2466 with @env{TZ}, libc, The GNU C Library Reference Manual}.
2468 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2469 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2470 @opindex -e
2471 @opindex --expand-tabs
2472 @cindex input tabs
2473 Expand @var{tab}s to spaces on input.  Optional argument @var{in-tabchar} is
2474 the input tab character (default is the TAB character).  Second optional
2475 argument @var{in-tabwidth} is the input tab character's width (default
2476 is 8).
2478 @item -f
2479 @itemx -F
2480 @itemx --form-feed
2481 @opindex -F
2482 @opindex -f
2483 @opindex --form-feed
2484 Use a form feed instead of newlines to separate output pages.  This does
2485 not alter the default page length of 66 lines.
2487 @item -h @var{header}
2488 @itemx --header=@var{header}
2489 @opindex -h
2490 @opindex --header
2491 Replace the file name in the header with the centered string @var{header}.
2492 When using the shell, @var{header} should be quoted and should be
2493 separated from @option{-h} by a space.
2495 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2496 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2497 @opindex -i
2498 @opindex --output-tabs
2499 @cindex output tabs
2500 Replace spaces with @var{tab}s on output.  Optional argument @var{out-tabchar}
2501 is the output tab character (default is the TAB character).  Second optional
2502 argument @var{out-tabwidth} is the output tab character's width (default
2503 is 8).
2505 @item -J
2506 @itemx --join-lines
2507 @opindex -J
2508 @opindex --join-lines
2509 Merge lines of full length.  Used together with the column options
2510 @option{-@var{column}}, @option{-a -@var{column}} or @option{-m}.  Turns off
2511 @option{-W/-w} line truncation;
2512 no column alignment used; may be used with
2513 @option{--sep-string[=@var{string}]}.  @option{-J} has been introduced
2514 (together with @option{-W} and @option{--sep-string})
2515 to disentangle the old (POSIX-compliant) options @option{-w} and
2516 @option{-s} along with the three column options.
2519 @item -l @var{page_length}
2520 @itemx --length=@var{page_length}
2521 @opindex -l
2522 @opindex --length
2523 Set the page length to @var{page_length} (default 66) lines, including
2524 the lines of the header [and the footer].  If @var{page_length} is less
2525 than or equal to 10, the header and footer are omitted, as if the
2526 @option{-t} option had been given.
2528 @item -m
2529 @itemx --merge
2530 @opindex -m
2531 @opindex --merge
2532 Merge and print all @var{file}s in parallel, one in each column.  If a
2533 line is too long to fit in a column, it is truncated, unless the @option{-J}
2534 option is used.  @option{--sep-string[=@var{string}]} may be used.
2535 Empty pages in
2536 some @var{file}s (form feeds set) produce empty columns, still marked
2537 by @var{string}.  The result is a continuous line numbering and column
2538 marking throughout the whole merged file.  Completely empty merged pages
2539 show no separators or line numbers.  The default header becomes
2540 @samp{@var{date} @var{page}} with spaces inserted in the middle; this
2541 may be used with the @option{-h} or @option{--header} option to fill up
2542 the middle blank part.
2544 @item -n[@var{number-separator}[@var{digits}]]
2545 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2546 @opindex -n
2547 @opindex --number-lines
2548 Provide @var{digits} digit line numbering (default for @var{digits} is
2549 5).  With multicolumn output the number occupies the first @var{digits}
2550 column positions of each text column or only each line of @option{-m}
2551 output.  With single column output the number precedes each line just as
2552 @option{-m} does.  Default counting of the line numbers starts with the
2553 first line of the input file (not the first line printed, compare the
2554 @option{--page} option and @option{-N} option).
2555 Optional argument @var{number-separator} is the character appended to
2556 the line number to separate it from the text followed.  The default
2557 separator is the TAB character.  In a strict sense a TAB is always
2558 printed with single column output only.  The TAB width varies
2559 with the TAB position, e.g., with the left @var{margin} specified
2560 by @option{-o} option.  With multicolumn output priority is given to
2561 @samp{equal width of output columns} (a POSIX specification).
2562 The TAB width is fixed to the value of the first column and does
2563 not change with different values of left @var{margin}.  That means a
2564 fixed number of spaces is always printed in the place of the
2565 @var{number-separator} TAB@.  The tabification depends upon the output
2566 position.
2568 @item -N @var{line_number}
2569 @itemx --first-line-number=@var{line_number}
2570 @opindex -N
2571 @opindex --first-line-number
2572 Start line counting with the number @var{line_number} at first line of
2573 first page printed (in most cases not the first line of the input file).
2575 @item -o @var{margin}
2576 @itemx --indent=@var{margin}
2577 @opindex -o
2578 @opindex --indent
2579 @cindex indenting lines
2580 @cindex left margin
2581 Indent each line with a margin @var{margin} spaces wide (default is zero).
2582 The total page width is the size of the margin plus the @var{page_width}
2583 set with the @option{-W/-w} option.  A limited overflow may occur with
2584 numbered single column output (compare @option{-n} option).
2586 @item -r
2587 @itemx --no-file-warnings
2588 @opindex -r
2589 @opindex --no-file-warnings
2590 Do not print a warning message when an argument @var{file} cannot be
2591 opened.  (The exit status will still be nonzero, however.)
2593 @item -s[@var{char}]
2594 @itemx --separator[=@var{char}]
2595 @opindex -s
2596 @opindex --separator
2597 Separate columns by a single character @var{char}.  The default for
2598 @var{char} is the TAB character without @option{-w} and @samp{no
2599 character} with @option{-w}.  Without @option{-s} the default separator
2600 @samp{space} is set.  @option{-s[char]} turns off line truncation of all
2601 three column options (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m}) unless
2602 @option{-w} is set.  This is a POSIX-compliant formulation.
2605 @item -S[@var{string}]
2606 @itemx --sep-string[=@var{string}]
2607 @opindex -S
2608 @opindex --sep-string
2609 Use @var{string} to separate output columns.  The @option{-S} option doesn't
2610 affect the @option{-W/-w} option, unlike the @option{-s} option which does.  It
2611 does not affect line truncation or column alignment.
2612 Without @option{-S}, and with @option{-J}, @command{pr} uses the default output
2613 separator, TAB@.
2614 Without @option{-S} or @option{-J}, @command{pr} uses a @samp{space}
2615 (same as @option{-S"@w{ }"}).
2616 If no @samp{@var{string}} argument is specified, @samp{""} is assumed.
2618 @item -t
2619 @itemx --omit-header
2620 @opindex -t
2621 @opindex --omit-header
2622 Do not print the usual header [and footer] on each page, and do not fill
2623 out the bottom of pages (with blank lines or a form feed).  No page
2624 structure is produced, but form feeds set in the input files are retained.
2625 The predefined pagination is not changed.  @option{-t} or @option{-T} may be
2626 useful together with other options; e.g.: @option{-t -e4}, expand TAB characters
2627 in the input file to 4 spaces but don't make any other changes.  Use of
2628 @option{-t} overrides @option{-h}.
2630 @item -T
2631 @itemx --omit-pagination
2632 @opindex -T
2633 @opindex --omit-pagination
2634 Do not print header [and footer].  In addition eliminate all form feeds
2635 set in the input files.
2637 @item -v
2638 @itemx --show-nonprinting
2639 @opindex -v
2640 @opindex --show-nonprinting
2641 Print nonprinting characters in octal backslash notation.
2643 @item -w @var{page_width}
2644 @itemx --width=@var{page_width}
2645 @opindex -w
2646 @opindex --width
2647 Set page width to @var{page_width} characters for multiple text-column
2648 output only (default for @var{page_width} is 72).  The specified
2649 @var{page_width} is rounded down so that columns have equal width.
2650 @option{-s[CHAR]} turns off the default page width and any line truncation
2651 and column alignment.
2652 Lines of full length are merged, regardless of the column options
2653 set.  No @var{page_width} setting is possible with single column output.
2654 A POSIX-compliant formulation.
2656 @item -W @var{page_width}
2657 @itemx --page_width=@var{page_width}
2658 @opindex -W
2659 @opindex --page_width
2660 Set the page width to @var{page_width} characters, honored with and
2661 without a column option.  With a column option, the specified @var{page_width}
2662 is rounded down so that columns have equal width.  Text lines are truncated,
2663 unless @option{-J} is used. Together with one of the three column options
2664 (@option{-@var{column}}, @option{-a -@var{column}} or @option{-m}) column
2665 alignment is always used.  The separator options @option{-S} or @option{-s}
2666 don't disable the @option{-W} option.  Default is 72 characters.  Without
2667 @option{-W @var{page_width}} and without any of the column options NO line
2668 truncation is used (defined to keep downward compatibility and to meet
2669 most frequent tasks).  That's equivalent to @option{-W 72 -J}@.  The header
2670 line is never truncated.
2672 @end table
2674 @exitstatus
2677 @node fold invocation
2678 @section @command{fold}: Wrap input lines to fit in specified width
2680 @pindex fold
2681 @cindex wrapping long input lines
2682 @cindex folding long input lines
2684 @command{fold} writes each @var{file} (@option{-} means standard input), or
2685 standard input if none are given, to standard output, breaking long
2686 lines.  Synopsis:
2688 @example
2689 fold [@var{option}]@dots{} [@var{file}]@dots{}
2690 @end example
2692 By default, @command{fold} breaks lines wider than 80 columns.  The output
2693 is split into as many lines as necessary.
2695 @cindex screen columns
2696 @command{fold} counts screen columns by default; thus, a tab may count more
2697 than one column, backspace decreases the column count, and carriage
2698 return sets the column to zero.
2700 The program accepts the following options.  Also see @ref{Common options}.
2702 @table @samp
2704 @item -b
2705 @itemx --bytes
2706 @opindex -b
2707 @opindex --bytes
2708 Count bytes rather than columns, so that tabs, backspaces, and carriage
2709 returns are each counted as taking up one column, just like other
2710 characters.
2712 @item -s
2713 @itemx --spaces
2714 @opindex -s
2715 @opindex --spaces
2716 Break at word boundaries: the line is broken after the last blank before
2717 the maximum line length.  If the line contains no such blanks, the line
2718 is broken at the maximum line length as usual.
2720 @item -w @var{width}
2721 @itemx --width=@var{width}
2722 @opindex -w
2723 @opindex --width
2724 Use a maximum line length of @var{width} columns instead of 80.
2726 For compatibility @command{fold} supports an obsolete option syntax
2727 @option{-@var{width}}.  New scripts should use @option{-w @var{width}}
2728 instead.
2730 @end table
2732 @exitstatus
2735 @node Output of parts of files
2736 @chapter Output of parts of files
2738 @cindex output of parts of files
2739 @cindex parts of files, output of
2741 These commands output pieces of the input.
2743 @menu
2744 * head invocation::             Output the first part of files.
2745 * tail invocation::             Output the last part of files.
2746 * split invocation::            Split a file into pieces.
2747 * csplit invocation::           Split a file into context-determined pieces.
2748 @end menu
2750 @node head invocation
2751 @section @command{head}: Output the first part of files
2753 @pindex head
2754 @cindex initial part of files, outputting
2755 @cindex first part of files, outputting
2757 @command{head} prints the first part (10 lines by default) of each
2758 @var{file}; it reads from standard input if no files are given or
2759 when given a @var{file} of @option{-}.  Synopsis:
2761 @example
2762 head [@var{option}]@dots{} [@var{file}]@dots{}
2763 @end example
2765 If more than one @var{file} is specified, @command{head} prints a
2766 one-line header consisting of:
2768 @example
2769 ==> @var{file name} <==
2770 @end example
2772 @noindent
2773 before the output for each @var{file}.
2775 The program accepts the following options.  Also see @ref{Common options}.
2777 @table @samp
2779 @item -c @var{k}
2780 @itemx --bytes=@var{k}
2781 @opindex -c
2782 @opindex --bytes
2783 Print the first @var{k} bytes, instead of initial lines.
2784 However, if @var{k} starts with a @samp{-},
2785 print all but the last @var{k} bytes of each file.
2786 @multiplierSuffixes{k}
2788 @item -n @var{k}
2789 @itemx --lines=@var{k}
2790 @opindex -n
2791 @opindex --lines
2792 Output the first @var{k} lines.
2793 However, if @var{k} starts with a @samp{-},
2794 print all but the last @var{k} lines of each file.
2795 Size multiplier suffixes are the same as with the @option{-c} option.
2797 @item -q
2798 @itemx --quiet
2799 @itemx --silent
2800 @opindex -q
2801 @opindex --quiet
2802 @opindex --silent
2803 Never print file name headers.
2805 @item -v
2806 @itemx --verbose
2807 @opindex -v
2808 @opindex --verbose
2809 Always print file name headers.
2811 @end table
2813 For compatibility @command{head} also supports an obsolete option syntax
2814 @option{-@var{count}@var{options}}, which is recognized only if it is
2815 specified first.  @var{count} is a decimal number optionally followed
2816 by a size letter (@samp{b}, @samp{k}, @samp{m}) as in @option{-c}, or
2817 @samp{l} to mean count by lines, or other option letters (@samp{cqv}).
2818 Scripts intended for standard hosts should use @option{-c @var{count}}
2819 or @option{-n @var{count}} instead.  If your script must also run on
2820 hosts that support only the obsolete syntax, it is usually simpler to
2821 avoid @command{head}, e.g., by using @samp{sed 5q} instead of
2822 @samp{head -5}.
2824 @exitstatus
2827 @node tail invocation
2828 @section @command{tail}: Output the last part of files
2830 @pindex tail
2831 @cindex last part of files, outputting
2833 @command{tail} prints the last part (10 lines by default) of each
2834 @var{file}; it reads from standard input if no files are given or
2835 when given a @var{file} of @samp{-}.  Synopsis:
2837 @example
2838 tail [@var{option}]@dots{} [@var{file}]@dots{}
2839 @end example
2841 If more than one @var{file} is specified, @command{tail} prints a
2842 one-line header before the output for each @var{file}, consisting of:
2844 @example
2845 ==> @var{file name} <==
2846 @end example
2848 For further processing of tail output, it can be useful to convert the
2849 file headers to line prefixes, which can be done like:
2851 @example
2852 tail @dots{} |
2853 awk '
2854   /^==> .* <==$/ @{prefix=substr($0,5,length-8)":"; next@}
2855   @{print prefix$0@}
2856 ' | @dots{}
2857 @end example
2859 @cindex BSD @command{tail}
2860 GNU @command{tail} can output any amount of data (some other versions of
2861 @command{tail} cannot).  It also has no @option{-r} option (print in
2862 reverse), since reversing a file is really a different job from printing
2863 the end of a file; BSD @command{tail} (which is the one with @option{-r}) can
2864 only reverse files that are at most as large as its buffer, which is
2865 typically 32 KiB@.  A more reliable and versatile way to reverse files is
2866 the GNU @command{tac} command.
2868 The program accepts the following options.  Also see @ref{Common options}.
2870 @table @samp
2872 @item -c @var{k}
2873 @itemx --bytes=@var{k}
2874 @opindex -c
2875 @opindex --bytes
2876 Output the last @var{k} bytes, instead of final lines.
2877 However, if @var{k} starts with a @samp{+}, start printing with the
2878 @var{k}th byte from the start of each file, instead of from the end.
2879 @multiplierSuffixes{k}
2881 @item -f
2882 @itemx --follow[=@var{how}]
2883 @opindex -f
2884 @opindex --follow
2885 @cindex growing files
2886 @vindex name @r{follow option}
2887 @vindex descriptor @r{follow option}
2888 Loop forever trying to read more characters at the end of the file,
2889 presumably because the file is growing.
2890 If more than one file is given, @command{tail} prints a header whenever it
2891 gets output from a different file, to indicate which file that output is
2892 from.
2894 There are two ways to specify how you'd like to track files with this option,
2895 but that difference is noticeable only when a followed file is removed or
2896 renamed.
2897 If you'd like to continue to track the end of a growing file even after
2898 it has been unlinked, use @option{--follow=descriptor}.  This is the default
2899 behavior, but it is not useful if you're tracking a log file that may be
2900 rotated (removed or renamed, then reopened).  In that case, use
2901 @option{--follow=name} to track the named file, perhaps by reopening it
2902 periodically to see if it has been removed and recreated by some other program.
2903 Note that the inotify-based implementation handles this case without
2904 the need for any periodic reopening.
2906 No matter which method you use, if the tracked file is determined to have
2907 shrunk, @command{tail} prints a message saying the file has been truncated
2908 and resumes tracking the end of the file from the newly-determined endpoint.
2910 When a file is removed, @command{tail}'s behavior depends on whether it is
2911 following the name or the descriptor.  When following by name, tail can
2912 detect that a file has been removed and gives a message to that effect,
2913 and if @option{--retry} has been specified it will continue checking
2914 periodically to see if the file reappears.
2915 When following a descriptor, tail does not detect that the file has
2916 been unlinked or renamed and issues no message;  even though the file
2917 may no longer be accessible via its original name, it may still be
2918 growing.
2920 The option values @samp{descriptor} and @samp{name} may be specified only
2921 with the long form of the option, not with @option{-f}.
2923 The @option{-f} option is ignored if
2924 no @var{file} operand is specified and standard input is a FIFO or a pipe.
2925 Likewise, the @option{-f} option has no effect for any
2926 operand specified as @samp{-}, when standard input is a FIFO or a pipe.
2928 With kernel inotify support, output is triggered by file changes
2929 and is generally very prompt.
2930 Otherwise, @command{tail} sleeps for one second between checks---
2931 use @option{--sleep-interval=@var{n}} to change that default---which can
2932 make the output appear slightly less responsive or bursty.
2933 When using tail without inotify support, you can make it more responsive
2934 by using a sub-second sleep interval, e.g., via an alias like this:
2936 @example
2937 alias tail='tail -s.1'
2938 @end example
2940 @item -F
2941 @opindex -F
2942 This option is the same as @option{--follow=name --retry}.  That is, tail
2943 will attempt to reopen a file when it is removed.  Should this fail, tail
2944 will keep trying until it becomes accessible again.
2946 @item --retry
2947 @opindex --retry
2948 Indefinitely try to open the specified file.
2949 This option is useful mainly when following (and otherwise issues a warning).
2951 When following by file descriptor (i.e., with @option{--follow=descriptor}),
2952 this option only affects the initial open of the file, as after a successful
2953 open, @command{tail} will start following the file descriptor.
2955 When following by name (i.e., with @option{--follow=name}), @command{tail}
2956 infinitely retries to re-open the given files until killed.
2958 Without this option, when @command{tail} encounters a file that doesn't
2959 exist or is otherwise inaccessible, it reports that fact and
2960 never checks it again.
2962 @item -s @var{number}
2963 @itemx --sleep-interval=@var{number}
2964 @opindex -s
2965 @opindex --sleep-interval
2966 Change the number of seconds to wait between iterations (the default is 1.0).
2967 During one iteration, every specified file is checked to see if it has
2968 changed size.
2969 Historical implementations of @command{tail} have required that
2970 @var{number} be an integer.  However, GNU @command{tail} accepts
2971 an arbitrary floating point number.  @xref{Floating point}.
2972 When @command{tail} uses inotify, this polling-related option
2973 is usually ignored.  However, if you also specify @option{--pid=@var{p}},
2974 @command{tail} checks whether process @var{p} is alive at least
2975 every @var{number} seconds.
2977 @item --pid=@var{pid}
2978 @opindex --pid
2979 When following by name or by descriptor, you may specify the process ID,
2980 @var{pid}, of the sole writer of all @var{file} arguments.  Then, shortly
2981 after that process terminates, tail will also terminate.  This will
2982 work properly only if the writer and the tailing process are running on
2983 the same machine.  For example, to save the output of a build in a file
2984 and to watch the file grow, if you invoke @command{make} and @command{tail}
2985 like this then the tail process will stop when your build completes.
2986 Without this option, you would have had to kill the @code{tail -f}
2987 process yourself.
2989 @example
2990 $ make >& makerr & tail --pid=$! -f makerr
2991 @end example
2993 If you specify a @var{pid} that is not in use or that does not correspond
2994 to the process that is writing to the tailed files, then @command{tail}
2995 may terminate long before any @var{file}s stop growing or it may not
2996 terminate until long after the real writer has terminated.
2997 Note that @option{--pid} cannot be supported on some systems; @command{tail}
2998 will print a warning if this is the case.
3000 @item --max-unchanged-stats=@var{n}
3001 @opindex --max-unchanged-stats
3002 When tailing a file by name, if there have been @var{n} (default
3003 n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive
3004 iterations for which the file has not changed, then
3005 @code{open}/@code{fstat} the file to determine if that file name is
3006 still associated with the same device/inode-number pair as before.
3007 When following a log file that is rotated, this is approximately the
3008 number of seconds between when tail prints the last pre-rotation lines
3009 and when it prints the lines that have accumulated in the new log file.
3010 This option is meaningful only when polling (i.e., without inotify)
3011 and when following by name.
3013 @item -n @var{k}
3014 @itemx --lines=@var{k}
3015 @opindex -n
3016 @opindex --lines
3017 Output the last @var{k} lines.
3018 However, if @var{k} starts with a @samp{+}, start printing with the
3019 @var{k}th line from the start of each file, instead of from the end.
3020 Size multiplier suffixes are the same as with the @option{-c} option.
3022 @item -q
3023 @itemx --quiet
3024 @itemx --silent
3025 @opindex -q
3026 @opindex --quiet
3027 @opindex --silent
3028 Never print file name headers.
3030 @item -v
3031 @itemx --verbose
3032 @opindex -v
3033 @opindex --verbose
3034 Always print file name headers.
3036 @end table
3038 For compatibility @command{tail} also supports an obsolete usage
3039 @samp{tail -[@var{count}][bcl][f] [@var{file}]}, which is recognized
3040 only if it does not conflict with the usage described
3041 above.  This obsolete form uses exactly one option and at most one
3042 file.  In the option, @var{count} is an optional decimal number optionally
3043 followed by a size letter (@samp{b}, @samp{c}, @samp{l}) to mean count
3044 by 512-byte blocks, bytes, or lines, optionally followed by @samp{f}
3045 which has the same meaning as @option{-f}.
3047 @vindex _POSIX2_VERSION
3048 On older systems, the leading @samp{-} can be replaced by @samp{+} in
3049 the obsolete option syntax with the same meaning as in counts, and
3050 obsolete usage overrides normal usage when the two conflict.
3051 This obsolete behavior can be enabled or disabled with the
3052 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
3053 conformance}).
3055 Scripts intended for use on standard hosts should avoid obsolete
3056 syntax and should use @option{-c @var{count}[b]}, @option{-n
3057 @var{count}}, and/or @option{-f} instead.  If your script must also
3058 run on hosts that support only the obsolete syntax, you can often
3059 rewrite it to avoid problematic usages, e.g., by using @samp{sed -n
3060 '$p'} rather than @samp{tail -1}.  If that's not possible, the script
3061 can use a test like @samp{if tail -c +1 </dev/null >/dev/null 2>&1;
3062 then @dots{}} to decide which syntax to use.
3064 Even if your script assumes the standard behavior, you should still
3065 beware usages whose behaviors differ depending on the POSIX
3066 version.  For example, avoid @samp{tail - main.c}, since it might be
3067 interpreted as either @samp{tail main.c} or as @samp{tail -- -
3068 main.c}; avoid @samp{tail -c 4}, since it might mean either @samp{tail
3069 -c4} or @samp{tail -c 10 4}; and avoid @samp{tail +4}, since it might
3070 mean either @samp{tail ./+4} or @samp{tail -n +4}.
3072 @exitstatus
3075 @node split invocation
3076 @section @command{split}: Split a file into pieces.
3078 @pindex split
3079 @cindex splitting a file into pieces
3080 @cindex pieces, splitting a file into
3082 @command{split} creates output files containing consecutive or interleaved
3083 sections of @var{input}  (standard input if none is given or @var{input}
3084 is @samp{-}).  Synopsis:
3086 @example
3087 split [@var{option}] [@var{input} [@var{prefix}]]
3088 @end example
3090 By default, @command{split} puts 1000 lines of @var{input} (or whatever is
3091 left over for the last section), into each output file.
3093 @cindex output file name prefix
3094 The output files' names consist of @var{prefix} (@samp{x} by default)
3095 followed by a group of characters (@samp{aa}, @samp{ab}, @dots{} by
3096 default), such that concatenating the output files in traditional
3097 sorted order by file name produces the original input file (except
3098 @option{-nr/@var{n}}).  By default split will initially create files
3099 with two generated suffix characters, and will increase this width by two
3100 when the next most significant position reaches the last character.
3101 (@samp{yz}, @samp{zaaa}, @samp{zaab}, @dots{}).  In this way an arbitrary
3102 number of output files are supported, which sort as described above,
3103 even in the presence of an @option{--additional-suffix} option.
3104 If the @option{-a} option is specified and the output file names are
3105 exhausted, @command{split} reports an error without deleting the
3106 output files that it did create.
3108 The program accepts the following options.  Also see @ref{Common options}.
3110 @table @samp
3112 @item -l @var{lines}
3113 @itemx --lines=@var{lines}
3114 @opindex -l
3115 @opindex --lines
3116 Put @var{lines} lines of @var{input} into each output file.
3117 If @option{--separator} is specified, then @var{lines} determines
3118 the number of records.
3120 For compatibility @command{split} also supports an obsolete
3121 option syntax @option{-@var{lines}}.  New scripts should use
3122 @option{-l @var{lines}} instead.
3124 @item -b @var{size}
3125 @itemx --bytes=@var{size}
3126 @opindex -b
3127 @opindex --bytes
3128 Put @var{size} bytes of @var{input} into each output file.
3129 @multiplierSuffixes{size}
3131 @item -C @var{size}
3132 @itemx --line-bytes=@var{size}
3133 @opindex -C
3134 @opindex --line-bytes
3135 Put into each output file as many complete lines of @var{input} as
3136 possible without exceeding @var{size} bytes.  Individual lines or records
3137 longer than @var{size} bytes are broken into multiple files.
3138 @var{size} has the same format as for the @option{--bytes} option.
3139 If @option{--separator} is specified, then @var{lines} determines
3140 the number of records.
3142 @item --filter=@var{command}
3143 @opindex --filter
3144 With this option, rather than simply writing to each output file,
3145 write through a pipe to the specified shell @var{command} for each output file.
3146 @var{command} should use the $FILE environment variable, which is set
3147 to a different output file name for each invocation of the command.
3148 For example, imagine that you have a 1TiB compressed file
3149 that, if uncompressed, would be too large to reside on disk,
3150 yet you must split it into individually-compressed pieces
3151 of a more manageable size.
3152 To do that, you might run this command:
3154 @example
3155 xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
3156 @end example
3158 Assuming a 10:1 compression ratio, that would create about fifty 20GiB files
3159 with names @file{big-aa.xz}, @file{big-ab.xz}, @file{big-ac.xz}, etc.
3161 @item -n @var{chunks}
3162 @itemx --number=@var{chunks}
3163 @opindex -n
3164 @opindex --number
3166 Split @var{input} to @var{chunks} output files where @var{chunks} may be:
3168 @example
3169 @var{n}      generate @var{n} files based on current size of @var{input}
3170 @var{k}/@var{n}    only output @var{k}th of @var{n} to stdout
3171 l/@var{n}    generate @var{n} files without splitting lines or records
3172 l/@var{k}/@var{n}  likewise but only output @var{k}th of @var{n} to stdout
3173 r/@var{n}    like @samp{l} but use round robin distribution
3174 r/@var{k}/@var{n}  likewise but only output @var{k}th of @var{n} to stdout
3175 @end example
3177 Any excess bytes remaining after dividing the @var{input}
3178 into @var{n} chunks, are assigned to the last chunk.
3179 Any excess bytes appearing after the initial calculation are discarded
3180 (except when using @samp{r} mode).
3182 All @var{n} files are created even if there are fewer than @var{n} lines,
3183 or the @var{input} is truncated.
3185 For @samp{l} mode, chunks are approximately @var{input} size / @var{n}.
3186 The @var{input} is partitioned into @var{n} equal sized portions, with
3187 the last assigned any excess.  If a line @emph{starts} within a partition
3188 it is written completely to the corresponding file.  Since lines or records
3189 are not split even if they overlap a partition, the files written
3190 can be larger or smaller than the partition size, and even empty
3191 if a line/record is so long as to completely overlap the partition.
3193 For @samp{r} mode, the size of @var{input} is irrelevant,
3194 and so can be a pipe for example.
3196 @item -a @var{length}
3197 @itemx --suffix-length=@var{length}
3198 @opindex -a
3199 @opindex --suffix-length
3200 Use suffixes of length @var{length}.  If a @var{length} of 0 is specified,
3201 this is the same as if (any previous) @option{-a} was not specified, and
3202 thus enables the default behavior, which starts the suffix length at 2,
3203 and unless @option{-n} or @option{--numeric-suffixes=@var{from}} is
3204 specified, will auto increase the length by 2 as required.
3206 @item -d
3207 @itemx --numeric-suffixes[=@var{from}]
3208 @opindex -d
3209 @opindex --numeric-suffixes
3210 Use digits in suffixes rather than lower-case letters.  The numerical
3211 suffix counts from @var{from} if specified, 0 otherwise.
3213 @var{from} is supported with the long form option, and is used to either set the
3214 initial suffix for a single run, or to set the suffix offset for independently
3215 split inputs, and consequently the auto suffix length expansion described above
3216 is disabled.  Therefore you may also want to use option @option{-a} to allow
3217 suffixes beyond @samp{99}.  Note if option @option{--number} is specified and
3218 the number of files is less than @var{from}, a single run is assumed and the
3219 minimum suffix length required is automatically determined.
3221 @item --additional-suffix=@var{suffix}
3222 @opindex --additional-suffix
3223 Append an additional @var{suffix} to output file names.  @var{suffix}
3224 must not contain slash.
3226 @item -e
3227 @itemx --elide-empty-files
3228 @opindex -e
3229 @opindex --elide-empty-files
3230 Suppress the generation of zero-length output files.  This can happen
3231 with the @option{--number} option if a file is (truncated to be) shorter
3232 than the number requested, or if a line is so long as to completely
3233 span a chunk.  The output file sequence numbers, always run consecutively
3234 even when this option is specified.
3236 @item -t @var{separator}
3237 @itemx --separator=@var{separator}
3238 @opindex -t
3239 @opindex --separator
3240 @cindex line separator character
3241 @cindex record separator character
3242 Use character @var{separator} as the record separator instead of the default
3243 newline character (ASCII LF).
3244 To specify ASCII NUL as the separator, use the two-character string @samp{\0},
3245 e.g., @samp{split -t '\0'}.
3247 @item -u
3248 @itemx --unbuffered
3249 @opindex -u
3250 @opindex --unbuffered
3251 Immediately copy input to output in @option{--number r/@dots{}} mode,
3252 which is a much slower mode of operation.
3254 @item --verbose
3255 @opindex --verbose
3256 Write a diagnostic just before each output file is opened.
3258 @end table
3260 @exitstatus
3262 Here are a few examples to illustrate how the
3263 @option{--number} (@option{-n}) option works:
3265 Notice how, by default, one line may be split onto two or more:
3267 @example
3268 $ seq -w 6 10 > k; split -n3 k; head xa?
3269 ==> xaa <==
3272 ==> xab <==
3276 ==> xac <==
3279 @end example
3281 Use the "l/" modifier to suppress that:
3283 @example
3284 $ seq -w 6 10 > k; split -nl/3 k; head xa?
3285 ==> xaa <==
3289 ==> xab <==
3293 ==> xac <==
3295 @end example
3297 Use the "r/" modifier to distribute lines in a round-robin fashion:
3299 @example
3300 $ seq -w 6 10 > k; split -nr/3 k; head xa?
3301 ==> xaa <==
3305 ==> xab <==
3309 ==> xac <==
3311 @end example
3313 You can also extract just the Kth chunk.
3314 This extracts and prints just the 7th "chunk" of 33:
3316 @example
3317 $ seq 100 > k; split -nl/7/33 k
3321 @end example
3324 @node csplit invocation
3325 @section @command{csplit}: Split a file into context-determined pieces
3327 @pindex csplit
3328 @cindex context splitting
3329 @cindex splitting a file into pieces by context
3331 @command{csplit} creates zero or more output files containing sections of
3332 @var{input} (standard input if @var{input} is @samp{-}).  Synopsis:
3334 @example
3335 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
3336 @end example
3338 The contents of the output files are determined by the @var{pattern}
3339 arguments, as detailed below.  An error occurs if a @var{pattern}
3340 argument refers to a nonexistent line of the input file (e.g., if no
3341 remaining line matches a given regular expression).  After every
3342 @var{pattern} has been matched, any remaining input is copied into one
3343 last output file.
3345 By default, @command{csplit} prints the number of bytes written to each
3346 output file after it has been created.
3348 The types of pattern arguments are:
3350 @table @samp
3352 @item @var{n}
3353 Create an output file containing the input up to but not including line
3354 @var{n} (a positive integer).  If followed by a repeat count, also
3355 create an output file containing the next @var{n} lines of the input
3356 file once for each repeat.
3358 @item /@var{regexp}/[@var{offset}]
3359 Create an output file containing the current line up to (but not
3360 including) the next line of the input file that contains a match for
3361 @var{regexp}.  The optional @var{offset} is an integer.
3362 If it is given, the input up to (but not including) the
3363 matching line plus or minus @var{offset} is put into the output file,
3364 and the line after that begins the next section of input.
3366 @item %@var{regexp}%[@var{offset}]
3367 Like the previous type, except that it does not create an output
3368 file, so that section of the input file is effectively ignored.
3370 @item @{@var{repeat-count}@}
3371 Repeat the previous pattern @var{repeat-count} additional
3372 times.  The @var{repeat-count} can either be a positive integer or an
3373 asterisk, meaning repeat as many times as necessary until the input is
3374 exhausted.
3376 @end table
3378 The output files' names consist of a prefix (@samp{xx} by default)
3379 followed by a suffix.  By default, the suffix is an ascending sequence
3380 of two-digit decimal numbers from @samp{00} to @samp{99}.  In any case,
3381 concatenating the output files in sorted order by file name produces the
3382 original input file.
3384 By default, if @command{csplit} encounters an error or receives a hangup,
3385 interrupt, quit, or terminate signal, it removes any output files
3386 that it has created so far before it exits.
3388 The program accepts the following options.  Also see @ref{Common options}.
3390 @table @samp
3392 @item -f @var{prefix}
3393 @itemx --prefix=@var{prefix}
3394 @opindex -f
3395 @opindex --prefix
3396 @cindex output file name prefix
3397 Use @var{prefix} as the output file name prefix.
3399 @item -b @var{format}
3400 @itemx --suffix-format=@var{format}
3401 @opindex -b
3402 @opindex --suffix-format
3403 @cindex output file name suffix
3404 Use @var{format} as the output file name suffix.  When this option is
3405 specified, the suffix string must include exactly one
3406 @code{printf(3)}-style conversion specification, possibly including
3407 format specification flags, a field width, a precision specifications,
3408 or all of these kinds of modifiers.  The format letter must convert a
3409 binary unsigned integer argument to readable form.  The format letters
3410 @samp{d} and @samp{i} are aliases for @samp{u}, and the
3411 @samp{u}, @samp{o}, @samp{x}, and @samp{X} conversions are allowed.  The
3412 entire @var{format} is given (with the current output file number) to
3413 @code{sprintf(3)} to form the file name suffixes for each of the
3414 individual output files in turn.  If this option is used, the
3415 @option{--digits} option is ignored.
3417 @item -n @var{digits}
3418 @itemx --digits=@var{digits}
3419 @opindex -n
3420 @opindex --digits
3421 Use output file names containing numbers that are @var{digits} digits
3422 long instead of the default 2.
3424 @item -k
3425 @itemx --keep-files
3426 @opindex -k
3427 @opindex --keep-files
3428 Do not remove output files when errors are encountered.
3430 @item --suppress-matched
3431 @opindex --suppress-matched
3432 Do not output lines matching the specified @var{pattern}.
3433 I.e., suppress the boundary line from the start of the second
3434 and subsequent splits.
3436 @item -z
3437 @itemx --elide-empty-files
3438 @opindex -z
3439 @opindex --elide-empty-files
3440 Suppress the generation of zero-length output files.  (In cases where
3441 the section delimiters of the input file are supposed to mark the first
3442 lines of each of the sections, the first output file will generally be a
3443 zero-length file unless you use this option.)  The output file sequence
3444 numbers always run consecutively starting from 0, even when this option
3445 is specified.
3447 @item -s
3448 @itemx -q
3449 @itemx --silent
3450 @itemx --quiet
3451 @opindex -s
3452 @opindex -q
3453 @opindex --silent
3454 @opindex --quiet
3455 Do not print counts of output file sizes.
3457 @end table
3459 @exitstatus
3461 Here is an example of its usage.
3462 First, create an empty directory for the exercise,
3463 and cd into it:
3465 @example
3466 $ mkdir d && cd d
3467 @end example
3469 Now, split the sequence of 1..14 on lines that end with 0 or 5:
3471 @example
3472 $ seq 14 | csplit - '/[05]$/' '@{*@}'
3476 @end example
3478 Each number printed above is the size of an output
3479 file that csplit has just created.
3480 List the names of those output files:
3482 @example
3483 $ ls
3484 xx00  xx01  xx02
3485 @end example
3487 Use @command{head} to show their contents:
3489 @example
3490 $ head xx*
3491 ==> xx00 <==
3497 ==> xx01 <==
3504 ==> xx02 <==
3510 @end example
3512 Example of splitting input by empty lines:
3514 @example
3515 $ csplit --suppress-matched @var{input.txt} '/^$/' '@{*@}'
3516 @end example
3519 @c TODO: "uniq" already supports "--group".
3520 @c        when it gets the "--key" option, uncomment this example.
3522 @c Example of splitting input file, based on the value of column 2:
3524 @c @example
3525 @c $ cat @var{input.txt} |
3526 @c       sort -k2,2 |
3527 @c       uniq --group -k2,2 |
3528 @c       csplit -m '/^$/' '@{*@}'
3529 @c @end example
3531 @node Summarizing files
3532 @chapter Summarizing files
3534 @cindex summarizing files
3536 These commands generate just a few numbers representing entire
3537 contents of files.
3539 @menu
3540 * wc invocation::               Print newline, word, and byte counts.
3541 * sum invocation::              Print checksum and block counts.
3542 * cksum invocation::            Print CRC checksum and byte counts.
3543 * md5sum invocation::           Print or check MD5 digests.
3544 * sha1sum invocation::          Print or check SHA-1 digests.
3545 * sha2 utilities::              Print or check SHA-2 digests.
3546 @end menu
3549 @node wc invocation
3550 @section @command{wc}: Print newline, word, and byte counts
3552 @pindex wc
3553 @cindex byte count
3554 @cindex character count
3555 @cindex word count
3556 @cindex line count
3558 @command{wc} counts the number of bytes, characters, whitespace-separated
3559 words, and newlines in each given @var{file}, or standard input if none
3560 are given or for a @var{file} of @samp{-}.  Synopsis:
3562 @example
3563 wc [@var{option}]@dots{} [@var{file}]@dots{}
3564 @end example
3566 @cindex total counts
3567 @command{wc} prints one line of counts for each file, and if the file was
3568 given as an argument, it prints the file name following the counts.  If
3569 more than one @var{file} is given, @command{wc} prints a final line
3570 containing the cumulative counts, with the file name @file{total}.  The
3571 counts are printed in this order: newlines, words, characters, bytes,
3572 maximum line length.
3573 Each count is printed right-justified in a field with at least one
3574 space between fields so that the numbers and file names normally line
3575 up nicely in columns.  The width of the count fields varies depending
3576 on the inputs, so you should not depend on a particular field width.
3577 However, as a GNU extension, if only one count is printed,
3578 it is guaranteed to be printed without leading spaces.
3580 By default, @command{wc} prints three counts: the newline, words, and byte
3581 counts.  Options can specify that only certain counts be printed.
3582 Options do not undo others previously given, so
3584 @example
3585 wc --bytes --words
3586 @end example
3588 @noindent
3589 prints both the byte counts and the word counts.
3591 With the @option{--max-line-length} option, @command{wc} prints the length
3592 of the longest line per file, and if there is more than one file it
3593 prints the maximum (not the sum) of those lengths.  The line lengths here
3594 are measured in screen columns, according to the current locale and
3595 assuming tab positions in every 8th column.
3597 The program accepts the following options.  Also see @ref{Common options}.
3599 @table @samp
3601 @item -c
3602 @itemx --bytes
3603 @opindex -c
3604 @opindex --bytes
3605 Print only the byte counts.
3607 @item -m
3608 @itemx --chars
3609 @opindex -m
3610 @opindex --chars
3611 Print only the character counts.
3613 @item -w
3614 @itemx --words
3615 @opindex -w
3616 @opindex --words
3617 Print only the word counts.
3619 @item -l
3620 @itemx --lines
3621 @opindex -l
3622 @opindex --lines
3623 Print only the newline counts.
3625 @item -L
3626 @itemx --max-line-length
3627 @opindex -L
3628 @opindex --max-line-length
3629 Print only the maximum display widths.
3630 Tabs are set at every 8th column.
3631 Display widths of wide characters are considered.
3632 Non-printable characters are given 0 width.
3634 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
3635 @item --files0-from=@var{file}
3636 @opindex --files0-from=@var{file}
3637 @c This is commented out to avoid a texi2dvi failure.
3638 @c texi2dvi (GNU Texinfo 4.11) 1.104
3639 @c @cindex including files from @command{\cmd\}
3640 Disallow processing files named on the command line, and instead process
3641 those named in file @var{file}; each name being terminated by a zero byte
3642 (ASCII NUL).
3643 This is useful \withTotalOption\
3644 when the list of file names is so long that it may exceed a command line
3645 length limitation.
3646 In such cases, running @command{\cmd\} via @command{xargs} is undesirable
3647 because it splits the list into pieces and makes @command{\cmd\} print
3648 \subListOutput\ for each sublist rather than for the entire list.
3649 One way to produce a list of ASCII NUL terminated file
3650 names is with GNU
3651 @command{find}, using its @option{-print0} predicate.
3652 If @var{file} is @samp{-} then the ASCII NUL terminated
3653 file names are read from standard input.
3654 @end macro
3655 @filesZeroFromOption{wc,,a total}
3657 For example, to find the length of the longest line in any @file{.c} or
3658 @file{.h} file in the current hierarchy, do this:
3660 @example
3661 find . -name '*.[ch]' -print0 |
3662   wc -L --files0-from=- | tail -n1
3663 @end example
3665 @end table
3667 @exitstatus
3670 @node sum invocation
3671 @section @command{sum}: Print checksum and block counts
3673 @pindex sum
3674 @cindex 16-bit checksum
3675 @cindex checksum, 16-bit
3677 @command{sum} computes a 16-bit checksum for each given @var{file}, or
3678 standard input if none are given or for a @var{file} of @samp{-}.  Synopsis:
3680 @example
3681 sum [@var{option}]@dots{} [@var{file}]@dots{}
3682 @end example
3684 @command{sum} prints the checksum for each @var{file} followed by the
3685 number of blocks in the file (rounded up).  If more than one @var{file}
3686 is given, file names are also printed (by default).  (With the
3687 @option{--sysv} option, corresponding file names are printed when there is
3688 at least one file argument.)
3690 By default, GNU @command{sum} computes checksums using an algorithm
3691 compatible with BSD @command{sum} and prints file sizes in units of
3692 1024-byte blocks.
3694 The program accepts the following options.  Also see @ref{Common options}.
3696 @table @samp
3698 @item -r
3699 @opindex -r
3700 @cindex BSD @command{sum}
3701 Use the default (BSD compatible) algorithm.  This option is included for
3702 compatibility with the System V @command{sum}.  Unless @option{-s} was also
3703 given, it has no effect.
3705 @item -s
3706 @itemx --sysv
3707 @opindex -s
3708 @opindex --sysv
3709 @cindex System V @command{sum}
3710 Compute checksums using an algorithm compatible with System V
3711 @command{sum}'s default, and print file sizes in units of 512-byte blocks.
3713 @end table
3715 @command{sum} is provided for compatibility; the @command{cksum} program (see
3716 next section) is preferable in new applications.
3718 @exitstatus
3721 @node cksum invocation
3722 @section @command{cksum}: Print CRC checksum and byte counts
3724 @pindex cksum
3725 @cindex cyclic redundancy check
3726 @cindex CRC checksum
3728 @command{cksum} computes a cyclic redundancy check (CRC) checksum for each
3729 given @var{file}, or standard input if none are given or for a
3730 @var{file} of @samp{-}.  Synopsis:
3732 @example
3733 cksum [@var{option}]@dots{} [@var{file}]@dots{}
3734 @end example
3736 @command{cksum} prints the CRC checksum for each file along with the number
3737 of bytes in the file, and the file name unless no arguments were given.
3739 @command{cksum} is typically used to ensure that files
3740 transferred by unreliable means (e.g., netnews) have not been corrupted,
3741 by comparing the @command{cksum} output for the received files with the
3742 @command{cksum} output for the original files (typically given in the
3743 distribution).
3745 The CRC algorithm is specified by the POSIX standard.  It is not
3746 compatible with the BSD or System V @command{sum} algorithms (see the
3747 previous section); it is more robust.
3749 The only options are @option{--help} and @option{--version}.  @xref{Common
3750 options}.
3752 @exitstatus
3755 @node md5sum invocation
3756 @section @command{md5sum}: Print or check MD5 digests
3758 @pindex md5sum
3759 @cindex MD5
3760 @cindex 128-bit checksum
3761 @cindex checksum, 128-bit
3762 @cindex fingerprint, 128-bit
3763 @cindex message-digest, 128-bit
3765 @command{md5sum} computes a 128-bit checksum (or @dfn{fingerprint} or
3766 @dfn{message-digest}) for each specified @var{file}.
3768 Note: The MD5 digest is more reliable than a simple CRC (provided by
3769 the @command{cksum} command) for detecting accidental file corruption,
3770 as the chances of accidentally having two files with identical MD5
3771 are vanishingly small.  However, it should not be considered secure
3772 against malicious tampering: although finding a file with a given MD5
3773 fingerprint is considered infeasible at the moment, it is known how
3774 to modify certain files, including digital certificates, so that they
3775 appear valid when signed with an MD5 digest.
3776 For more secure hashes, consider using SHA-2.  @xref{sha2 utilities}.
3778 If a @var{file} is specified as @samp{-} or if no files are given
3779 @command{md5sum} computes the checksum for the standard input.
3780 @command{md5sum} can also determine whether a file and checksum are
3781 consistent.  Synopsis:
3783 @example
3784 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
3785 @end example
3787 For each @var{file}, @samp{md5sum} outputs by default, the MD5 checksum,
3788 a space, a flag indicating binary or text input mode, and the file name.
3789 Binary mode is indicated with @samp{*}, text mode with @samp{ } (space).
3790 Binary mode is the default on systems where it's significant,
3791 otherwise text mode is the default.
3792 If @var{file} contains a backslash or newline, the
3793 line is started with a backslash, and each problematic character in
3794 the file name is escaped with a backslash, making the output
3795 unambiguous even in the presence of arbitrary file names.
3796 If @var{file} is omitted or specified as @samp{-}, standard input is read.
3798 The program accepts the following options.  Also see @ref{Common options}.
3800 @table @samp
3802 @item -b
3803 @itemx --binary
3804 @opindex -b
3805 @opindex --binary
3806 @cindex binary input files
3807 Treat each input file as binary, by reading it in binary mode and
3808 outputting a @samp{*} flag.  This is the inverse of @option{--text}.
3809 On systems like GNU that do not distinguish between binary
3810 and text files, this option merely flags each input mode as binary:
3811 the MD5 checksum is unaffected.  This option is the default on systems
3812 like MS-DOS that distinguish between binary and text files, except
3813 for reading standard input when standard input is a terminal.
3815 @item -c
3816 @itemx --check
3817 Read file names and checksum information (not data) from each
3818 @var{file} (or from stdin if no @var{file} was specified) and report
3819 whether the checksums match the contents of the named files.
3820 The input to this mode of @command{md5sum} is usually the output of
3821 a prior, checksum-generating run of @samp{md5sum}.
3822 Three input formats are supported.  Either the default output
3823 format described above, the @option{--tag} output format,
3824 or the BSD reversed mode format which is similar to the default mode,
3825 but doesn't use a character to distinguish binary and text modes.
3826 @sp 1
3827 For each such line, @command{md5sum} reads the named file and computes its
3828 MD5 checksum.  Then, if the computed message digest does not match the
3829 one on the line with the file name, the file is noted as having
3830 failed the test.  Otherwise, the file passes the test.
3831 By default, for each valid line, one line is written to standard
3832 output indicating whether the named file passed the test.
3833 After all checks have been performed, if there were any failures,
3834 a warning is issued to standard error.
3835 Use the @option{--status} option to inhibit that output.
3836 If any listed file cannot be opened or read, if any valid line has
3837 an MD5 checksum inconsistent with the associated file, or if no valid
3838 line is found, @command{md5sum} exits with nonzero status.  Otherwise,
3839 it exits successfully.
3841 @item --ignore-missing
3842 @opindex --ignore-missing
3843 @cindex verifying MD5 checksums
3844 This option is useful only when verifying checksums.
3845 When verifying checksums, don't fail or report any status
3846 for missing files.  This is useful when verifying a subset
3847 of downloaded files given a larger list of checksums.
3849 @item --quiet
3850 @opindex --quiet
3851 @cindex verifying MD5 checksums
3852 This option is useful only when verifying checksums.
3853 When verifying checksums, don't generate an 'OK' message per successfully
3854 checked file.  Files that fail the verification are reported in the
3855 default one-line-per-file format.  If there is any checksum mismatch,
3856 print a warning summarizing the failures to standard error.
3858 @item --status
3859 @opindex --status
3860 @cindex verifying MD5 checksums
3861 This option is useful only when verifying checksums.
3862 When verifying checksums, don't generate the default one-line-per-file
3863 diagnostic and don't output the warning summarizing any failures.
3864 Failures to open or read a file still evoke individual diagnostics to
3865 standard error.
3866 If all listed files are readable and are consistent with the associated
3867 MD5 checksums, exit successfully.  Otherwise exit with a status code
3868 indicating there was a failure.
3870 @item --tag
3871 @opindex --tag
3872 @cindex BSD output
3873 Output BSD style checksums, which indicate the checksum algorithm used.
3874 As a GNU extension, file names with problematic characters
3875 are escaped as described above, with the same escaping indicator of @samp{\}
3876 at the start of the line, being used.
3877 The @option{--tag} option implies binary mode, and is disallowed with
3878 @option{--text} mode as supporting that would unnecessarily complicate
3879 the output format, while providing little benefit.
3881 @item -t
3882 @itemx --text
3883 @opindex -t
3884 @opindex --text
3885 @cindex text input files
3886 Treat each input file as text, by reading it in text mode and
3887 outputting a @samp{ } flag.  This is the inverse of @option{--binary}.
3888 This option is the default on systems like GNU that do not
3889 distinguish between binary and text files.  On other systems, it is
3890 the default for reading standard input when standard input is a
3891 terminal.  This mode is never defaulted to if @option{--tag} is used.
3893 @item -w
3894 @itemx --warn
3895 @opindex -w
3896 @opindex --warn
3897 @cindex verifying MD5 checksums
3898 When verifying checksums, warn about improperly formatted MD5 checksum lines.
3899 This option is useful only if all but a few lines in the checked input
3900 are valid.
3902 @item --strict
3903 @opindex --strict
3904 @cindex verifying MD5 checksums
3905 When verifying checksums,
3906 if one or more input line is invalid,
3907 exit nonzero after all warnings have been issued.
3909 @end table
3911 @exitstatus
3914 @node sha1sum invocation
3915 @section @command{sha1sum}: Print or check SHA-1 digests
3917 @pindex sha1sum
3918 @cindex SHA-1
3919 @cindex 160-bit checksum
3920 @cindex checksum, 160-bit
3921 @cindex fingerprint, 160-bit
3922 @cindex message-digest, 160-bit
3924 @command{sha1sum} computes a 160-bit checksum for each specified
3925 @var{file}.  The usage and options of this command are precisely the
3926 same as for @command{md5sum}.  @xref{md5sum invocation}.
3928 Note: The SHA-1 digest is more secure than MD5, and no collisions of
3929 it are known (different files having the same fingerprint).  However,
3930 it is known that they can be produced with considerable, but not
3931 unreasonable, resources.  For this reason, it is generally considered
3932 that SHA-1 should be gradually phased out in favor of the more secure
3933 SHA-2 hash algorithms.  @xref{sha2 utilities}.
3936 @node sha2 utilities
3937 @section sha2 utilities: Print or check SHA-2 digests
3939 @pindex sha224sum
3940 @pindex sha256sum
3941 @pindex sha384sum
3942 @pindex sha512sum
3943 @cindex SHA-2
3944 @cindex 224-bit checksum
3945 @cindex 256-bit checksum
3946 @cindex 384-bit checksum
3947 @cindex 512-bit checksum
3948 @cindex checksum, 224-bit
3949 @cindex checksum, 256-bit
3950 @cindex checksum, 384-bit
3951 @cindex checksum, 512-bit
3952 @cindex fingerprint, 224-bit
3953 @cindex fingerprint, 256-bit
3954 @cindex fingerprint, 384-bit
3955 @cindex fingerprint, 512-bit
3956 @cindex message-digest, 224-bit
3957 @cindex message-digest, 256-bit
3958 @cindex message-digest, 384-bit
3959 @cindex message-digest, 512-bit
3961 The commands @command{sha224sum}, @command{sha256sum},
3962 @command{sha384sum} and @command{sha512sum} compute checksums of
3963 various lengths (respectively 224, 256, 384 and 512 bits),
3964 collectively known as the SHA-2 hashes.  The usage and options of
3965 these commands are precisely the same as for @command{md5sum}
3966 and @command{sha1sum}.
3967 @xref{md5sum invocation}.
3970 @node Operating on sorted files
3971 @chapter Operating on sorted files
3973 @cindex operating on sorted files
3974 @cindex sorted files, operations on
3976 These commands work with (or produce) sorted files.
3978 @menu
3979 * sort invocation::             Sort text files.
3980 * shuf invocation::             Shuffle text files.
3981 * uniq invocation::             Uniquify files.
3982 * comm invocation::             Compare two sorted files line by line.
3983 * ptx invocation::              Produce a permuted index of file contents.
3984 * tsort invocation::            Topological sort.
3985 @end menu
3988 @node sort invocation
3989 @section @command{sort}: Sort text files
3991 @pindex sort
3992 @cindex sorting files
3994 @command{sort} sorts, merges, or compares all the lines from the given
3995 files, or standard input if none are given or for a @var{file} of
3996 @samp{-}.  By default, @command{sort} writes the results to standard
3997 output.  Synopsis:
3999 @example
4000 sort [@var{option}]@dots{} [@var{file}]@dots{}
4001 @end example
4003 @command{sort} has three modes of operation: sort (the default), merge,
4004 and check for sortedness.  The following options change the operation
4005 mode:
4007 @table @samp
4009 @item -c
4010 @itemx --check
4011 @itemx --check=diagnose-first
4012 @opindex -c
4013 @opindex --check
4014 @cindex checking for sortedness
4015 Check whether the given file is already sorted: if it is not all
4016 sorted, print a diagnostic containing the first out-of-order line and
4017 exit with a status of 1.
4018 Otherwise, exit successfully.
4019 At most one input file can be given.
4021 @item -C
4022 @itemx --check=quiet
4023 @itemx --check=silent
4024 @opindex -c
4025 @opindex --check
4026 @cindex checking for sortedness
4027 Exit successfully if the given file is already sorted, and
4028 exit with status 1 otherwise.
4029 At most one input file can be given.
4030 This is like @option{-c}, except it does not print a diagnostic.
4032 @item -m
4033 @itemx --merge
4034 @opindex -m
4035 @opindex --merge
4036 @cindex merging sorted files
4037 Merge the given files by sorting them as a group.  Each input file must
4038 always be individually sorted.  It always works to sort instead of
4039 merge; merging is provided because it is faster, in the case where it
4040 works.
4042 @end table
4044 @cindex sort stability
4045 @cindex sort's last-resort comparison
4046 A pair of lines is compared as follows:
4047 @command{sort} compares each pair of fields, in the
4048 order specified on the command line, according to the associated
4049 ordering options, until a difference is found or no fields are left.
4050 If no key fields are specified, @command{sort} uses a default key of
4051 the entire line.  Finally, as a last resort when all keys compare
4052 equal, @command{sort} compares entire lines as if no ordering options
4053 other than @option{--reverse} (@option{-r}) were specified.  The
4054 @option{--stable} (@option{-s}) option disables this @dfn{last-resort
4055 comparison} so that lines in which all fields compare equal are left
4056 in their original relative order.  The @option{--unique}
4057 (@option{-u}) option also disables the last-resort comparison.
4059 @vindex LC_ALL
4060 @vindex LC_COLLATE
4061 Unless otherwise specified, all comparisons use the character collating
4062 sequence specified by the @env{LC_COLLATE} locale.@footnote{If you
4063 use a non-POSIX locale (e.g., by setting @env{LC_ALL}
4064 to @samp{en_US}), then @command{sort} may produce output that is sorted
4065 differently than you're accustomed to.  In that case, set the @env{LC_ALL}
4066 environment variable to @samp{C}@.  Note that setting only @env{LC_COLLATE}
4067 has two problems.  First, it is ineffective if @env{LC_ALL} is also set.
4068 Second, it has undefined behavior if @env{LC_CTYPE} (or @env{LANG}, if
4069 @env{LC_CTYPE} is unset) is set to an incompatible value.  For example,
4070 you get undefined behavior if @env{LC_CTYPE} is @code{ja_JP.PCK} but
4071 @env{LC_COLLATE} is @code{en_US.UTF-8}.}
4073 GNU @command{sort} (as specified for all GNU utilities) has no
4074 limit on input line length or restrictions on bytes allowed within lines.
4075 In addition, if the final byte of an input file is not a newline, GNU
4076 @command{sort} silently supplies one.  A line's trailing newline is not
4077 part of the line for comparison purposes.
4079 @cindex exit status of @command{sort}
4080 Exit status:
4082 @display
4083 0 if no error occurred
4084 1 if invoked with @option{-c} or @option{-C} and the input is not sorted
4085 2 if an error occurred
4086 @end display
4088 @vindex TMPDIR
4089 If the environment variable @env{TMPDIR} is set, @command{sort} uses its
4090 value as the directory for temporary files instead of @file{/tmp}.  The
4091 @option{--temporary-directory} (@option{-T}) option in turn overrides
4092 the environment variable.
4094 The following options affect the ordering of output lines.  They may be
4095 specified globally or as part of a specific key field.  If no key
4096 fields are specified, global options apply to comparison of entire
4097 lines; otherwise the global options are inherited by key fields that do
4098 not specify any special options of their own.  In pre-POSIX
4099 versions of @command{sort}, global options affect only later key fields,
4100 so portable shell scripts should specify global options first.
4102 @table @samp
4104 @item -b
4105 @itemx --ignore-leading-blanks
4106 @opindex -b
4107 @opindex --ignore-leading-blanks
4108 @cindex blanks, ignoring leading
4109 @vindex LC_CTYPE
4110 Ignore leading blanks when finding sort keys in each line.
4111 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4112 can change this.  Note blanks may be ignored by your locale's collating
4113 rules, but without this option they will be significant for character
4114 positions specified in keys with the @option{-k} option.
4116 @item -d
4117 @itemx --dictionary-order
4118 @opindex -d
4119 @opindex --dictionary-order
4120 @cindex dictionary order
4121 @cindex phone directory order
4122 @cindex telephone directory order
4123 @vindex LC_CTYPE
4124 Sort in @dfn{phone directory} order: ignore all characters except
4125 letters, digits and blanks when sorting.
4126 By default letters and digits are those of ASCII and a blank
4127 is a space or a tab, but the @env{LC_CTYPE} locale can change this.
4129 @item -f
4130 @itemx --ignore-case
4131 @opindex -f
4132 @opindex --ignore-case
4133 @cindex ignoring case
4134 @cindex case folding
4135 @vindex LC_CTYPE
4136 Fold lowercase characters into the equivalent uppercase characters when
4137 comparing so that, for example, @samp{b} and @samp{B} sort as equal.
4138 The @env{LC_CTYPE} locale determines character types.
4139 When used with @option{--unique} those lower case equivalent lines are
4140 thrown away.  (There is currently no way to throw away the upper case
4141 equivalent instead.  (Any @option{--reverse} given would only affect
4142 the final result, after the throwing away.))
4144 @item -g
4145 @itemx --general-numeric-sort
4146 @itemx --sort=general-numeric
4147 @opindex -g
4148 @opindex --general-numeric-sort
4149 @opindex --sort
4150 @cindex general numeric sort
4151 @vindex LC_NUMERIC
4152 Sort numerically, converting a prefix of each line to a long
4153 double-precision floating point number.  @xref{Floating point}.
4154 Do not report overflow, underflow, or conversion errors.
4155 Use the following collating sequence:
4157 @itemize @bullet
4158 @item
4159 Lines that do not start with numbers (all considered to be equal).
4160 @item
4161 NaNs (``Not a Number'' values, in IEEE floating point arithmetic)
4162 in a consistent but machine-dependent order.
4163 @item
4164 Minus infinity.
4165 @item
4166 Finite numbers in ascending numeric order (with @math{-0} and @math{+0} equal).
4167 @item
4168 Plus infinity.
4169 @end itemize
4171 Use this option only if there is no alternative; it is much slower than
4172 @option{--numeric-sort} (@option{-n}) and it can lose information when
4173 converting to floating point.
4175 @item -h
4176 @itemx --human-numeric-sort
4177 @itemx --sort=human-numeric
4178 @opindex -h
4179 @opindex --human-numeric-sort
4180 @opindex --sort
4181 @cindex human numeric sort
4182 @vindex LC_NUMERIC
4183 Sort numerically, first by numeric sign (negative, zero, or positive);
4184 then by SI suffix (either empty, or @samp{k} or @samp{K}, or
4185 one of @samp{MGTPEZY}, in that order; @pxref{Block size}); and finally
4186 by numeric value.  For example, @samp{1023M} sorts before @samp{1G}
4187 because @samp{M} (mega) precedes @samp{G} (giga) as an SI
4188 suffix.  This option sorts values that are consistently scaled to the
4189 nearest suffix, regardless of whether suffixes denote powers of 1000
4190 or 1024, and it therefore sorts the output of any single invocation of
4191 the @command{df}, @command{du}, or @command{ls} commands that are
4192 invoked with their @option{--human-readable} or @option{--si} options.
4193 The syntax for numbers is the same as for the @option{--numeric-sort}
4194 option; the SI suffix must immediately follow the number.
4195 Note also the @command{numfmt} command, which can be used to reformat
4196 numbers to human format @emph{after} the sort, thus often allowing
4197 sort to operate on more accurate numbers.
4199 @item -i
4200 @itemx --ignore-nonprinting
4201 @opindex -i
4202 @opindex --ignore-nonprinting
4203 @cindex nonprinting characters, ignoring
4204 @cindex unprintable characters, ignoring
4205 @vindex LC_CTYPE
4206 Ignore nonprinting characters.
4207 The @env{LC_CTYPE} locale determines character types.
4208 This option has no effect if the stronger @option{--dictionary-order}
4209 (@option{-d}) option is also given.
4211 @item -M
4212 @itemx --month-sort
4213 @itemx --sort=month
4214 @opindex -M
4215 @opindex --month-sort
4216 @opindex --sort
4217 @cindex months, sorting by
4218 @vindex LC_TIME
4219 An initial string, consisting of any amount of blanks, followed
4220 by a month name abbreviation, is folded to UPPER case and
4221 compared in the order @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}@.
4222 Invalid names compare low to valid names.  The @env{LC_TIME} locale
4223 category determines the month spellings.
4224 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4225 can change this.
4227 @item -n
4228 @itemx --numeric-sort
4229 @itemx --sort=numeric
4230 @opindex -n
4231 @opindex --numeric-sort
4232 @opindex --sort
4233 @cindex numeric sort
4234 @vindex LC_NUMERIC
4235 Sort numerically.  The number begins each line and consists
4236 of optional blanks, an optional @samp{-} sign, and zero or more
4237 digits possibly separated by thousands separators, optionally followed
4238 by a decimal-point character and zero or more digits.  An empty
4239 number is treated as @samp{0}.  The @env{LC_NUMERIC}
4240 locale specifies the decimal-point character and thousands separator.
4241 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4242 can change this.
4244 Comparison is exact; there is no rounding error.
4246 Neither a leading @samp{+} nor exponential notation is recognized.
4247 To compare such strings numerically, use the
4248 @option{--general-numeric-sort} (@option{-g}) option.
4250 @item -V
4251 @itemx --version-sort
4252 @opindex -V
4253 @opindex --version-sort
4254 @cindex version number sort
4255 Sort by version name and number.  It behaves like a standard sort,
4256 except that each sequence of decimal digits is treated numerically
4257 as an index/version number.  (@xref{Details about version sort}.)
4259 @item -r
4260 @itemx --reverse
4261 @opindex -r
4262 @opindex --reverse
4263 @cindex reverse sorting
4264 Reverse the result of comparison, so that lines with greater key values
4265 appear earlier in the output instead of later.
4267 @item -R
4268 @itemx --random-sort
4269 @itemx --sort=random
4270 @opindex -R
4271 @opindex --random-sort
4272 @opindex --sort
4273 @cindex random sort
4274 Sort by hashing the input keys and then sorting the hash values.
4275 Choose the hash function at random, ensuring that it is free of
4276 collisions so that differing keys have differing hash values.  This is
4277 like a random permutation of the inputs (@pxref{shuf invocation}),
4278 except that keys with the same value sort together.
4280 If multiple random sort fields are specified, the same random hash
4281 function is used for all fields.  To use different random hash
4282 functions for different fields, you can invoke @command{sort} more
4283 than once.
4285 The choice of hash function is affected by the
4286 @option{--random-source} option.
4288 @end table
4290 Other options are:
4292 @table @samp
4294 @item --compress-program=@var{prog}
4295 Compress any temporary files with the program @var{prog}.
4297 With no arguments, @var{prog} must compress standard input to standard
4298 output, and when given the @option{-d} option it must decompress
4299 standard input to standard output.
4301 Terminate with an error if @var{prog} exits with nonzero status.
4303 White space and the backslash character should not appear in
4304 @var{prog}; they are reserved for future use.
4306 @filesZeroFromOption{sort,,sorted output}
4308 @item -k @var{pos1}[,@var{pos2}]
4309 @itemx --key=@var{pos1}[,@var{pos2}]
4310 @opindex -k
4311 @opindex --key
4312 @cindex sort field
4313 Specify a sort field that consists of the part of the line between
4314 @var{pos1} and @var{pos2} (or the end of the line, if @var{pos2} is
4315 omitted), @emph{inclusive}.
4317 Each @var{pos} has the form @samp{@var{f}[.@var{c}][@var{opts}]},
4318 where @var{f} is the number of the field to use, and @var{c} is the number
4319 of the first character from the beginning of the field.  Fields and character
4320 positions are numbered starting with 1; a character position of zero in
4321 @var{pos2} indicates the field's last character.  If @samp{.@var{c}} is
4322 omitted from @var{pos1}, it defaults to 1 (the beginning of the field);
4323 if omitted from @var{pos2}, it defaults to 0 (the end of the field).
4324 @var{opts} are ordering options, allowing individual keys to be sorted
4325 according to different rules; see below for details.  Keys can span
4326 multiple fields.
4328 Example:  To sort on the second field, use @option{--key=2,2}
4329 (@option{-k 2,2}).  See below for more notes on keys and more examples.
4330 See also the @option{--debug} option to help determine the part
4331 of the line being used in the sort.
4333 @item --debug
4334 Highlight the portion of each line used for sorting.
4335 Also issue warnings about questionable usage to stderr.
4337 @item --batch-size=@var{nmerge}
4338 @opindex --batch-size
4339 @cindex number of inputs to merge, nmerge
4340 Merge at most @var{nmerge} inputs at once.
4342 When @command{sort} has to merge more than @var{nmerge} inputs,
4343 it merges them in groups of @var{nmerge}, saving the result in
4344 a temporary file, which is then used as an input in a subsequent merge.
4346 A large value of @var{nmerge} may improve merge performance and decrease
4347 temporary storage utilization at the expense of increased memory usage
4348 and I/O@.  Conversely a small value of @var{nmerge} may reduce memory
4349 requirements and I/O at the expense of temporary storage consumption and
4350 merge performance.
4352 The value of @var{nmerge} must be at least 2.  The default value is
4353 currently 16, but this is implementation-dependent and may change in
4354 the future.
4356 The value of @var{nmerge} may be bounded by a resource limit for open
4357 file descriptors.  The commands @samp{ulimit -n} or @samp{getconf
4358 OPEN_MAX} may display limits for your systems; these limits may be
4359 modified further if your program already has some files open, or if
4360 the operating system has other limits on the number of open files.  If
4361 the value of @var{nmerge} exceeds the resource limit, @command{sort}
4362 silently uses a smaller value.
4364 @item -o @var{output-file}
4365 @itemx --output=@var{output-file}
4366 @opindex -o
4367 @opindex --output
4368 @cindex overwriting of input, allowed
4369 Write output to @var{output-file} instead of standard output.
4370 Normally, @command{sort} reads all input before opening
4371 @var{output-file}, so you can safely sort a file in place by using
4372 commands like @code{sort -o F F} and @code{cat F | sort -o F}@.
4373 However, @command{sort} with @option{--merge} (@option{-m}) can open
4374 the output file before reading all input, so a command like @code{cat
4375 F | sort -m -o F - G} is not safe as @command{sort} might start
4376 writing @file{F} before @command{cat} is done reading it.
4378 @vindex POSIXLY_CORRECT
4379 On newer systems, @option{-o} cannot appear after an input file if
4380 @env{POSIXLY_CORRECT} is set, e.g., @samp{sort F -o F}@.  Portable
4381 scripts should specify @option{-o @var{output-file}} before any input
4382 files.
4384 @item --random-source=@var{file}
4385 @opindex --random-source
4386 @cindex random source for sorting
4387 Use @var{file} as a source of random data used to determine which
4388 random hash function to use with the @option{-R} option.  @xref{Random
4389 sources}.
4391 @item -s
4392 @itemx --stable
4393 @opindex -s
4394 @opindex --stable
4395 @cindex sort stability
4396 @cindex sort's last-resort comparison
4398 Make @command{sort} stable by disabling its last-resort comparison.
4399 This option has no effect if no fields or global ordering options
4400 other than @option{--reverse} (@option{-r}) are specified.
4402 @item -S @var{size}
4403 @itemx --buffer-size=@var{size}
4404 @opindex -S
4405 @opindex --buffer-size
4406 @cindex size for main memory sorting
4407 Use a main-memory sort buffer of the given @var{size}.  By default,
4408 @var{size} is in units of 1024 bytes.  Appending @samp{%} causes
4409 @var{size} to be interpreted as a percentage of physical memory.
4410 Appending @samp{K} multiplies @var{size} by 1024 (the default),
4411 @samp{M} by 1,048,576, @samp{G} by 1,073,741,824, and so on for
4412 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}@.  Appending
4413 @samp{b} causes @var{size} to be interpreted as a byte count, with no
4414 multiplication.
4416 This option can improve the performance of @command{sort} by causing it
4417 to start with a larger or smaller sort buffer than the default.
4418 However, this option affects only the initial buffer size.  The buffer
4419 grows beyond @var{size} if @command{sort} encounters input lines larger
4420 than @var{size}.
4422 @item -t @var{separator}
4423 @itemx --field-separator=@var{separator}
4424 @opindex -t
4425 @opindex --field-separator
4426 @cindex field separator character
4427 Use character @var{separator} as the field separator when finding the
4428 sort keys in each line.  By default, fields are separated by the empty
4429 string between a non-blank character and a blank character.
4430 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4431 can change this.
4433 That is, given the input line @w{@samp{ foo bar}}, @command{sort} breaks it
4434 into fields @w{@samp{ foo}} and @w{@samp{ bar}}.  The field separator is
4435 not considered to be part of either the field preceding or the field
4436 following, so with @samp{sort @w{-t " "}} the same input line has
4437 three fields: an empty field, @samp{foo}, and @samp{bar}.
4438 However, fields that extend to the end of the line,
4439 as @option{-k 2}, or fields consisting of a range, as @option{-k 2,3},
4440 retain the field separators present between the endpoints of the range.
4442 To specify ASCII NUL as the field separator,
4443 use the two-character string @samp{\0}, e.g., @samp{sort -t '\0'}.
4445 @item -T @var{tempdir}
4446 @itemx --temporary-directory=@var{tempdir}
4447 @opindex -T
4448 @opindex --temporary-directory
4449 @cindex temporary directory
4450 @vindex TMPDIR
4451 Use directory @var{tempdir} to store temporary files, overriding the
4452 @env{TMPDIR} environment variable.  If this option is given more than
4453 once, temporary files are stored in all the directories given.  If you
4454 have a large sort or merge that is I/O-bound, you can often improve
4455 performance by using this option to specify directories on different
4456 disks and controllers.
4458 @item --parallel=@var{n}
4459 @opindex --parallel
4460 @cindex multithreaded sort
4461 Set the number of sorts run in parallel to @var{n}. By default,
4462 @var{n} is set to the number of available processors, but limited
4463 to 8, as there are diminishing performance gains after that.
4464 Note also that using @var{n} threads increases the memory usage by
4465 a factor of log @var{n}.  Also see @ref{nproc invocation}.
4467 @item -u
4468 @itemx --unique
4469 @opindex -u
4470 @opindex --unique
4471 @cindex uniquifying output
4473 Normally, output only the first of a sequence of lines that compare
4474 equal.  For the @option{--check} (@option{-c} or @option{-C}) option,
4475 check that no pair of consecutive lines compares equal.
4477 This option also disables the default last-resort comparison.
4479 The commands @code{sort -u} and @code{sort | uniq} are equivalent, but
4480 this equivalence does not extend to arbitrary @command{sort} options.
4481 For example, @code{sort -n -u} inspects only the value of the initial
4482 numeric string when checking for uniqueness, whereas @code{sort -n |
4483 uniq} inspects the entire line.  @xref{uniq invocation}.
4485 @optZeroTerminated
4487 @end table
4489 Historical (BSD and System V) implementations of @command{sort} have
4490 differed in their interpretation of some options, particularly
4491 @option{-b}, @option{-f}, and @option{-n}.
4492 GNU sort follows the POSIX
4493 behavior, which is usually (but not always!) like the System V behavior.
4494 According to POSIX, @option{-n} no longer implies @option{-b}.  For
4495 consistency, @option{-M} has been changed in the same way.  This may
4496 affect the meaning of character positions in field specifications in
4497 obscure cases.  The only fix is to add an explicit @option{-b}.
4499 A position in a sort field specified with @option{-k} may have any
4500 of the option letters @samp{MbdfghinRrV} appended to it, in which case no
4501 global ordering options are inherited by that particular field.  The
4502 @option{-b} option may be independently attached to either or both of
4503 the start and end positions of a field specification, and if it is
4504 inherited from the global options it will be attached to both.
4505 If input lines can contain leading or adjacent blanks and @option{-t}
4506 is not used, then @option{-k} is typically combined with @option{-b} or
4507 an option that implicitly ignores leading blanks (@samp{Mghn}) as otherwise
4508 the varying numbers of leading blanks in fields can cause confusing results.
4510 If the start position in a sort field specifier falls after the end of
4511 the line or after the end field, the field is empty.  If the @option{-b}
4512 option was specified, the @samp{.@var{c}} part of a field specification
4513 is counted from the first nonblank character of the field.
4515 @vindex _POSIX2_VERSION
4516 @vindex POSIXLY_CORRECT
4517 On older systems, @command{sort} supports an obsolete origin-zero
4518 syntax @samp{+@var{pos1} [-@var{pos2}]} for specifying sort keys.
4519 The obsolete sequence @samp{sort +@var{a}.@var{x} -@var{b}.@var{y}}
4520 is equivalent to @samp{sort -k @var{a+1}.@var{x+1},@var{b}} if @var{y}
4521 is @samp{0} or absent, otherwise it is equivalent to @samp{sort -k
4522 @var{a+1}.@var{x+1},@var{b+1}.@var{y}}.
4524 This obsolete behavior can be enabled or disabled with the
4525 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
4526 conformance}); it can also be enabled when @env{POSIXLY_CORRECT} is
4527 not set by using the obsolete syntax with @samp{-@var{pos2}} present.
4529 Scripts intended for use on standard hosts should avoid obsolete
4530 syntax and should use @option{-k} instead.  For example, avoid
4531 @samp{sort +2}, since it might be interpreted as either @samp{sort
4532 ./+2} or @samp{sort -k 3}.  If your script must also run on hosts that
4533 support only the obsolete syntax, it can use a test like @samp{if sort
4534 -k 1 </dev/null >/dev/null 2>&1; then @dots{}} to decide which syntax
4535 to use.
4537 Here are some examples to illustrate various combinations of options.
4539 @itemize @bullet
4541 @item
4542 Sort in descending (reverse) numeric order.
4544 @example
4545 sort -n -r
4546 @end example
4548 @item
4549 Run no more than 4 sorts concurrently, using a buffer size of 10M.
4551 @example
4552 sort --parallel=4 -S 10M
4553 @end example
4555 @item
4556 Sort alphabetically, omitting the first and second fields
4557 and the blanks at the start of the third field.
4558 This uses a single key composed of the characters beginning
4559 at the start of the first nonblank character in field three
4560 and extending to the end of each line.
4562 @example
4563 sort -k 3b
4564 @end example
4566 @item
4567 Sort numerically on the second field and resolve ties by sorting
4568 alphabetically on the third and fourth characters of field five.
4569 Use @samp{:} as the field delimiter.
4571 @example
4572 sort -t : -k 2,2n -k 5.3,5.4
4573 @end example
4575 Note that if you had written @option{-k 2n} instead of @option{-k 2,2n}
4576 @command{sort} would have used all characters beginning in the second field
4577 and extending to the end of the line as the primary @emph{numeric}
4578 key.  For the large majority of applications, treating keys spanning
4579 more than one field as numeric will not do what you expect.
4581 Also note that the @samp{n} modifier was applied to the field-end
4582 specifier for the first key.  It would have been equivalent to
4583 specify @option{-k 2n,2} or @option{-k 2n,2n}.  All modifiers except
4584 @samp{b} apply to the associated @emph{field}, regardless of whether
4585 the modifier character is attached to the field-start and/or the
4586 field-end part of the key specifier.
4588 @item
4589 Sort the password file on the fifth field and ignore any
4590 leading blanks.  Sort lines with equal values in field five
4591 on the numeric user ID in field three.  Fields are separated
4592 by @samp{:}.
4594 @example
4595 sort -t : -k 5b,5 -k 3,3n /etc/passwd
4596 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
4597 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
4598 @end example
4600 These three commands have equivalent effect.  The first specifies that
4601 the first key's start position ignores leading blanks and the second
4602 key is sorted numerically.  The other two commands rely on global
4603 options being inherited by sort keys that lack modifiers.  The inheritance
4604 works in this case because @option{-k 5b,5b} and @option{-k 5b,5} are
4605 equivalent, as the location of a field-end lacking a @samp{.@var{c}}
4606 character position is not affected by whether initial blanks are
4607 skipped.
4609 @item
4610 Sort a set of log files, primarily by IPv4 address and secondarily by
4611 time stamp.  If two lines' primary and secondary keys are identical,
4612 output the lines in the same order that they were input.  The log
4613 files contain lines that look like this:
4615 @example
4616 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
4617 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
4618 @end example
4620 Fields are separated by exactly one space.  Sort IPv4 addresses
4621 lexicographically, e.g., 212.61.52.2 sorts before 212.129.233.201
4622 because 61 is less than 129.
4624 @example
4625 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
4626 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
4627 @end example
4629 This example cannot be done with a single @command{sort} invocation,
4630 since IPv4 address components are separated by @samp{.} while dates
4631 come just after a space.  So it is broken down into two invocations of
4632 @command{sort}: the first sorts by time stamp and the second by IPv4
4633 address.  The time stamp is sorted by year, then month, then day, and
4634 finally by hour-minute-second field, using @option{-k} to isolate each
4635 field.  Except for hour-minute-second there's no need to specify the
4636 end of each key field, since the @samp{n} and @samp{M} modifiers sort
4637 based on leading prefixes that cannot cross field boundaries.  The
4638 IPv4 addresses are sorted lexicographically.  The second sort uses
4639 @samp{-s} so that ties in the primary key are broken by the secondary
4640 key; the first sort uses @samp{-s} so that the combination of the two
4641 sorts is stable.
4643 @item
4644 Generate a tags file in case-insensitive sorted order.
4646 @smallexample
4647 find src -type f -print0 | sort -z -f | xargs -0 etags --append
4648 @end smallexample
4650 The use of @option{-print0}, @option{-z}, and @option{-0} in this case means
4651 that file names that contain blanks or other special characters are
4652 not broken up
4653 by the sort operation.
4655 @c This example is a bit contrived and needs more explanation.
4656 @c @item
4657 @c Sort records separated by an arbitrary string by using a pipe to convert
4658 @c each record delimiter string to @samp{\0}, then using sort's -z option,
4659 @c and converting each @samp{\0} back to the original record delimiter.
4661 @c @example
4662 @c printf 'c\n\nb\n\na\n' |
4663 @c perl -0pe 's/\n\n/\n\0/g' |
4664 @c sort -z |
4665 @c perl -0pe 's/\0/\n/g'
4666 @c @end example
4668 @item
4669 Use the common DSU, Decorate Sort Undecorate idiom to
4670 sort lines according to their length.
4672 @example
4673 awk '@{print length, $0@}' /etc/passwd | sort -n | cut -f2- -d' '
4674 @end example
4676 In general this technique can be used to sort data that the @command{sort}
4677 command does not support, or is inefficient at, sorting directly.
4679 @item
4680 Shuffle a list of directories, but preserve the order of files within
4681 each directory.  For instance, one could use this to generate a music
4682 playlist in which albums are shuffled but the songs of each album are
4683 played in order.
4685 @example
4686 ls */* | sort -t / -k 1,1R -k 2,2
4687 @end example
4689 @end itemize
4692 @node shuf invocation
4693 @section @command{shuf}: Shuffling text
4695 @pindex shuf
4696 @cindex shuffling files
4698 @command{shuf} shuffles its input by outputting a random permutation
4699 of its input lines.  Each output permutation is equally likely.
4700 Synopses:
4702 @example
4703 shuf [@var{option}]@dots{} [@var{file}]
4704 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
4705 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
4706 @end example
4708 @command{shuf} has three modes of operation that affect where it
4709 obtains its input lines.  By default, it reads lines from standard
4710 input.  The following options change the operation mode:
4712 @table @samp
4714 @item -e
4715 @itemx --echo
4716 @opindex -c
4717 @opindex --echo
4718 @cindex command-line operands to shuffle
4719 Treat each command-line operand as an input line.
4721 @item -i @var{lo}-@var{hi}
4722 @itemx --input-range=@var{lo}-@var{hi}
4723 @opindex -i
4724 @opindex --input-range
4725 @cindex input range to shuffle
4726 Act as if input came from a file containing the range of unsigned
4727 decimal integers @var{lo}@dots{}@var{hi}, one per line.
4729 @end table
4731 @command{shuf}'s other options can affect its behavior in all
4732 operation modes:
4734 @table @samp
4736 @item -n @var{count}
4737 @itemx --head-count=@var{count}
4738 @opindex -n
4739 @opindex --head-count
4740 @cindex head of output
4741 Output at most @var{count} lines.  By default, all input lines are
4742 output.
4744 @item -o @var{output-file}
4745 @itemx --output=@var{output-file}
4746 @opindex -o
4747 @opindex --output
4748 @cindex overwriting of input, allowed
4749 Write output to @var{output-file} instead of standard output.
4750 @command{shuf} reads all input before opening
4751 @var{output-file}, so you can safely shuffle a file in place by using
4752 commands like @code{shuf -o F <F} and @code{cat F | shuf -o F}.
4754 @item --random-source=@var{file}
4755 @opindex --random-source
4756 @cindex random source for shuffling
4757 Use @var{file} as a source of random data used to determine which
4758 permutation to generate.  @xref{Random sources}.
4760 @item -r
4761 @itemx --repeat
4762 @opindex -r
4763 @opindex --repeat
4764 @cindex repeat output values
4765 Repeat output values, that is, select with replacement.  With this
4766 option the output is not a permutation of the input; instead, each
4767 output line is randomly chosen from all the inputs.  This option is
4768 typically combined with @option{--head-count}; if
4769 @option{--head-count} is not given, @command{shuf} repeats
4770 indefinitely.
4772 @optZeroTerminated
4774 @end table
4776 For example:
4778 @example
4779 shuf <<EOF
4780 A man,
4781 a plan,
4782 a canal:
4783 Panama!
4785 @end example
4787 @noindent
4788 might produce the output
4790 @example
4791 Panama!
4792 A man,
4793 a canal:
4794 a plan,
4795 @end example
4797 @noindent
4798 Similarly, the command:
4800 @example
4801 shuf -e clubs hearts diamonds spades
4802 @end example
4804 @noindent
4805 might output:
4807 @example
4808 clubs
4809 diamonds
4810 spades
4811 hearts
4812 @end example
4814 @noindent
4815 and the command @samp{shuf -i 1-4} might output:
4817 @example
4822 @end example
4824 @noindent
4825 The above examples all have four input lines, so @command{shuf} might
4826 produce any of the twenty-four possible permutations of the input.  In
4827 general, if there are @var{n} input lines, there are @var{n}! (i.e.,
4828 @var{n} factorial, or @var{n} * (@var{n} - 1) * @dots{} * 1) possible
4829 output permutations.
4831 @noindent
4832 To output 50 random numbers each in the range 0 through 9, use:
4834 @example
4835 shuf -r -n 50 -i 0-9
4836 @end example
4838 @noindent
4839 To simulate 100 coin flips, use:
4841 @example
4842 shuf -r -n 100 -e Head Tail
4843 @end example
4845 @exitstatus
4848 @node uniq invocation
4849 @section @command{uniq}: Uniquify files
4851 @pindex uniq
4852 @cindex uniquify files
4854 @command{uniq} writes the unique lines in the given @file{input}, or
4855 standard input if nothing is given or for an @var{input} name of
4856 @samp{-}.  Synopsis:
4858 @example
4859 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
4860 @end example
4862 By default, @command{uniq} prints its input lines, except that
4863 it discards all but the first of adjacent repeated lines, so that
4864 no output lines are repeated.  Optionally, it can instead discard
4865 lines that are not repeated, or all repeated lines.
4867 The input need not be sorted, but repeated input lines are detected
4868 only if they are adjacent.  If you want to discard non-adjacent
4869 duplicate lines, perhaps you want to use @code{sort -u}.
4870 @xref{sort invocation}.
4872 @vindex LC_COLLATE
4873 Comparisons honor the rules specified by the @env{LC_COLLATE}
4874 locale category.
4876 If no @var{output} file is specified, @command{uniq} writes to standard
4877 output.
4879 The program accepts the following options.  Also see @ref{Common options}.
4881 @table @samp
4883 @item -f @var{n}
4884 @itemx --skip-fields=@var{n}
4885 @opindex -f
4886 @opindex --skip-fields
4887 Skip @var{n} fields on each line before checking for uniqueness.  Use
4888 a null string for comparison if a line has fewer than @var{n} fields.  Fields
4889 are sequences of non-space non-tab characters that are separated from
4890 each other by at least one space or tab.
4892 For compatibility @command{uniq} supports an obsolete option syntax
4893 @option{-@var{n}}.  New scripts should use @option{-f @var{n}} instead.
4895 @item -s @var{n}
4896 @itemx --skip-chars=@var{n}
4897 @opindex -s
4898 @opindex --skip-chars
4899 Skip @var{n} characters before checking for uniqueness.  Use a null string
4900 for comparison if a line has fewer than @var{n} characters.  If you use both
4901 the field and character skipping options, fields are skipped over first.
4903 @vindex _POSIX2_VERSION
4904 On older systems, @command{uniq} supports an obsolete option syntax
4905 @option{+@var{n}}.
4906 This obsolete behavior can be enabled or disabled with the
4907 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
4908 conformance}), but portable scripts should avoid commands whose
4909 behavior depends on this variable.
4910 For example, use @samp{uniq ./+10} or @samp{uniq -s 10} rather than
4911 the ambiguous @samp{uniq +10}.
4913 @item -c
4914 @itemx --count
4915 @opindex -c
4916 @opindex --count
4917 Print the number of times each line occurred along with the line.
4919 @item -i
4920 @itemx --ignore-case
4921 @opindex -i
4922 @opindex --ignore-case
4923 Ignore differences in case when comparing lines.
4925 @item -d
4926 @itemx --repeated
4927 @opindex -d
4928 @opindex --repeated
4929 @cindex repeated lines, outputting
4930 Discard lines that are not repeated.  When used by itself, this option
4931 causes @command{uniq} to print the first copy of each repeated line,
4932 and nothing else.
4934 @item -D
4935 @itemx --all-repeated[=@var{delimit-method}]
4936 @opindex -D
4937 @opindex --all-repeated
4938 @cindex all repeated lines, outputting
4939 Do not discard the second and subsequent repeated input lines,
4940 but discard lines that are not repeated.
4941 This option is useful mainly in conjunction with other options e.g.,
4942 to ignore case or to compare only selected fields.
4943 The optional @var{delimit-method}, supported with the long form option,
4944 specifies how to delimit groups of repeated lines, and must be one of the
4945 following:
4947 @table @samp
4949 @item none
4950 Do not delimit groups of repeated lines.
4951 This is equivalent to @option{--all-repeated} (@option{-D}).
4953 @item prepend
4954 Output a newline before each group of repeated lines.
4955 @macro nulOutputNote
4956 With @option{--zero-terminated} (@option{-z}), use a zero
4957 byte (ASCII NUL) instead of a newline as the delimiter.
4958 @end macro
4959 @nulOutputNote
4961 @item separate
4962 Separate groups of repeated lines with a single newline.
4963 This is the same as using @samp{prepend}, except that
4964 no delimiter is inserted before the first group, and hence
4965 may be better suited for output direct to users.
4966 @nulOutputNote
4967 @end table
4969 @macro ambiguousGroupNote
4970 Note that when groups are delimited and the input stream contains
4971 two or more consecutive blank lines, then the output is ambiguous.
4972 To avoid that, filter the input through @samp{tr -s '\\n'} to replace
4973 each sequence of consecutive newlines with a single newline.
4974 @end macro
4975 @ambiguousGroupNote
4977 This is a GNU extension.
4978 @c FIXME: give an example showing *how* it's useful
4980 @item --group[=@var{delimit-method}]
4981 @opindex --group
4982 @cindex all lines, grouping
4983 Output all lines, and delimit each unique group.
4984 @nulOutputNote
4985 The optional @var{delimit-method} specifies how to delimit
4986 groups, and must be one of the following:
4988 @table @samp
4990 @item separate
4991 Separate unique groups with a single delimiter.
4992 This is the default delimiting method if none is specified,
4993 and better suited for output direct to users.
4995 @item prepend
4996 Output a delimiter before each group of unique items.
4998 @item append
4999 Output a delimiter after each group of unique items.
5001 @item both
5002 Output a delimiter around each group of unique items.
5003 @end table
5005 @ambiguousGroupNote
5007 This is a GNU extension.
5009 @item -u
5010 @itemx --unique
5011 @opindex -u
5012 @opindex --unique
5013 @cindex unique lines, outputting
5014 Discard the last line that would be output for a repeated input group.
5015 When used by itself, this option causes @command{uniq} to print unique
5016 lines, and nothing else.
5018 @item -w @var{n}
5019 @itemx --check-chars=@var{n}
5020 @opindex -w
5021 @opindex --check-chars
5022 Compare at most @var{n} characters on each line (after skipping any specified
5023 fields and characters).  By default the entire rest of the lines are
5024 compared.
5026 @optZeroTerminated
5028 @end table
5030 @exitstatus
5033 @node comm invocation
5034 @section @command{comm}: Compare two sorted files line by line
5036 @pindex comm
5037 @cindex line-by-line comparison
5038 @cindex comparing sorted files
5040 @command{comm} writes to standard output lines that are common, and lines
5041 that are unique, to two input files; a file name of @samp{-} means
5042 standard input.  Synopsis:
5044 @example
5045 comm [@var{option}]@dots{} @var{file1} @var{file2}
5046 @end example
5048 @vindex LC_COLLATE
5049 Before @command{comm} can be used, the input files must be sorted using the
5050 collating sequence specified by the @env{LC_COLLATE} locale.
5051 If an input file ends in a non-newline
5052 character, a newline is silently appended.  The @command{sort} command with
5053 no options always outputs a file that is suitable input to @command{comm}.
5055 @cindex differing lines
5056 @cindex common lines
5057 With no options, @command{comm} produces three-column output.  Column one
5058 contains lines unique to @var{file1}, column two contains lines unique
5059 to @var{file2}, and column three contains lines common to both files.
5060 Columns are separated by a single TAB character.
5061 @c FIXME: when there's an option to supply an alternative separator
5062 @c string, append "by default" to the above sentence.
5064 @opindex -1
5065 @opindex -2
5066 @opindex -3
5067 The options @option{-1}, @option{-2}, and @option{-3} suppress printing of
5068 the corresponding columns (and separators).  Also see @ref{Common options}.
5070 Unlike some other comparison utilities, @command{comm} has an exit
5071 status that does not depend on the result of the comparison.
5072 Upon normal completion @command{comm} produces an exit code of zero.
5073 If there is an error it exits with nonzero status.
5075 @macro checkOrderOption{cmd}
5076 If the @option{--check-order} option is given, unsorted inputs will
5077 cause a fatal error message.  If the option @option{--nocheck-order}
5078 is given, unsorted inputs will never cause an error message.  If neither
5079 of these options is given, wrongly sorted inputs are diagnosed
5080 only if an input file is found to contain unpairable
5081 @ifset JOIN_COMMAND
5082 lines, and when both input files are non empty.
5083 @end ifset
5084 @ifclear JOIN_COMMAND
5085 lines.
5086 @end ifclear
5087 If an input file is diagnosed as being unsorted, the @command{\cmd\}
5088 command will exit with a nonzero status (and the output should not be used).
5090 Forcing @command{\cmd\} to process wrongly sorted input files
5091 containing unpairable lines by specifying @option{--nocheck-order} is
5092 not guaranteed to produce any particular output.  The output will
5093 probably not correspond with whatever you hoped it would be.
5094 @end macro
5095 @checkOrderOption{comm}
5097 @table @samp
5099 @item --check-order
5100 Fail with an error message if either input file is wrongly ordered.
5102 @item --nocheck-order
5103 Do not check that both input files are in sorted order.
5105 Other options are:
5107 @item --output-delimiter=@var{str}
5108 Print @var{str} between adjacent output columns,
5109 rather than the default of a single TAB character.
5111 The delimiter @var{str} may not be empty.
5113 @end table
5115 @node ptx invocation
5116 @section @command{ptx}: Produce permuted indexes
5118 @pindex ptx
5120 @command{ptx} reads a text file and essentially produces a permuted index, with
5121 each keyword in its context.  The calling sketch is either one of:
5123 @example
5124 ptx [@var{option} @dots{}] [@var{file} @dots{}]
5125 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
5126 @end example
5128 The @option{-G} (or its equivalent: @option{--traditional}) option disables
5129 all GNU extensions and reverts to traditional mode, thus introducing some
5130 limitations and changing several of the program's default option values.
5131 When @option{-G} is not specified, GNU extensions are always enabled.
5132 GNU extensions to @command{ptx} are documented wherever appropriate in this
5133 document.  @xref{Compatibility in ptx}, for the full list.
5135 Individual options are explained in the following sections.
5137 When GNU extensions are enabled, there may be zero, one or several
5138 @var{file}s after the options.  If there is no @var{file}, the program
5139 reads the standard input.  If there is one or several @var{file}s, they
5140 give the name of input files which are all read in turn, as if all the
5141 input files were concatenated.  However, there is a full contextual
5142 break between each file and, when automatic referencing is requested,
5143 file names and line numbers refer to individual text input files.  In
5144 all cases, the program outputs the permuted index to the standard
5145 output.
5147 When GNU extensions are @emph{not} enabled, that is, when the program
5148 operates in traditional mode, there may be zero, one or two parameters
5149 besides the options.  If there are no parameters, the program reads the
5150 standard input and outputs the permuted index to the standard output.
5151 If there is only one parameter, it names the text @var{input} to be read
5152 instead of the standard input.  If two parameters are given, they give
5153 respectively the name of the @var{input} file to read and the name of
5154 the @var{output} file to produce.  @emph{Be very careful} to note that,
5155 in this case, the contents of file given by the second parameter is
5156 destroyed.  This behavior is dictated by System V @command{ptx}
5157 compatibility; GNU Standards normally discourage output parameters not
5158 introduced by an option.
5160 Note that for @emph{any} file named as the value of an option or as an
5161 input text file, a single dash @samp{-} may be used, in which case
5162 standard input is assumed.  However, it would not make sense to use this
5163 convention more than once per program invocation.
5165 @menu
5166 * General options in ptx::      Options which affect general program behavior.
5167 * Charset selection in ptx::    Underlying character set considerations.
5168 * Input processing in ptx::     Input fields, contexts, and keyword selection.
5169 * Output formatting in ptx::    Types of output format, and sizing the fields.
5170 * Compatibility in ptx::
5171 @end menu
5174 @node General options in ptx
5175 @subsection General options
5177 @table @samp
5179 @item -G
5180 @itemx --traditional
5181 As already explained, this option disables all GNU extensions to
5182 @command{ptx} and switches to traditional mode.
5184 @item --help
5185 Print a short help on standard output, then exit without further
5186 processing.
5188 @item --version
5189 Print the program version on standard output, then exit without further
5190 processing.
5192 @end table
5194 @exitstatus
5197 @node Charset selection in ptx
5198 @subsection Charset selection
5200 @c FIXME:  People don't necessarily know what an IBM-PC was these days.
5201 As it is set up now, the program assumes that the input file is coded
5202 using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
5203 @emph{unless} it is compiled for MS-DOS, in which case it uses the
5204 character set of the IBM-PC@.  (GNU @command{ptx} is not known to work on
5205 smaller MS-DOS machines anymore.)  Compared to 7-bit ASCII, the set
5206 of characters which are letters is different; this alters the behavior
5207 of regular expression matching.  Thus, the default regular expression
5208 for a keyword allows foreign or diacriticized letters.  Keyword sorting,
5209 however, is still crude; it obeys the underlying character set ordering
5210 quite blindly.
5212 @table @samp
5214 @item -f
5215 @itemx --ignore-case
5216 @opindex -f
5217 @opindex --ignore-case
5218 Fold lower case letters to upper case for sorting.
5220 @end table
5223 @node Input processing in ptx
5224 @subsection Word selection and input processing
5226 @table @samp
5228 @item -b @var{file}
5229 @itemx --break-file=@var{file}
5230 @opindex -b
5231 @opindex --break-file
5233 This option provides an alternative (to @option{-W}) method of describing
5234 which characters make up words.  It introduces the name of a
5235 file which contains a list of characters which can@emph{not} be part of
5236 one word; this file is called the @dfn{Break file}.  Any character which
5237 is not part of the Break file is a word constituent.  If both options
5238 @option{-b} and @option{-W} are specified, then @option{-W} has precedence and
5239 @option{-b} is ignored.
5241 When GNU extensions are enabled, the only way to avoid newline as a
5242 break character is to write all the break characters in the file with no
5243 newline at all, not even at the end of the file.  When GNU extensions
5244 are disabled, spaces, tabs and newlines are always considered as break
5245 characters even if not included in the Break file.
5247 @item -i @var{file}
5248 @itemx --ignore-file=@var{file}
5249 @opindex -i
5250 @opindex --ignore-file
5252 The file associated with this option contains a list of words which will
5253 never be taken as keywords in concordance output.  It is called the
5254 @dfn{Ignore file}.  The file contains exactly one word in each line; the
5255 end of line separation of words is not subject to the value of the
5256 @option{-S} option.
5258 @item -o @var{file}
5259 @itemx --only-file=@var{file}
5260 @opindex -o
5261 @opindex --only-file
5263 The file associated with this option contains a list of words which will
5264 be retained in concordance output; any word not mentioned in this file
5265 is ignored.  The file is called the @dfn{Only file}.  The file contains
5266 exactly one word in each line; the end of line separation of words is
5267 not subject to the value of the @option{-S} option.
5269 There is no default for the Only file.  When both an Only file and an
5270 Ignore file are specified, a word is considered a keyword only
5271 if it is listed in the Only file and not in the Ignore file.
5273 @item -r
5274 @itemx --references
5275 @opindex -r
5276 @opindex --references
5278 On each input line, the leading sequence of non-white space characters will be
5279 taken to be a reference that has the purpose of identifying this input
5280 line in the resulting permuted index.
5281 @xref{Output formatting in ptx},
5282 for more information about reference production.
5283 Using this option changes the default value for option @option{-S}.
5285 Using this option, the program does not try very hard to remove
5286 references from contexts in output, but it succeeds in doing so
5287 @emph{when} the context ends exactly at the newline.  If option
5288 @option{-r} is used with @option{-S} default value, or when GNU extensions
5289 are disabled, this condition is always met and references are completely
5290 excluded from the output contexts.
5292 @item -S @var{regexp}
5293 @itemx --sentence-regexp=@var{regexp}
5294 @opindex -S
5295 @opindex --sentence-regexp
5297 This option selects which regular expression will describe the end of a
5298 line or the end of a sentence.  In fact, this regular expression is not
5299 the only distinction between end of lines or end of sentences, and input
5300 line boundaries have no special significance outside this option.  By
5301 default, when GNU extensions are enabled and if @option{-r} option is not
5302 used, end of sentences are used.  In this case, this @var{regex} is
5303 imported from GNU Emacs:
5305 @example
5306 [.?!][]\"')@}]*\\($\\|\t\\|  \\)[ \t\n]*
5307 @end example
5309 Whenever GNU extensions are disabled or if @option{-r} option is used, end
5310 of lines are used; in this case, the default @var{regexp} is just:
5312 @example
5314 @end example
5316 Using an empty @var{regexp} is equivalent to completely disabling end of
5317 line or end of sentence recognition.  In this case, the whole file is
5318 considered to be a single big line or sentence.  The user might want to
5319 disallow all truncation flag generation as well, through option @option{-F
5320 ""}.  @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5321 Manual}.
5323 When the keywords happen to be near the beginning of the input line or
5324 sentence, this often creates an unused area at the beginning of the
5325 output context line; when the keywords happen to be near the end of the
5326 input line or sentence, this often creates an unused area at the end of
5327 the output context line.  The program tries to fill those unused areas
5328 by wrapping around context in them; the tail of the input line or
5329 sentence is used to fill the unused area on the left of the output line;
5330 the head of the input line or sentence is used to fill the unused area
5331 on the right of the output line.
5333 As a matter of convenience to the user, many usual backslashed escape
5334 sequences from the C language are recognized and converted to the
5335 corresponding characters by @command{ptx} itself.
5337 @item -W @var{regexp}
5338 @itemx --word-regexp=@var{regexp}
5339 @opindex -W
5340 @opindex --word-regexp
5342 This option selects which regular expression will describe each keyword.
5343 By default, if GNU extensions are enabled, a word is a sequence of
5344 letters; the @var{regexp} used is @samp{\w+}.  When GNU extensions are
5345 disabled, a word is by default anything which ends with a space, a tab
5346 or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
5348 An empty @var{regexp} is equivalent to not using this option.
5349 @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5350 Manual}.
5352 As a matter of convenience to the user, many usual backslashed escape
5353 sequences, as found in the C language, are recognized and converted to
5354 the corresponding characters by @command{ptx} itself.
5356 @end table
5359 @node Output formatting in ptx
5360 @subsection Output formatting
5362 Output format is mainly controlled by the @option{-O} and @option{-T} options
5363 described in the table below.  When neither @option{-O} nor @option{-T} are
5364 selected, and if GNU extensions are enabled, the program chooses an
5365 output format suitable for a dumb terminal.  Each keyword occurrence is
5366 output to the center of one line, surrounded by its left and right
5367 contexts.  Each field is properly justified, so the concordance output
5368 can be readily observed.  As a special feature, if automatic
5369 references are selected by option @option{-A} and are output before the
5370 left context, that is, if option @option{-R} is @emph{not} selected, then
5371 a colon is added after the reference; this nicely interfaces with GNU
5372 Emacs @code{next-error} processing.  In this default output format, each
5373 white space character, like newline and tab, is merely changed to
5374 exactly one space, with no special attempt to compress consecutive
5375 spaces.  This might change in the future.  Except for those white space
5376 characters, every other character of the underlying set of 256
5377 characters is transmitted verbatim.
5379 Output format is further controlled by the following options.
5381 @table @samp
5383 @item -g @var{number}
5384 @itemx --gap-size=@var{number}
5385 @opindex -g
5386 @opindex --gap-size
5388 Select the size of the minimum white space gap between the fields on the
5389 output line.
5391 @item -w @var{number}
5392 @itemx --width=@var{number}
5393 @opindex -w
5394 @opindex --width
5396 Select the maximum output width of each final line.  If references are
5397 used, they are included or excluded from the maximum output width
5398 depending on the value of option @option{-R}@.  If this option is not
5399 selected, that is, when references are output before the left context,
5400 the maximum output width takes into account the maximum length of all
5401 references.  If this option is selected, that is, when references are
5402 output after the right context, the maximum output width does not take
5403 into account the space taken by references, nor the gap that precedes
5404 them.
5406 @item -A
5407 @itemx --auto-reference
5408 @opindex -A
5409 @opindex --auto-reference
5411 Select automatic references.  Each input line will have an automatic
5412 reference made up of the file name and the line ordinal, with a single
5413 colon between them.  However, the file name will be empty when standard
5414 input is being read.  If both @option{-A} and @option{-r} are selected, then
5415 the input reference is still read and skipped, but the automatic
5416 reference is used at output time, overriding the input reference.
5418 @item -R
5419 @itemx --right-side-refs
5420 @opindex -R
5421 @opindex --right-side-refs
5423 In the default output format, when option @option{-R} is not used, any
5424 references produced by the effect of options @option{-r} or @option{-A} are
5425 placed to the far right of output lines, after the right context.  With
5426 default output format, when the @option{-R} option is specified, references
5427 are rather placed at the beginning of each output line, before the left
5428 context.  For any other output format, option @option{-R} is
5429 ignored, with one exception:  with @option{-R} the width of references
5430 is @emph{not} taken into account in total output width given by @option{-w}.
5432 This option is automatically selected whenever GNU extensions are
5433 disabled.
5435 @item -F @var{string}
5436 @itemx --flag-truncation=@var{string}
5437 @opindex -F
5438 @opindex --flag-truncation
5440 This option will request that any truncation in the output be reported
5441 using the string @var{string}.  Most output fields theoretically extend
5442 towards the beginning or the end of the current line, or current
5443 sentence, as selected with option @option{-S}@.  But there is a maximum
5444 allowed output line width, changeable through option @option{-w}, which is
5445 further divided into space for various output fields.  When a field has
5446 to be truncated because it cannot extend beyond the beginning or the end of
5447 the current line to fit in, then a truncation occurs.  By default,
5448 the string used is a single slash, as in @option{-F /}.
5450 @var{string} may have more than one character, as in @option{-F @dots{}}.
5451 Also, in the particular case when @var{string} is empty (@option{-F ""}),
5452 truncation flagging is disabled, and no truncation marks are appended in
5453 this case.
5455 As a matter of convenience to the user, many usual backslashed escape
5456 sequences, as found in the C language, are recognized and converted to
5457 the corresponding characters by @command{ptx} itself.
5459 @item -M @var{string}
5460 @itemx --macro-name=@var{string}
5461 @opindex -M
5462 @opindex --macro-name
5464 Select another @var{string} to be used instead of @samp{xx}, while
5465 generating output suitable for @command{nroff}, @command{troff} or @TeX{}.
5467 @item -O
5468 @itemx --format=roff
5469 @opindex -O
5470 @opindex --format=roff
5472 Choose an output format suitable for @command{nroff} or @command{troff}
5473 processing.  Each output line will look like:
5475 @smallexample
5476 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}"@c
5477  "@var{head}" "@var{ref}"
5478 @end smallexample
5480 so it will be possible to write a @samp{.xx} roff macro to take care of
5481 the output typesetting.  This is the default output format when GNU
5482 extensions are disabled.  Option @option{-M} can be used to change
5483 @samp{xx} to another macro name.
5485 In this output format, each non-graphical character, like newline and
5486 tab, is merely changed to exactly one space, with no special attempt to
5487 compress consecutive spaces.  Each quote character @samp{"} is doubled
5488 so it will be correctly processed by @command{nroff} or @command{troff}.
5490 @item -T
5491 @itemx --format=tex
5492 @opindex -T
5493 @opindex --format=tex
5495 Choose an output format suitable for @TeX{} processing.  Each output
5496 line will look like:
5498 @smallexample
5499 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@c
5500 @{@var{after}@}@{@var{head}@}@{@var{ref}@}
5501 @end smallexample
5503 @noindent
5504 so it will be possible to write a @code{\xx} definition to take care of
5505 the output typesetting.  Note that when references are not being
5506 produced, that is, neither option @option{-A} nor option @option{-r} is
5507 selected, the last parameter of each @code{\xx} call is inhibited.
5508 Option @option{-M} can be used to change @samp{xx} to another macro
5509 name.
5511 In this output format, some special characters, like @samp{$}, @samp{%},
5512 @samp{&}, @samp{#} and @samp{_} are automatically protected with a
5513 backslash.  Curly brackets @samp{@{}, @samp{@}} are protected with a
5514 backslash and a pair of dollar signs (to force mathematical mode).  The
5515 backslash itself produces the sequence @code{\backslash@{@}}.
5516 Circumflex and tilde diacritical marks produce the sequence @code{^\@{ @}} and
5517 @code{~\@{ @}} respectively.  Other diacriticized characters of the
5518 underlying character set produce an appropriate @TeX{} sequence as far
5519 as possible.  The other non-graphical characters, like newline and tab,
5520 and all other characters which are not part of ASCII, are merely
5521 changed to exactly one space, with no special attempt to compress
5522 consecutive spaces.  Let me know how to improve this special character
5523 processing for @TeX{}.
5525 @end table
5528 @node Compatibility in ptx
5529 @subsection The GNU extensions to @command{ptx}
5531 This version of @command{ptx} contains a few features which do not exist in
5532 System V @command{ptx}.  These extra features are suppressed by using the
5533 @option{-G} command line option, unless overridden by other command line
5534 options.  Some GNU extensions cannot be recovered by overriding, so the
5535 simple rule is to avoid @option{-G} if you care about GNU extensions.
5536 Here are the differences between this program and System V @command{ptx}.
5538 @itemize @bullet
5540 @item
5541 This program can read many input files at once, it always writes the
5542 resulting concordance on standard output.  On the other hand, System V
5543 @command{ptx} reads only one file and sends the result to standard output
5544 or, if a second @var{file} parameter is given on the command, to that
5545 @var{file}.
5547 Having output parameters not introduced by options is a dangerous
5548 practice which GNU avoids as far as possible.  So, for using @command{ptx}
5549 portably between GNU and System V, you should always use it with a
5550 single input file, and always expect the result on standard output.  You
5551 might also want to automatically configure in a @option{-G} option to
5552 @command{ptx} calls in products using @command{ptx}, if the configurator finds
5553 that the installed @command{ptx} accepts @option{-G}.
5555 @item
5556 The only options available in System V @command{ptx} are options @option{-b},
5557 @option{-f}, @option{-g}, @option{-i}, @option{-o}, @option{-r}, @option{-t} and
5558 @option{-w}.  All other options are GNU extensions and are not repeated in
5559 this enumeration.  Moreover, some options have a slightly different
5560 meaning when GNU extensions are enabled, as explained below.
5562 @item
5563 By default, concordance output is not formatted for @command{troff} or
5564 @command{nroff}.  It is rather formatted for a dumb terminal.  @command{troff}
5565 or @command{nroff} output may still be selected through option @option{-O}.
5567 @item
5568 Unless @option{-R} option is used, the maximum reference width is
5569 subtracted from the total output line width.  With GNU extensions
5570 disabled, width of references is not taken into account in the output
5571 line width computations.
5573 @item
5574 All 256 bytes, even ASCII NUL bytes, are always read and
5575 processed from input file with no adverse effect, even if GNU extensions
5576 are disabled.  However, System V @command{ptx} does not accept 8-bit
5577 characters, a few control characters are rejected, and the tilde
5578 @samp{~} is also rejected.
5580 @item
5581 Input line length is only limited by available memory, even if GNU
5582 extensions are disabled.  However, System V @command{ptx} processes only
5583 the first 200 characters in each line.
5585 @item
5586 The break (non-word) characters default to be every character except all
5587 letters of the underlying character set, diacriticized or not.  When GNU
5588 extensions are disabled, the break characters default to space, tab and
5589 newline only.
5591 @item
5592 The program makes better use of output line width.  If GNU extensions
5593 are disabled, the program rather tries to imitate System V @command{ptx},
5594 but still, there are some slight disposition glitches this program does
5595 not completely reproduce.
5597 @item
5598 The user can specify both an Ignore file and an Only file.  This is not
5599 allowed with System V @command{ptx}.
5601 @end itemize
5604 @node tsort invocation
5605 @section @command{tsort}: Topological sort
5607 @pindex tsort
5608 @cindex topological sort
5610 @command{tsort} performs a topological sort on the given @var{file}, or
5611 standard input if no input file is given or for a @var{file} of
5612 @samp{-}.  For more details and some history, see @ref{tsort background}.
5613 Synopsis:
5615 @example
5616 tsort [@var{option}] [@var{file}]
5617 @end example
5619 @command{tsort} reads its input as pairs of strings, separated by blanks,
5620 indicating a partial ordering.  The output is a total ordering that
5621 corresponds to the given partial ordering.
5623 For example
5625 @example
5626 tsort <<EOF
5627 a b c
5629 e f
5630 b c d e
5632 @end example
5634 @noindent
5635 will produce the output
5637 @example
5644 @end example
5646 Consider a more realistic example.
5647 You have a large set of functions all in one file, and they may all be
5648 declared static except one.  Currently that one (say @code{main}) is the
5649 first function defined in the file, and the ones it calls directly follow
5650 it, followed by those they call, etc.  Let's say that you are determined
5651 to take advantage of prototypes, so you have to choose between declaring
5652 all of those functions (which means duplicating a lot of information from
5653 the definitions) and rearranging the functions so that as many as possible
5654 are defined before they are used.  One way to automate the latter process
5655 is to get a list for each function of the functions it calls directly.
5656 Many programs can generate such lists.  They describe a call graph.
5657 Consider the following list, in which a given line indicates that the
5658 function on the left calls the one on the right directly.
5660 @example
5661 main parse_options
5662 main tail_file
5663 main tail_forever
5664 tail_file pretty_name
5665 tail_file write_header
5666 tail_file tail
5667 tail_forever recheck
5668 tail_forever pretty_name
5669 tail_forever write_header
5670 tail_forever dump_remainder
5671 tail tail_lines
5672 tail tail_bytes
5673 tail_lines start_lines
5674 tail_lines dump_remainder
5675 tail_lines file_lines
5676 tail_lines pipe_lines
5677 tail_bytes xlseek
5678 tail_bytes start_bytes
5679 tail_bytes dump_remainder
5680 tail_bytes pipe_bytes
5681 file_lines dump_remainder
5682 recheck pretty_name
5683 @end example
5685 then you can use @command{tsort} to produce an ordering of those
5686 functions that satisfies your requirement.
5688 @example
5689 example$ tsort call-graph | tac
5690 dump_remainder
5691 start_lines
5692 file_lines
5693 pipe_lines
5694 xlseek
5695 start_bytes
5696 pipe_bytes
5697 tail_lines
5698 tail_bytes
5699 pretty_name
5700 write_header
5701 tail
5702 recheck
5703 parse_options
5704 tail_file
5705 tail_forever
5706 main
5707 @end example
5709 @command{tsort} detects any cycles in the input and writes the first cycle
5710 encountered to standard error.
5712 Note that for a given partial ordering, generally there is no unique
5713 total ordering.  In the context of the call graph above, the function
5714 @code{parse_options} may be placed anywhere in the list as long as it
5715 precedes @code{main}.
5717 The only options are @option{--help} and @option{--version}.  @xref{Common
5718 options}.
5720 @exitstatus
5722 @menu
5723 * tsort background::            Where tsort came from.
5724 @end menu
5726 @node tsort background
5727 @subsection @command{tsort}: Background
5729 @command{tsort} exists because very early versions of the Unix linker processed
5730 an archive file exactly once, and in order.  As @command{ld} read each object
5731 in the archive, it decided whether it was needed in the program based on
5732 whether it defined any symbols which were undefined at that point in
5733 the link.
5735 This meant that dependencies within the archive had to be handled
5736 specially.  For example, @code{scanf} probably calls @code{read}.  That means
5737 that in a single pass through an archive, it was important for @code{scanf.o}
5738 to appear before read.o, because otherwise a program which calls
5739 @code{scanf} but not @code{read} might end up with an unexpected unresolved
5740 reference to @code{read}.
5742 The way to address this problem was to first generate a set of
5743 dependencies of one object file on another.  This was done by a shell
5744 script called @command{lorder}.  The GNU tools don't provide a version of
5745 lorder, as far as I know, but you can still find it in BSD
5746 distributions.
5748 Then you ran @command{tsort} over the @command{lorder} output, and you used the
5749 resulting sort to define the order in which you added objects to the archive.
5751 This whole procedure has been obsolete since about 1980, because
5752 Unix archives now contain a symbol table (traditionally built by
5753 @command{ranlib}, now generally built by @command{ar} itself), and the Unix
5754 linker uses the symbol table to effectively make multiple passes over
5755 an archive file.
5757 Anyhow, that's where tsort came from.  To solve an old problem with
5758 the way the linker handled archive files, which has since been solved
5759 in different ways.
5762 @node Operating on fields
5763 @chapter Operating on fields
5765 @menu
5766 * cut invocation::              Print selected parts of lines.
5767 * paste invocation::            Merge lines of files.
5768 * join invocation::             Join lines on a common field.
5769 @end menu
5772 @node cut invocation
5773 @section @command{cut}: Print selected parts of lines
5775 @pindex cut
5776 @command{cut} writes to standard output selected parts of each line of each
5777 input file, or standard input if no files are given or for a file name of
5778 @samp{-}.  Synopsis:
5780 @example
5781 cut @var{option}@dots{} [@var{file}]@dots{}
5782 @end example
5784 In the table which follows, the @var{byte-list}, @var{character-list},
5785 and @var{field-list} are one or more numbers or ranges (two numbers
5786 separated by a dash) separated by commas.  Bytes, characters, and
5787 fields are numbered starting at 1.  Incomplete ranges may be
5788 given: @option{-@var{m}} means @samp{1-@var{m}}; @samp{@var{n}-} means
5789 @samp{@var{n}} through end of line or last field.  The list elements
5790 can be repeated, can overlap, and can be specified in any order; but
5791 the selected input is written in the same order that it is read, and
5792 is written exactly once.
5794 The program accepts the following options.  Also see @ref{Common
5795 options}.
5797 @table @samp
5799 @item -b @var{byte-list}
5800 @itemx --bytes=@var{byte-list}
5801 @opindex -b
5802 @opindex --bytes
5803 Select for printing only the bytes in positions listed in
5804 @var{byte-list}.  Tabs and backspaces are treated like any other
5805 character; they take up 1 byte.  If an output delimiter is specified,
5806 (see the description of @option{--output-delimiter}), then output that
5807 string between ranges of selected bytes.
5809 @item -c @var{character-list}
5810 @itemx --characters=@var{character-list}
5811 @opindex -c
5812 @opindex --characters
5813 Select for printing only the characters in positions listed in
5814 @var{character-list}.  The same as @option{-b} for now, but
5815 internationalization will change that.  Tabs and backspaces are
5816 treated like any other character; they take up 1 character.  If an
5817 output delimiter is specified, (see the description of
5818 @option{--output-delimiter}), then output that string between ranges
5819 of selected bytes.
5821 @item -f @var{field-list}
5822 @itemx --fields=@var{field-list}
5823 @opindex -f
5824 @opindex --fields
5825 Select for printing only the fields listed in @var{field-list}.
5826 Fields are separated by a TAB character by default.  Also print any
5827 line that contains no delimiter character, unless the
5828 @option{--only-delimited} (@option{-s}) option is specified.
5830 Note @command{awk} supports more sophisticated field processing,
5831 and by default will use (and discard) runs of blank characters to
5832 separate fields, and ignore leading and trailing blanks.
5833 @example
5834 @verbatim
5835 awk '{print $2}'    # print the second field
5836 awk '{print $NF-1}' # print the penultimate field
5837 awk '{print $2,$1}' # reorder the first two fields
5838 @end verbatim
5839 @end example
5841 In the unlikely event that @command{awk} is unavailable,
5842 one can use the @command{join} command, to process blank
5843 characters as @command{awk} does above.
5844 @example
5845 @verbatim
5846 join -a1 -o 1.2     - /dev/null # print the second field
5847 join -a1 -o 1.2,1.1 - /dev/null # reorder the first two fields
5848 @end verbatim
5849 @end example
5851 @item -d @var{input_delim_byte}
5852 @itemx --delimiter=@var{input_delim_byte}
5853 @opindex -d
5854 @opindex --delimiter
5855 With @option{-f}, use the first byte of @var{input_delim_byte} as
5856 the input fields separator (default is TAB).
5858 @item -n
5859 @opindex -n
5860 Do not split multi-byte characters (no-op for now).
5862 @item -s
5863 @itemx --only-delimited
5864 @opindex -s
5865 @opindex --only-delimited
5866 For @option{-f}, do not print lines that do not contain the field separator
5867 character.  Normally, any line without a field separator is printed verbatim.
5869 @item --output-delimiter=@var{output_delim_string}
5870 @opindex --output-delimiter
5871 With @option{-f}, output fields are separated by @var{output_delim_string}.
5872 The default with @option{-f} is to use the input delimiter.
5873 When using @option{-b} or @option{-c} to select ranges of byte or
5874 character offsets (as opposed to ranges of fields),
5875 output @var{output_delim_string} between non-overlapping
5876 ranges of selected bytes.
5878 @item --complement
5879 @opindex --complement
5880 This option is a GNU extension.
5881 Select for printing the complement of the bytes, characters or fields
5882 selected with the @option{-b}, @option{-c} or @option{-f} options.
5883 In other words, do @emph{not} print the bytes, characters or fields
5884 specified via those options.  This option is useful when you have
5885 many fields and want to print all but a few of them.
5887 @end table
5889 @exitstatus
5892 @node paste invocation
5893 @section @command{paste}: Merge lines of files
5895 @pindex paste
5896 @cindex merging files
5898 @command{paste} writes to standard output lines consisting of sequentially
5899 corresponding lines of each given file, separated by a TAB character.
5900 Standard input is used for a file name of @samp{-} or if no input files
5901 are given.
5903 Synopsis:
5905 @example
5906 paste [@var{option}]@dots{} [@var{file}]@dots{}
5907 @end example
5909 For example, with:
5910 @example
5911 $ cat num2
5914 $ cat let3
5918 @end example
5920 Take lines sequentially from each file:
5921 @example
5922 $ paste num2 let3
5923 1       a
5924 2       b
5925        @ c
5926 @end example
5928 Duplicate lines from a file:
5929 @example
5930 $ paste num2 let3 num2
5931 1       a      1
5932 2       b      2
5933        @ c
5934 @end example
5936 Intermix lines from stdin:
5937 @example
5938 $ paste - let3 - < num2
5939 1       a      2
5940        @ b
5941        @ c
5942 @end example
5944 Join consecutive lines with a space:
5945 @example
5946 $ seq 4 | paste -d ' ' - -
5947 1 2
5948 3 4
5949 @end example
5951 The program accepts the following options.  Also see @ref{Common options}.
5953 @table @samp
5955 @item -s
5956 @itemx --serial
5957 @opindex -s
5958 @opindex --serial
5959 Paste the lines of one file at a time rather than one line from each
5960 file.  Using the above example data:
5962 @example
5963 $ paste -s num2 let3
5964 1       2
5965 a       b       c
5966 @end example
5968 @item -d @var{delim-list}
5969 @itemx --delimiters=@var{delim-list}
5970 @opindex -d
5971 @opindex --delimiters
5972 Consecutively use the characters in @var{delim-list} instead of
5973 TAB to separate merged lines.  When @var{delim-list} is
5974 exhausted, start again at its beginning.  Using the above example data:
5976 @example
5977 $ paste -d '%_' num2 let3 num2
5978 1%a_1
5979 2%b_2
5981 @end example
5983 @end table
5985 @exitstatus
5988 @node join invocation
5989 @section @command{join}: Join lines on a common field
5991 @pindex join
5992 @cindex common field, joining on
5994 @command{join} writes to standard output a line for each pair of input
5995 lines that have identical join fields.  Synopsis:
5997 @example
5998 join [@var{option}]@dots{} @var{file1} @var{file2}
5999 @end example
6001 Either @var{file1} or @var{file2} (but not both) can be @samp{-},
6002 meaning standard input.  @var{file1} and @var{file2} should be
6003 sorted on the join fields.
6005 @vindex LC_COLLATE
6006 Normally, the sort order is that of the
6007 collating sequence specified by the @env{LC_COLLATE} locale.  Unless
6008 the @option{-t} option is given, the sort comparison ignores blanks at
6009 the start of the join field, as in @code{sort -b}.  If the
6010 @option{--ignore-case} option is given, the sort comparison ignores
6011 the case of characters in the join field, as in @code{sort -f}.
6013 The @command{sort} and @command{join} commands should use consistent
6014 locales and options if the output of @command{sort} is fed to
6015 @command{join}.  You can use a command like @samp{sort -k 1b,1} to
6016 sort a file on its default join field, but if you select a non-default
6017 locale, join field, separator, or comparison options, then you should
6018 do so consistently between @command{join} and @command{sort}.
6019 If @samp{join -t ''} is specified then the whole line is considered which
6020 matches the default operation of sort.
6022 If the input has no unpairable lines, a GNU extension is
6023 available; the sort order can be any order that considers two fields
6024 to be equal if and only if the sort comparison described above
6025 considers them to be equal.  For example:
6027 @example
6028 $ cat file1
6029 a a1
6030 c c1
6031 b b1
6032 $ cat file2
6033 a a2
6034 c c2
6035 b b2
6036 $ join file1 file2
6037 a a1 a2
6038 c c1 c2
6039 b b1 b2
6040 @end example
6042 @set JOIN_COMMAND
6043 @checkOrderOption{join}
6044 @clear JOIN_COMMAND
6046 The defaults are:
6047 @itemize
6048 @item the join field is the first field in each line;
6049 @item fields in the input are separated by one or more blanks, with leading
6050 blanks on the line ignored;
6051 @item fields in the output are separated by a space;
6052 @item each output line consists of the join field, the remaining
6053 fields from @var{file1}, then the remaining fields from @var{file2}.
6054 @end itemize
6056 The program accepts the following options.  Also see @ref{Common options}.
6058 @table @samp
6060 @item -a @var{file-number}
6061 @opindex -a
6062 Print a line for each unpairable line in file @var{file-number} (either
6063 @samp{1} or @samp{2}), in addition to the normal output.
6065 @item --check-order
6066 Fail with an error message if either input file is wrongly ordered.
6068 @item --nocheck-order
6069 Do not check that both input files are in sorted order.  This is the default.
6071 @item -e @var{string}
6072 @opindex -e
6073 Replace those output fields that are missing in the input with @var{string}.
6074 I.e., missing fields specified with the @option{-12jo} options.
6076 @item --header
6077 @opindex --header
6078 Treat the first line of each input file as a header line.  The header lines
6079 will be joined and printed as the first output line.  If @option{-o} is used to
6080 specify output format, the header line will be printed according to the
6081 specified format.  The header lines will not be checked for ordering even if
6082 @option{--check-order} is specified.  Also if the header lines from each file
6083 do not match, the heading fields from the first file will be used.
6085 @item -i
6086 @itemx --ignore-case
6087 @opindex -i
6088 @opindex --ignore-case
6089 Ignore differences in case when comparing keys.
6090 With this option, the lines of the input files must be ordered in the same way.
6091 Use @samp{sort -f} to produce this ordering.
6093 @item -1 @var{field}
6094 @opindex -1
6095 Join on field @var{field} (a positive integer) of file 1.
6097 @item -2 @var{field}
6098 @opindex -2
6099 Join on field @var{field} (a positive integer) of file 2.
6101 @item -j @var{field}
6102 Equivalent to @option{-1 @var{field} -2 @var{field}}.
6104 @item -o @var{field-list}
6105 @itemx -o auto
6106 If the keyword @samp{auto} is specified, infer the output format from
6107 the first line in each file.  This is the same as the default output format
6108 but also ensures the same number of fields are output for each line.
6109 Missing fields are replaced with the @option{-e} option and extra fields
6110 are discarded.
6112 Otherwise, construct each output line according to the format in
6113 @var{field-list}.  Each element in @var{field-list} is either the single
6114 character @samp{0} or has the form @var{m.n} where the file number, @var{m},
6115 is @samp{1} or @samp{2} and @var{n} is a positive field number.
6117 A field specification of @samp{0} denotes the join field.
6118 In most cases, the functionality of the @samp{0} field spec
6119 may be reproduced using the explicit @var{m.n} that corresponds
6120 to the join field.  However, when printing unpairable lines
6121 (using either of the @option{-a} or @option{-v} options), there is no way
6122 to specify the join field using @var{m.n} in @var{field-list}
6123 if there are unpairable lines in both files.
6124 To give @command{join} that functionality, POSIX invented the @samp{0}
6125 field specification notation.
6127 The elements in @var{field-list}
6128 are separated by commas or blanks.
6129 Blank separators typically need to be quoted for the shell.  For
6130 example, the commands @samp{join -o 1.2,2.2} and @samp{join -o '1.2
6131 2.2'} are equivalent.
6133 All output lines---including those printed because of any -a or -v
6134 option---are subject to the specified @var{field-list}.
6136 @item -t @var{char}
6137 Use character @var{char} as the input and output field separator.
6138 Treat as significant each occurrence of @var{char} in the input file.
6139 Use @samp{sort -t @var{char}}, without the @option{-b} option of
6140 @samp{sort}, to produce this ordering.  If @samp{join -t ''} is specified,
6141 the whole line is considered, matching the default operation of sort.
6142 If @samp{-t '\0'} is specified then the ASCII NUL
6143 character is used to delimit the fields.
6145 @item -v @var{file-number}
6146 Print a line for each unpairable line in file @var{file-number}
6147 (either @samp{1} or @samp{2}), instead of the normal output.
6149 @optZeroTerminated
6151 @end table
6153 @exitstatus
6156 @node Operating on characters
6157 @chapter Operating on characters
6159 @cindex operating on characters
6161 These commands operate on individual characters.
6163 @menu
6164 * tr invocation::               Translate, squeeze, and/or delete characters.
6165 * expand invocation::           Convert tabs to spaces.
6166 * unexpand invocation::         Convert spaces to tabs.
6167 @end menu
6170 @node tr invocation
6171 @section @command{tr}: Translate, squeeze, and/or delete characters
6173 @pindex tr
6175 Synopsis:
6177 @example
6178 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
6179 @end example
6181 @command{tr} copies standard input to standard output, performing
6182 one of the following operations:
6184 @itemize @bullet
6185 @item
6186 translate, and optionally squeeze repeated characters in the result,
6187 @item
6188 squeeze repeated characters,
6189 @item
6190 delete characters,
6191 @item
6192 delete characters, then squeeze repeated characters from the result.
6193 @end itemize
6195 The @var{set1} and (if given) @var{set2} arguments define ordered
6196 sets of characters, referred to below as @var{set1} and @var{set2}.  These
6197 sets are the characters of the input that @command{tr} operates on.
6198 The @option{--complement} (@option{-c}, @option{-C}) option replaces
6199 @var{set1} with its
6200 complement (all of the characters that are not in @var{set1}).
6202 Currently @command{tr} fully supports only single-byte characters.
6203 Eventually it will support multibyte characters; when it does, the
6204 @option{-C} option will cause it to complement the set of characters,
6205 whereas @option{-c} will cause it to complement the set of values.
6206 This distinction will matter only when some values are not characters,
6207 and this is possible only in locales using multibyte encodings when
6208 the input contains encoding errors.
6210 The program accepts the @option{--help} and @option{--version}
6211 options.  @xref{Common options}.  Options must precede operands.
6213 @exitstatus
6215 @menu
6216 * Character sets::              Specifying sets of characters.
6217 * Translating::                 Changing one set of characters to another.
6218 * Squeezing::                   Squeezing repeats and deleting.
6219 @end menu
6222 @node Character sets
6223 @subsection Specifying sets of characters
6225 @cindex specifying sets of characters
6227 The format of the @var{set1} and @var{set2} arguments resembles
6228 the format of regular expressions; however, they are not regular
6229 expressions, only lists of characters.  Most characters simply
6230 represent themselves in these strings, but the strings can contain
6231 the shorthands listed below, for convenience.  Some of them can be
6232 used only in @var{set1} or @var{set2}, as noted below.
6234 @table @asis
6236 @item Backslash escapes
6237 @cindex backslash escapes
6239 The following backslash escape sequences are recognized:
6241 @table @samp
6242 @item \a
6243 Control-G.
6244 @item \b
6245 Control-H.
6246 @item \f
6247 Control-L.
6248 @item \n
6249 Control-J.
6250 @item \r
6251 Control-M.
6252 @item \t
6253 Control-I.
6254 @item \v
6255 Control-K.
6256 @item \@var{ooo}
6257 The 8-bit character with the value given by @var{ooo}, which is 1 to 3
6258 octal digits.  Note that @samp{\400} is interpreted as the two-byte
6259 sequence, @samp{\040} @samp{0}.
6260 @item \\
6261 A backslash.
6262 @end table
6264 While a backslash followed by a character not listed above is
6265 interpreted as that character, the backslash also effectively
6266 removes any special significance, so it is useful to escape
6267 @samp{[}, @samp{]}, @samp{*}, and @samp{-}.
6269 @item Ranges
6270 @cindex ranges
6272 The notation @samp{@var{m}-@var{n}} expands to all of the characters
6273 from @var{m} through @var{n}, in ascending order.  @var{m} should
6274 collate before @var{n}; if it doesn't, an error results.  As an example,
6275 @samp{0-9} is the same as @samp{0123456789}.
6277 GNU @command{tr} does not support the System V syntax that uses square
6278 brackets to enclose ranges.  Translations specified in that format
6279 sometimes work as expected, since the brackets are often transliterated
6280 to themselves.  However, they should be avoided because they sometimes
6281 behave unexpectedly.  For example, @samp{tr -d '[0-9]'} deletes brackets
6282 as well as digits.
6284 Many historically common and even accepted uses of ranges are not
6285 portable.  For example, on EBCDIC hosts using the @samp{A-Z}
6286 range will not do what most would expect because @samp{A} through @samp{Z}
6287 are not contiguous as they are in ASCII@.
6288 If you can rely on a POSIX compliant version of @command{tr}, then
6289 the best way to work around this is to use character classes (see below).
6290 Otherwise, it is most portable (and most ugly) to enumerate the members
6291 of the ranges.
6293 @item Repeated characters
6294 @cindex repeated characters
6296 The notation @samp{[@var{c}*@var{n}]} in @var{set2} expands to @var{n}
6297 copies of character @var{c}.  Thus, @samp{[y*6]} is the same as
6298 @samp{yyyyyy}.  The notation @samp{[@var{c}*]} in @var{string2} expands
6299 to as many copies of @var{c} as are needed to make @var{set2} as long as
6300 @var{set1}.  If @var{n} begins with @samp{0}, it is interpreted in
6301 octal, otherwise in decimal.
6303 @item Character classes
6304 @cindex character classes
6306 The notation @samp{[:@var{class}:]} expands to all of the characters in
6307 the (predefined) class @var{class}.  The characters expand in no
6308 particular order, except for the @code{upper} and @code{lower} classes,
6309 which expand in ascending order.  When the @option{--delete} (@option{-d})
6310 and @option{--squeeze-repeats} (@option{-s}) options are both given, any
6311 character class can be used in @var{set2}.  Otherwise, only the
6312 character classes @code{lower} and @code{upper} are accepted in
6313 @var{set2}, and then only if the corresponding character class
6314 (@code{upper} and @code{lower}, respectively) is specified in the same
6315 relative position in @var{set1}.  Doing this specifies case conversion.
6316 The class names are given below; an error results when an invalid class
6317 name is given.
6319 @table @code
6320 @item alnum
6321 @opindex alnum
6322 Letters and digits.
6323 @item alpha
6324 @opindex alpha
6325 Letters.
6326 @item blank
6327 @opindex blank
6328 Horizontal whitespace.
6329 @item cntrl
6330 @opindex cntrl
6331 Control characters.
6332 @item digit
6333 @opindex digit
6334 Digits.
6335 @item graph
6336 @opindex graph
6337 Printable characters, not including space.
6338 @item lower
6339 @opindex lower
6340 Lowercase letters.
6341 @item print
6342 @opindex print
6343 Printable characters, including space.
6344 @item punct
6345 @opindex punct
6346 Punctuation characters.
6347 @item space
6348 @opindex space
6349 Horizontal or vertical whitespace.
6350 @item upper
6351 @opindex upper
6352 Uppercase letters.
6353 @item xdigit
6354 @opindex xdigit
6355 Hexadecimal digits.
6356 @end table
6358 @item Equivalence classes
6359 @cindex equivalence classes
6361 The syntax @samp{[=@var{c}=]} expands to all of the characters that are
6362 equivalent to @var{c}, in no particular order.  Equivalence classes are
6363 a relatively recent invention intended to support non-English alphabets.
6364 But there seems to be no standard way to define them or determine their
6365 contents.  Therefore, they are not fully implemented in GNU @command{tr};
6366 each character's equivalence class consists only of that character,
6367 which is of no particular use.
6369 @end table
6372 @node Translating
6373 @subsection Translating
6375 @cindex translating characters
6377 @command{tr} performs translation when @var{set1} and @var{set2} are
6378 both given and the @option{--delete} (@option{-d}) option is not given.
6379 @command{tr} translates each character of its input that is in @var{set1}
6380 to the corresponding character in @var{set2}.  Characters not in
6381 @var{set1} are passed through unchanged.  When a character appears more
6382 than once in @var{set1} and the corresponding characters in @var{set2}
6383 are not all the same, only the final one is used.  For example, these
6384 two commands are equivalent:
6386 @example
6387 tr aaa xyz
6388 tr a z
6389 @end example
6391 A common use of @command{tr} is to convert lowercase characters to
6392 uppercase.  This can be done in many ways.  Here are three of them:
6394 @example
6395 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
6396 tr a-z A-Z
6397 tr '[:lower:]' '[:upper:]'
6398 @end example
6400 @noindent
6401 But note that using ranges like @code{a-z} above is not portable.
6403 When @command{tr} is performing translation, @var{set1} and @var{set2}
6404 typically have the same length.  If @var{set1} is shorter than
6405 @var{set2}, the extra characters at the end of @var{set2} are ignored.
6407 On the other hand, making @var{set1} longer than @var{set2} is not
6408 portable; POSIX says that the result is undefined.  In this situation,
6409 BSD @command{tr} pads @var{set2} to the length of @var{set1} by repeating
6410 the last character of @var{set2} as many times as necessary.  System V
6411 @command{tr} truncates @var{set1} to the length of @var{set2}.
6413 By default, GNU @command{tr} handles this case like BSD @command{tr}.
6414 When the @option{--truncate-set1} (@option{-t}) option is given,
6415 GNU @command{tr} handles this case like the System V @command{tr}
6416 instead.  This option is ignored for operations other than translation.
6418 Acting like System V @command{tr} in this case breaks the relatively common
6419 BSD idiom:
6421 @example
6422 tr -cs A-Za-z0-9 '\012'
6423 @end example
6425 @noindent
6426 because it converts only zero bytes (the first element in the
6427 complement of @var{set1}), rather than all non-alphanumerics, to
6428 newlines.
6430 @noindent
6431 By the way, the above idiom is not portable because it uses ranges, and
6432 it assumes that the octal code for newline is 012.
6433 Assuming a POSIX compliant @command{tr}, here is a better
6434 way to write it:
6436 @example
6437 tr -cs '[:alnum:]' '[\n*]'
6438 @end example
6441 @node Squeezing
6442 @subsection Squeezing repeats and deleting
6444 @cindex squeezing repeat characters
6445 @cindex deleting characters
6447 When given just the @option{--delete} (@option{-d}) option, @command{tr}
6448 removes any input characters that are in @var{set1}.
6450 When given just the @option{--squeeze-repeats} (@option{-s}) option,
6451 @command{tr} replaces each input sequence of a repeated character that
6452 is in @var{set1} with a single occurrence of that character.
6454 When given both @option{--delete} and @option{--squeeze-repeats}, @command{tr}
6455 first performs any deletions using @var{set1}, then squeezes repeats
6456 from any remaining characters using @var{set2}.
6458 The @option{--squeeze-repeats} option may also be used when translating,
6459 in which case @command{tr} first performs translation, then squeezes
6460 repeats from any remaining characters using @var{set2}.
6462 Here are some examples to illustrate various combinations of options:
6464 @itemize @bullet
6466 @item
6467 Remove all zero bytes:
6469 @example
6470 tr -d '\0'
6471 @end example
6473 @item
6474 Put all words on lines by themselves.  This converts all
6475 non-alphanumeric characters to newlines, then squeezes each string
6476 of repeated newlines into a single newline:
6478 @example
6479 tr -cs '[:alnum:]' '[\n*]'
6480 @end example
6482 @item
6483 Convert each sequence of repeated newlines to a single newline:
6485 @example
6486 tr -s '\n'
6487 @end example
6489 @item
6490 Find doubled occurrences of words in a document.
6491 @c Separate the following two "the"s, so typo checkers don't complain.
6492 For example, people often write ``the @w{}the'' with the repeated words
6493 separated by a newline.  The Bourne shell script below works first
6494 by converting each sequence of punctuation and blank characters to a
6495 single newline.  That puts each ``word'' on a line by itself.
6496 Next it maps all uppercase characters to lower case, and finally it
6497 runs @command{uniq} with the @option{-d} option to print out only the words
6498 that were repeated.
6500 @example
6501 #!/bin/sh
6502 cat -- "$@@" \
6503   | tr -s '[:punct:][:blank:]' '[\n*]' \
6504   | tr '[:upper:]' '[:lower:]' \
6505   | uniq -d
6506 @end example
6508 @item
6509 Deleting a small set of characters is usually straightforward.  For example,
6510 to remove all @samp{a}s, @samp{x}s, and @samp{M}s you would do this:
6512 @example
6513 tr -d axM
6514 @end example
6516 However, when @samp{-} is one of those characters, it can be tricky because
6517 @samp{-} has special meanings.  Performing the same task as above but also
6518 removing all @samp{-} characters, we might try @code{tr -d -axM}, but
6519 that would fail because @command{tr} would try to interpret @option{-a} as
6520 a command-line option.  Alternatively, we could try putting the hyphen
6521 inside the string, @code{tr -d a-xM}, but that wouldn't work either because
6522 it would make @command{tr} interpret @code{a-x} as the range of characters
6523 @samp{a}@dots{}@samp{x} rather than the three.
6524 One way to solve the problem is to put the hyphen at the end of the list
6525 of characters:
6527 @example
6528 tr -d axM-
6529 @end example
6531 Or you can use @samp{--} to terminate option processing:
6533 @example
6534 tr -d -- -axM
6535 @end example
6537 More generally, use the character class notation @code{[=c=]}
6538 with @samp{-} (or any other character) in place of the @samp{c}:
6540 @example
6541 tr -d '[=-=]axM'
6542 @end example
6544 Note how single quotes are used in the above example to protect the
6545 square brackets from interpretation by a shell.
6547 @end itemize
6550 @node expand invocation
6551 @section @command{expand}: Convert tabs to spaces
6553 @pindex expand
6554 @cindex tabs to spaces, converting
6555 @cindex converting tabs to spaces
6557 @command{expand} writes the contents of each given @var{file}, or standard
6558 input if none are given or for a @var{file} of @samp{-}, to standard
6559 output, with tab characters converted to the appropriate number of
6560 spaces.  Synopsis:
6562 @example
6563 expand [@var{option}]@dots{} [@var{file}]@dots{}
6564 @end example
6566 By default, @command{expand} converts all tabs to spaces.  It preserves
6567 backspace characters in the output; they decrement the column count for
6568 tab calculations.  The default action is equivalent to @option{-t 8} (set
6569 tabs every 8 columns).
6571 The program accepts the following options.  Also see @ref{Common options}.
6573 @table @samp
6575 @item -t @var{tab1}[,@var{tab2}]@dots{}
6576 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
6577 @opindex -t
6578 @opindex --tabs
6579 @cindex tab stops, setting
6580 If only one tab stop is given, set the tabs @var{tab1} spaces apart
6581 (default is 8).  Otherwise, set the tabs at columns @var{tab1},
6582 @var{tab2}, @dots{} (numbered from 0), and replace any tabs beyond the
6583 last tab stop given with single spaces.  Tab stops can be separated by
6584 blanks as well as by commas.
6586 For compatibility, GNU @command{expand} also accepts the obsolete
6587 option syntax, @option{-@var{t1}[,@var{t2}]@dots{}}.  New scripts
6588 should use @option{-t @var{t1}[,@var{t2}]@dots{}} instead.
6590 @item -i
6591 @itemx --initial
6592 @opindex -i
6593 @opindex --initial
6594 @cindex initial tabs, converting
6595 Only convert initial tabs (those that precede all non-space or non-tab
6596 characters) on each line to spaces.
6598 @end table
6600 @exitstatus
6603 @node unexpand invocation
6604 @section @command{unexpand}: Convert spaces to tabs
6606 @pindex unexpand
6608 @command{unexpand} writes the contents of each given @var{file}, or
6609 standard input if none are given or for a @var{file} of @samp{-}, to
6610 standard output, converting blanks at the beginning of each line into
6611 as many tab characters as needed.  In the default POSIX
6612 locale, a @dfn{blank} is a space or a tab; other locales may specify
6613 additional blank characters.  Synopsis:
6615 @example
6616 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
6617 @end example
6619 By default, @command{unexpand} converts only initial blanks (those
6620 that precede all non-blank characters) on each line.  It
6621 preserves backspace characters in the output; they decrement the column
6622 count for tab calculations.  By default, tabs are set at every 8th
6623 column.
6625 The program accepts the following options.  Also see @ref{Common options}.
6627 @table @samp
6629 @item -t @var{tab1}[,@var{tab2}]@dots{}
6630 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
6631 @opindex -t
6632 @opindex --tabs
6633 If only one tab stop is given, set the tabs @var{tab1} columns apart
6634 instead of the default 8.  Otherwise, set the tabs at columns
6635 @var{tab1}, @var{tab2}, @dots{} (numbered from 0), and leave blanks
6636 beyond the tab stops given unchanged.  Tab stops can be separated by
6637 blanks as well as by commas.  This option implies the @option{-a} option.
6639 For compatibility, GNU @command{unexpand} supports the obsolete option syntax,
6640 @option{-@var{tab1}[,@var{tab2}]@dots{}}, where tab stops must be
6641 separated by commas.  (Unlike @option{-t}, this obsolete option does
6642 not imply @option{-a}.)  New scripts should use @option{--first-only -t
6643 @var{tab1}[,@var{tab2}]@dots{}} instead.
6645 @item -a
6646 @itemx --all
6647 @opindex -a
6648 @opindex --all
6649 Also convert all sequences of two or more blanks just before a tab stop,
6650 even if they occur after non-blank characters in a line.
6652 @end table
6654 @exitstatus
6657 @node Directory listing
6658 @chapter Directory listing
6660 This chapter describes the @command{ls} command and its variants @command{dir}
6661 and @command{vdir}, which list information about files.
6663 @menu
6664 * ls invocation::               List directory contents.
6665 * dir invocation::              Briefly ls.
6666 * vdir invocation::             Verbosely ls.
6667 * dircolors invocation::        Color setup for ls, etc.
6668 @end menu
6671 @node ls invocation
6672 @section @command{ls}: List directory contents
6674 @pindex ls
6675 @cindex directory listing
6677 The @command{ls} program lists information about files (of any type,
6678 including directories).  Options and file arguments can be intermixed
6679 arbitrarily, as usual.
6681 For non-option command-line arguments that are directories, by default
6682 @command{ls} lists the contents of directories, not recursively, and
6683 omitting files with names beginning with @samp{.}.  For other non-option
6684 arguments, by default @command{ls} lists just the file name.  If no
6685 non-option argument is specified, @command{ls} operates on the current
6686 directory, acting as if it had been invoked with a single argument of @samp{.}.
6688 @vindex LC_ALL
6689 By default, the output is sorted alphabetically, according to the locale
6690 settings in effect.@footnote{If you use a non-POSIX
6691 locale (e.g., by setting @env{LC_ALL} to @samp{en_US}), then @command{ls} may
6692 produce output that is sorted differently than you're accustomed to.
6693 In that case, set the @env{LC_ALL} environment variable to @samp{C}.}
6694 If standard output is
6695 a terminal, the output is in columns (sorted vertically) and control
6696 characters are output as question marks; otherwise, the output is listed
6697 one per line and control characters are output as-is.
6699 Because @command{ls} is such a fundamental program, it has accumulated many
6700 options over the years.  They are described in the subsections below;
6701 within each section, options are listed alphabetically (ignoring case).
6702 The division of options into the subsections is not absolute, since some
6703 options affect more than one aspect of @command{ls}'s operation.
6705 @cindex exit status of @command{ls}
6706 Exit status:
6708 @display
6709 0 success
6710 1 minor problems  (e.g., failure to access a file or directory not
6711   specified as a command line argument.  This happens when listing a
6712   directory in which entries are actively being removed or renamed.)
6713 2 serious trouble (e.g., memory exhausted, invalid option, failure
6714   to access a file or directory specified as a command line argument
6715   or a directory loop)
6716 @end display
6718 Also see @ref{Common options}.
6720 @menu
6721 * Which files are listed::
6722 * What information is listed::
6723 * Sorting the output::
6724 * Details about version sort::
6725 * General output formatting::
6726 * Formatting file timestamps::
6727 * Formatting the file names::
6728 @end menu
6731 @node Which files are listed
6732 @subsection Which files are listed
6734 These options determine which files @command{ls} lists information for.
6735 By default, @command{ls} lists files and the contents of any
6736 directories on the command line, except that in directories it ignores
6737 files whose names start with @samp{.}.
6739 @table @samp
6741 @item -a
6742 @itemx --all
6743 @opindex -a
6744 @opindex --all
6745 In directories, do not ignore file names that start with @samp{.}.
6747 @item -A
6748 @itemx --almost-all
6749 @opindex -A
6750 @opindex --almost-all
6751 In directories, do not ignore all file names that start with @samp{.};
6752 ignore only @file{.} and @file{..}.  The @option{--all} (@option{-a})
6753 option overrides this option.
6755 @item -B
6756 @itemx --ignore-backups
6757 @opindex -B
6758 @opindex --ignore-backups
6759 @cindex backup files, ignoring
6760 In directories, ignore files that end with @samp{~}.  This option is
6761 equivalent to @samp{--ignore='*~' --ignore='.*~'}.
6763 @item -d
6764 @itemx --directory
6765 @opindex -d
6766 @opindex --directory
6767 List just the names of directories, as with other types of files, rather
6768 than listing their contents.
6769 @c The following sentence is the same as the one for -F.
6770 Do not follow symbolic links listed on the
6771 command line unless the @option{--dereference-command-line} (@option{-H}),
6772 @option{--dereference} (@option{-L}), or
6773 @option{--dereference-command-line-symlink-to-dir} options are specified.
6775 @item -H
6776 @itemx --dereference-command-line
6777 @opindex -H
6778 @opindex --dereference-command-line
6779 @cindex symbolic links, dereferencing
6780 If a command line argument specifies a symbolic link, show information
6781 for the file the link references rather than for the link itself.
6783 @item --dereference-command-line-symlink-to-dir
6784 @opindex --dereference-command-line-symlink-to-dir
6785 @cindex symbolic links, dereferencing
6786 Do not dereference symbolic links, with one exception:
6787 if a command line argument specifies a symbolic link that refers to
6788 a directory, show information for that directory rather than for the
6789 link itself.
6790 This is the default behavior when no other dereferencing-related
6791 option has been specified (@option{--classify} (@option{-F}),
6792 @option{--directory} (@option{-d}),
6793 (@option{-l}),
6794 @option{--dereference} (@option{-L}), or
6795 @option{--dereference-command-line} (@option{-H})).
6797 @item --group-directories-first
6798 @opindex --group-directories-first
6799 Group all the directories before the files and then sort the
6800 directories and the files separately using the selected sort key
6801 (see --sort option).
6802 That is, this option specifies a primary sort key,
6803 and the --sort option specifies a secondary key.
6804 However, any use of @option{--sort=none}
6805 (@option{-U}) disables this option altogether.
6807 @item --hide=PATTERN
6808 @opindex --hide=@var{pattern}
6809 In directories, ignore files whose names match the shell pattern
6810 @var{pattern}, unless the @option{--all} (@option{-a}) or
6811 @option{--almost-all} (@option{-A}) is also given.  This
6812 option acts like @option{--ignore=@var{pattern}} except that it has no
6813 effect if @option{--all} (@option{-a}) or @option{--almost-all}
6814 (@option{-A}) is also given.
6816 This option can be useful in shell aliases.  For example, if
6817 @command{lx} is an alias for @samp{ls --hide='*~'} and @command{ly} is
6818 an alias for @samp{ls --ignore='*~'}, then the command @samp{lx -A}
6819 lists the file @file{README~} even though @samp{ly -A} would not.
6821 @item -I @var{pattern}
6822 @itemx --ignore=@var{pattern}
6823 @opindex -I
6824 @opindex --ignore=@var{pattern}
6825 In directories, ignore files whose names match the shell pattern
6826 (not regular expression) @var{pattern}.  As
6827 in the shell, an initial @samp{.} in a file name does not match a
6828 wildcard at the start of @var{pattern}.  Sometimes it is useful
6829 to give this option several times.  For example,
6831 @smallexample
6832 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
6833 @end smallexample
6835 The first option ignores names of length 3 or more that start with @samp{.},
6836 the second ignores all two-character names that start with @samp{.}
6837 except @samp{..}, and the third ignores names that start with @samp{#}.
6839 @item -L
6840 @itemx --dereference
6841 @opindex -L
6842 @opindex --dereference
6843 @cindex symbolic links, dereferencing
6844 When showing file information for a symbolic link, show information
6845 for the file the link references rather than the link itself.
6846 However, even with this option, @command{ls} still prints the name
6847 of the link itself, not the name of the file that the link points to.
6849 @item -R
6850 @itemx --recursive
6851 @opindex -R
6852 @opindex --recursive
6853 @cindex recursive directory listing
6854 @cindex directory listing, recursive
6855 List the contents of all directories recursively.
6857 @end table
6860 @node What information is listed
6861 @subsection What information is listed
6863 These options affect the information that @command{ls} displays.  By
6864 default, only file names are shown.
6866 @table @samp
6868 @item --author
6869 @opindex --author
6870 @cindex hurd, author, printing
6871 List each file's author when producing long format directory listings.
6872 In GNU/Hurd, file authors can differ from their owners, but in other
6873 operating systems the two are the same.
6875 @item -D
6876 @itemx --dired
6877 @opindex -D
6878 @opindex --dired
6879 @cindex dired Emacs mode support
6880 With the long listing (@option{-l}) format, print an additional line after
6881 the main output:
6883 @example
6884 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
6885 @end example
6887 @noindent
6888 The @var{begn} and @var{endn} are unsigned integers that record the
6889 byte position of the beginning and end of each file name in the output.
6890 This makes it easy for Emacs to find the names, even when they contain
6891 unusual characters such as space or newline, without fancy searching.
6893 If directories are being listed recursively (@option{-R}), output a similar
6894 line with offsets for each subdirectory name:
6896 @example
6897 //SUBDIRED// @var{beg1} @var{end1} @dots{}
6898 @end example
6900 Finally, output a line of the form:
6902 @example
6903 //DIRED-OPTIONS// --quoting-style=@var{word}
6904 @end example
6906 @noindent
6907 where @var{word} is the quoting style (@pxref{Formatting the file names}).
6909 Here is an actual example:
6911 @example
6912 $ mkdir -p a/sub/deeper a/sub2
6913 $ touch a/f1 a/f2
6914 $ touch a/sub/deeper/file
6915 $ ls -gloRF --dired a
6916   a:
6917   total 8
6918   -rw-r--r-- 1    0 Jun 10 12:27 f1
6919   -rw-r--r-- 1    0 Jun 10 12:27 f2
6920   drwxr-xr-x 3 4096 Jun 10 12:27 sub/
6921   drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
6923   a/sub:
6924   total 4
6925   drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
6927   a/sub/deeper:
6928   total 0
6929   -rw-r--r-- 1 0 Jun 10 12:27 file
6931   a/sub2:
6932   total 0
6933 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
6934 //SUBDIRED// 2 3 167 172 228 240 290 296
6935 //DIRED-OPTIONS// --quoting-style=literal
6936 @end example
6938 Note that the pairs of offsets on the @samp{//DIRED//} line above delimit
6939 these names: @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper},
6940 @file{file}.
6941 The offsets on the @samp{//SUBDIRED//} line delimit the following
6942 directory names: @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}.
6944 Here is an example of how to extract the fifth entry name, @samp{deeper},
6945 corresponding to the pair of offsets, 222 and 228:
6947 @example
6948 $ ls -gloRF --dired a > out
6949 $ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo
6950 deeper
6951 @end example
6953 Note that although the listing above includes a trailing slash
6954 for the @samp{deeper} entry, the offsets select the name without
6955 the trailing slash.  However, if you invoke @command{ls} with @option{--dired}
6956 along with an option like @option{--escape} (aka @option{-b}) and operate
6957 on a file whose name contains special characters, notice that the backslash
6958 @emph{is} included:
6960 @example
6961 $ touch 'a b'
6962 $ ls -blog --dired 'a b'
6963   -rw-r--r-- 1 0 Jun 10 12:28 a\ b
6964 //DIRED// 30 34
6965 //DIRED-OPTIONS// --quoting-style=escape
6966 @end example
6968 If you use a quoting style that adds quote marks
6969 (e.g., @option{--quoting-style=c}), then the offsets include the quote marks.
6970 So beware that the user may select the quoting style via the environment
6971 variable @env{QUOTING_STYLE}@.  Hence, applications using @option{--dired}
6972 should either specify an explicit @option{--quoting-style=literal} option
6973 (aka @option{-N} or @option{--literal}) on the command line, or else be
6974 prepared to parse the escaped names.
6976 @item --full-time
6977 @opindex --full-time
6978 Produce long format directory listings, and list times in full.  It is
6979 equivalent to using @option{--format=long} with
6980 @option{--time-style=full-iso} (@pxref{Formatting file timestamps}).
6982 @item -g
6983 @opindex -g
6984 Produce long format directory listings, but don't display owner information.
6986 @item -G
6987 @itemx --no-group
6988 @opindex -G
6989 @opindex --no-group
6990 Inhibit display of group information in a long format directory listing.
6991 (This is the default in some non-GNU versions of @command{ls}, so we
6992 provide this option for compatibility.)
6994 @optHumanReadable
6996 @item -i
6997 @itemx --inode
6998 @opindex -i
6999 @opindex --inode
7000 @cindex inode number, printing
7001 Print the inode number (also called the file serial number and index
7002 number) of each file to the left of the file name.  (This number
7003 uniquely identifies each file within a particular file system.)
7005 @item -l
7006 @itemx --format=long
7007 @itemx --format=verbose
7008 @opindex -l
7009 @opindex --format
7010 @opindex long ls @r{format}
7011 @opindex verbose ls @r{format}
7012 In addition to the name of each file, print the file type, file mode bits,
7013 number of hard links, owner name, group name, size, and
7014 timestamp (@pxref{Formatting file timestamps}), normally
7015 the modification time.  Print question marks for information that
7016 cannot be determined.
7018 Normally the size is printed as a byte count without punctuation, but
7019 this can be overridden (@pxref{Block size}).  For example, @option{-h}
7020 prints an abbreviated, human-readable count, and
7021 @samp{--block-size="'1"} prints a byte count with the thousands
7022 separator of the current locale.
7024 For each directory that is listed, preface the files with a line
7025 @samp{total @var{blocks}}, where @var{blocks} is the total disk allocation
7026 for all files in that directory.  The block size currently defaults to 1024
7027 bytes, but this can be overridden (@pxref{Block size}).
7028 The @var{blocks} computed counts each hard link separately;
7029 this is arguably a deficiency.
7031 The file type is one of the following characters:
7033 @c The commented-out entries are ones we're not sure about.
7035 @table @samp
7036 @item -
7037 regular file
7038 @item b
7039 block special file
7040 @item c
7041 character special file
7042 @item C
7043 high performance (``contiguous data'') file
7044 @item d
7045 directory
7046 @item D
7047 door (Solaris 2.5 and up)
7048 @c @item F
7049 @c semaphore, if this is a distinct file type
7050 @item l
7051 symbolic link
7052 @c @item m
7053 @c multiplexed file (7th edition Unix; obsolete)
7054 @item M
7055 off-line (``migrated'') file (Cray DMF)
7056 @item n
7057 network special file (HP-UX)
7058 @item p
7059 FIFO (named pipe)
7060 @item P
7061 port (Solaris 10 and up)
7062 @c @item Q
7063 @c message queue, if this is a distinct file type
7064 @item s
7065 socket
7066 @c @item S
7067 @c shared memory object, if this is a distinct file type
7068 @c @item T
7069 @c typed memory object, if this is a distinct file type
7070 @c @item w
7071 @c whiteout (4.4BSD; not implemented)
7072 @item ?
7073 some other file type
7074 @end table
7076 @cindex permissions, output by @command{ls}
7077 The file mode bits listed are similar to symbolic mode specifications
7078 (@pxref{Symbolic Modes}).  But @command{ls} combines multiple bits into the
7079 third character of each set of permissions as follows:
7081 @table @samp
7082 @item s
7083 If the set-user-ID or set-group-ID bit and the corresponding executable bit
7084 are both set.
7086 @item S
7087 If the set-user-ID or set-group-ID bit is set but the corresponding
7088 executable bit is not set.
7090 @item t
7091 If the restricted deletion flag or sticky bit, and the
7092 other-executable bit, are both set.  The restricted deletion flag is
7093 another name for the sticky bit.  @xref{Mode Structure}.
7095 @item T
7096 If the restricted deletion flag or sticky bit is set but the
7097 other-executable bit is not set.
7099 @item x
7100 If the executable bit is set and none of the above apply.
7102 @item -
7103 Otherwise.
7104 @end table
7106 Following the file mode bits is a single character that specifies
7107 whether an alternate access method such as an access control list
7108 applies to the file.  When the character following the file mode bits is a
7109 space, there is no alternate access method.  When it is a printing
7110 character, then there is such a method.
7112 GNU @command{ls} uses a @samp{.} character to indicate a file
7113 with a security context, but no other alternate access method.
7115 A file with any other combination of alternate access methods
7116 is marked with a @samp{+} character.
7118 @item -n
7119 @itemx --numeric-uid-gid
7120 @opindex -n
7121 @opindex --numeric-uid-gid
7122 @cindex numeric uid and gid
7123 @cindex numeric user and group IDs
7124 Produce long format directory listings, but
7125 display numeric user and group IDs instead of the owner and group names.
7127 @item -o
7128 @opindex -o
7129 Produce long format directory listings, but don't display group information.
7130 It is equivalent to using @option{--format=long} with @option{--no-group} .
7132 @item -s
7133 @itemx --size
7134 @opindex -s
7135 @opindex --size
7136 @cindex disk allocation
7137 @cindex size of files, reporting
7138 Print the disk allocation of each file to the left of the file name.
7139 This is the amount of disk space used by the file, which is usually a
7140 bit more than the file's size, but it can be less if the file has holes.
7142 Normally the disk allocation is printed in units of
7143 1024 bytes, but this can be overridden (@pxref{Block size}).
7145 @cindex NFS mounts from BSD to HP-UX
7146 For files that are NFS-mounted from an HP-UX system to a BSD system,
7147 this option reports sizes that are half the correct values.  On HP-UX
7148 systems, it reports sizes that are twice the correct values for files
7149 that are NFS-mounted from BSD systems.  This is due to a flaw in HP-UX;
7150 it also affects the HP-UX @command{ls} program.
7152 @optSi
7154 @item -Z
7155 @itemx --context
7156 @opindex -Z
7157 @opindex --context
7158 @cindex SELinux
7159 @cindex security context
7160 Display the SELinux security context or @samp{?} if none is found.
7161 When used with the @option{-l} option, print the security context
7162 to the left of the size column.
7164 @end table
7167 @node Sorting the output
7168 @subsection Sorting the output
7170 @cindex sorting @command{ls} output
7171 These options change the order in which @command{ls} sorts the information
7172 it outputs.  By default, sorting is done by character code
7173 (e.g., ASCII order).
7175 @table @samp
7177 @item -c
7178 @itemx --time=ctime
7179 @itemx --time=status
7180 @opindex -c
7181 @opindex --time
7182 @opindex ctime@r{, printing or sorting by}
7183 @opindex status time@r{, printing or sorting by}
7184 @opindex use time@r{, printing or sorting files by}
7185 If the long listing format (e.g., @option{-l}, @option{-o}) is being used,
7186 print the status change time (the @samp{ctime} in the inode) instead of
7187 the modification time.
7188 When explicitly sorting by time (@option{--sort=time} or @option{-t})
7189 or when not using a long listing format,
7190 sort according to the status change time.
7192 @item -f
7193 @opindex -f
7194 @cindex unsorted directory listing
7195 @cindex directory order, listing by
7196 Primarily, like @option{-U}---do not sort; list the files in whatever
7197 order they are stored in the directory.  But also enable @option{-a} (list
7198 all files) and disable @option{-l}, @option{--color}, and @option{-s} (if they
7199 were specified before the @option{-f}).
7201 @item -r
7202 @itemx --reverse
7203 @opindex -r
7204 @opindex --reverse
7205 @cindex reverse sorting
7206 Reverse whatever the sorting method is---e.g., list files in reverse
7207 alphabetical order, youngest first, smallest first, or whatever.
7209 @item -S
7210 @itemx --sort=size
7211 @opindex -S
7212 @opindex --sort
7213 @opindex size of files@r{, sorting files by}
7214 Sort by file size, largest first.
7216 @item -t
7217 @itemx --sort=time
7218 @opindex -t
7219 @opindex --sort
7220 @opindex modification time@r{, sorting files by}
7221 Sort by modification time (the @samp{mtime} in the inode), newest first.
7223 @item -u
7224 @itemx --time=atime
7225 @itemx --time=access
7226 @itemx --time=use
7227 @opindex -u
7228 @opindex --time
7229 @opindex use time@r{, printing or sorting files by}
7230 @opindex atime@r{, printing or sorting files by}
7231 @opindex access time@r{, printing or sorting files by}
7232 If the long listing format (e.g., @option{--format=long}) is being used,
7233 print the last access time (the @samp{atime} in the inode).
7234 When explicitly sorting by time (@option{--sort=time} or @option{-t})
7235 or when not using a long listing format, sort according to the access time.
7237 @item -U
7238 @itemx --sort=none
7239 @opindex -U
7240 @opindex --sort
7241 @opindex none@r{, sorting option for @command{ls}}
7242 Do not sort; list the files in whatever order they are
7243 stored in the directory.  (Do not do any of the other unrelated things
7244 that @option{-f} does.)  This is especially useful when listing very large
7245 directories, since not doing any sorting can be noticeably faster.
7247 @item -v
7248 @itemx --sort=version
7249 @opindex -v
7250 @opindex --sort
7251 @opindex version@r{, sorting option for @command{ls}}
7252 Sort by version name and number, lowest first.  It behaves like a default
7253 sort, except that each sequence of decimal digits is treated numerically
7254 as an index/version number.  (@xref{Details about version sort}.)
7256 @item -X
7257 @itemx --sort=extension
7258 @opindex -X
7259 @opindex --sort
7260 @opindex extension@r{, sorting files by}
7261 Sort directory contents alphabetically by file extension (characters
7262 after the last @samp{.}); files with no extension are sorted first.
7264 @end table
7267 @node Details about version sort
7268 @subsection Details about version sort
7270 Version sorting handles the fact that file names frequently include indices or
7271 version numbers.  Standard sorting usually does not produce the order that one
7272 expects because comparisons are made on a character-by-character basis.
7273 Version sorting is especially useful when browsing directories that contain
7274 many files with indices/version numbers in their names:
7276 @example
7277 $ ls -1            $ ls -1v
7278 abc.zml-1.gz       abc.zml-1.gz
7279 abc.zml-12.gz      abc.zml-2.gz
7280 abc.zml-2.gz       abc.zml-12.gz
7281 @end example
7283 Version-sorted strings are compared such that if @var{ver1} and @var{ver2}
7284 are version numbers and @var{prefix} and @var{suffix} (@var{suffix} matching
7285 the regular expression @samp{(\.[A-Za-z~][A-Za-z0-9~]*)*}) are strings then
7286 @var{ver1} < @var{ver2} implies that the name composed of
7287 ``@var{prefix} @var{ver1} @var{suffix}'' sorts before
7288 ``@var{prefix} @var{ver2} @var{suffix}''.
7290 Note also that leading zeros of numeric parts are ignored:
7292 @example
7293 $ ls -1            $ ls -1v
7294 abc-1.007.tgz      abc-1.01a.tgz
7295 abc-1.012b.tgz     abc-1.007.tgz
7296 abc-1.01a.tgz      abc-1.012b.tgz
7297 @end example
7299 This functionality is implemented using gnulib's @code{filevercmp} function,
7300 which has some caveats worth noting.
7302 @itemize @bullet
7303 @item @env{LC_COLLATE} is ignored, which means @samp{ls -v} and @samp{sort -V}
7304 will sort non-numeric prefixes as if the @env{LC_COLLATE} locale category
7305 was set to @samp{C}@.
7306 @item Some suffixes will not be matched by the regular
7307 expression mentioned above.  Consequently these examples may
7308 not sort as you expect:
7310 @example
7311 abc-1.2.3.4.7z
7312 abc-1.2.3.7z
7313 @end example
7315 @example
7316 abc-1.2.3.4.x86_64.rpm
7317 abc-1.2.3.x86_64.rpm
7318 @end example
7319 @end itemize
7321 @node General output formatting
7322 @subsection General output formatting
7324 These options affect the appearance of the overall output.
7326 @table @samp
7328 @item -1
7329 @itemx --format=single-column
7330 @opindex -1
7331 @opindex --format
7332 @opindex single-column @r{output of files}
7333 List one file per line.  This is the default for @command{ls} when standard
7334 output is not a terminal.  See also the @option{-b} and @option{-q} options
7335 to suppress direct output of newline characters within a file name.
7337 @item -C
7338 @itemx --format=vertical
7339 @opindex -C
7340 @opindex --format
7341 @opindex vertical @r{sorted files in columns}
7342 List files in columns, sorted vertically.  This is the default for
7343 @command{ls} if standard output is a terminal.  It is always the default
7344 for the @command{dir} program.
7345 GNU @command{ls} uses variable width columns to display as many files as
7346 possible in the fewest lines.
7348 @item --color [=@var{when}]
7349 @opindex --color
7350 @cindex color, distinguishing file types with
7351 Specify whether to use color for distinguishing file types.  @var{when}
7352 may be omitted, or one of:
7353 @itemize @bullet
7354 @item none
7355 @vindex none @r{color option}
7356 - Do not use color at all.  This is the default.
7357 @item auto
7358 @vindex auto @r{color option}
7359 @cindex terminal, using color iff
7360 - Only use color if standard output is a terminal.
7361 @item always
7362 @vindex always @r{color option}
7363 - Always use color.
7364 @end itemize
7365 Specifying @option{--color} and no @var{when} is equivalent to
7366 @option{--color=always}.
7367 Piping a colorized listing through a pager like @command{more} or
7368 @command{less} usually produces unreadable results.  However, using
7369 @code{more -f} does seem to work.
7371 @vindex LS_COLORS
7372 @vindex SHELL @r{environment variable, and color}
7373 Note that using the @option{--color} option may incur a noticeable
7374 performance penalty when run in a directory with very many entries,
7375 because the default settings require that @command{ls} @code{stat} every
7376 single file it lists.
7377 However, if you would like most of the file-type coloring
7378 but can live without the other coloring options (e.g.,
7379 executable, orphan, sticky, other-writable, capability), use
7380 @command{dircolors} to set the @env{LS_COLORS} environment variable like this,
7381 @example
7382 eval $(dircolors -p | perl -pe \
7383   's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
7384 @end example
7385 and on a @code{dirent.d_type}-capable file system, @command{ls}
7386 will perform only one @code{stat} call per command line argument.
7388 @item -F
7389 @itemx --classify
7390 @itemx --indicator-style=classify
7391 @opindex -F
7392 @opindex --classify
7393 @opindex --indicator-style
7394 @cindex file type and executables, marking
7395 @cindex executables and file type, marking
7396 Append a character to each file name indicating the file type.  Also,
7397 for regular files that are executable, append @samp{*}.  The file type
7398 indicators are @samp{/} for directories, @samp{@@} for symbolic links,
7399 @samp{|} for FIFOs, @samp{=} for sockets, @samp{>} for doors,
7400 and nothing for regular files.
7401 @c The following sentence is the same as the one for -d.
7402 Do not follow symbolic links listed on the
7403 command line unless the @option{--dereference-command-line} (@option{-H}),
7404 @option{--dereference} (@option{-L}), or
7405 @option{--dereference-command-line-symlink-to-dir} options are specified.
7407 @item --file-type
7408 @itemx --indicator-style=file-type
7409 @opindex --file-type
7410 @opindex --indicator-style
7411 @cindex file type, marking
7412 Append a character to each file name indicating the file type.  This is
7413 like @option{-F}, except that executables are not marked.
7415 @item --indicator-style=@var{word}
7416 @opindex --indicator-style
7417 Append a character indicator with style @var{word} to entry names,
7418 as follows:
7420 @table @samp
7421 @item none
7422 Do not append any character indicator; this is the default.
7423 @item slash
7424 Append @samp{/} for directories.  This is the same as the @option{-p}
7425 option.
7426 @item file-type
7427 Append @samp{/} for directories, @samp{@@} for symbolic links, @samp{|}
7428 for FIFOs, @samp{=} for sockets, and nothing for regular files.  This is
7429 the same as the @option{--file-type} option.
7430 @item classify
7431 Append @samp{*} for executable regular files, otherwise behave as for
7432 @samp{file-type}.  This is the same as the @option{-F} or
7433 @option{--classify} option.
7434 @end table
7436 @item -k
7437 @itemx --kibibytes
7438 @opindex -k
7439 @opindex --kibibytes
7440 Set the default block size to its normal value of 1024 bytes,
7441 overriding any contrary specification in environment variables
7442 (@pxref{Block size}).  This option is in turn overridden by the
7443 @option{--block-size}, @option{-h} or @option{--human-readable}, and
7444 @option{--si} options.
7446 The @option{-k} or @option{--kibibytes} option affects the
7447 per-directory block count written by the @option{-l} and similar
7448 options, and the size written by the @option{-s} or @option{--size}
7449 option.  It does not affect the file size written by @option{-l}.
7451 @item -m
7452 @itemx --format=commas
7453 @opindex -m
7454 @opindex --format
7455 @opindex commas@r{, outputting between files}
7456 List files horizontally, with as many as will fit on each line,
7457 separated by @samp{, } (a comma and a space).
7459 @item -p
7460 @itemx --indicator-style=slash
7461 @opindex -p
7462 @opindex --indicator-style
7463 @cindex file type, marking
7464 Append a @samp{/} to directory names.
7466 @item -x
7467 @itemx --format=across
7468 @itemx --format=horizontal
7469 @opindex -x
7470 @opindex --format
7471 @opindex across@r{, listing files}
7472 @opindex horizontal@r{, listing files}
7473 List the files in columns, sorted horizontally.
7475 @item -T @var{cols}
7476 @itemx --tabsize=@var{cols}
7477 @opindex -T
7478 @opindex --tabsize
7479 Assume that each tab stop is @var{cols} columns wide.  The default is 8.
7480 @command{ls} uses tabs where possible in the output, for efficiency.  If
7481 @var{cols} is zero, do not use tabs at all.
7483 Some terminal emulators might not properly align columns to the right of a
7484 TAB following a non-ASCII byte.  You can avoid that issue by using the
7485 @option{-T0} option or put @code{TABSIZE=0} in your environment, to tell
7486 @command{ls} to align using spaces, not tabs.
7488 @item -w @var{cols}
7489 @itemx --width=@var{cols}
7490 @opindex -w
7491 @opindex --width
7492 @vindex COLUMNS
7493 Assume the screen is @var{cols} columns wide.  The default is taken
7494 from the terminal settings if possible; otherwise the environment
7495 variable @env{COLUMNS} is used if it is set; otherwise the default
7496 is 80.  With a @var{cols} value of @samp{0}, there is no limit on
7497 the length of the output line, and that single output line will
7498 be delimited with spaces, not tabs.
7500 @end table
7503 @node Formatting file timestamps
7504 @subsection Formatting file timestamps
7506 By default, file timestamps are listed in abbreviated form, using
7507 a date like @samp{Mar 30@ @ 2002} for non-recent timestamps, and a
7508 date-without-year and time like @samp{Mar 30 23:45} for recent timestamps.
7509 This format can change depending on the current locale as detailed below.
7511 @cindex clock skew
7512 A timestamp is considered to be @dfn{recent} if it is less than six
7513 months old, and is not dated in the future.  If a timestamp dated
7514 today is not listed in recent form, the timestamp is in the future,
7515 which means you probably have clock skew problems which may break
7516 programs like @command{make} that rely on file timestamps.
7518 @vindex TZ
7519 Time stamps are listed according to the time zone rules specified by
7520 the @env{TZ} environment variable, or by the system default rules if
7521 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
7522 with @env{TZ}, libc, The GNU C Library Reference Manual}.
7524 The following option changes how file timestamps are printed.
7526 @table @samp
7527 @item --time-style=@var{style}
7528 @opindex --time-style
7529 @cindex time style
7530 List timestamps in style @var{style}.  The @var{style} should
7531 be one of the following:
7533 @table @samp
7534 @item +@var{format}
7535 @vindex LC_TIME
7536 List timestamps using @var{format}, where @var{format} is interpreted
7537 like the format argument of @command{date} (@pxref{date invocation}).
7538 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
7539 @command{ls} to list timestamps like @samp{2002-03-30 23:45:56}.  As
7540 with @command{date}, @var{format}'s interpretation is affected by the
7541 @env{LC_TIME} locale category.
7543 If @var{format} contains two format strings separated by a newline,
7544 the former is used for non-recent files and the latter for recent
7545 files; if you want output columns to line up, you may need to insert
7546 spaces in one of the two formats.
7548 @item full-iso
7549 List timestamps in full using ISO 8601 date, time, and time zone
7550 components with nanosecond precision, e.g., @samp{2002-03-30
7551 23:45:56.477817180 -0700}.  This style is equivalent to
7552 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
7554 This is useful because the time output includes all the information that
7555 is available from the operating system.  For example, this can help
7556 explain @command{make}'s behavior, since GNU @command{make}
7557 uses the full timestamp to determine whether a file is out of date.
7559 @item long-iso
7560 List ISO 8601 date and time components with minute precision, e.g.,
7561 @samp{2002-03-30 23:45}.  These timestamps are shorter than
7562 @samp{full-iso} timestamps, and are usually good enough for everyday
7563 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
7565 @item iso
7566 List ISO 8601 dates for non-recent timestamps (e.g.,
7567 @samp{2002-03-30@ }), and ISO 8601-like month, day, hour, and
7568 minute for recent timestamps (e.g., @samp{03-30 23:45}).  These
7569 timestamps are uglier than @samp{long-iso} timestamps, but they carry
7570 nearly the same information in a smaller space and their brevity helps
7571 @command{ls} output fit within traditional 80-column output lines.
7572 The following two @command{ls} invocations are equivalent:
7574 @example
7575 newline='
7577 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
7578 ls -l --time-style="iso"
7579 @end example
7581 @item locale
7582 @vindex LC_TIME
7583 List timestamps in a locale-dependent form.  For example, a Finnish
7584 locale might list non-recent timestamps like @samp{maalis 30@ @ 2002}
7585 and recent timestamps like @samp{maalis 30 23:45}.  Locale-dependent
7586 timestamps typically consume more space than @samp{iso} timestamps and
7587 are harder for programs to parse because locale conventions vary so
7588 widely, but they are easier for many people to read.
7590 The @env{LC_TIME} locale category specifies the timestamp format.  The
7591 default POSIX locale uses timestamps like @samp{Mar 30@
7592 @ 2002} and @samp{Mar 30 23:45}; in this locale, the following two
7593 @command{ls} invocations are equivalent:
7595 @example
7596 newline='
7598 ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
7599 ls -l --time-style="locale"
7600 @end example
7602 Other locales behave differently.  For example, in a German locale,
7603 @option{--time-style="locale"} might be equivalent to
7604 @option{--time-style="+%e. %b %Y $newline%e. %b %H:%M"}
7605 and might generate timestamps like @samp{30. M@"ar 2002@ } and
7606 @samp{30. M@"ar 23:45}.
7608 @item posix-@var{style}
7609 @vindex LC_TIME
7610 List POSIX-locale timestamps if the @env{LC_TIME} locale
7611 category is POSIX, @var{style} timestamps otherwise.  For
7612 example, the @samp{posix-long-iso} style lists
7613 timestamps like @samp{Mar 30@ @ 2002} and @samp{Mar 30 23:45} when in
7614 the POSIX locale, and like @samp{2002-03-30 23:45} otherwise.
7615 @end table
7616 @end table
7618 @vindex TIME_STYLE
7619 You can specify the default value of the @option{--time-style} option
7620 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
7621 the default style is @samp{locale}.  GNU Emacs 21.3 and
7622 later use the @option{--dired} option and therefore can parse any date
7623 format, but if you are using Emacs 21.1 or 21.2 and specify a
7624 non-POSIX locale you may need to set
7625 @samp{TIME_STYLE="posix-long-iso"}.
7627 To avoid certain denial-of-service attacks, timestamps that would be
7628 longer than 1000 bytes may be treated as errors.
7631 @node Formatting the file names
7632 @subsection Formatting the file names
7634 These options change how file names themselves are printed.
7636 @table @samp
7638 @item -b
7639 @itemx --escape
7640 @itemx --quoting-style=escape
7641 @opindex -b
7642 @opindex --escape
7643 @opindex --quoting-style
7644 @cindex backslash sequences for file names
7645 Quote nongraphic characters in file names using alphabetic and octal
7646 backslash sequences like those used in C.
7648 @item -N
7649 @itemx --literal
7650 @itemx --quoting-style=literal
7651 @opindex -N
7652 @opindex --literal
7653 @opindex --quoting-style
7654 Do not quote file names.  However, with @command{ls} nongraphic
7655 characters are still printed as question marks if the output is a
7656 terminal and you do not specify the @option{--show-control-chars}
7657 option.
7659 @item -q
7660 @itemx --hide-control-chars
7661 @opindex -q
7662 @opindex --hide-control-chars
7663 Print question marks instead of nongraphic characters in file names.
7664 This is the default if the output is a terminal and the program is
7665 @command{ls}.
7667 @item -Q
7668 @itemx --quote-name
7669 @itemx --quoting-style=c
7670 @opindex -Q
7671 @opindex --quote-name
7672 @opindex --quoting-style
7673 Enclose file names in double quotes and quote nongraphic characters as
7674 in C.
7676 @item --quoting-style=@var{word}
7677 @opindex --quoting-style
7678 @cindex quoting style
7679 Use style @var{word} to quote file names and other strings that may
7680 contain arbitrary characters.  The @var{word} should
7681 be one of the following:
7683 @table @samp
7684 @item literal
7685 Output strings as-is; this is the same as the @option{-N} or
7686 @option{--literal} option.
7687 @item shell
7688 Quote strings for the shell if they contain shell metacharacters or would
7689 cause ambiguous output.
7690 The quoting is suitable for POSIX-compatible shells like
7691 @command{bash}, but it does not always work for incompatible shells
7692 like @command{csh}.
7693 @item shell-always
7694 Quote strings for the shell, even if they would normally not require quoting.
7695 @item shell-escape
7696 Like @samp{shell}, but also quoting non-printable characters using the POSIX
7697 proposed @samp{$''} syntax suitable for most shells.
7698 @item shell-escape-always
7699 Like @samp{shell-escape}, but quote strings even if they would
7700 normally not require quoting.
7701 @item c
7702 Quote strings as for C character string literals, including the
7703 surrounding double-quote characters; this is the same as the
7704 @option{-Q} or @option{--quote-name} option.
7705 @item escape
7706 Quote strings as for C character string literals, except omit the
7707 surrounding double-quote
7708 characters; this is the same as the @option{-b} or @option{--escape} option.
7709 @item clocale
7710 Quote strings as for C character string literals, except use
7711 surrounding quotation marks appropriate for the
7712 locale.
7713 @item locale
7714 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
7715 Quote strings as for C character string literals, except use
7716 surrounding quotation marks appropriate for the locale, and quote
7717 @t{'like this'} instead of @t{"like
7718 this"} in the default C locale.  This looks nicer on many displays.
7719 @end table
7721 You can specify the default value of the @option{--quoting-style} option
7722 with the environment variable @env{QUOTING_STYLE}@.  If that environment
7723 variable is not set, the default value is @samp{shell-escape} when the
7724 output is a terminal, and @samp{literal} otherwise.
7726 @item --show-control-chars
7727 @opindex --show-control-chars
7728 Print nongraphic characters as-is in file names.
7729 This is the default unless the output is a terminal and the program is
7730 @command{ls}.
7732 @end table
7735 @node dir invocation
7736 @section @command{dir}: Briefly list directory contents
7738 @pindex dir
7739 @cindex directory listing, brief
7741 @command{dir} is equivalent to @code{ls -C
7742 -b}; that is, by default files are listed in columns, sorted vertically,
7743 and special characters are represented by backslash escape sequences.
7745 @xref{ls invocation, @command{ls}}.
7748 @node vdir invocation
7749 @section @command{vdir}: Verbosely list directory contents
7751 @pindex vdir
7752 @cindex directory listing, verbose
7754 @command{vdir} is equivalent to @code{ls -l
7755 -b}; that is, by default files are listed in long format and special
7756 characters are represented by backslash escape sequences.
7758 @xref{ls invocation, @command{ls}}.
7760 @node dircolors invocation
7761 @section @command{dircolors}: Color setup for @command{ls}
7763 @pindex dircolors
7764 @cindex color setup
7765 @cindex setup for color
7767 @command{dircolors} outputs a sequence of shell commands to set up the
7768 terminal for color output from @command{ls} (and @command{dir}, etc.).
7769 Typical usage:
7771 @example
7772 eval "$(dircolors [@var{option}]@dots{} [@var{file}])"
7773 @end example
7775 If @var{file} is specified, @command{dircolors} reads it to determine which
7776 colors to use for which file types and extensions.  Otherwise, a
7777 precompiled database is used.  For details on the format of these files,
7778 run @samp{dircolors --print-database}.
7780 To make @command{dircolors} read a @file{~/.dircolors} file if it
7781 exists, you can put the following lines in your @file{~/.bashrc} (or
7782 adapt them to your favorite shell):
7784 @example
7785 d=.dircolors
7786 test -r $d && eval "$(dircolors $d)"
7787 @end example
7789 @vindex LS_COLORS
7790 @vindex SHELL @r{environment variable, and color}
7791 The output is a shell command to set the @env{LS_COLORS} environment
7792 variable.  You can specify the shell syntax to use on the command line,
7793 or @command{dircolors} will guess it from the value of the @env{SHELL}
7794 environment variable.
7796 The program accepts the following options.  Also see @ref{Common options}.
7798 @table @samp
7799 @item -b
7800 @itemx --sh
7801 @itemx --bourne-shell
7802 @opindex -b
7803 @opindex --sh
7804 @opindex --bourne-shell
7805 @cindex Bourne shell syntax for color setup
7806 @cindex @command{sh} syntax for color setup
7807 Output Bourne shell commands.  This is the default if the @env{SHELL}
7808 environment variable is set and does not end with @samp{csh} or
7809 @samp{tcsh}.
7811 @item -c
7812 @itemx --csh
7813 @itemx --c-shell
7814 @opindex -c
7815 @opindex --csh
7816 @opindex --c-shell
7817 @cindex C shell syntax for color setup
7818 @cindex @command{csh} syntax for color setup
7819 Output C shell commands.  This is the default if @code{SHELL} ends with
7820 @command{csh} or @command{tcsh}.
7822 @item -p
7823 @itemx --print-database
7824 @opindex -p
7825 @opindex --print-database
7826 @cindex color database, printing
7827 @cindex database for color setup, printing
7828 @cindex printing color database
7829 Print the (compiled-in) default color configuration database.  This
7830 output is itself a valid configuration file, and is fairly descriptive
7831 of the possibilities.
7833 @end table
7835 @exitstatus
7838 @node Basic operations
7839 @chapter Basic operations
7841 @cindex manipulating files
7843 This chapter describes the commands for basic file manipulation:
7844 copying, moving (renaming), and deleting (removing).
7846 @menu
7847 * cp invocation::               Copy files.
7848 * dd invocation::               Convert and copy a file.
7849 * install invocation::          Copy files and set attributes.
7850 * mv invocation::               Move (rename) files.
7851 * rm invocation::               Remove files or directories.
7852 * shred invocation::            Remove files more securely.
7853 @end menu
7856 @node cp invocation
7857 @section @command{cp}: Copy files and directories
7859 @pindex cp
7860 @cindex copying files and directories
7861 @cindex files, copying
7862 @cindex directories, copying
7864 @command{cp} copies files (or, optionally, directories).  The copy is
7865 completely independent of the original.  You can either copy one file to
7866 another, or copy arbitrarily many files to a destination directory.
7867 Synopses:
7869 @example
7870 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
7871 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
7872 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
7873 @end example
7875 @itemize @bullet
7876 @item
7877 If two file names are given, @command{cp} copies the first file to the
7878 second.
7880 @item
7881 If the @option{--target-directory} (@option{-t}) option is given, or
7882 failing that if the last file is a directory and the
7883 @option{--no-target-directory} (@option{-T}) option is not given,
7884 @command{cp} copies each @var{source} file to the specified directory,
7885 using the @var{source}s' names.
7886 @end itemize
7888 Generally, files are written just as they are read.  For exceptions,
7889 see the @option{--sparse} option below.
7891 By default, @command{cp} does not copy directories.  However, the
7892 @option{-R}, @option{-a}, and @option{-r} options cause @command{cp} to
7893 copy recursively by descending into source directories and copying files
7894 to corresponding destination directories.
7896 When copying from a symbolic link, @command{cp} normally follows the
7897 link only when not copying recursively or when @option{--link}
7898 (@option{-l}) is used.  This default can be overridden with the
7899 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
7900 (@option{-L}), @option{--no-dereference} (@option{-P}), and
7901 @option{-H} options.  If more than one of these options is specified,
7902 the last one silently overrides the others.
7904 When copying to a symbolic link, @command{cp} follows the
7905 link only when it refers to an existing regular file.
7906 However, when copying to a dangling symbolic link, @command{cp}
7907 refuses by default, and fails with a diagnostic, since the operation
7908 is inherently dangerous.  This behavior is contrary to historical
7909 practice and to POSIX@.
7910 Set @env{POSIXLY_CORRECT} to make @command{cp} attempt to create
7911 the target of a dangling destination symlink, in spite of the possible risk.
7912 Also, when an option like
7913 @option{--backup} or @option{--link} acts to rename or remove the
7914 destination before copying, @command{cp} renames or removes the
7915 symbolic link rather than the file it points to.
7917 By default, @command{cp} copies the contents of special files only
7918 when not copying recursively.  This default can be overridden with the
7919 @option{--copy-contents} option.
7921 @cindex self-backups
7922 @cindex backups, making only
7923 @command{cp} generally refuses to copy a file onto itself, with the
7924 following exception: if @option{--force --backup} is specified with
7925 @var{source} and @var{dest} identical, and referring to a regular file,
7926 @command{cp} will make a backup file, either regular or numbered, as
7927 specified in the usual ways (@pxref{Backup options}).  This is useful when
7928 you simply want to make a backup of an existing file before changing it.
7930 The program accepts the following options.  Also see @ref{Common options}.
7932 @table @samp
7933 @item -a
7934 @itemx --archive
7935 @opindex -a
7936 @opindex --archive
7937 Preserve as much as possible of the structure and attributes of the
7938 original files in the copy (but do not attempt to preserve internal
7939 directory structure; i.e., @samp{ls -U} may list the entries in a copied
7940 directory in a different order).
7941 Try to preserve SELinux security context and extended attributes (xattr),
7942 but ignore any failure to do that and print no corresponding diagnostic.
7943 Equivalent to @option{-dR --preserve=all} with the reduced diagnostics.
7945 @item --attributes-only
7946 @opindex --attributes-only
7947 Copy only the specified attributes of the source file to the destination.
7948 If the destination already exists, do not alter its contents.
7949 See the @option{--preserve} option for controlling which attributes to copy.
7951 @item -b
7952 @itemx --backup[=@var{method}]
7953 @opindex -b
7954 @opindex --backup
7955 @vindex VERSION_CONTROL
7956 @cindex backups, making
7957 @xref{Backup options}.
7958 Make a backup of each file that would otherwise be overwritten or removed.
7959 As a special case, @command{cp} makes a backup of @var{source} when the force
7960 and backup options are given and @var{source} and @var{dest} are the same
7961 name for an existing, regular file.  One useful application of this
7962 combination of options is this tiny Bourne shell script:
7964 @example
7965 #!/bin/sh
7966 # Usage: backup FILE...
7967 # Create a GNU-style backup of each listed FILE.
7968 fail=0
7969 for i; do
7970   cp --backup --force --preserve=all -- "$i" "$i" || fail=1
7971 done
7972 exit $fail
7973 @end example
7975 @item --copy-contents
7976 @cindex directories, copying recursively
7977 @cindex copying directories recursively
7978 @cindex recursively copying directories
7979 @cindex non-directories, copying as special files
7980 If copying recursively, copy the contents of any special files (e.g.,
7981 FIFOs and device files) as if they were regular files.  This means
7982 trying to read the data in each source file and writing it to the
7983 destination.  It is usually a mistake to use this option, as it
7984 normally has undesirable effects on special files like FIFOs and the
7985 ones typically found in the @file{/dev} directory.  In most cases,
7986 @code{cp -R --copy-contents} will hang indefinitely trying to read
7987 from FIFOs and special files like @file{/dev/console}, and it will
7988 fill up your destination disk if you use it to copy @file{/dev/zero}.
7989 This option has no effect unless copying recursively, and it does not
7990 affect the copying of symbolic links.
7992 @item -d
7993 @opindex -d
7994 @cindex symbolic links, copying
7995 @cindex hard links, preserving
7996 Copy symbolic links as symbolic links rather than copying the files that
7997 they point to, and preserve hard links between source files in the copies.
7998 Equivalent to @option{--no-dereference --preserve=links}.
8000 @item -f
8001 @itemx --force
8002 @opindex -f
8003 @opindex --force
8004 When copying without this option and an existing destination file cannot
8005 be opened for writing, the copy fails.  However, with @option{--force},
8006 when a destination file cannot be opened, @command{cp} then removes it and
8007 tries to open it again.  Contrast this behavior with that enabled by
8008 @option{--link} and @option{--symbolic-link}, whereby the destination file
8009 is never opened but rather is removed unconditionally.  Also see the
8010 description of @option{--remove-destination}.
8012 This option is independent of the @option{--interactive} or
8013 @option{-i} option: neither cancels the effect of the other.
8015 This option is ignored when the @option{--no-clobber} or @option{-n} option
8016 is also used.
8018 @item -H
8019 @opindex -H
8020 If a command line argument specifies a symbolic link, then copy the
8021 file it points to rather than the symbolic link itself.  However,
8022 copy (preserving its nature) any symbolic link that is encountered
8023 via recursive traversal.
8025 @item -i
8026 @itemx --interactive
8027 @opindex -i
8028 @opindex --interactive
8029 When copying a file other than a directory, prompt whether to
8030 overwrite an existing destination file.  The @option{-i} option overrides
8031 a previous @option{-n} option.
8033 @item -l
8034 @itemx --link
8035 @opindex -l
8036 @opindex --link
8037 Make hard links instead of copies of non-directories.
8039 @item -L
8040 @itemx --dereference
8041 @opindex -L
8042 @opindex --dereference
8043 Follow symbolic links when copying from them.
8044 With this option, @command{cp} cannot create a symbolic link.
8045 For example, a symlink (to regular file) in the source tree will be copied to
8046 a regular file in the destination tree.
8048 @item -n
8049 @itemx --no-clobber
8050 @opindex -n
8051 @opindex --no-clobber
8052 Do not overwrite an existing file.  The @option{-n} option overrides a previous
8053 @option{-i} option.  This option is mutually exclusive with @option{-b} or
8054 @option{--backup} option.
8056 @item -P
8057 @itemx --no-dereference
8058 @opindex -P
8059 @opindex --no-dereference
8060 @cindex symbolic links, copying
8061 Copy symbolic links as symbolic links rather than copying the files that
8062 they point to.  This option affects only symbolic links in the source;
8063 symbolic links in the destination are always followed if possible.
8065 @item -p
8066 @itemx --preserve[=@var{attribute_list}]
8067 @opindex -p
8068 @opindex --preserve
8069 @cindex file information, preserving, extended attributes, xattr
8070 Preserve the specified attributes of the original files.
8071 If specified, the @var{attribute_list} must be a comma-separated list
8072 of one or more of the following strings:
8074 @table @samp
8075 @item mode
8076 Preserve the file mode bits and access control lists.
8077 @item ownership
8078 Preserve the owner and group.  On most modern systems,
8079 only users with appropriate privileges may change the owner of a file,
8080 and ordinary users
8081 may preserve the group ownership of a file only if they happen to be
8082 a member of the desired group.
8083 @item timestamps
8084 Preserve the times of last access and last modification, when possible.
8085 On older systems, it is not possible to preserve these attributes
8086 when the affected file is a symbolic link.
8087 However, many systems now provide the @code{utimensat} function,
8088 which makes it possible even for symbolic links.
8089 @item links
8090 Preserve in the destination files
8091 any links between corresponding source files.
8092 Note that with @option{-L} or @option{-H}, this option can convert
8093 symbolic links to hard links.  For example,
8094 @example
8095 $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
8096 74161745 a
8097 74161745 b
8098 @end example
8099 @noindent
8100 Note the inputs: @file{b} is a symlink to regular file @file{a},
8101 yet the files in destination directory, @file{c/}, are hard-linked.
8102 Since @option{-a} implies @option{--no-dereference} it would copy the symlink,
8103 but the later @option{-H} tells @command{cp} to dereference the command line
8104 arguments where it then sees two files with the same inode number.
8105 Then the @option{--preserve=links} option also implied by @option{-a}
8106 will preserve the perceived hard link.
8108 Here is a similar example that exercises @command{cp}'s @option{-L} option:
8109 @smallexample
8110 $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
8111 74163295 a
8112 74163295 b
8113 @end smallexample
8115 @item context
8116 Preserve SELinux security context of the file, or fail with full diagnostics.
8117 @item xattr
8118 Preserve extended attributes of the file, or fail with full diagnostics.
8119 If @command{cp} is built without xattr support, ignore this option.
8120 If SELinux context, ACLs or Capabilities are implemented using xattrs,
8121 they are preserved implicitly by this option as well, i.e., even without
8122 specifying @option{--preserve=mode} or @option{--preserve=context}.
8123 @item all
8124 Preserve all file attributes.
8125 Equivalent to specifying all of the above, but with the difference
8126 that failure to preserve SELinux security context or extended attributes
8127 does not change @command{cp}'s exit status.  In contrast to @option{-a},
8128 all but @samp{Operation not supported} warnings are output.
8129 @end table
8131 Using @option{--preserve} with no @var{attribute_list} is equivalent
8132 to @option{--preserve=mode,ownership,timestamps}.
8134 In the absence of this option, the permissions of existing destination
8135 files are unchanged.  Each new file is created with the mode of the
8136 corresponding source file minus the set-user-ID, set-group-ID, and
8137 sticky bits as the create mode; the operating system then applies either
8138 the umask or a default ACL, possibly resulting in a more restrictive
8139 file mode.
8140 @xref{File permissions}.
8142 @item --no-preserve=@var{attribute_list}
8143 @cindex file information, preserving
8144 Do not preserve the specified attributes.  The @var{attribute_list}
8145 has the same form as for @option{--preserve}.
8147 @item --parents
8148 @opindex --parents
8149 @cindex parent directories and @command{cp}
8150 Form the name of each destination file by appending to the target
8151 directory a slash and the specified name of the source file.  The last
8152 argument given to @command{cp} must be the name of an existing directory.
8153 For example, the command:
8155 @example
8156 cp --parents a/b/c existing_dir
8157 @end example
8159 @noindent
8160 copies the file @file{a/b/c} to @file{existing_dir/a/b/c}, creating
8161 any missing intermediate directories.
8163 @item -R
8164 @itemx -r
8165 @itemx --recursive
8166 @opindex -R
8167 @opindex -r
8168 @opindex --recursive
8169 @cindex directories, copying recursively
8170 @cindex copying directories recursively
8171 @cindex recursively copying directories
8172 @cindex non-directories, copying as special files
8173 Copy directories recursively.  By default, do not follow symbolic
8174 links in the source unless used together with the @option{--link}
8175 (@option{-l}) option; see the @option{--archive} (@option{-a}), @option{-d},
8176 @option{--dereference} (@option{-L}), @option{--no-dereference}
8177 (@option{-P}), and @option{-H} options.  Special files are copied by
8178 creating a destination file of the same type as the source; see the
8179 @option{--copy-contents} option.  It is not portable to use
8180 @option{-r} to copy symbolic links or special files.  On some
8181 non-GNU systems, @option{-r} implies the equivalent of
8182 @option{-L} and @option{--copy-contents} for historical reasons.
8183 Also, it is not portable to use @option{-R} to copy symbolic links
8184 unless you also specify @option{-P}, as POSIX allows
8185 implementations that dereference symbolic links by default.
8187 @item --reflink[=@var{when}]
8188 @opindex --reflink[=@var{when}]
8189 @cindex COW
8190 @cindex clone
8191 @cindex copy on write
8192 Perform a lightweight, copy-on-write (COW) copy, if supported by the
8193 file system.  Once it has succeeded, beware that the source and destination
8194 files share the same disk data blocks as long as they remain unmodified.
8195 Thus, if a disk I/O error affects data blocks of one of the files,
8196 the other suffers the same fate.
8198 The @var{when} value can be one of the following:
8200 @table @samp
8201 @item always
8202 The default behavior: if the copy-on-write operation is not supported
8203 then report the failure for each file and exit with a failure status.
8205 @item auto
8206 If the copy-on-write operation is not supported then fall back
8207 to the standard copy behavior.
8208 @end table
8210 This option is overridden by the @option{--link}, @option{--symbolic-link}
8211 and @option{--attributes-only} options, thus allowing it to be used
8212 to configure the default data copying behavior for @command{cp}.
8213 For example, with the following alias, @command{cp} will use the
8214 minimum amount of space supported by the file system.
8216 @example
8217 alias cp='cp --reflink=auto --sparse=always'
8218 @end example
8220 @item --remove-destination
8221 @opindex --remove-destination
8222 Remove each existing destination file before attempting to open it
8223 (contrast with @option{-f} above).
8225 @item --sparse=@var{when}
8226 @opindex --sparse=@var{when}
8227 @cindex sparse files, copying
8228 @cindex holes, copying files with
8229 @findex read @r{system call, and holes}
8230 A @dfn{sparse file} contains @dfn{holes}---a sequence of zero bytes that
8231 does not occupy any physical disk blocks; the @samp{read} system call
8232 reads these as zeros.  This can both save considerable disk space and
8233 increase speed, since many binary files contain lots of consecutive zero
8234 bytes.  By default, @command{cp} detects holes in input source files via a crude
8235 heuristic and makes the corresponding output file sparse as well.
8236 Only regular files may be sparse.
8238 The @var{when} value can be one of the following:
8240 @table @samp
8241 @item auto
8242 The default behavior: if the input file is sparse, attempt to make
8243 the output file sparse, too.  However, if an output file exists but
8244 refers to a non-regular file, then do not attempt to make it sparse.
8246 @item always
8247 For each sufficiently long sequence of zero bytes in the input file,
8248 attempt to create a corresponding hole in the output file, even if the
8249 input file does not appear to be sparse.
8250 This is useful when the input file resides on a file system
8251 that does not support sparse files
8252 (for example,  @samp{efs} file systems in SGI IRIX 5.3 and earlier),
8253 but the output file is on a type of file system that does support them.
8254 Holes may be created only in regular files, so if the destination file
8255 is of some other type, @command{cp} does not even try to make it sparse.
8257 @item never
8258 Never make the output file sparse.
8259 This is useful in creating a file for use with the @command{mkswap} command,
8260 since such a file must not have any holes.
8261 @end table
8263 @optStripTrailingSlashes
8265 @item -s
8266 @itemx --symbolic-link
8267 @opindex -s
8268 @opindex --symbolic-link
8269 @cindex symbolic links, copying with
8270 Make symbolic links instead of copies of non-directories.  All source
8271 file names must be absolute (starting with @samp{/}) unless the
8272 destination files are in the current directory.  This option merely
8273 results in an error message on systems that do not support symbolic links.
8275 @optBackupSuffix
8277 @optTargetDirectory
8279 @optNoTargetDirectory
8281 @item -u
8282 @itemx --update
8283 @opindex -u
8284 @opindex --update
8285 @cindex newer files, copying only
8286 Do not copy a non-directory that has an existing destination with the
8287 same or newer modification time.  If time stamps are being preserved,
8288 the comparison is to the source time stamp truncated to the
8289 resolutions of the destination file system and of the system calls
8290 used to update time stamps; this avoids duplicate work if several
8291 @samp{cp -pu} commands are executed with the same source and destination.
8292 If @option{--preserve=links} is also specified (like with @samp{cp -au}
8293 for example), that will take precedence.  Consequently, depending on the
8294 order that files are processed from the source, newer files in the destination
8295 may be replaced, to mirror hard links in the source.
8297 @item -v
8298 @itemx --verbose
8299 @opindex -v
8300 @opindex --verbose
8301 Print the name of each file before copying it.
8303 @item -x
8304 @itemx --one-file-system
8305 @opindex -x
8306 @opindex --one-file-system
8307 @cindex file systems, omitting copying to different
8308 Skip subdirectories that are on different file systems from the one that
8309 the copy started on.
8310 However, mount point directories @emph{are} copied.
8312 @macro optContext
8313 @item -Z
8314 @itemx --context[=@var{context}]
8315 @opindex -Z
8316 @opindex --context
8317 @cindex SELinux, setting/restoring security context
8318 @cindex security context
8319 Without a specified @var{context}, adjust the SELinux security context according
8320 to the system default type for destination files, similarly to the
8321 @command{restorecon} command.
8322 The long form of this option with a specific context specified,
8323 will set the context for newly created files only.
8324 With a specified context, if both SELinux and SMACK are disabled, a warning is
8325 issued.
8326 @end macro
8327 @optContext
8328 This option is mutually exclusive with the @option{--preserve=context}
8329 option, and overrides the @option{--preserve=all} and @option{-a} options.
8331 @end table
8333 @exitstatus
8336 @node dd invocation
8337 @section @command{dd}: Convert and copy a file
8339 @pindex dd
8340 @cindex converting while copying a file
8342 @command{dd} copies a file (from standard input to standard output, by
8343 default) with a changeable I/O block size, while optionally performing
8344 conversions on it.  Synopses:
8346 @example
8347 dd [@var{operand}]@dots{}
8348 dd @var{option}
8349 @end example
8351 The only options are @option{--help} and @option{--version}.
8352 @xref{Common options}.  @command{dd} accepts the following operands,
8353 whose syntax was inspired by the DD (data definition) statement of
8354 OS/360 JCL.
8356 @table @samp
8358 @item if=@var{file}
8359 @opindex if
8360 Read from @var{file} instead of standard input.
8362 @item of=@var{file}
8363 @opindex of
8364 Write to @var{file} instead of standard output.  Unless
8365 @samp{conv=notrunc} is given, @command{dd} truncates @var{file} to zero
8366 bytes (or the size specified with @samp{seek=}).
8368 @item ibs=@var{bytes}
8369 @opindex ibs
8370 @cindex block size of input
8371 @cindex input block size
8372 Set the input block size to @var{bytes}.
8373 This makes @command{dd} read @var{bytes} per block.
8374 The default is 512 bytes.
8376 @item obs=@var{bytes}
8377 @opindex obs
8378 @cindex block size of output
8379 @cindex output block size
8380 Set the output block size to @var{bytes}.
8381 This makes @command{dd} write @var{bytes} per block.
8382 The default is 512 bytes.
8384 @item bs=@var{bytes}
8385 @opindex bs
8386 @cindex block size
8387 Set both input and output block sizes to @var{bytes}.
8388 This makes @command{dd} read and write @var{bytes} per block,
8389 overriding any @samp{ibs} and @samp{obs} settings.
8390 In addition, if no data-transforming @option{conv} option is specified,
8391 input is copied to the output as soon as it's read,
8392 even if it is smaller than the block size.
8394 @item cbs=@var{bytes}
8395 @opindex cbs
8396 @cindex block size of conversion
8397 @cindex conversion block size
8398 @cindex fixed-length records, converting to variable-length
8399 @cindex variable-length records, converting to fixed-length
8400 Set the conversion block size to @var{bytes}.
8401 When converting variable-length records to fixed-length ones
8402 (@option{conv=block}) or the reverse (@option{conv=unblock}),
8403 use @var{bytes} as the fixed record length.
8405 @item skip=@var{n}
8406 @opindex skip
8407 Skip @var{n} @samp{ibs}-byte blocks in the input file before copying.
8408 If @samp{iflag=skip_bytes} is specified, @var{n} is interpreted
8409 as a byte count rather than a block count.
8411 @item seek=@var{n}
8412 @opindex seek
8413 Skip @var{n} @samp{obs}-byte blocks in the output file before copying.
8414 if @samp{oflag=seek_bytes} is specified, @var{n} is interpreted
8415 as a byte count rather than a block count.
8417 @item count=@var{n}
8418 @opindex count
8419 Copy @var{n} @samp{ibs}-byte blocks from the input file, instead
8420 of everything until the end of the file.
8421 if @samp{iflag=count_bytes} is specified, @var{n} is interpreted
8422 as a byte count rather than a block count.
8423 Note if the input may return short reads as could be the case
8424 when reading from a pipe for example, @samp{iflag=fullblock}
8425 will ensure that @samp{count=} corresponds to complete input blocks
8426 rather than the traditional POSIX specified behavior of counting
8427 input read operations.
8429 @item status=@var{level}
8430 @opindex status
8431 Transfer information is normally output to stderr upon
8432 receipt of the @samp{INFO} signal or when @command{dd} exits.
8433 Specifying @var{level} will adjust the amount of information printed,
8434 with the last @var{level} specified taking precedence.
8436 @table @samp
8438 @item none
8439 @opindex none @r{dd status=}
8440 Do not print any informational or warning messages to stderr.
8441 Error messages are output as normal.
8443 @item noxfer
8444 @opindex noxfer @r{dd status=}
8445 Do not print the final transfer rate and volume statistics
8446 that normally make up the last status line.
8448 @item progress
8449 @opindex progress @r{dd status=}
8450 Print the transfer rate and volume statistics on stderr,
8451 when processing each input block.  Statistics are output
8452 on a single line at most once every second, but updates
8453 can be delayed when waiting on I/O.
8455 @end table
8457 @item conv=@var{conversion}[,@var{conversion}]@dots{}
8458 @opindex conv
8459 Convert the file as specified by the @var{conversion} argument(s).
8460 (No spaces around any comma(s).)
8462 Conversions:
8464 @table @samp
8466 @item ascii
8467 @opindex ascii@r{, converting to}
8468 Convert EBCDIC to ASCII,
8469 using the conversion table specified by POSIX@.
8470 This provides a 1:1 translation for all 256 bytes.
8471 This option implies @samp{conv=unblock}; input is converted to
8472 ASCII before trailing spaces are deleted.
8474 @item ebcdic
8475 @opindex ebcdic@r{, converting to}
8476 Convert ASCII to EBCDIC@.
8477 This is the inverse of the @samp{ascii} conversion.
8478 This option implies @samp{conv=block}; trailing spaces are added
8479 before being converted to EBCDIC@.
8481 @item ibm
8482 @opindex alternate ebcdic@r{, converting to}
8483 This acts like @samp{conv=ebcdic}, except it
8484 uses the alternate conversion table specified by POSIX@.
8485 This is not a 1:1 translation, but reflects common historical practice
8486 for @samp{~}, @samp{[}, and @samp{]}.
8488 The @samp{ascii}, @samp{ebcdic}, and @samp{ibm} conversions are
8489 mutually exclusive.  If you use any of these options, you should also
8490 use the @samp{cbs=} option.
8492 @item block
8493 @opindex block @r{(space-padding)}
8494 For each line in the input, output @samp{cbs} bytes, replacing the
8495 input newline with a space and padding with spaces as necessary.
8497 @item unblock
8498 @opindex unblock
8499 Remove any trailing spaces in each @samp{cbs}-sized input block,
8500 and append a newline.
8502 The @samp{block} and @samp{unblock} conversions are mutually exclusive.
8504 @item lcase
8505 @opindex lcase@r{, converting to}
8506 Change uppercase letters to lowercase.
8508 @item ucase
8509 @opindex ucase@r{, converting to}
8510 Change lowercase letters to uppercase.
8512 The @samp{lcase} and @samp{ucase} conversions are mutually exclusive.
8514 @item sparse
8515 @opindex sparse
8516 Try to seek rather than write NUL output blocks.
8517 On a file system that supports sparse files, this will create
8518 sparse output when extending the output file.
8519 Be careful when using this option in conjunction with
8520 @samp{conv=notrunc} or @samp{oflag=append}.
8521 With @samp{conv=notrunc}, existing data in the output file
8522 corresponding to NUL blocks from the input, will be untouched.
8523 With @samp{oflag=append} the seeks performed will be ineffective.
8524 Similarly, when the output is a device rather than a file,
8525 NUL input blocks are not copied, and therefore this option
8526 is most useful with virtual or pre zeroed devices.
8528 @item swab
8529 @opindex swab @r{(byte-swapping)}
8530 @cindex byte-swapping
8531 Swap every pair of input bytes.  GNU @command{dd}, unlike others, works
8532 when an odd number of bytes are read---the last byte is simply copied
8533 (since there is nothing to swap it with).
8535 @item sync
8536 @opindex sync @r{(padding with ASCII NULs)}
8537 Pad every input block to size of @samp{ibs} with trailing zero bytes.
8538 When used with @samp{block} or @samp{unblock}, pad with spaces instead of
8539 zero bytes.
8541 @end table
8543 The following ``conversions'' are really file flags
8544 and don't affect internal processing:
8546 @table @samp
8547 @item excl
8548 @opindex excl
8549 @cindex creating output file, requiring
8550 Fail if the output file already exists; @command{dd} must create the
8551 output file itself.
8553 @item nocreat
8554 @opindex nocreat
8555 @cindex creating output file, avoiding
8556 Do not create the output file; the output file must already exist.
8558 The @samp{excl} and @samp{nocreat} conversions are mutually exclusive.
8560 @item notrunc
8561 @opindex notrunc
8562 @cindex truncating output file, avoiding
8563 Do not truncate the output file.
8565 @item noerror
8566 @opindex noerror
8567 @cindex read errors, ignoring
8568 Continue after read errors.
8570 @item fdatasync
8571 @opindex fdatasync
8572 @cindex synchronized data writes, before finishing
8573 Synchronize output data just before finishing.  This forces a physical
8574 write of output data.
8576 @item fsync
8577 @opindex fsync
8578 @cindex synchronized data and metadata writes, before finishing
8579 Synchronize output data and metadata just before finishing.  This
8580 forces a physical write of output data and metadata.
8582 @end table
8584 @item iflag=@var{flag}[,@var{flag}]@dots{}
8585 @opindex iflag
8586 Access the input file using the flags specified by the @var{flag}
8587 argument(s).  (No spaces around any comma(s).)
8589 @item oflag=@var{flag}[,@var{flag}]@dots{}
8590 @opindex oflag
8591 Access the output file using the flags specified by the @var{flag}
8592 argument(s).  (No spaces around any comma(s).)
8594 Here are the flags.  Not every flag is supported on every operating
8595 system.
8597 @table @samp
8599 @item append
8600 @opindex append
8601 @cindex appending to the output file
8602 Write in append mode, so that even if some other process is writing to
8603 this file, every @command{dd} write will append to the current
8604 contents of the file.  This flag makes sense only for output.
8605 If you combine this flag with the @samp{of=@var{file}} operand,
8606 you should also specify @samp{conv=notrunc} unless you want the
8607 output file to be truncated before being appended to.
8609 @item cio
8610 @opindex cio
8611 @cindex concurrent I/O
8612 Use concurrent I/O mode for data.  This mode performs direct I/O
8613 and drops the POSIX requirement to serialize all I/O to the same file.
8614 A file cannot be opened in CIO mode and with a standard open at the
8615 same time.
8617 @item direct
8618 @opindex direct
8619 @cindex direct I/O
8620 Use direct I/O for data, avoiding the buffer cache.
8621 Note that the kernel may impose restrictions on read or write buffer sizes.
8622 For example, with an ext4 destination file system and a Linux-based kernel,
8623 using @samp{oflag=direct} will cause writes to fail with @code{EINVAL} if the
8624 output buffer size is not a multiple of 512.
8626 @item directory
8627 @opindex directory
8628 @cindex directory I/O
8630 Fail unless the file is a directory.  Most operating systems do not
8631 allow I/O to a directory, so this flag has limited utility.
8633 @item dsync
8634 @opindex dsync
8635 @cindex synchronized data reads
8636 Use synchronized I/O for data.  For the output file, this forces a
8637 physical write of output data on each write.  For the input file,
8638 this flag can matter when reading from a remote file that has been
8639 written to synchronously by some other process.  Metadata (e.g.,
8640 last-access and last-modified time) is not necessarily synchronized.
8642 @item sync
8643 @opindex sync
8644 @cindex synchronized data and metadata I/O
8645 Use synchronized I/O for both data and metadata.
8647 @item nocache
8648 @opindex nocache
8649 @cindex discarding file cache
8650 Discard the data cache for a file.
8651 When count=0 all cache is discarded,
8652 otherwise the cache is dropped for the processed
8653 portion of the file.  Also when count=0
8654 failure to discard the cache is diagnosed
8655 and reflected in the exit status.
8656 Here as some usage examples:
8658 @example
8659 # Advise to drop cache for whole file
8660 dd if=ifile iflag=nocache count=0
8662 # Ensure drop cache for the whole file
8663 dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
8665 # Drop cache for part of file
8666 dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
8668 # Stream data using just the read-ahead cache
8669 dd if=ifile of=ofile iflag=nocache oflag=nocache
8670 @end example
8672 @item nonblock
8673 @opindex nonblock
8674 @cindex nonblocking I/O
8675 Use non-blocking I/O.
8677 @item noatime
8678 @opindex noatime
8679 @cindex access time
8680 Do not update the file's access time.
8681 Some older file systems silently ignore this flag, so it is a good
8682 idea to test it on your files before relying on it.
8684 @item noctty
8685 @opindex noctty
8686 @cindex controlling terminal
8687 Do not assign the file to be a controlling terminal for @command{dd}.
8688 This has no effect when the file is not a terminal.
8689 On many hosts (e.g., GNU/Linux hosts), this option has no effect
8690 at all.
8692 @item nofollow
8693 @opindex nofollow
8694 @cindex symbolic links, following
8695 Do not follow symbolic links.
8697 @item nolinks
8698 @opindex nolinks
8699 @cindex hard links
8700 Fail if the file has multiple hard links.
8702 @item binary
8703 @opindex binary
8704 @cindex binary I/O
8705 Use binary I/O@.  This option has an effect only on nonstandard
8706 platforms that distinguish binary from text I/O.
8708 @item text
8709 @opindex text
8710 @cindex text I/O
8711 Use text I/O@.  Like @samp{binary}, this option has no effect on
8712 standard platforms.
8714 @item fullblock
8715 @opindex fullblock
8716 Accumulate full blocks from input.  The @code{read} system call
8717 may return early if a full block is not available.
8718 When that happens, continue calling @code{read} to fill the remainder
8719 of the block.
8720 This flag can be used only with @code{iflag}.
8721 This flag is useful with pipes for example
8722 as they may return short reads. In that case,
8723 this flag is needed to ensure that a @samp{count=} argument is
8724 interpreted as a block count rather than a count of read operations.
8726 @item count_bytes
8727 @opindex count_bytes
8728 Interpret the @samp{count=} operand as a byte count,
8729 rather than a block count, which allows specifying
8730 a length that is not a multiple of the I/O block size.
8731 This flag can be used only with @code{iflag}.
8733 @item skip_bytes
8734 @opindex skip_bytes
8735 Interpret the @samp{skip=} operand as a byte count,
8736 rather than a block count, which allows specifying
8737 an offset that is not a multiple of the I/O block size.
8738 This flag can be used only with @code{iflag}.
8740 @item seek_bytes
8741 @opindex seek_bytes
8742 Interpret the @samp{seek=} operand as a byte count,
8743 rather than a block count, which allows specifying
8744 an offset that is not a multiple of the I/O block size.
8745 This flag can be used only with @code{oflag}.
8747 @end table
8749 These flags are not supported on all systems, and @samp{dd} rejects
8750 attempts to use them when they are not supported.  When reading from
8751 standard input or writing to standard output, the @samp{nofollow} and
8752 @samp{noctty} flags should not be specified, and the other flags
8753 (e.g., @samp{nonblock}) can affect how other processes behave with the
8754 affected file descriptors, even after @command{dd} exits.
8756 @end table
8758 @cindex multipliers after numbers
8759 The numeric-valued strings above (@var{n} and @var{bytes})
8760 can be followed by a multiplier: @samp{b}=512, @samp{c}=1,
8761 @samp{w}=2, @samp{x@var{m}}=@var{m}, or any of the
8762 standard block size suffixes like @samp{k}=1024 (@pxref{Block size}).
8764 Any block size you specify via @samp{bs=}, @samp{ibs=}, @samp{obs=}, @samp{cbs=}
8765 should not be too large---values larger than a few megabytes
8766 are generally wasteful or (as in the gigabyte..exabyte case) downright
8767 counterproductive or error-inducing.
8769 To process data that is at an offset or size that is not a
8770 multiple of the I/O@ block size, you can use the @samp{skip_bytes},
8771 @samp{seek_bytes} and @samp{count_bytes} flags.  Alternatively
8772 the traditional method of separate @command{dd} invocations can be used.
8773 For example, the following shell commands copy data
8774 in 512 KiB blocks between a disk and a tape, but do not save
8775 or restore a 4 KiB label at the start of the disk:
8777 @example
8778 disk=/dev/rdsk/c0t1d0s2
8779 tape=/dev/rmt/0
8781 # Copy all but the label from disk to tape.
8782 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
8784 # Copy from tape back to disk, but leave the disk label alone.
8785 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
8786 @end example
8788 @cindex ddrescue
8789 @cindex disks, failing
8790 For failing disks, other tools come with a great variety of extra
8791 functionality to ease the saving of as much data as possible before the
8792 disk finally dies, e.g.
8793 @uref{http://www.gnu.org/software/ddrescue/, GNU @command{ddrescue}}.
8794 However, in some cases such a tool is not available or the administrator
8795 feels more comfortable with the handling of @command{dd}.
8796 As a simple rescue method, call @command{dd} as shown in the following
8797 example: the options @samp{conv=noerror,sync} are used to continue
8798 after read errors and to pad out bad reads with NULs, while
8799 @samp{iflag=fullblock} caters for short reads (which traditionally never
8800 occur on disk based devices):
8802 @example
8803 # Rescue data from an (unmounted!) partition of a failing disk.
8804 dd conv=noerror,sync iflag=fullblock </dev/sda1 > /mnt/rescue.img
8805 @end example
8807 Sending an @samp{INFO} signal (or @samp{USR1} signal where that is unavailable)
8808 to a running @command{dd} process makes it print I/O statistics to
8809 standard error and then resume copying.   In the example below,
8810 @command{dd} is run in the background to copy 5GB of data.
8811 The @command{kill} command makes it output intermediate I/O statistics,
8812 and when @command{dd} completes normally or is killed by the
8813 @code{SIGINT} signal, it outputs the final statistics.
8815 @example
8816 # Ignore the signal so we never inadvertently terminate the dd child.
8817 # Note this is not needed when SIGINFO is available.
8818 trap '' USR1
8820 # Run dd with the fullblock iflag to avoid short reads
8821 # which can be triggered by reception of signals.
8822 dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$!
8824 # Output stats every half second
8825 until ! kill -s USR1 $pid 2>/dev/null; do sleep .5; done
8826 @end example
8828 The above script will output in the following format
8830 @example
8831 859+0 records in
8832 859+0 records out
8833 4295000000 bytes (4.3 GB) copied, 0.539934 s, 8.0 GB/s
8834 1000+0 records in
8835 1000+0 records out
8836 5000000000 bytes (5.0 GB) copied, 0.630785 s, 7.9 GB/s
8837 @end example
8839 Note also the @samp{status=progress} option which periodically updates
8840 the last line of the transfer statistics above.
8842 @vindex POSIXLY_CORRECT
8843 On systems lacking the @samp{INFO} signal @command{dd} responds to the
8844 @samp{USR1} signal instead, unless the @env{POSIXLY_CORRECT}
8845 environment variable is set.
8847 @exitstatus
8850 @node install invocation
8851 @section @command{install}: Copy files and set attributes
8853 @pindex install
8854 @cindex copying files and setting attributes
8856 @command{install} copies files while setting their file mode bits and, if
8857 possible, their owner and group.  Synopses:
8859 @example
8860 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
8861 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
8862 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
8863 install [@var{option}]@dots{} -d @var{directory}@dots{}
8864 @end example
8866 @itemize @bullet
8867 @item
8868 If two file names are given, @command{install} copies the first file to the
8869 second.
8871 @item
8872 If the @option{--target-directory} (@option{-t}) option is given, or
8873 failing that if the last file is a directory and the
8874 @option{--no-target-directory} (@option{-T}) option is not given,
8875 @command{install} copies each @var{source} file to the specified
8876 directory, using the @var{source}s' names.
8878 @item
8879 If the @option{--directory} (@option{-d}) option is given,
8880 @command{install} creates each @var{directory} and any missing parent
8881 directories.  Parent directories are created with mode
8882 @samp{u=rwx,go=rx} (755), regardless of the @option{-m} option or the
8883 current umask.  @xref{Directory Setuid and Setgid}, for how the
8884 set-user-ID and set-group-ID bits of parent directories are inherited.
8885 @end itemize
8887 @cindex Makefiles, installing programs in
8888 @command{install} is similar to @command{cp}, but allows you to control the
8889 attributes of destination files.  It is typically used in Makefiles to
8890 copy programs into their destination directories.  It refuses to copy
8891 files onto themselves.
8893 @cindex extended attributes, xattr
8894 @command{install} never preserves extended attributes (xattr).
8896 The program accepts the following options.  Also see @ref{Common options}.
8898 @table @samp
8900 @optBackup
8902 @item -C
8903 @itemx --compare
8904 @opindex -C
8905 @opindex --compare
8906 Compare each pair of source and destination files, and if the destination has
8907 identical content and any specified owner, group, permissions, and possibly
8908 SELinux context, then do not modify the destination at all.
8909 Note this option is best used in conjunction with @option{--user},
8910 @option{--group} and @option{--mode} options, lest @command{install}
8911 incorrectly determines the default attributes that installed files would have
8912 (as it doesn't consider setgid directories and POSIX default ACLs for example).
8913 This could result in redundant copies or attributes that are not reset to the
8914 correct defaults.
8916 @item -c
8917 @opindex -c
8918 Ignored; for compatibility with old Unix versions of @command{install}.
8920 @item -D
8921 @opindex -D
8922 Create any missing parent directories of @var{dest},
8923 then copy @var{source} to @var{dest}.
8924 Explicitly specifying the @option{--target-directory=@var{dir}} will similarly
8925 ensure the presence of that hierarchy before copying @var{source} arguments.
8927 @item -d
8928 @itemx --directory
8929 @opindex -d
8930 @opindex --directory
8931 @cindex directories, creating with given attributes
8932 @cindex parent directories, creating missing
8933 @cindex leading directories, creating missing
8934 Create any missing parent directories, giving them the default
8935 attributes.  Then create each given directory, setting their owner,
8936 group and mode as given on the command line or to the defaults.
8938 @item -g @var{group}
8939 @itemx --group=@var{group}
8940 @opindex -g
8941 @opindex --group
8942 @cindex group ownership of installed files, setting
8943 Set the group ownership of installed files or directories to
8944 @var{group}.  The default is the process's current group.  @var{group}
8945 may be either a group name or a numeric group ID.
8947 @item -m @var{mode}
8948 @itemx --mode=@var{mode}
8949 @opindex -m
8950 @opindex --mode
8951 @cindex permissions of installed files, setting
8952 Set the file mode bits for the installed file or directory to @var{mode},
8953 which can be either an octal number, or a symbolic mode as in
8954 @command{chmod}, with @samp{a=} (no access allowed to anyone) as the
8955 point of departure (@pxref{File permissions}).
8956 The default mode is @samp{u=rwx,go=rx,a-s}---read, write, and
8957 execute for the owner, read and execute for group and other, and with
8958 set-user-ID and set-group-ID disabled.
8959 This default is not quite the same as @samp{755}, since it disables
8960 instead of preserving set-user-ID and set-group-ID on directories.
8961 @xref{Directory Setuid and Setgid}.
8963 @item -o @var{owner}
8964 @itemx --owner=@var{owner}
8965 @opindex -o
8966 @opindex --owner
8967 @cindex ownership of installed files, setting
8968 @cindex appropriate privileges
8969 @vindex root @r{as default owner}
8970 If @command{install} has appropriate privileges (is run as root), set the
8971 ownership of installed files or directories to @var{owner}.  The default
8972 is @code{root}.  @var{owner} may be either a user name or a numeric user
8975 @item --preserve-context
8976 @opindex --preserve-context
8977 @cindex SELinux
8978 @cindex security context
8979 Preserve the SELinux security context of files and directories.
8980 Failure to preserve the context in all of the files or directories
8981 will result in an exit status of 1.  If SELinux is disabled then
8982 print a warning and ignore the option.
8984 @item -p
8985 @itemx --preserve-timestamps
8986 @opindex -p
8987 @opindex --preserve-timestamps
8988 @cindex timestamps of installed files, preserving
8989 Set the time of last access and the time of last modification of each
8990 installed file to match those of each corresponding original file.
8991 When a file is installed without this option, its last access and
8992 last modification times are both set to the time of installation.
8993 This option is useful if you want to use the last modification times
8994 of installed files to keep track of when they were last built as opposed
8995 to when they were last installed.
8997 @item -s
8998 @itemx --strip
8999 @opindex -s
9000 @opindex --strip
9001 @cindex symbol table information, stripping
9002 @cindex stripping symbol table information
9003 Strip the symbol tables from installed binary executables.
9005 @item --strip-program=@var{program}
9006 @opindex --strip-program
9007 @cindex symbol table information, stripping, program
9008 Program used to strip binaries.
9010 @optBackupSuffix
9012 @optTargetDirectory
9014 @optNoTargetDirectory
9016 @item -v
9017 @itemx --verbose
9018 @opindex -v
9019 @opindex --verbose
9020 Print the name of each file before copying it.
9022 @optContext
9023 This option is mutually exclusive with the @option{--preserve-context} option.
9026 @end table
9028 @exitstatus
9031 @node mv invocation
9032 @section @command{mv}: Move (rename) files
9034 @pindex mv
9036 @command{mv} moves or renames files (or directories).  Synopses:
9038 @example
9039 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
9040 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9041 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9042 @end example
9044 @itemize @bullet
9045 @item
9046 If two file names are given, @command{mv} moves the first file to the
9047 second.
9049 @item
9050 If the @option{--target-directory} (@option{-t}) option is given, or
9051 failing that if the last file is a directory and the
9052 @option{--no-target-directory} (@option{-T}) option is not given,
9053 @command{mv} moves each @var{source} file to the specified
9054 directory, using the @var{source}s' names.
9055 @end itemize
9057 @command{mv} can move any type of file from one file system to another.
9058 Prior to version @code{4.0} of the fileutils,
9059 @command{mv} could move only regular files between file systems.
9060 For example, now @command{mv} can move an entire directory hierarchy
9061 including special device files from one partition to another.  It first
9062 uses some of the same code that's used by @code{cp -a} to copy the
9063 requested directories and files, then (assuming the copy succeeded)
9064 it removes the originals.  If the copy fails, then the part that was
9065 copied to the destination partition is removed.  If you were to copy
9066 three directories from one partition to another and the copy of the first
9067 directory succeeded, but the second didn't, the first would be left on
9068 the destination partition and the second and third would be left on the
9069 original partition.
9071 @cindex extended attributes, xattr
9072 @command{mv} always tries to copy extended attributes (xattr), which may
9073 include SELinux context, ACLs or Capabilities.
9074 Upon failure all but @samp{Operation not supported} warnings are output.
9076 @cindex prompting, and @command{mv}
9077 If a destination file exists but is normally unwritable, standard input
9078 is a terminal, and the @option{-f} or @option{--force} option is not given,
9079 @command{mv} prompts the user for whether to replace the file.  (You might
9080 own the file, or have write permission on its directory.)  If the
9081 response is not affirmative, the file is skipped.
9083 @emph{Warning}: Avoid specifying a source name with a trailing slash,
9084 when it might be a symlink to a directory.
9085 Otherwise, @command{mv} may do something very surprising, since
9086 its behavior depends on the underlying rename system call.
9087 On a system with a modern Linux-based kernel, it fails with
9088 @code{errno=ENOTDIR}@.
9089 However, on other systems (at least FreeBSD 6.1 and Solaris 10) it silently
9090 renames not the symlink but rather the directory referenced by the symlink.
9091 @xref{Trailing slashes}.
9093 The program accepts the following options.  Also see @ref{Common options}.
9095 @table @samp
9097 @optBackup
9099 @item -f
9100 @itemx --force
9101 @opindex -f
9102 @opindex --force
9103 @cindex prompts, omitting
9104 Do not prompt the user before removing a destination file.
9105 @macro mvOptsIfn
9106 If you specify more than one of the @option{-i}, @option{-f}, @option{-n}
9107 options, only the final one takes effect.
9108 @end macro
9109 @mvOptsIfn
9111 @item -i
9112 @itemx --interactive
9113 @opindex -i
9114 @opindex --interactive
9115 @cindex prompts, forcing
9116 Prompt whether to overwrite each existing destination file, regardless
9117 of its permissions.
9118 If the response is not affirmative, the file is skipped.
9119 @mvOptsIfn
9121 @item -n
9122 @itemx --no-clobber
9123 @opindex -n
9124 @opindex --no-clobber
9125 @cindex prompts, omitting
9126 Do not overwrite an existing file.
9127 @mvOptsIfn
9128 This option is mutually exclusive with @option{-b} or @option{--backup} option.
9130 @item -u
9131 @itemx --update
9132 @opindex -u
9133 @opindex --update
9134 @cindex newer files, moving only
9135 Do not move a non-directory that has an existing destination with the
9136 same or newer modification time.
9137 If the move is across file system boundaries, the comparison is to the
9138 source time stamp truncated to the resolutions of the destination file
9139 system and of the system calls used to update time stamps; this avoids
9140 duplicate work if several @samp{mv -u} commands are executed with the
9141 same source and destination.
9143 @item -v
9144 @itemx --verbose
9145 @opindex -v
9146 @opindex --verbose
9147 Print the name of each file before moving it.
9149 @optStripTrailingSlashes
9151 @optBackupSuffix
9153 @optTargetDirectory
9155 @optNoTargetDirectory
9157 @item -Z
9158 @itemx --context
9159 @opindex -Z
9160 @opindex --context
9161 @cindex SELinux, restoring security context
9162 @cindex security context
9163 This option functions similarly to the @command{restorecon} command,
9164 by adjusting the SELinux security context according
9165 to the system default type for destination files.
9167 @end table
9169 @exitstatus
9172 @node rm invocation
9173 @section @command{rm}: Remove files or directories
9175 @pindex rm
9176 @cindex removing files or directories
9178 @command{rm} removes each given @var{file}.  By default, it does not remove
9179 directories.  Synopsis:
9181 @example
9182 rm [@var{option}]@dots{} [@var{file}]@dots{}
9183 @end example
9185 @cindex prompting, and @command{rm}
9186 If the @option{-I} or @option{--interactive=once} option is given,
9187 and there are more than three files or the @option{-r}, @option{-R},
9188 or @option{--recursive} are given, then @command{rm} prompts the user
9189 for whether to proceed with the entire operation.  If the response is
9190 not affirmative, the entire command is aborted.
9192 Otherwise, if a file is unwritable, standard input is a terminal, and
9193 the @option{-f} or @option{--force} option is not given, or the
9194 @option{-i} or @option{--interactive=always} option @emph{is} given,
9195 @command{rm} prompts the user for whether to remove the file.
9196 If the response is not affirmative, the file is skipped.
9198 Any attempt to remove a file whose last file name component is
9199 @file{.} or @file{..} is rejected without any prompting, as mandated
9200 by POSIX.
9202 @emph{Warning}: If you use @command{rm} to remove a file, it is usually
9203 possible to recover the contents of that file.  If you want more assurance
9204 that the contents are truly unrecoverable, consider using @command{shred}.
9206 The program accepts the following options.  Also see @ref{Common options}.
9208 @table @samp
9210 @item -d
9211 @itemx --dir
9212 @opindex -d
9213 @opindex --dir
9214 @cindex directories, removing
9215 Remove the listed directories if they are empty.
9217 @item -f
9218 @itemx --force
9219 @opindex -f
9220 @opindex --force
9221 Ignore nonexistent files and missing operands, and never prompt the user.
9222 Ignore any previous @option{--interactive} (@option{-i}) option.
9224 @item -i
9225 @opindex -i
9226 Prompt whether to remove each file.
9227 If the response is not affirmative, the file is skipped.
9228 Ignore any previous @option{--force} (@option{-f}) option.
9229 Equivalent to @option{--interactive=always}.
9231 @item -I
9232 @opindex -I
9233 Prompt once whether to proceed with the command, if more than three
9234 files are named or if a recursive removal is requested.  Ignore any
9235 previous @option{--force} (@option{-f}) option.  Equivalent to
9236 @option{--interactive=once}.
9238 @item --interactive [=@var{when}]
9239 @opindex --interactive
9240 Specify when to issue an interactive prompt.  @var{when} may be
9241 omitted, or one of:
9242 @itemize @bullet
9243 @item never
9244 @vindex never @r{interactive option}
9245 - Do not prompt at all.
9246 @item once
9247 @vindex once @r{interactive option}
9248 - Prompt once if more than three files are named or if a recursive
9249 removal is requested.  Equivalent to @option{-I}.
9250 @item always
9251 @vindex always @r{interactive option}
9252 - Prompt for every file being removed.  Equivalent to @option{-i}.
9253 @end itemize
9254 @option{--interactive} with no @var{when} is equivalent to
9255 @option{--interactive=always}.
9257 @item --one-file-system
9258 @opindex --one-file-system
9259 @cindex one file system, restricting @command{rm} to
9260 When removing a hierarchy recursively, skip any directory that is on a
9261 file system different from that of the corresponding command line argument.
9263 @cindex bind mount
9264 This option is useful when removing a build ``chroot'' hierarchy,
9265 which normally contains no valuable data.  However, it is not uncommon
9266 to bind-mount @file{/home} into such a hierarchy, to make it easier to
9267 use one's start-up file.  The catch is that it's easy to forget to
9268 unmount @file{/home}.  Then, when you use @command{rm -rf} to remove
9269 your normally throw-away chroot, that command will remove everything
9270 under @file{/home}, too.
9271 Use the @option{--one-file-system} option, and it will
9272 warn about and skip directories on other file systems.
9273 Of course, this will not save your @file{/home} if it and your
9274 chroot happen to be on the same file system.
9276 @item --preserve-root
9277 @opindex --preserve-root
9278 @cindex root directory, disallow recursive destruction
9279 Fail upon any attempt to remove the root directory, @file{/},
9280 when used with the @option{--recursive} option.
9281 This is the default behavior.
9282 @xref{Treating / specially}.
9284 @item --no-preserve-root
9285 @opindex --no-preserve-root
9286 @cindex root directory, allow recursive destruction
9287 Do not treat @file{/} specially when removing recursively.
9288 This option is not recommended unless you really want to
9289 remove all the files on your computer.
9290 @xref{Treating / specially}.
9292 @item -r
9293 @itemx -R
9294 @itemx --recursive
9295 @opindex -r
9296 @opindex -R
9297 @opindex --recursive
9298 @cindex directories, removing (recursively)
9299 Remove the listed directories and their contents recursively.
9301 @item -v
9302 @itemx --verbose
9303 @opindex -v
9304 @opindex --verbose
9305 Print the name of each file before removing it.
9307 @end table
9309 @cindex files beginning with @samp{-}, removing
9310 @cindex @samp{-}, removing files beginning with
9311 One common question is how to remove files whose names begin with a
9312 @samp{-}.  GNU @command{rm}, like every program that uses the @code{getopt}
9313 function to parse its arguments, lets you use the @samp{--} option to
9314 indicate that all following arguments are non-options.  To remove a file
9315 called @file{-f} in the current directory, you could type either:
9317 @example
9318 rm -- -f
9319 @end example
9321 @noindent
9324 @example
9325 rm ./-f
9326 @end example
9328 @opindex - @r{and Unix @command{rm}}
9329 The Unix @command{rm} program's use of a single @samp{-} for this purpose
9330 predates the development of the @code{getopt} standard syntax.
9332 @exitstatus
9335 @node shred invocation
9336 @section @command{shred}: Remove files more securely
9338 @pindex shred
9339 @cindex data, erasing
9340 @cindex erasing data
9342 @command{shred} overwrites devices or files, to help prevent even
9343 very expensive hardware from recovering the data.
9345 Ordinarily when you remove a file (@pxref{rm invocation}), the data is
9346 not actually destroyed.  Only the index listing where the file is
9347 stored is destroyed, and the storage is made available for reuse.
9348 There are undelete utilities that will attempt to reconstruct the index
9349 and can bring the file back if the parts were not reused.
9351 On a busy system with a nearly-full drive, space can get reused in a few
9352 seconds.  But there is no way to know for sure.  If you have sensitive
9353 data, you may want to be sure that recovery is not possible by actually
9354 overwriting the file with non-sensitive data.
9356 However, even after doing that, it is possible to take the disk back
9357 to a laboratory and use a lot of sensitive (and expensive) equipment
9358 to look for the faint ``echoes'' of the original data underneath the
9359 overwritten data.  If the data has only been overwritten once, it's not
9360 even that hard.
9362 The best way to remove something irretrievably is to destroy the media
9363 it's on with acid, melt it down, or the like.  For cheap removable media
9364 like floppy disks, this is the preferred method.  However, hard drives
9365 are expensive and hard to melt, so the @command{shred} utility tries
9366 to achieve a similar effect non-destructively.
9368 This uses many overwrite passes, with the data patterns chosen to
9369 maximize the damage they do to the old data.  While this will work on
9370 floppies, the patterns are designed for best effect on hard drives.
9371 For more details, see the source code and Peter Gutmann's paper
9372 @uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
9373 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}},
9374 from the proceedings of the Sixth USENIX Security Symposium (San Jose,
9375 California, July 22--25, 1996).
9377 @strong{Please note} that @command{shred} relies on a very important assumption:
9378 that the file system overwrites data in place.  This is the traditional
9379 way to do things, but many modern file system designs do not satisfy this
9380 assumption.  Exceptions include:
9382 @itemize @bullet
9384 @item
9385 Log-structured or journaled file systems, such as those supplied with
9386 AIX and Solaris, and JFS, ReiserFS, XFS, Ext3 (in @code{data=journal} mode),
9387 BFS, NTFS, etc., when they are configured to journal @emph{data}.
9389 @item
9390 File systems that write redundant data and carry on even if some writes
9391 fail, such as RAID-based file systems.
9393 @item
9394 File systems that make snapshots, such as Network Appliance's NFS server.
9396 @item
9397 File systems that cache in temporary locations, such as NFS version 3
9398 clients.
9400 @item
9401 Compressed file systems.
9402 @end itemize
9404 In the particular case of ext3 file systems, the above disclaimer applies (and
9405 @command{shred} is thus of limited effectiveness) only in @code{data=journal}
9406 mode, which journals file data in addition to just metadata.  In both
9407 the @code{data=ordered} (default) and @code{data=writeback} modes,
9408 @command{shred} works as usual.  Ext3 journaling modes can be changed
9409 by adding the @code{data=something} option to the mount options for a
9410 particular file system in the @file{/etc/fstab} file, as documented in
9411 the mount man page (man mount).
9413 If you are not sure how your file system operates, then you should assume
9414 that it does not overwrite data in place, which means that shred cannot
9415 reliably operate on regular files in your file system.
9417 Generally speaking, it is more reliable to shred a device than a file,
9418 since this bypasses the problem of file system design mentioned above.
9419 However, even shredding devices is not always completely reliable.  For
9420 example, most disks map out bad sectors invisibly to the application; if
9421 the bad sectors contain sensitive data, @command{shred} won't be able to
9422 destroy it.
9424 @command{shred} makes no attempt to detect or report this problem, just as
9425 it makes no attempt to do anything about backups.  However, since it is
9426 more reliable to shred devices than files, @command{shred} by default does
9427 not truncate or remove the output file.  This default is more suitable
9428 for devices, which typically cannot be truncated and should not be
9429 removed.
9431 Finally, consider the risk of backups and mirrors.
9432 File system backups and remote mirrors may contain copies of the
9433 file that cannot be removed, and that will allow a shredded file
9434 to be recovered later.  So if you keep any data you may later want
9435 to destroy using @command{shred}, be sure that it is not backed up or mirrored.
9437 @example
9438 shred [@var{option}]@dots{} @var{file}[@dots{}]
9439 @end example
9441 The program accepts the following options.  Also see @ref{Common options}.
9443 @table @samp
9445 @item -f
9446 @itemx --force
9447 @opindex -f
9448 @opindex --force
9449 @cindex force deletion
9450 Override file permissions if necessary to allow overwriting.
9452 @item -n @var{number}
9453 @itemx --iterations=@var{number}
9454 @opindex -n @var{number}
9455 @opindex --iterations=@var{number}
9456 @cindex iterations, selecting the number of
9457 By default, @command{shred} uses @value{SHRED_DEFAULT_PASSES} passes of
9458 overwrite.  You can reduce this to save time, or increase it if you think it's
9459 appropriate.  After 25 passes all of the internal overwrite patterns will have
9460 been used at least once.
9462 @item --random-source=@var{file}
9463 @opindex --random-source
9464 @cindex random source for shredding
9465 Use @var{file} as a source of random data used to overwrite and to
9466 choose pass ordering.  @xref{Random sources}.
9468 @item -s @var{bytes}
9469 @itemx --size=@var{bytes}
9470 @opindex -s @var{bytes}
9471 @opindex --size=@var{bytes}
9472 @cindex size of file to shred
9473 Shred the first @var{bytes} bytes of the file.  The default is to shred
9474 the whole file.  @var{bytes} can be followed by a size specification like
9475 @samp{K}, @samp{M}, or @samp{G} to specify a multiple.  @xref{Block size}.
9477 @item -u
9478 @itemx --remove[=@var{how}]
9479 @opindex -u
9480 @opindex --remove
9481 @opindex --remove=unlink
9482 @opindex --remove=wipe
9483 @opindex --remove=wipesync
9484 @cindex removing files after shredding
9485 After shredding a file, truncate it (if possible) and then remove it.
9486 If a file has multiple links, only the named links will be removed.
9487 Often the file name is less sensitive than the file data, in which case
9488 the optional @var{how} parameter, supported with the long form option,
9489 gives control of how to more efficiently remove each directory entry.
9490 The @samp{unlink} parameter will just use a standard unlink call,
9491 @samp{wipe} will also first obfuscate bytes in the name, and
9492 @samp{wipesync} will also sync each obfuscated byte in the name to disk.
9493 Note @samp{wipesync} is the default method, but can be expensive,
9494 requiring a sync for every character in every file.  This can become
9495 significant with many files, or is redundant if your file system provides
9496 synchronous metadata updates.
9498 @item -v
9499 @itemx --verbose
9500 @opindex -v
9501 @opindex --verbose
9502 Display to standard error all status updates as sterilization proceeds.
9504 @item -x
9505 @itemx --exact
9506 @opindex -x
9507 @opindex --exact
9508 By default, @command{shred} rounds the size of a regular file up to the next
9509 multiple of the file system block size to fully erase the slack space in
9510 the last block of the file.  This space may contain portions of the current
9511 system memory on some systems for example.
9512 Use @option{--exact} to suppress that behavior.
9513 Thus, by default if you shred a 10-byte regular file on a system with 512-byte
9514 blocks, the resulting file will be 512 bytes long.  With this option,
9515 shred does not increase the apparent size of the file.
9517 @item -z
9518 @itemx --zero
9519 @opindex -z
9520 @opindex --zero
9521 Normally, the last pass that @command{shred} writes is made up of
9522 random data.  If this would be conspicuous on your hard drive (for
9523 example, because it looks like encrypted data), or you just think
9524 it's tidier, the @option{--zero} option adds an additional overwrite pass with
9525 all zero bits.  This is in addition to the number of passes specified
9526 by the @option{--iterations} option.
9528 @end table
9530 You might use the following command to erase all trace of the
9531 file system you'd created on the floppy disk in your first drive.
9532 That command takes about 20 minutes to erase a ``1.44MB'' (actually
9533 1440 KiB) floppy.
9535 @example
9536 shred --verbose /dev/fd0
9537 @end example
9539 Similarly, to erase all data on a selected partition of
9540 your hard disk, you could give a command like this:
9542 @example
9543 shred --verbose /dev/sda5
9544 @end example
9546 On modern disks, a single pass should be adequate,
9547 and it will take one third the time of the default three-pass approach.
9549 @example
9550 # 1 pass, write pseudo-random data; 3x faster than the default
9551 shred --verbose -n1 /dev/sda5
9552 @end example
9554 To be on the safe side, use at least one pass that overwrites using
9555 pseudo-random data.  I.e., don't be tempted to use @samp{-n0 --zero},
9556 in case some disk controller optimizes the process of writing blocks
9557 of all zeros, and thereby does not clear all bytes in a block.
9558 Some SSDs may do just that.
9560 A @var{file} of @samp{-} denotes standard output.
9561 The intended use of this is to shred a removed temporary file.
9562 For example:
9564 @example
9565 i=$(mktemp)
9566 exec 3<>"$i"
9567 rm -- "$i"
9568 echo "Hello, world" >&3
9569 shred - >&3
9570 exec 3>-
9571 @end example
9573 However, the command @samp{shred - >file} does not shred the contents
9574 of @var{file}, since the shell truncates @var{file} before invoking
9575 @command{shred}.  Use the command @samp{shred file} or (if using a
9576 Bourne-compatible shell) the command @samp{shred - 1<>file} instead.
9578 @exitstatus
9581 @node Special file types
9582 @chapter Special file types
9584 @cindex special file types
9585 @cindex file types, special
9587 This chapter describes commands which create special types of files (and
9588 @command{rmdir}, which removes directories, one special file type).
9590 @cindex special file types
9591 @cindex file types
9592 Although Unix-like operating systems have markedly fewer special file
9593 types than others, not @emph{everything} can be treated only as the
9594 undifferentiated byte stream of @dfn{normal files}.  For example, when a
9595 file is created or removed, the system must record this information,
9596 which it does in a @dfn{directory}---a special type of file.  Although
9597 you can read directories as normal files, if you're curious, in order
9598 for the system to do its job it must impose a structure, a certain
9599 order, on the bytes of the file.  Thus it is a ``special'' type of file.
9601 Besides directories, other special file types include named pipes
9602 (FIFOs), symbolic links, sockets, and so-called @dfn{special files}.
9604 @menu
9605 * link invocation::             Make a hard link via the link syscall
9606 * ln invocation::               Make links between files.
9607 * mkdir invocation::            Make directories.
9608 * mkfifo invocation::           Make FIFOs (named pipes).
9609 * mknod invocation::            Make block or character special files.
9610 * readlink invocation::         Print value of a symlink or canonical file name.
9611 * rmdir invocation::            Remove empty directories.
9612 * unlink invocation::           Remove files via the unlink syscall
9613 @end menu
9616 @node link invocation
9617 @section @command{link}: Make a hard link via the link syscall
9619 @pindex link
9620 @cindex links, creating
9621 @cindex hard links, creating
9622 @cindex creating links (hard only)
9624 @command{link} creates a single hard link at a time.
9625 It is a minimalist interface to the system-provided
9626 @code{link} function.  @xref{Hard Links, , , libc,
9627 The GNU C Library Reference Manual}.
9628 It avoids the bells and whistles of the more commonly-used
9629 @command{ln} command (@pxref{ln invocation}).
9630 Synopsis:
9632 @example
9633 link @var{filename} @var{linkname}
9634 @end example
9636 @var{filename} must specify an existing file, and @var{linkname}
9637 must specify a nonexistent entry in an existing directory.
9638 @command{link} simply calls @code{link (@var{filename}, @var{linkname})}
9639 to create the link.
9641 On a GNU system, this command acts like @samp{ln --directory
9642 --no-target-directory @var{filename} @var{linkname}}.  However, the
9643 @option{--directory} and @option{--no-target-directory} options are
9644 not specified by POSIX, and the @command{link} command is
9645 more portable in practice.
9647 If @var{filename} is a symbolic link, it is unspecified whether
9648 @var{linkname} will be a hard link to the symbolic link or to the
9649 target of the symbolic link.  Use @command{ln -P} or @command{ln -L}
9650 to specify which behavior is desired.
9652 @exitstatus
9655 @node ln invocation
9656 @section @command{ln}: Make links between files
9658 @pindex ln
9659 @cindex links, creating
9660 @cindex hard links, creating
9661 @cindex symbolic (soft) links, creating
9662 @cindex creating links (hard or soft)
9664 @cindex file systems and hard links
9665 @command{ln} makes links between files.  By default, it makes hard links;
9666 with the @option{-s} option, it makes symbolic (or @dfn{soft}) links.
9667 Synopses:
9669 @example
9670 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
9671 ln [@var{option}]@dots{} @var{target}
9672 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
9673 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
9674 @end example
9676 @itemize @bullet
9678 @item
9679 If two file names are given, @command{ln} creates a link to the first
9680 file from the second.
9682 @item
9683 If one @var{target} is given, @command{ln} creates a link to that file
9684 in the current directory.
9686 @item
9687 If the @option{--target-directory} (@option{-t}) option is given, or
9688 failing that if the last file is a directory and the
9689 @option{--no-target-directory} (@option{-T}) option is not given,
9690 @command{ln} creates a link to each @var{target} file in the specified
9691 directory, using the @var{target}s' names.
9693 @end itemize
9695 Normally @command{ln} does not remove existing files.  Use the
9696 @option{--force} (@option{-f}) option to remove them unconditionally,
9697 the @option{--interactive} (@option{-i}) option to remove them
9698 conditionally, and the @option{--backup} (@option{-b}) option to
9699 rename them.
9701 @cindex hard link, defined
9702 @cindex inode, and hard links
9703 A @dfn{hard link} is another name for an existing file; the link and the
9704 original are indistinguishable.  Technically speaking, they share the
9705 same inode, and the inode contains all the information about a
9706 file---indeed, it is not incorrect to say that the inode @emph{is} the
9707 file.  Most systems prohibit making a hard link to
9708 a directory; on those where it is allowed, only the super-user can do
9709 so (and with caution, since creating a cycle will cause problems to many
9710 other utilities).  Hard links cannot cross file system boundaries.  (These
9711 restrictions are not mandated by POSIX, however.)
9713 @cindex dereferencing symbolic links
9714 @cindex symbolic link, defined
9715 @dfn{Symbolic links} (@dfn{symlinks} for short), on the other hand, are
9716 a special file type (which not all kernels support: System V release 3
9717 (and older) systems lack symlinks) in which the link file actually
9718 refers to a different file, by name.  When most operations (opening,
9719 reading, writing, and so on) are passed the symbolic link file, the
9720 kernel automatically @dfn{dereferences} the link and operates on the
9721 target of the link.  But some operations (e.g., removing) work on the
9722 link file itself, rather than on its target.  The owner and group of a
9723 symlink are not significant to file access performed through
9724 the link, but do have implications on deleting a symbolic link from a
9725 directory with the restricted deletion bit set.  On the GNU system,
9726 the mode of a symlink has no significance and cannot be changed, but
9727 on some BSD systems, the mode can be changed and will affect whether
9728 the symlink will be traversed in file name resolution.  @xref{Symbolic Links,,,
9729 libc, The GNU C Library Reference Manual}.
9731 Symbolic links can contain arbitrary strings; a @dfn{dangling symlink}
9732 occurs when the string in the symlink does not resolve to a file.
9733 There are no restrictions against creating dangling symbolic links.
9734 There are trade-offs to using absolute or relative symlinks.  An
9735 absolute symlink always points to the same file, even if the directory
9736 containing the link is moved.  However, if the symlink is visible from
9737 more than one machine (such as on a networked file system), the file
9738 pointed to might not always be the same.  A relative symbolic link is
9739 resolved in relation to the directory that contains the link, and is
9740 often useful in referring to files on the same device without regards
9741 to what name that device is mounted on when accessed via networked
9742 machines.
9744 When creating a relative symlink in a different location than the
9745 current directory, the resolution of the symlink will be different
9746 than the resolution of the same string from the current directory.
9747 Therefore, many users prefer to first change directories to the
9748 location where the relative symlink will be created, so that
9749 tab-completion or other file resolution will find the same target as
9750 what will be placed in the symlink.
9752 The program accepts the following options.  Also see @ref{Common options}.
9754 @table @samp
9756 @optBackup
9758 @item -d
9759 @itemx -F
9760 @itemx --directory
9761 @opindex -d
9762 @opindex -F
9763 @opindex --directory
9764 @cindex hard links to directories
9765 Allow users with appropriate privileges to attempt to make hard links
9766 to directories.
9767 However, note that this will probably fail due to
9768 system restrictions, even for the super-user.
9770 @item -f
9771 @itemx --force
9772 @opindex -f
9773 @opindex --force
9774 Remove existing destination files.
9776 @item -i
9777 @itemx --interactive
9778 @opindex -i
9779 @opindex --interactive
9780 @cindex prompting, and @command{ln}
9781 Prompt whether to remove existing destination files.
9783 @item -L
9784 @itemx --logical
9785 @opindex -L
9786 @opindex --logical
9787 If @option{-s} is not in effect, and the source file is a symbolic
9788 link, create the hard link to the file referred to by the symbolic
9789 link, rather than the symbolic link itself.
9791 @item -n
9792 @itemx --no-dereference
9793 @opindex -n
9794 @opindex --no-dereference
9795 Do not treat the last operand specially when it is a symbolic link to
9796 a directory.  Instead, treat it as if it were a normal file.
9798 When the destination is an actual directory (not a symlink to one),
9799 there is no ambiguity.  The link is created in that directory.
9800 But when the specified destination is a symlink to a directory,
9801 there are two ways to treat the user's request.  @command{ln} can
9802 treat the destination just as it would a normal directory and create
9803 the link in it.  On the other hand, the destination can be viewed as a
9804 non-directory---as the symlink itself.  In that case, @command{ln}
9805 must delete or backup that symlink before creating the new link.
9806 The default is to treat a destination that is a symlink to a directory
9807 just like a directory.
9809 This option is weaker than the @option{--no-target-directory}
9810 (@option{-T}) option, so it has no effect if both options are given.
9812 @item -P
9813 @itemx --physical
9814 @opindex -P
9815 @opindex --physical
9816 If @option{-s} is not in effect, and the source file is a symbolic
9817 link, create the hard link to the symbolic link itself.  On platforms
9818 where this is not supported by the kernel, this option creates a
9819 symbolic link with identical contents; since symbolic link contents
9820 cannot be edited, any file name resolution performed through either
9821 link will be the same as if a hard link had been created.
9823 @item -r
9824 @itemx --relative
9825 @opindex -r
9826 @opindex --relative
9827 Make symbolic links relative to the link location.
9829 Example:
9831 @smallexample
9832 ln -srv /a/file /tmp
9833 '/tmp/file' -> '../a/file'
9834 @end smallexample
9836 Relative symbolic links are generated based on their canonicalized
9837 containing directory, and canonicalized targets.  I.e., all symbolic
9838 links in these file names will be resolved.
9839 @xref{realpath invocation}, which gives greater control
9840 over relative file name generation, as demonstrated in the following example:
9842 @example
9843 @verbatim
9844 ln--relative() {
9845   test "$1" = --no-symlinks && { nosym=$1; shift; }
9846   target="$1";
9847   test -d "$2" && link="$2/." || link="$2"
9848   rtarget="$(realpath $nosym -m "$target" \
9849               --relative-to "$(dirname "$link")")"
9850   ln -s -v "$rtarget" "$link"
9852 @end verbatim
9853 @end example
9855 @item -s
9856 @itemx --symbolic
9857 @opindex -s
9858 @opindex --symbolic
9859 Make symbolic links instead of hard links.  This option merely produces
9860 an error message on systems that do not support symbolic links.
9862 @optBackupSuffix
9864 @optTargetDirectory
9866 @optNoTargetDirectory
9868 @item -v
9869 @itemx --verbose
9870 @opindex -v
9871 @opindex --verbose
9872 Print the name of each file after linking it successfully.
9874 @end table
9876 @cindex hard links to symbolic links
9877 @cindex symbolic links and @command{ln}
9878 If @option{-L} and @option{-P} are both given, the last one takes
9879 precedence.  If @option{-s} is also given, @option{-L} and @option{-P}
9880 are silently ignored.  If neither option is given, then this
9881 implementation defaults to @option{-P} if the system @code{link} supports
9882 hard links to symbolic links (such as the GNU system), and @option{-L}
9883 if @code{link} follows symbolic links (such as on BSD).
9885 @exitstatus
9887 Examples:
9889 @smallexample
9890 Bad Example:
9892 # Create link ../a pointing to a in that directory.
9893 # Not really useful because it points to itself.
9894 ln -s a ..
9896 Better Example:
9898 # Change to the target before creating symlinks to avoid being confused.
9899 cd ..
9900 ln -s adir/a .
9902 Bad Example:
9904 # Hard coded file names don't move well.
9905 ln -s $(pwd)/a /some/dir/
9907 Better Example:
9909 # Relative file names survive directory moves and also
9910 # work across networked file systems.
9911 ln -s afile anotherfile
9912 ln -s ../adir/afile yetanotherfile
9913 @end smallexample
9916 @node mkdir invocation
9917 @section @command{mkdir}: Make directories
9919 @pindex mkdir
9920 @cindex directories, creating
9921 @cindex creating directories
9923 @command{mkdir} creates directories with the specified names.  Synopsis:
9925 @example
9926 mkdir [@var{option}]@dots{} @var{name}@dots{}
9927 @end example
9929 @command{mkdir} creates each directory @var{name} in the order given.
9930 It reports an error if @var{name} already exists, unless the
9931 @option{-p} option is given and @var{name} is a directory.
9933 The program accepts the following options.  Also see @ref{Common options}.
9935 @table @samp
9937 @item -m @var{mode}
9938 @itemx --mode=@var{mode}
9939 @opindex -m
9940 @opindex --mode
9941 @cindex modes of created directories, setting
9942 Set the file permission bits of created directories to @var{mode},
9943 which uses the same syntax as
9944 in @command{chmod} and uses @samp{a=rwx} (read, write and execute allowed for
9945 everyone) for the point of the departure.  @xref{File permissions}.
9947 Normally the directory has the desired file mode bits at the moment it
9948 is created.  As a GNU extension, @var{mode} may also mention
9949 special mode bits, but in this case there may be a temporary window
9950 during which the directory exists but its special mode bits are
9951 incorrect.  @xref{Directory Setuid and Setgid}, for how the
9952 set-user-ID and set-group-ID bits of directories are inherited unless
9953 overridden in this way.
9955 @item -p
9956 @itemx --parents
9957 @opindex -p
9958 @opindex --parents
9959 @cindex parent directories, creating
9960 Make any missing parent directories for each argument, setting their
9961 file permission bits to the umask modified by @samp{u+wx}.  Ignore
9962 existing parent directories, and do not change their file permission
9963 bits.
9965 To set the file permission bits of any newly-created parent
9966 directories to a value that includes @samp{u+wx}, you can set the
9967 umask before invoking @command{mkdir}.  For example, if the shell
9968 command @samp{(umask u=rwx,go=rx; mkdir -p P/Q)} creates the parent
9969 @file{P} it sets the parent's permission bits to @samp{u=rwx,go=rx}.
9970 To set a parent's special mode bits as well, you can invoke
9971 @command{chmod} after @command{mkdir}.  @xref{Directory Setuid and
9972 Setgid}, for how the set-user-ID and set-group-ID bits of
9973 newly-created parent directories are inherited.
9975 @item -v
9976 @itemx --verbose
9977 @opindex -v
9978 @opindex --verbose
9979 Print a message for each created directory.  This is most useful with
9980 @option{--parents}.
9982 @optContext
9984 @end table
9986 @exitstatus
9989 @node mkfifo invocation
9990 @section @command{mkfifo}: Make FIFOs (named pipes)
9992 @pindex mkfifo
9993 @cindex FIFOs, creating
9994 @cindex named pipes, creating
9995 @cindex creating FIFOs (named pipes)
9997 @command{mkfifo} creates FIFOs (also called @dfn{named pipes}) with the
9998 specified names.  Synopsis:
10000 @example
10001 mkfifo [@var{option}] @var{name}@dots{}
10002 @end example
10004 A @dfn{FIFO} is a special file type that permits independent processes
10005 to communicate.  One process opens the FIFO file for writing, and
10006 another for reading, after which data can flow as with the usual
10007 anonymous pipe in shells or elsewhere.
10009 The program accepts the following options.  Also see @ref{Common options}.
10011 @table @samp
10013 @item -m @var{mode}
10014 @itemx --mode=@var{mode}
10015 @opindex -m
10016 @opindex --mode
10017 @cindex modes of created FIFOs, setting
10018 Set the mode of created FIFOs to @var{mode}, which is symbolic as in
10019 @command{chmod} and uses @samp{a=rw} (read and write allowed for everyone)
10020 for the point of departure.  @var{mode} should specify only file
10021 permission bits.  @xref{File permissions}.
10023 @optContext
10025 @end table
10027 @exitstatus
10030 @node mknod invocation
10031 @section @command{mknod}: Make block or character special files
10033 @pindex mknod
10034 @cindex block special files, creating
10035 @cindex character special files, creating
10037 @command{mknod} creates a FIFO, character special file, or block special
10038 file with the specified name.  Synopsis:
10040 @example
10041 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
10042 @end example
10044 @cindex special files
10045 @cindex block special files
10046 @cindex character special files
10047 Unlike the phrase ``special file type'' above, the term @dfn{special
10048 file} has a technical meaning on Unix: something that can generate or
10049 receive data.  Usually this corresponds to a physical piece of hardware,
10050 e.g., a printer or a disk.  (These files are typically created at
10051 system-configuration time.)  The @command{mknod} command is what creates
10052 files of this type.  Such devices can be read either a character at a
10053 time or a ``block'' (many characters) at a time, hence we say there are
10054 @dfn{block special} files and @dfn{character special} files.
10056 @c mknod is a shell built-in at least with OpenBSD's /bin/sh
10057 @mayConflictWithShellBuiltIn{mknod}
10059 The arguments after @var{name} specify the type of file to make:
10061 @table @samp
10063 @item p
10064 @opindex p @r{for FIFO file}
10065 for a FIFO
10067 @item b
10068 @opindex b @r{for block special file}
10069 for a block special file
10071 @item c
10072 @c Don't document the 'u' option -- it's just a synonym for 'c'.
10073 @c Do *any* versions of mknod still use it?
10074 @c @itemx u
10075 @opindex c @r{for character special file}
10076 @c @opindex u @r{for character special file}
10077 for a character special file
10079 @end table
10081 When making a block or character special file, the major and minor
10082 device numbers must be given after the file type.
10083 If a major or minor device number begins with @samp{0x} or @samp{0X},
10084 it is interpreted as hexadecimal; otherwise, if it begins with @samp{0},
10085 as octal; otherwise, as decimal.
10087 The program accepts the following options.  Also see @ref{Common options}.
10089 @table @samp
10091 @item -m @var{mode}
10092 @itemx --mode=@var{mode}
10093 @opindex -m
10094 @opindex --mode
10095 Set the mode of created files to @var{mode}, which is symbolic as in
10096 @command{chmod} and uses @samp{a=rw} as the point of departure.
10097 @var{mode} should specify only file permission bits.
10098 @xref{File permissions}.
10100 @optContext
10102 @end table
10104 @exitstatus
10107 @node readlink invocation
10108 @section @command{readlink}: Print value of a symlink or canonical file name
10110 @pindex readlink
10111 @cindex displaying value of a symbolic link
10112 @cindex canonical file name
10113 @cindex canonicalize a file name
10114 @findex realpath
10116 @command{readlink} may work in one of two supported modes:
10118 @table @samp
10120 @item Readlink mode
10122 @command{readlink} outputs the value of the given symbolic links.
10123 If @command{readlink} is invoked with an argument other than the name
10124 of a symbolic link, it produces no output and exits with a nonzero exit code.
10126 @item Canonicalize mode
10128 @command{readlink} outputs the absolute name of the given files which contain
10129 no @file{.}, @file{..} components nor any repeated separators
10130 (@file{/}) or symbolic links.
10132 @end table
10134 @example
10135 readlink [@var{option}]@dots{} @var{file}@dots{}
10136 @end example
10138 By default, @command{readlink} operates in readlink mode.
10140 The program accepts the following options.  Also see @ref{Common options}.
10142 @table @samp
10144 @item -f
10145 @itemx --canonicalize
10146 @opindex -f
10147 @opindex --canonicalize
10148 Activate canonicalize mode.
10149 If any component of the file name except the last one is missing or unavailable,
10150 @command{readlink} produces no output and exits with a nonzero exit
10151 code.  A trailing slash is ignored.
10153 @item -e
10154 @itemx --canonicalize-existing
10155 @opindex -e
10156 @opindex --canonicalize-existing
10157 Activate canonicalize mode.
10158 If any component is missing or unavailable, @command{readlink} produces
10159 no output and exits with a nonzero exit code.  A trailing slash
10160 requires that the name resolve to a directory.
10162 @item -m
10163 @itemx --canonicalize-missing
10164 @opindex -m
10165 @opindex --canonicalize-missing
10166 Activate canonicalize mode.
10167 If any component is missing or unavailable, @command{readlink} treats it
10168 as a directory.
10170 @item -n
10171 @itemx --no-newline
10172 @opindex -n
10173 @opindex --no-newline
10174 Do not print the output delimiter, when a single @var{file} is specified.
10175 Print a warning if specified along with multiple @var{file}s.
10177 @item -s
10178 @itemx -q
10179 @itemx --silent
10180 @itemx --quiet
10181 @opindex -s
10182 @opindex -q
10183 @opindex --silent
10184 @opindex --quiet
10185 Suppress most error messages.
10187 @item -v
10188 @itemx --verbose
10189 @opindex -v
10190 @opindex --verbose
10191 Report error messages.
10193 @optZero
10195 @end table
10197 The @command{readlink} utility first appeared in OpenBSD 2.1.
10199 The @command{realpath} command without options, operates like
10200 @command{readlink} in canonicalize mode.
10202 @exitstatus
10205 @node rmdir invocation
10206 @section @command{rmdir}: Remove empty directories
10208 @pindex rmdir
10209 @cindex removing empty directories
10210 @cindex directories, removing empty
10212 @command{rmdir} removes empty directories.  Synopsis:
10214 @example
10215 rmdir [@var{option}]@dots{} @var{directory}@dots{}
10216 @end example
10218 If any @var{directory} argument does not refer to an existing empty
10219 directory, it is an error.
10221 The program accepts the following options.  Also see @ref{Common options}.
10223 @table @samp
10225 @item --ignore-fail-on-non-empty
10226 @opindex --ignore-fail-on-non-empty
10227 @cindex directory deletion, ignoring failures
10228 Ignore each failure to remove a directory that is solely because
10229 the directory is non-empty.
10231 @item -p
10232 @itemx --parents
10233 @opindex -p
10234 @opindex --parents
10235 @cindex parent directories, removing
10236 Remove @var{directory}, then try to remove each component of @var{directory}.
10237 So, for example, @samp{rmdir -p a/b/c} is similar to @samp{rmdir a/b/c a/b a}.
10238 As such, it fails if any of those directories turns out not to be empty.
10239 Use the @option{--ignore-fail-on-non-empty} option to make it so such
10240 a failure does not evoke a diagnostic and does not cause @command{rmdir} to
10241 exit unsuccessfully.
10243 @item -v
10244 @itemx --verbose
10245 @opindex -v
10246 @opindex --verbose
10247 @cindex directory deletion, reporting
10248 Give a diagnostic for each successful removal.
10249 @var{directory} is removed.
10251 @end table
10253 @xref{rm invocation}, for how to remove non-empty directories (recursively).
10255 @exitstatus
10258 @node unlink invocation
10259 @section @command{unlink}: Remove files via the unlink syscall
10261 @pindex unlink
10262 @cindex removing files or directories (via the unlink syscall)
10264 @command{unlink} deletes a single specified file name.
10265 It is a minimalist interface to the system-provided
10266 @code{unlink} function.  @xref{Deleting Files, , , libc,
10267 The GNU C Library Reference Manual}.  Synopsis:
10268 It avoids the bells and whistles of the more commonly-used
10269 @command{rm} command (@pxref{rm invocation}).
10271 @example
10272 unlink @var{filename}
10273 @end example
10275 On some systems @code{unlink} can be used to delete the name of a
10276 directory.  On others, it can be used that way only by a privileged user.
10277 In the GNU system @code{unlink} can never delete the name of a directory.
10279 The @command{unlink} command honors the @option{--help} and
10280 @option{--version} options.  To remove a file whose name begins with
10281 @samp{-}, prefix the name with @samp{./}, e.g., @samp{unlink ./--help}.
10283 @exitstatus
10286 @node Changing file attributes
10287 @chapter Changing file attributes
10289 @cindex changing file attributes
10290 @cindex file attributes, changing
10291 @cindex attributes, file
10293 A file is not merely its contents, a name, and a file type
10294 (@pxref{Special file types}).  A file also has an owner (a user ID), a
10295 group (a group ID), permissions (what the owner can do with the file,
10296 what people in the group can do, and what everyone else can do), various
10297 timestamps, and other information.  Collectively, we call these a file's
10298 @dfn{attributes}.
10300 These commands change file attributes.
10302 @menu
10303 * chown invocation::            Change file owners and groups.
10304 * chgrp invocation::            Change file groups.
10305 * chmod invocation::            Change access permissions.
10306 * touch invocation::            Change file timestamps.
10307 @end menu
10310 @node chown invocation
10311 @section @command{chown}: Change file owner and group
10313 @pindex chown
10314 @cindex file ownership, changing
10315 @cindex group ownership, changing
10316 @cindex changing file ownership
10317 @cindex changing group ownership
10319 @command{chown} changes the user and/or group ownership of each given @var{file}
10320 to @var{new-owner} or to the user and group of an existing reference file.
10321 Synopsis:
10323 @example
10324 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@}@c
10325  @var{file}@dots{}
10326 @end example
10328 If used, @var{new-owner} specifies the new owner and/or group as follows
10329 (with no embedded white space):
10331 @example
10332 [@var{owner}] [ : [@var{group}] ]
10333 @end example
10335 Specifically:
10337 @table @var
10338 @item owner
10339 If only an @var{owner} (a user name or numeric user ID) is given, that
10340 user is made the owner of each given file, and the files' group is not
10341 changed.
10343 @item owner@samp{:}group
10344 If the @var{owner} is followed by a colon and a @var{group} (a
10345 group name or numeric group ID), with no spaces between them, the group
10346 ownership of the files is changed as well (to @var{group}).
10348 @item owner@samp{:}
10349 If a colon but no group name follows @var{owner}, that user is
10350 made the owner of the files and the group of the files is changed to
10351 @var{owner}'s login group.
10353 @item @samp{:}group
10354 If the colon and following @var{group} are given, but the owner
10355 is omitted, only the group of the files is changed; in this case,
10356 @command{chown} performs the same function as @command{chgrp}.
10358 @item @samp{:}
10359 If only a colon is given, or if @var{new-owner} is empty, neither the
10360 owner nor the group is changed.
10362 @end table
10364 If @var{owner} or @var{group} is intended to represent a numeric user
10365 or group ID, then you may specify it with a leading @samp{+}.
10366 @xref{Disambiguating names and IDs}.
10368 Some older scripts may still use @samp{.} in place of the @samp{:} separator.
10369 POSIX 1003.1-2001 (@pxref{Standards conformance}) does not
10370 require support for that, but for backward compatibility GNU
10371 @command{chown} supports @samp{.} so long as no ambiguity results.
10372 New scripts should avoid the use of @samp{.} because it is not
10373 portable, and because it has undesirable results if the entire
10374 @var{owner@samp{.}group} happens to identify a user whose name
10375 contains @samp{.}.
10377 @macro chownGroupRestrictions
10378 It is system dependent whether a user can change the group to an arbitrary one,
10379 or the more portable behavior of being restricted to setting a group of
10380 which the user is a member.
10381 @end macro
10382 @chownGroupRestrictions
10384 The @command{chown} command sometimes clears the set-user-ID or
10385 set-group-ID permission bits.  This behavior depends on the policy and
10386 functionality of the underlying @code{chown} system call, which may
10387 make system-dependent file mode modifications outside the control of
10388 the @command{chown} command.  For example, the @command{chown} command
10389 might not affect those bits when invoked by a user with appropriate
10390 privileges, or when the
10391 bits signify some function other than executable permission (e.g.,
10392 mandatory locking).
10393 When in doubt, check the underlying system behavior.
10395 The program accepts the following options.  Also see @ref{Common options}.
10397 @table @samp
10399 @item -c
10400 @itemx --changes
10401 @opindex -c
10402 @opindex --changes
10403 @cindex changed owners, verbosely describing
10404 Verbosely describe the action for each @var{file} whose ownership
10405 actually changes.
10407 @item -f
10408 @itemx --silent
10409 @itemx --quiet
10410 @opindex -f
10411 @opindex --silent
10412 @opindex --quiet
10413 @cindex error messages, omitting
10414 Do not print error messages about files whose ownership cannot be
10415 changed.
10417 @item --from=@var{old-owner}
10418 @opindex --from
10419 @cindex symbolic links, changing owner
10420 Change a @var{file}'s ownership only if it has current attributes specified
10421 by @var{old-owner}.  @var{old-owner} has the same form as @var{new-owner}
10422 described above.
10423 This option is useful primarily from a security standpoint in that
10424 it narrows considerably the window of potential abuse.
10425 For example, to reflect a user ID numbering change for one user's files
10426 without an option like this, @code{root} might run
10428 @smallexample
10429 find / -owner OLDUSER -print0 | xargs -0 chown -h NEWUSER
10430 @end smallexample
10432 But that is dangerous because the interval between when the @command{find}
10433 tests the existing file's owner and when the @command{chown} is actually run
10434 may be quite large.
10435 One way to narrow the gap would be to invoke chown for each file
10436 as it is found:
10438 @example
10439 find / -owner OLDUSER -exec chown -h NEWUSER @{@} \;
10440 @end example
10442 But that is very slow if there are many affected files.
10443 With this option, it is safer (the gap is narrower still)
10444 though still not perfect:
10446 @example
10447 chown -h -R --from=OLDUSER NEWUSER /
10448 @end example
10450 @item --dereference
10451 @opindex --dereference
10452 @cindex symbolic links, changing owner
10453 @findex lchown
10454 Do not act on symbolic links themselves but rather on what they point to.
10455 This is the default.
10457 @item -h
10458 @itemx --no-dereference
10459 @opindex -h
10460 @opindex --no-dereference
10461 @cindex symbolic links, changing owner
10462 @findex lchown
10463 Act on symbolic links themselves instead of what they point to.
10464 This mode relies on the @code{lchown} system call.
10465 On systems that do not provide the @code{lchown} system call,
10466 @command{chown} fails when a file specified on the command line
10467 is a symbolic link.
10468 By default, no diagnostic is issued for symbolic links encountered
10469 during a recursive traversal, but see @option{--verbose}.
10471 @item --preserve-root
10472 @opindex --preserve-root
10473 @cindex root directory, disallow recursive modification
10474 Fail upon any attempt to recursively change the root directory, @file{/}.
10475 Without @option{--recursive}, this option has no effect.
10476 @xref{Treating / specially}.
10478 @item --no-preserve-root
10479 @opindex --no-preserve-root
10480 @cindex root directory, allow recursive modification
10481 Cancel the effect of any preceding @option{--preserve-root} option.
10482 @xref{Treating / specially}.
10484 @item --reference=@var{ref_file}
10485 @opindex --reference
10486 Change the user and group of each @var{file} to be the same as those of
10487 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
10488 user and group of the symbolic link, but rather those of the file it
10489 refers to.
10491 @item -v
10492 @itemx --verbose
10493 @opindex -v
10494 @opindex --verbose
10495 Output a diagnostic for every file processed.
10496 If a symbolic link is encountered during a recursive traversal
10497 on a system without the @code{lchown} system call, and @option{--no-dereference}
10498 is in effect, then issue a diagnostic saying neither the symbolic link nor
10499 its referent is being changed.
10501 @item -R
10502 @itemx --recursive
10503 @opindex -R
10504 @opindex --recursive
10505 @cindex recursively changing file ownership
10506 Recursively change ownership of directories and their contents.
10508 @choptH
10509 @xref{Traversing symlinks}.
10511 @choptL
10512 @xref{Traversing symlinks}.
10514 @choptP
10515 @xref{Traversing symlinks}.
10517 @end table
10519 @exitstatus
10521 Examples:
10523 @smallexample
10524 # Change the owner of /u to "root".
10525 chown root /u
10527 # Likewise, but also change its group to "staff".
10528 chown root:staff /u
10530 # Change the owner of /u and subfiles to "root".
10531 chown -hR root /u
10532 @end smallexample
10535 @node chgrp invocation
10536 @section @command{chgrp}: Change group ownership
10538 @pindex chgrp
10539 @cindex group ownership, changing
10540 @cindex changing group ownership
10542 @command{chgrp} changes the group ownership of each given @var{file}
10543 to @var{group} (which can be either a group name or a numeric group ID)
10544 or to the group of an existing reference file.  @xref{chown invocation}.
10545 Synopsis:
10547 @example
10548 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@}@c
10549  @var{file}@dots{}
10550 @end example
10552 If @var{group} is intended to represent a
10553 numeric group ID, then you may specify it with a leading @samp{+}.
10554 @xref{Disambiguating names and IDs}.
10556 @chownGroupRestrictions
10558 The program accepts the following options.  Also see @ref{Common options}.
10560 @table @samp
10562 @item -c
10563 @itemx --changes
10564 @opindex -c
10565 @opindex --changes
10566 @cindex changed files, verbosely describing
10567 Verbosely describe the action for each @var{file} whose group actually
10568 changes.
10570 @item -f
10571 @itemx --silent
10572 @itemx --quiet
10573 @opindex -f
10574 @opindex --silent
10575 @opindex --quiet
10576 @cindex error messages, omitting
10577 Do not print error messages about files whose group cannot be
10578 changed.
10580 @item --dereference
10581 @opindex --dereference
10582 @cindex symbolic links, changing owner
10583 @findex lchown
10584 Do not act on symbolic links themselves but rather on what they point to.
10585 This is the default.
10587 @item -h
10588 @itemx --no-dereference
10589 @opindex -h
10590 @opindex --no-dereference
10591 @cindex symbolic links, changing group
10592 @findex lchown
10593 Act on symbolic links themselves instead of what they point to.
10594 This mode relies on the @code{lchown} system call.
10595 On systems that do not provide the @code{lchown} system call,
10596 @command{chgrp} fails when a file specified on the command line
10597 is a symbolic link.
10598 By default, no diagnostic is issued for symbolic links encountered
10599 during a recursive traversal, but see @option{--verbose}.
10601 @item --preserve-root
10602 @opindex --preserve-root
10603 @cindex root directory, disallow recursive modification
10604 Fail upon any attempt to recursively change the root directory, @file{/}.
10605 Without @option{--recursive}, this option has no effect.
10606 @xref{Treating / specially}.
10608 @item --no-preserve-root
10609 @opindex --no-preserve-root
10610 @cindex root directory, allow recursive modification
10611 Cancel the effect of any preceding @option{--preserve-root} option.
10612 @xref{Treating / specially}.
10614 @item --reference=@var{ref_file}
10615 @opindex --reference
10616 Change the group of each @var{file} to be the same as that of
10617 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
10618 group of the symbolic link, but rather that of the file it refers to.
10620 @item -v
10621 @itemx --verbose
10622 @opindex -v
10623 @opindex --verbose
10624 Output a diagnostic for every file processed.
10625 If a symbolic link is encountered during a recursive traversal
10626 on a system without the @code{lchown} system call, and @option{--no-dereference}
10627 is in effect, then issue a diagnostic saying neither the symbolic link nor
10628 its referent is being changed.
10630 @item -R
10631 @itemx --recursive
10632 @opindex -R
10633 @opindex --recursive
10634 @cindex recursively changing group ownership
10635 Recursively change the group ownership of directories and their contents.
10637 @choptH
10638 @xref{Traversing symlinks}.
10640 @choptL
10641 @xref{Traversing symlinks}.
10643 @choptP
10644 @xref{Traversing symlinks}.
10646 @end table
10648 @exitstatus
10650 Examples:
10652 @smallexample
10653 # Change the group of /u to "staff".
10654 chgrp staff /u
10656 # Change the group of /u and subfiles to "staff".
10657 chgrp -hR staff /u
10658 @end smallexample
10661 @node chmod invocation
10662 @section @command{chmod}: Change access permissions
10664 @pindex chmod
10665 @cindex changing access permissions
10666 @cindex access permissions, changing
10667 @cindex permissions, changing access
10669 @command{chmod} changes the access permissions of the named files.  Synopsis:
10671 @example
10672 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@}@c
10673  @var{file}@dots{}
10674 @end example
10676 @cindex symbolic links, permissions of
10677 @command{chmod} never changes the permissions of symbolic links, since
10678 the @command{chmod} system call cannot change their permissions.
10679 This is not a problem since the permissions of symbolic links are
10680 never used.  However, for each symbolic link listed on the command
10681 line, @command{chmod} changes the permissions of the pointed-to file.
10682 In contrast, @command{chmod} ignores symbolic links encountered during
10683 recursive directory traversals.
10685 A successful use of @command{chmod} clears the set-group-ID bit of a
10686 regular file if the file's group ID does not match the user's
10687 effective group ID or one of the user's supplementary group IDs,
10688 unless the user has appropriate privileges.  Additional restrictions
10689 may cause the set-user-ID and set-group-ID bits of @var{mode} or
10690 @var{ref_file} to be ignored.  This behavior depends on the policy and
10691 functionality of the underlying @code{chmod} system call.  When in
10692 doubt, check the underlying system behavior.
10694 If used, @var{mode} specifies the new file mode bits.
10695 For details, see the section on @ref{File permissions}.
10696 If you really want @var{mode} to have a leading @samp{-}, you should
10697 use @option{--} first, e.g., @samp{chmod -- -w file}.  Typically,
10698 though, @samp{chmod a-w file} is preferable, and @command{chmod -w
10699 file} (without the @option{--}) complains if it behaves differently
10700 from what @samp{chmod a-w file} would do.
10702 The program accepts the following options.  Also see @ref{Common options}.
10704 @table @samp
10706 @item -c
10707 @itemx --changes
10708 @opindex -c
10709 @opindex --changes
10710 Verbosely describe the action for each @var{file} whose permissions
10711 actually changes.
10713 @item -f
10714 @itemx --silent
10715 @itemx --quiet
10716 @opindex -f
10717 @opindex --silent
10718 @opindex --quiet
10719 @cindex error messages, omitting
10720 Do not print error messages about files whose permissions cannot be
10721 changed.
10723 @item --preserve-root
10724 @opindex --preserve-root
10725 @cindex root directory, disallow recursive modification
10726 Fail upon any attempt to recursively change the root directory, @file{/}.
10727 Without @option{--recursive}, this option has no effect.
10728 @xref{Treating / specially}.
10730 @item --no-preserve-root
10731 @opindex --no-preserve-root
10732 @cindex root directory, allow recursive modification
10733 Cancel the effect of any preceding @option{--preserve-root} option.
10734 @xref{Treating / specially}.
10736 @item -v
10737 @itemx --verbose
10738 @opindex -v
10739 @opindex --verbose
10740 Verbosely describe the action or non-action taken for every @var{file}.
10742 @item --reference=@var{ref_file}
10743 @opindex --reference
10744 Change the mode of each @var{file} to be the same as that of @var{ref_file}.
10745 @xref{File permissions}.
10746 If @var{ref_file} is a symbolic link, do not use the mode
10747 of the symbolic link, but rather that of the file it refers to.
10749 @item -R
10750 @itemx --recursive
10751 @opindex -R
10752 @opindex --recursive
10753 @cindex recursively changing access permissions
10754 Recursively change permissions of directories and their contents.
10756 @end table
10758 @exitstatus
10761 @node touch invocation
10762 @section @command{touch}: Change file timestamps
10764 @pindex touch
10765 @cindex changing file timestamps
10766 @cindex file timestamps, changing
10767 @cindex timestamps, changing file
10769 @command{touch} changes the access and/or modification times of the
10770 specified files.  Synopsis:
10772 @example
10773 touch [@var{option}]@dots{} @var{file}@dots{}
10774 @end example
10776 @cindex empty files, creating
10777 Any @var{file} argument that does not exist is created empty, unless
10778 option @option{--no-create} (@option{-c}) or @option{--no-dereference}
10779 (@option{-h}) was in effect.
10781 A @var{file} argument string of @samp{-} is handled specially and
10782 causes @command{touch} to change the times of the file associated with
10783 standard output.
10785 @cindex clock skew
10786 By default, @command{touch} sets file timestamps to the current time.
10787 Because @command{touch} acts on its operands left to right, the
10788 resulting timestamps of earlier and later operands may disagree.
10789 Also, the determination of what time is ``current'' depends on the
10790 platform.  Platforms with network file systems often use different
10791 clocks for the operating system and for file systems; because
10792 @command{touch} typically uses file systems' clocks by default, clock
10793 skew can cause the resulting file timestamps to appear to be in a
10794 program's ``future'' or ``past''.
10796 @cindex file timestamp resolution
10797 The @command{touch} command sets the file's timestamp to the greatest
10798 representable value that is not greater than the requested time.  This
10799 can differ from the requested time for several reasons.  First, the
10800 requested time may have a higher resolution than supported.  Second, a
10801 file system may use different resolutions for different types of
10802 times.  Third, file timestamps may use a different resolution than
10803 operating system timestamps.  Fourth, the operating system primitives
10804 used to update timestamps may employ yet a different resolution.  For
10805 example, in theory a file system might use 10-microsecond resolution
10806 for access time and 100-nanosecond resolution for modification time,
10807 and the operating system might use nanosecond resolution for the
10808 current time and microsecond resolution for the primitive that
10809 @command{touch} uses to set a file's timestamp to an arbitrary value.
10811 @cindex permissions, for changing file timestamps
10812 When setting file timestamps to the current time, @command{touch} can
10813 change the timestamps for files that the user does not own but has
10814 write permission for.  Otherwise, the user must own the files.  Some
10815 older systems have a further restriction: the user must own the files
10816 unless both the access and modification times are being set to the
10817 current time.
10819 Although @command{touch} provides options for changing two of the times---the
10820 times of last access and modification---of a file, there is actually
10821 a standard third one as well: the inode change time.  This is often
10822 referred to as a file's @code{ctime}.
10823 The inode change time represents the time when the file's meta-information
10824 last changed.  One common example of this is when the permissions of a
10825 file change.  Changing the permissions doesn't access the file, so
10826 the atime doesn't change, nor does it modify the file, so the mtime
10827 doesn't change.  Yet, something about the file itself has changed,
10828 and this must be noted somewhere.  This is the job of the ctime field.
10829 This is necessary, so that, for example, a backup program can make a
10830 fresh copy of the file, including the new permissions value.
10831 Another operation that modifies a file's ctime without affecting
10832 the others is renaming.  In any case, it is not possible, in normal
10833 operations, for a user to change the ctime field to a user-specified value.
10834 Some operating systems and file systems support a fourth time: the
10835 birth time, when the file was first created; by definition, this
10836 timestamp never changes.
10838 @vindex TZ
10839 Time stamps assume the time zone rules specified by the @env{TZ}
10840 environment variable, or by the system default rules if @env{TZ} is
10841 not set.  @xref{TZ Variable,, Specifying the Time Zone with @env{TZ},
10842 libc, The GNU C Library Reference Manual}.
10843 You can avoid ambiguities during
10844 daylight saving transitions by using UTC time stamps.
10846 The program accepts the following options.  Also see @ref{Common options}.
10848 @table @samp
10850 @item -a
10851 @itemx --time=atime
10852 @itemx --time=access
10853 @itemx --time=use
10854 @opindex -a
10855 @opindex --time
10856 @opindex atime@r{, changing}
10857 @opindex access @r{time, changing}
10858 @opindex use @r{time, changing}
10859 Change the access time only.
10861 @item -c
10862 @itemx --no-create
10863 @opindex -c
10864 @opindex --no-create
10865 Do not warn about or create files that do not exist.
10867 @item -d @var{time}
10868 @itemx --date=@var{time}
10869 @opindex -d
10870 @opindex --date
10871 @opindex time
10872 Use @var{time} instead of the current time.  It can contain month names,
10873 time zones, @samp{am} and @samp{pm}, @samp{yesterday}, etc.  For
10874 example, @option{--date="2004-02-27 14:19:13.489392193 +0530"}
10875 specifies the instant of time that is 489,392,193 nanoseconds after
10876 February 27, 2004 at 2:19:13 PM in a time zone that is 5 hours and 30
10877 minutes east of UTC@.  @xref{Date input formats}.
10878 File systems that do not support high-resolution time stamps
10879 silently ignore any excess precision here.
10881 @item -f
10882 @opindex -f
10883 @cindex BSD @command{touch} compatibility
10884 Ignored; for compatibility with BSD versions of @command{touch}.
10886 @item -h
10887 @itemx --no-dereference
10888 @opindex -h
10889 @opindex --no-dereference
10890 @cindex symbolic links, changing time
10891 @findex lutimes
10892 Attempt to change the timestamps of a symbolic link, rather than what
10893 the link refers to.  When using this option, empty files are not
10894 created, but option @option{-c} must also be used to avoid warning
10895 about files that do not exist.  Not all systems support changing the
10896 timestamps of symlinks, since underlying system support for this
10897 action was not required until POSIX 2008.  Also, on some
10898 systems, the mere act of examining a symbolic link changes the access
10899 time, such that only changes to the modification time will persist
10900 long enough to be observable.  When coupled with option @option{-r}, a
10901 reference timestamp is taken from a symbolic link rather than the file
10902 it refers to.
10904 @item -m
10905 @itemx --time=mtime
10906 @itemx --time=modify
10907 @opindex -m
10908 @opindex --time
10909 @opindex mtime@r{, changing}
10910 @opindex modify @r{time, changing}
10911 Change the modification time only.
10913 @item -r @var{file}
10914 @itemx --reference=@var{file}
10915 @opindex -r
10916 @opindex --reference
10917 Use the times of the reference @var{file} instead of the current time.
10918 If this option is combined with the @option{--date=@var{time}}
10919 (@option{-d @var{time}}) option, the reference @var{file}'s time is
10920 the origin for any relative @var{time}s given, but is otherwise ignored.
10921 For example, @samp{-r foo -d '-5 seconds'} specifies a time stamp
10922 equal to five seconds before the corresponding time stamp for @file{foo}.
10923 If @var{file} is a symbolic link, the reference timestamp is taken
10924 from the target of the symlink, unless @option{-h} was also in effect.
10926 @item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
10927 @cindex leap seconds
10928 Use the argument (optional four-digit or two-digit years, months,
10929 days, hours, minutes, optional seconds) instead of the current time.
10930 If the year is specified with only two digits, then @var{cc}
10931 is 20 for years in the range 0 @dots{} 68, and 19 for years in
10932 69 @dots{} 99.  If no digits of the year are specified,
10933 the argument is interpreted as a date in the current year.
10934 On the atypical systems that support leap seconds, @var{ss} may be
10935 @samp{60}.
10937 @end table
10939 @vindex _POSIX2_VERSION
10940 On older systems, @command{touch} supports an obsolete syntax, as follows.
10941 If no timestamp is given with any of the @option{-d}, @option{-r}, or
10942 @option{-t} options, and if there are two or more @var{file}s and the
10943 first @var{file} is of the form @samp{@var{mmddhhmm}[@var{yy}]} and this
10944 would be a valid argument to the @option{-t} option (if the @var{yy}, if
10945 any, were moved to the front), and if the represented year
10946 is in the range 1969--1999, that argument is interpreted as the time
10947 for the other files instead of as a file name.
10948 This obsolete behavior can be enabled or disabled with the
10949 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
10950 conformance}), but portable scripts should avoid commands whose
10951 behavior depends on this variable.
10952 For example, use @samp{touch ./12312359 main.c} or @samp{touch -t
10953 12312359 main.c} rather than the ambiguous @samp{touch 12312359 main.c}.
10955 @exitstatus
10958 @node Disk usage
10959 @chapter Disk usage
10961 @cindex disk usage
10963 No disk can hold an infinite amount of data.  These commands report
10964 how much disk storage is in use or available, report other file and
10965 file status information, and write buffers to disk.
10967 @menu
10968 * df invocation::               Report file system disk space usage.
10969 * du invocation::               Estimate file space usage.
10970 * stat invocation::             Report file or file system status.
10971 * sync invocation::             Synchronize cached writes to persistent storage.
10972 * truncate invocation::         Shrink or extend the size of a file.
10973 @end menu
10976 @node df invocation
10977 @section @command{df}: Report file system disk space usage
10979 @pindex df
10980 @cindex file system disk usage
10981 @cindex disk usage by file system
10983 @command{df} reports the amount of disk space used and available on
10984 file systems.  Synopsis:
10986 @example
10987 df [@var{option}]@dots{} [@var{file}]@dots{}
10988 @end example
10990 With no arguments, @command{df} reports the space used and available on all
10991 currently mounted file systems (of all types).  Otherwise, @command{df}
10992 reports on the file system containing each argument @var{file}.
10994 Normally the disk space is printed in units of
10995 1024 bytes, but this can be overridden (@pxref{Block size}).
10996 Non-integer quantities are rounded up to the next higher unit.
10998 For bind mounts and without arguments, @command{df} only outputs the statistics
10999 for that device with the shortest mount point name in the list of file systems
11000 (@var{mtab}), i.e., it hides duplicate entries, unless the @option{-a} option is
11001 specified.
11003 With the same logic, @command{df} elides a mount entry of a dummy pseudo device
11004 if there is another mount entry of a real block device for that mount point with
11005 the same device number, e.g. the early-boot pseudo file system @samp{rootfs} is
11006 not shown per default when already the real root device has been mounted.
11008 @cindex disk device file
11009 @cindex device file, disk
11010 If an argument @var{file} resolves to a special file containing
11011 a mounted file system, @command{df} shows the space available on that
11012 file system rather than on the file system containing the device node.
11013 GNU @command{df} does not attempt to determine the disk usage
11014 on unmounted file systems, because on most kinds of systems doing so
11015 requires extremely nonportable intimate knowledge of file system structures.
11017 The program accepts the following options.  Also see @ref{Common options}.
11019 @table @samp
11021 @item -a
11022 @itemx --all
11023 @opindex -a
11024 @opindex --all
11025 @cindex ignore file systems
11026 Include in the listing dummy, duplicate, or inaccessible file systems, which
11027 are omitted by default.  Dummy file systems are typically special purpose
11028 pseudo file systems such as @samp{/proc}, with no associated storage.
11029 Duplicate file systems are local or remote file systems that are mounted
11030 at separate locations in the local file hierarchy, or bind mounted locations.
11031 Inaccessible file systems are those which are mounted but subsequently
11032 over-mounted by another file system at that point, or otherwise inaccessible
11033 due to permissions of the mount point etc.
11035 @item -B @var{size}
11036 @itemx --block-size=@var{size}
11037 @opindex -B
11038 @opindex --block-size
11039 @cindex file system sizes
11040 Scale sizes by @var{size} before printing them (@pxref{Block size}).
11041 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
11043 @optHumanReadable
11045 @item -H
11046 @opindex -H
11047 Equivalent to @option{--si}.
11049 @item -i
11050 @itemx --inodes
11051 @opindex -i
11052 @opindex --inodes
11053 @cindex inode usage
11054 List inode usage information instead of block usage.  An inode (short
11055 for index node) contains information about a file such as its owner,
11056 permissions, timestamps, and location on the disk.
11058 @item -k
11059 @opindex -k
11060 @cindex kibibytes for file system sizes
11061 Print sizes in 1024-byte blocks, overriding the default block size
11062 (@pxref{Block size}).
11063 This option is equivalent to @option{--block-size=1K}.
11065 @item -l
11066 @itemx --local
11067 @opindex -l
11068 @opindex --local
11069 @cindex file system types, limiting output to certain
11070 Limit the listing to local file systems.  By default, remote file systems
11071 are also listed.
11073 @item --no-sync
11074 @opindex --no-sync
11075 @cindex file system space, retrieving old data more quickly
11076 Do not invoke the @code{sync} system call before getting any usage data.
11077 This may make @command{df} run significantly faster on systems with many
11078 disks, but on some systems (notably SunOS) the results may be slightly
11079 out of date.  This is the default.
11081 @item --output
11082 @itemx --output[=@var{field_list}]
11083 @opindex --output
11084 Use the output format defined by @var{field_list}, or print all fields if
11085 @var{field_list} is omitted.  In the latter case, the order of the columns
11086 conforms to the order of the field descriptions below.
11088 The use of the @option{--output} together with each of the options @option{-i},
11089 @option{-P}, and @option{-T} is mutually exclusive.
11091 FIELD_LIST is a comma-separated list of columns to be included in @command{df}'s
11092 output and therefore effectively controls the order of output columns.
11093 Each field can thus be used at the place of choice, but yet must only be
11094 used once.
11096 Valid field names in the @var{field_list} are:
11097 @table @samp
11098 @item source
11099 The source of the mount point, usually a device.
11100 @item fstype
11101 File system type.
11103 @item itotal
11104 Total number of inodes.
11105 @item iused
11106 Number of used inodes.
11107 @item iavail
11108 Number of available inodes.
11109 @item ipcent
11110 Percentage of @var{iused} divided by @var{itotal}.
11112 @item size
11113 Total number of blocks.
11114 @item used
11115 Number of used blocks.
11116 @item avail
11117 Number of available blocks.
11118 @item pcent
11119 Percentage of @var{used} divided by @var{size}.
11121 @item file
11122 The file name if specified on the command line.
11123 @item target
11124 The mount point.
11125 @end table
11127 The fields for block and inodes statistics are affected by the scaling
11128 options like @option{-h} as usual.
11130 The definition of the @var{field_list} can even be split among several
11131 @option{--output} uses.
11133 @example
11134 #!/bin/sh
11135 # Print the TARGET (i.e., the mount point) along with their percentage
11136 # statistic regarding the blocks and the inodes.
11137 df --out=target --output=pcent,ipcent
11139 # Print all available fields.
11140 df --o
11141 @end example
11144 @item -P
11145 @itemx --portability
11146 @opindex -P
11147 @opindex --portability
11148 @cindex one-line output format
11149 @cindex POSIX output format
11150 @cindex portable output format
11151 @cindex output format, portable
11152 Use the POSIX output format.  This is like the default format except
11153 for the following:
11155 @enumerate
11156 @item
11157 The information about each file system is always printed on exactly
11158 one line; a mount device is never put on a line by itself.  This means
11159 that if the mount device name is more than 20 characters long (e.g., for
11160 some network mounts), the columns are misaligned.
11162 @item
11163 The labels in the header output line are changed to conform to POSIX.
11165 @item
11166 The default block size and output format are unaffected by the
11167 @env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE} and @env{BLOCKSIZE} environment
11168 variables.  However, the default block size is still affected by
11169 @env{POSIXLY_CORRECT}: it is 512 if @env{POSIXLY_CORRECT} is set, 1024
11170 otherwise.  @xref{Block size}.
11171 @end enumerate
11173 @optSi
11175 @item --sync
11176 @opindex --sync
11177 @cindex file system space, retrieving current data more slowly
11178 Invoke the @code{sync} system call before getting any usage data.  On
11179 some systems (notably SunOS), doing this yields more up to date results,
11180 but in general this option makes @command{df} much slower, especially when
11181 there are many or very busy file systems.
11183 @item --total
11184 @opindex --total
11185 @cindex grand total of disk size, usage and available space
11186 Print a grand total of all arguments after all arguments have
11187 been processed.  This can be used to find out the total disk size, usage
11188 and available space of all listed devices.  If no arguments are specified
11189 df will try harder to elide file systems insignificant to the total
11190 available space, by suppressing duplicate remote file systems.
11192 For the grand total line, @command{df} prints @samp{"total"} into the
11193 @var{source} column, and @samp{"-"} into the @var{target} column.
11194 If there is no @var{source} column (see @option{--output}), then
11195 @command{df} prints @samp{"total"} into the @var{target} column,
11196 if present.
11198 @item -t @var{fstype}
11199 @itemx --type=@var{fstype}
11200 @opindex -t
11201 @opindex --type
11202 @cindex file system types, limiting output to certain
11203 Limit the listing to file systems of type @var{fstype}.  Multiple
11204 file system types can be specified by giving multiple @option{-t} options.
11205 By default, nothing is omitted.
11207 @item -T
11208 @itemx --print-type
11209 @opindex -T
11210 @opindex --print-type
11211 @cindex file system types, printing
11212 Print each file system's type.  The types printed here are the same ones
11213 you can include or exclude with @option{-t} and @option{-x}.  The particular
11214 types printed are whatever is supported by the system.  Here are some of
11215 the common names (this list is certainly not exhaustive):
11217 @table @samp
11219 @item nfs
11220 @cindex NFS file system type
11221 An NFS file system, i.e., one mounted over a network from another
11222 machine.  This is the one type name which seems to be used uniformly by
11223 all systems.
11225 @item ext2@r{, }ext3@r{, }ext4@r{, }xfs@r{, }btrfs@dots{}
11226 @cindex Linux file system types
11227 @cindex local file system types
11228 @opindex ext2 @r{file system type}
11229 @opindex ext3 @r{file system type}
11230 @opindex ext4 @r{file system type}
11231 @opindex xfs @r{file system type}
11232 @opindex btrfs @r{file system type}
11233 A file system on a locally-mounted hard disk.  (The system might even
11234 support more than one type here; Linux does.)
11236 @item iso9660@r{, }cdfs
11237 @cindex CD-ROM file system type
11238 @cindex DVD file system type
11239 @cindex ISO9660 file system type
11240 @opindex iso9660 @r{file system type}
11241 @opindex cdfs @r{file system type}
11242 A file system on a CD or DVD drive.  HP-UX uses @samp{cdfs}, most other
11243 systems use @samp{iso9660}.
11245 @item ntfs@r{,}fat
11246 @cindex NTFS file system
11247 @cindex DOS file system
11248 @cindex MS-DOS file system
11249 @cindex MS-Windows file system
11250 @opindex ntfs @r{file system file}
11251 @opindex fat @r{file system file}
11252 File systems used by MS-Windows / MS-DOS.
11254 @end table
11256 @item -x @var{fstype}
11257 @itemx --exclude-type=@var{fstype}
11258 @opindex -x
11259 @opindex --exclude-type
11260 Limit the listing to file systems not of type @var{fstype}.
11261 Multiple file system types can be eliminated by giving multiple
11262 @option{-x} options.  By default, no file system types are omitted.
11264 @item -v
11265 Ignored; for compatibility with System V versions of @command{df}.
11267 @end table
11269 @command{df} is installed only on systems that have usable mount tables,
11270 so portable scripts should not rely on its existence.
11272 @exitstatus
11273 Failure includes the case where no output is generated, so you can
11274 inspect the exit status of a command like @samp{df -t ext3 -t reiserfs
11275 @var{dir}} to test whether @var{dir} is on a file system of type
11276 @samp{ext3} or @samp{reiserfs}.
11278 Since the list of file systems (@var{mtab}) is needed to determine the
11279 file system type, failure includes the cases when that list cannot
11280 be read and one or more of the options @option{-a}, @option{-l}, @option{-t}
11281 or @option{-x} is used together with a file name argument.
11284 @node du invocation
11285 @section @command{du}: Estimate file space usage
11287 @pindex du
11288 @cindex file space usage
11289 @cindex disk usage for files
11291 @command{du} reports the amount of disk space used by the set of specified files
11292 and for each subdirectory (of directory arguments).  Synopsis:
11294 @example
11295 du [@var{option}]@dots{} [@var{file}]@dots{}
11296 @end example
11298 With no arguments, @command{du} reports the disk space for the current
11299 directory.  Normally the disk space is printed in units of
11300 1024 bytes, but this can be overridden (@pxref{Block size}).
11301 Non-integer quantities are rounded up to the next higher unit.
11303 If two or more hard links point to the same file, only one of the hard
11304 links is counted.  The @var{file} argument order affects which links
11305 are counted, and changing the argument order may change the numbers
11306 and entries that @command{du} outputs.
11308 The program accepts the following options.  Also see @ref{Common options}.
11310 @table @samp
11312 @optNull
11314 @item -a
11315 @itemx --all
11316 @opindex -a
11317 @opindex --all
11318 Show counts for all files, not just directories.
11320 @item --apparent-size
11321 @opindex --apparent-size
11322 Print apparent sizes, rather than disk usage.  The apparent size of a
11323 file is the number of bytes reported by @code{wc -c} on regular files,
11324 or more generally, @code{ls -l --block-size=1} or @code{stat --format=%s}.
11325 For example, a file containing the word @samp{zoo} with no newline would,
11326 of course, have an apparent size of 3.  Such a small file may require
11327 anywhere from 0 to 16 KiB or more of disk space, depending on
11328 the type and configuration of the file system on which the file resides.
11329 However, a sparse file created with this command:
11331 @example
11332 dd bs=1 seek=2GiB if=/dev/null of=big
11333 @end example
11335 @noindent
11336 has an apparent size of 2 GiB, yet on most modern
11337 systems, it actually uses almost no disk space.
11339 @item -B @var{size}
11340 @itemx --block-size=@var{size}
11341 @opindex -B
11342 @opindex --block-size
11343 @cindex file sizes
11344 Scale sizes by @var{size} before printing them (@pxref{Block size}).
11345 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
11347 @item -b
11348 @itemx --bytes
11349 @opindex -b
11350 @opindex --bytes
11351 Equivalent to @code{--apparent-size --block-size=1}.
11353 @item -c
11354 @itemx --total
11355 @opindex -c
11356 @opindex --total
11357 @cindex grand total of disk space
11358 Print a grand total of all arguments after all arguments have
11359 been processed.  This can be used to find out the total disk usage of
11360 a given set of files or directories.
11362 @item -D
11363 @itemx --dereference-args
11364 @opindex -D
11365 @opindex --dereference-args
11366 Dereference symbolic links that are command line arguments.
11367 Does not affect other symbolic links.  This is helpful for finding
11368 out the disk usage of directories, such as @file{/usr/tmp}, which
11369 are often symbolic links.
11371 @item -d @var{depth}
11372 @itemx --max-depth=@var{depth}
11373 @opindex -d @var{depth}
11374 @opindex --max-depth=@var{depth}
11375 @cindex limiting output of @command{du}
11376 Show the total for each directory (and file if --all) that is at
11377 most MAX_DEPTH levels down from the root of the hierarchy.  The root
11378 is at level 0, so @code{du --max-depth=0} is equivalent to @code{du -s}.
11380 @c --files0-from=FILE
11381 @filesZeroFromOption{du,, with the @option{--total} (@option{-c}) option}
11383 @item -H
11384 @opindex -H
11385 Equivalent to @option{--dereference-args} (@option{-D}).
11387 @optHumanReadable
11389 @item --inodes
11390 @opindex --inodes
11391 @cindex inode usage, dereferencing in @command{du}
11392 List inode usage information instead of block usage.
11393 This option is useful for finding directories which contain many files, and
11394 therefore eat up most of the inodes space of a file system (see @command{df},
11395 option @option{--inodes}).
11396 It can well be combined with the options @option{-a}, @option{-c},
11397 @option{-h}, @option{-l}, @option{-s}, @option{-S}, @option{-t} and
11398 @option{-x}; however, passing other options regarding the block size, for
11399 example @option{-b}, @option{-m} and @option{--apparent-size}, is ignored.
11401 @item -k
11402 @opindex -k
11403 @cindex kibibytes for file sizes
11404 Print sizes in 1024-byte blocks, overriding the default block size
11405 (@pxref{Block size}).
11406 This option is equivalent to @option{--block-size=1K}.
11408 @item -L
11409 @itemx --dereference
11410 @opindex -L
11411 @opindex --dereference
11412 @cindex symbolic links, dereferencing in @command{du}
11413 Dereference symbolic links (show the disk space used by the file
11414 or directory that the link points to instead of the space used by
11415 the link).
11417 @item -l
11418 @itemx --count-links
11419 @opindex -l
11420 @opindex --count-links
11421 @cindex hard links, counting in @command{du}
11422 Count the size of all files, even if they have appeared already (as a
11423 hard link).
11425 @item -m
11426 @opindex -m
11427 @cindex mebibytes for file sizes
11428 Print sizes in 1,048,576-byte blocks, overriding the default block size
11429 (@pxref{Block size}).
11430 This option is equivalent to @option{--block-size=1M}.
11432 @item -P
11433 @itemx --no-dereference
11434 @opindex -P
11435 @opindex --no-dereference
11436 @cindex symbolic links, dereferencing in @command{du}
11437 For each symbolic links encountered by @command{du},
11438 consider the disk space used by the symbolic link.
11440 @item -S
11441 @itemx --separate-dirs
11442 @opindex -S
11443 @opindex --separate-dirs
11444 Normally, in the output of @command{du} (when not using @option{--summarize}),
11445 the size listed next to a directory name, @var{d}, represents the sum
11446 of sizes of all entries beneath @var{d} as well as the size of @var{d} itself.
11447 With @option{--separate-dirs}, the size reported for a directory name,
11448 @var{d}, will exclude the size of any subdirectories.
11450 @optSi
11452 @item -s
11453 @itemx --summarize
11454 @opindex -s
11455 @opindex --summarize
11456 Display only a total for each argument.
11458 @item -t @var{size}
11459 @itemx --threshold=@var{size}
11460 @opindex -t
11461 @opindex --threshold
11462 Exclude entries based on a given @var{size}.  The @var{size} refers to used
11463 blocks in normal mode (@pxref{Block size}), or inodes count in conjunction
11464 with the @option{--inodes} option.
11466 If @var{size} is positive, then @command{du} will only print entries with a size
11467 greater than or equal to that.
11469 If @var{size} is negative, then @command{du} will only print entries with a size
11470 smaller than or equal to that.
11472 Although GNU @command{find} can be used to find files of a certain size,
11473 @command{du}'s @option{--threshold} option can be used to also filter
11474 directories based on a given size.
11476 Please note that the @option{--threshold} option can be combined with the
11477 @option{--apparent-size} option, and in this case would elide entries based on
11478 its apparent size.
11480 Please note that the @option{--threshold} option can be combined with the
11481 @option{--inodes} option, and in this case would elide entries based on
11482 its inodes count.
11484 Here's how you would use @option{--threshold} to find directories with a size
11485 greater than or equal to 200 megabytes:
11487 @example
11488 du --threshold=200MB
11489 @end example
11491 Here's how you would use @option{--threshold} to find directories and files -
11492 note the @option{-a} - with an apparent size smaller than or equal to 500 bytes:
11494 @example
11495 du -a -t -500 --apparent-size
11496 @end example
11498 Here's how you would use @option{--threshold} to find directories on the root
11499 file system with more than 20000 inodes used in the directory tree below:
11501 @example
11502 du --inodes -x --threshold=20000 /
11503 @end example
11506 @item --time
11507 @opindex --time
11508 @cindex last modified dates, displaying in @command{du}
11509 Show time of the most recent modification of any file in the directory,
11510 or any of its subdirectories.
11512 @item --time=ctime
11513 @itemx --time=status
11514 @itemx --time=use
11515 @opindex --time
11516 @opindex ctime@r{, show the most recent}
11517 @opindex status time@r{, show the most recent}
11518 @opindex use time@r{, show the most recent}
11519 Show the most recent status change time (the @samp{ctime} in the inode) of
11520 any file in the directory, instead of the modification time.
11522 @item --time=atime
11523 @itemx --time=access
11524 @opindex --time
11525 @opindex atime@r{, show the most recent}
11526 @opindex access time@r{, show the most recent}
11527 Show the most recent access time (the @samp{atime} in the inode) of
11528 any file in the directory, instead of the modification time.
11530 @item --time-style=@var{style}
11531 @opindex --time-style
11532 @cindex time style
11533 List timestamps in style @var{style}.  This option has an effect only if
11534 the @option{--time} option is also specified.  The @var{style} should
11535 be one of the following:
11537 @table @samp
11538 @item +@var{format}
11539 @vindex LC_TIME
11540 List timestamps using @var{format}, where @var{format} is interpreted
11541 like the format argument of @command{date} (@pxref{date invocation}).
11542 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
11543 @command{du} to list timestamps like @samp{2002-03-30 23:45:56}.  As
11544 with @command{date}, @var{format}'s interpretation is affected by the
11545 @env{LC_TIME} locale category.
11547 @item full-iso
11548 List timestamps in full using ISO 8601 date, time, and time zone
11549 components with nanosecond precision, e.g., @samp{2002-03-30
11550 23:45:56.477817180 -0700}.  This style is equivalent to
11551 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
11553 @item long-iso
11554 List ISO 8601 date and time components with minute precision, e.g.,
11555 @samp{2002-03-30 23:45}.  These timestamps are shorter than
11556 @samp{full-iso} timestamps, and are usually good enough for everyday
11557 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
11559 @item iso
11560 List ISO 8601 dates for timestamps, e.g., @samp{2002-03-30}.
11561 This style is equivalent to @samp{+%Y-%m-%d}.
11562 @end table
11564 @vindex TIME_STYLE
11565 You can specify the default value of the @option{--time-style} option
11566 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
11567 the default style is @samp{long-iso}.  For compatibility with @command{ls},
11568 if @env{TIME_STYLE} begins with @samp{+} and contains a newline,
11569 the newline and any later characters are ignored; if @env{TIME_STYLE}
11570 begins with @samp{posix-} the @samp{posix-} is ignored; and if
11571 @env{TIME_STYLE} is @samp{locale} it is ignored.
11573 @item -X @var{file}
11574 @itemx --exclude-from=@var{file}
11575 @opindex -X @var{file}
11576 @opindex --exclude-from=@var{file}
11577 @cindex excluding files from @command{du}
11578 Like @option{--exclude}, except take the patterns to exclude from @var{file},
11579 one per line.  If @var{file} is @samp{-}, take the patterns from standard
11580 input.
11582 @item --exclude=@var{pattern}
11583 @opindex --exclude=@var{pattern}
11584 @cindex excluding files from @command{du}
11585 When recursing, skip subdirectories or files matching @var{pattern}.
11586 For example, @code{du --exclude='*.o'} excludes files whose names
11587 end in @samp{.o}.
11589 @item -x
11590 @itemx --one-file-system
11591 @opindex -x
11592 @opindex --one-file-system
11593 @cindex one file system, restricting @command{du} to
11594 Skip directories that are on different file systems from the one that
11595 the argument being processed is on.
11597 @end table
11599 @cindex NFS mounts from BSD to HP-UX
11600 On BSD systems, @command{du} reports sizes that are half the correct
11601 values for files that are NFS-mounted from HP-UX systems.  On HP-UX
11602 systems, it reports sizes that are twice the correct values for
11603 files that are NFS-mounted from BSD systems.  This is due to a flaw
11604 in HP-UX; it also affects the HP-UX @command{du} program.
11606 @exitstatus
11609 @node stat invocation
11610 @section @command{stat}: Report file or file system status
11612 @pindex stat
11613 @cindex file status
11614 @cindex file system status
11616 @command{stat} displays information about the specified file(s).  Synopsis:
11618 @example
11619 stat [@var{option}]@dots{} [@var{file}]@dots{}
11620 @end example
11622 With no option, @command{stat} reports all information about the given files.
11623 But it also can be used to report the information of the file systems the
11624 given files are located on.  If the files are links, @command{stat} can
11625 also give information about the files the links point to.
11627 @mayConflictWithShellBuiltIn{stat}
11629 @table @samp
11631 @item -L
11632 @itemx --dereference
11633 @opindex -L
11634 @opindex --dereference
11635 @cindex symbolic links, dereferencing in @command{stat}
11636 Change how @command{stat} treats symbolic links.
11637 With this option, @command{stat} acts on the file referenced
11638 by each symbolic link argument.
11639 Without it, @command{stat} acts on any symbolic link argument directly.
11641 @item -f
11642 @itemx --file-system
11643 @opindex -f
11644 @opindex --file-system
11645 @cindex file systems
11646 Report information about the file systems where the given files are located
11647 instead of information about the files themselves.
11648 This option implies the @option{-L} option.
11650 @item -c
11651 @itemx --format=@var{format}
11652 @opindex -c
11653 @opindex --format=@var{format}
11654 @cindex output format
11655 Use @var{format} rather than the default format.
11656 @var{format} is automatically newline-terminated, so
11657 running a command like the following with two or more @var{file}
11658 operands produces a line of output for each operand:
11659 @example
11660 $ stat --format=%d:%i / /usr
11661 2050:2
11662 2057:2
11663 @end example
11665 @item --printf=@var{format}
11666 @opindex --printf=@var{format}
11667 @cindex output format
11668 Use @var{format} rather than the default format.
11669 Like @option{--format}, but interpret backslash escapes,
11670 and do not output a mandatory trailing newline.
11671 If you want a newline, include @samp{\n} in the @var{format}.
11672 Here's how you would use @option{--printf} to print the device
11673 and inode numbers of @file{/} and @file{/usr}:
11674 @example
11675 $ stat --printf='%d:%i\n' / /usr
11676 2050:2
11677 2057:2
11678 @end example
11680 @item -t
11681 @itemx --terse
11682 @opindex -t
11683 @opindex --terse
11684 @cindex terse output
11685 Print the information in terse form, suitable for parsing by other programs.
11687 The output of the following commands are identical and the @option{--format}
11688 also identifies the items printed (in fuller form) in the default format.
11689 Note the format string would include another @samp{%C} at the end with an
11690 active SELinux security context.
11691 @example
11692 $ stat --format="%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" ...
11693 $ stat --terse ...
11694 @end example
11696 The same illustrating terse output in @option{--file-system} mode:
11697 @example
11698 $ stat -f --format="%n %i %l %t %s %S %b %f %a %c %d" ...
11699 $ stat -f --terse ...
11700 @end example
11701 @end table
11703 The valid @var{format} directives for files with @option{--format} and
11704 @option{--printf} are:
11706 @itemize @bullet
11707 @item %a - Access rights in octal
11708 @item %A - Access rights in human readable form
11709 @item %b - Number of blocks allocated (see @samp{%B})
11710 @item %B - The size in bytes of each block reported by @samp{%b}
11711 @item %C - The SELinux security context of a file, if available
11712 @item %d - Device number in decimal
11713 @item %D - Device number in hex
11714 @item %f - Raw mode in hex
11715 @item %F - File type
11716 @item %g - Group ID of owner
11717 @item %G - Group name of owner
11718 @item %h - Number of hard links
11719 @item %i - Inode number
11720 @item %m - Mount point (See note below)
11721 @item %n - File name
11722 @item %N - Quoted file name with dereference if symbolic link
11723 @item %o - Optimal I/O transfer size hint
11724 @item %s - Total size, in bytes
11725 @item %t - Major device type in hex (see below)
11726 @item %T - Minor device type in hex (see below)
11727 @item %u - User ID of owner
11728 @item %U - User name of owner
11729 @item %w - Time of file birth, or @samp{-} if unknown
11730 @item %W - Time of file birth as seconds since Epoch, or @samp{0}
11731 @item %x - Time of last access
11732 @item %X - Time of last access as seconds since Epoch
11733 @item %y - Time of last data modification
11734 @item %Y - Time of last data modification as seconds since Epoch
11735 @item %z - Time of last status change
11736 @item %Z - Time of last status change as seconds since Epoch
11737 @end itemize
11739 The @samp{%t} and @samp{%T} formats operate on the st_rdev member of
11740 the stat(2) structure, and are only defined for character and block
11741 special files.  On some systems or file types, st_rdev may be used to
11742 represent other quantities.
11744 The @samp{%W}, @samp{%X}, @samp{%Y}, and @samp{%Z} formats accept a
11745 precision preceded by a period to specify the number of digits to
11746 print after the decimal point.  For example, @samp{%.3X} outputs the
11747 last access time to millisecond precision.  If a period is given but no
11748 precision, @command{stat} uses 9 digits, so @samp{%.X} is equivalent to
11749 @samp{%.9X}@.  When discarding excess precision, time stamps are truncated
11750 toward minus infinity.
11752 @example
11753 zero pad:
11754   $ stat -c '[%015Y]' /usr
11755   [000001288929712]
11756 space align:
11757   $ stat -c '[%15Y]' /usr
11758   [     1288929712]
11759   $ stat -c '[%-15Y]' /usr
11760   [1288929712     ]
11761 precision:
11762   $ stat -c '[%.3Y]' /usr
11763   [1288929712.114]
11764   $ stat -c '[%.Y]' /usr
11765   [1288929712.114951834]
11766 @end example
11768 The mount point printed by @samp{%m} is similar to that output
11769 by @command{df}, except that:
11770 @itemize @bullet
11771 @item
11772 stat does not dereference symlinks by default
11773 (unless @option{-L} is specified)
11774 @item
11775 stat does not search for specified device nodes in the
11776 file system list, instead operating on them directly
11777 @item
11778 @cindex bind mount
11779 stat outputs the alias for a bind mounted file, rather than
11780 the initial mount point of its backing device.
11781 One can recursively call stat until there is no change in output,
11782 to get the current base mount point
11783 @end itemize
11785 When listing file system information (@option{--file-system} (@option{-f})),
11786 you must use a different set of @var{format} directives:
11788 @itemize @bullet
11789 @item %a - Free blocks available to non-super-user
11790 @item %b - Total data blocks in file system
11791 @item %c - Total file nodes in file system
11792 @item %d - Free file nodes in file system
11793 @item %f - Free blocks in file system
11794 @item %i - File System ID in hex
11795 @item %l - Maximum length of file names
11796 @item %n - File name
11797 @item %s - Block size (for faster transfers)
11798 @item %S - Fundamental block size (for block counts)
11799 @item %t - Type in hex
11800 @item %T - Type in human readable form
11801 @end itemize
11803 @vindex TZ
11804 Time stamps are listed according to the time zone rules specified by
11805 the @env{TZ} environment variable, or by the system default rules if
11806 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
11807 with @env{TZ}, libc, The GNU C Library Reference Manual}.
11809 @exitstatus
11812 @node sync invocation
11813 @section @command{sync}: Synchronize cached writes to persistent storage
11815 @pindex sync
11816 @cindex synchronize disk and memory
11817 @cindex Synchronize cached writes to persistent storage
11819 @command{sync} synchronizes in memory files or file systems to persistent
11820 storage.  Synopsis:
11822 @example
11823 sync [@var{option}] [@var{file}]@dots{}
11824 @end example
11826 @cindex superblock, writing
11827 @cindex inodes, written buffered
11828 @command{sync} writes any data buffered in memory out to disk.  This can
11829 include (but is not limited to) modified superblocks, modified inodes,
11830 and delayed reads and writes.  This must be implemented by the kernel;
11831 The @command{sync} program does nothing but exercise the @code{sync},
11832 @code{syncfs}, @code{fsync}, and @code{fdatasync} system calls.
11834 @cindex crashes and corruption
11835 The kernel keeps data in memory to avoid doing (relatively slow) disk
11836 reads and writes.  This improves performance, but if the computer
11837 crashes, data may be lost or the file system corrupted as a
11838 result.  The @command{sync} command instructs the kernel to write
11839 data in memory to persistent storage.
11841 If any argument is specified then only those files will be
11842 synchronized using the fsync(2) syscall by default.
11844 If at least one file is specified, it is possible to change the
11845 synchronization method with the following options.  Also see
11846 @ref{Common options}.
11848 @table @samp
11849 @item -d
11850 @itemx --data
11851 @opindex --data
11852 Use fdatasync(2) to sync only the data for the file,
11853 and any metadata required to maintain file system consistency.
11855 @item -f
11856 @itemx --file-system
11857 @opindex --file-system
11858 Synchronize all the I/O waiting for the file systems that contain the file,
11859 using the syscall syncfs(2).  Note you would usually @emph{not} specify
11860 this option if passing a device node like @samp{/dev/sda} for example,
11861 as that would sync the containing file system rather than the referenced one.
11862 Note also that depending on the system, passing individual device nodes or files
11863 may have different sync characteristics than using no arguments.
11864 I.e., arguments passed to fsync(2) may provide greater guarantees through
11865 write barriers, than a global sync(2) used when no arguments are provided.
11866 @end table
11868 @exitstatus
11871 @node truncate invocation
11872 @section @command{truncate}: Shrink or extend the size of a file
11874 @pindex truncate
11875 @cindex truncating, file sizes
11877 @command{truncate} shrinks or extends the size of each @var{file} to the
11878 specified size.  Synopsis:
11880 @example
11881 truncate @var{option}@dots{} @var{file}@dots{}
11882 @end example
11884 @cindex files, creating
11885 Any @var{file} that does not exist is created.
11887 @cindex sparse files, creating
11888 @cindex holes, creating files with
11889 If a @var{file} is larger than the specified size, the extra data is lost.
11890 If a @var{file} is shorter, it is extended and the extended part (or hole)
11891 reads as zero bytes.
11893 The program accepts the following options.  Also see @ref{Common options}.
11895 @table @samp
11897 @item -c
11898 @itemx --no-create
11899 @opindex -c
11900 @opindex --no-create
11901 Do not create files that do not exist.
11903 @item -o
11904 @itemx --io-blocks
11905 @opindex -o
11906 @opindex --io-blocks
11907 Treat @var{size} as number of I/O blocks of the @var{file} rather than bytes.
11909 @item -r @var{rfile}
11910 @itemx --reference=@var{rfile}
11911 @opindex -r
11912 @opindex --reference
11913 Base the size of each @var{file} on the size of @var{rfile}.
11915 @item -s @var{size}
11916 @itemx --size=@var{size}
11917 @opindex -s
11918 @opindex --size
11919 Set or adjust the size of each @var{file} according to @var{size}.
11920 @var{size} is in bytes unless @option{--io-blocks} is specified.
11921 @multiplierSuffixesNoBlocks{size}
11923 @var{size} may also be prefixed by one of the following to adjust
11924 the size of each @var{file} based on its current size:
11925 @example
11926 @samp{+}  => extend by
11927 @samp{-}  => reduce by
11928 @samp{<}  => at most
11929 @samp{>}  => at least
11930 @samp{/}  => round down to multiple of
11931 @samp{%}  => round up to multiple of
11932 @end example
11934 @end table
11936 @exitstatus
11939 @node Printing text
11940 @chapter Printing text
11942 @cindex printing text, commands for
11943 @cindex commands for printing text
11945 This section describes commands that display text strings.
11947 @menu
11948 * echo invocation::             Print a line of text.
11949 * printf invocation::           Format and print data.
11950 * yes invocation::              Print a string until interrupted.
11951 @end menu
11954 @node echo invocation
11955 @section @command{echo}: Print a line of text
11957 @pindex echo
11958 @cindex displaying text
11959 @cindex printing text
11960 @cindex text, displaying
11961 @cindex arbitrary text, displaying
11963 @command{echo} writes each given @var{string} to standard output, with a
11964 space between each and a newline after the last one.  Synopsis:
11966 @example
11967 echo [@var{option}]@dots{} [@var{string}]@dots{}
11968 @end example
11970 @mayConflictWithShellBuiltIn{echo}
11972 The program accepts the following options.  Also see @ref{Common options}.
11973 Options must precede operands, and the normally-special argument
11974 @samp{--} has no special meaning and is treated like any other
11975 @var{string}.
11977 @table @samp
11978 @item -n
11979 @opindex -n
11980 Do not output the trailing newline.
11982 @item -e
11983 @opindex -e
11984 @cindex backslash escapes
11985 Enable interpretation of the following backslash-escaped characters in
11986 each @var{string}:
11988 @table @samp
11989 @item \a
11990 alert (bell)
11991 @item \b
11992 backspace
11993 @item \c
11994 produce no further output
11995 @item \e
11996 escape
11997 @item \f
11998 form feed
11999 @item \n
12000 newline
12001 @item \r
12002 carriage return
12003 @item \t
12004 horizontal tab
12005 @item \v
12006 vertical tab
12007 @item \\
12008 backslash
12009 @item \0@var{nnn}
12010 the eight-bit value that is the octal number @var{nnn}
12011 (zero to three octal digits), if @var{nnn} is
12012 a nine-bit value, the ninth bit is ignored
12013 @item \@var{nnn}
12014 the eight-bit value that is the octal number @var{nnn}
12015 (one to three octal digits), if @var{nnn} is
12016 a nine-bit value, the ninth bit is ignored
12017 @item \x@var{hh}
12018 the eight-bit value that is the hexadecimal number @var{hh}
12019 (one or two hexadecimal digits)
12020 @end table
12022 @item -E
12023 @opindex -E
12024 @cindex backslash escapes
12025 Disable interpretation of backslash escapes in each @var{string}.
12026 This is the default.  If @option{-e} and @option{-E} are both
12027 specified, the last one given takes effect.
12029 @end table
12031 @vindex POSIXLY_CORRECT
12032 If the @env{POSIXLY_CORRECT} environment variable is set, then when
12033 @command{echo}'s first argument is not @option{-n} it outputs
12034 option-like arguments instead of treating them as options.  For
12035 example, @code{echo -ne hello} outputs @samp{-ne hello} instead of
12036 plain @samp{hello}.
12038 POSIX does not require support for any options, and says
12039 that the behavior of @command{echo} is implementation-defined if any
12040 @var{string} contains a backslash or if the first argument is
12041 @option{-n}.  Portable programs can use the @command{printf} command
12042 if they need to omit trailing newlines or output control characters or
12043 backslashes.  @xref{printf invocation}.
12045 @exitstatus
12048 @node printf invocation
12049 @section @command{printf}: Format and print data
12051 @pindex printf
12052 @command{printf} does formatted printing of text.  Synopsis:
12054 @example
12055 printf @var{format} [@var{argument}]@dots{}
12056 @end example
12058 @command{printf} prints the @var{format} string, interpreting @samp{%}
12059 directives and @samp{\} escapes to format numeric and string arguments
12060 in a way that is mostly similar to the C @samp{printf} function.
12061 @xref{Output Conversion Syntax,, @command{printf} format directives,
12062 libc, The GNU C Library Reference Manual}, for details.
12063 The differences are listed below.
12065 @mayConflictWithShellBuiltIn{printf}
12067 @itemize @bullet
12069 @item
12070 The @var{format} argument is reused as necessary to convert all the
12071 given @var{argument}s.  For example, the command @samp{printf %s a b}
12072 outputs @samp{ab}.
12074 @item
12075 Missing @var{argument}s are treated as null strings or as zeros,
12076 depending on whether the context expects a string or a number.  For
12077 example, the command @samp{printf %sx%d} prints @samp{x0}.
12079 @item
12080 @kindex \c
12081 An additional escape, @samp{\c}, causes @command{printf} to produce no
12082 further output.  For example, the command @samp{printf 'A%sC\cD%sF' B
12083 E} prints @samp{ABC}.
12085 @item
12086 The hexadecimal escape sequence @samp{\x@var{hh}} has at most two
12087 digits, as opposed to C where it can have an unlimited number of
12088 digits.  For example, the command @samp{printf '\x07e'} prints two
12089 bytes, whereas the C statement @samp{printf ("\x07e")} prints just
12090 one.
12092 @item
12093 @kindex %b
12094 An additional directive @samp{%b}, prints its
12095 argument string with @samp{\} escapes interpreted in the same way as in
12096 the @var{format} string, except that octal escapes are of the form
12097 @samp{\0@var{ooo}} where @var{ooo} is 0 to 3 octal digits.  If
12098 @samp{\@var{ooo}} is nine-bit value, ignore the ninth bit.
12099 If a precision is also given, it limits the number of bytes printed
12100 from the converted string.
12102 @item
12103 @kindex %q
12104 An additional directive @samp{%q}, prints its argument string
12105 in a format that can be reused as input by most shells.
12106 Non-printable characters are escaped with the POSIX proposed @samp{$''} syntax,
12107 and shell metacharacters are quoted appropriately.
12108 This is an equivalent format to @command{ls --quoting=shell-escape} output.
12110 @item
12111 Numeric arguments must be single C constants, possibly with leading
12112 @samp{+} or @samp{-}.  For example, @samp{printf %.4d -3} outputs
12113 @samp{-0003}.
12115 @item
12116 @vindex POSIXLY_CORRECT
12117 If the leading character of a numeric argument is @samp{"} or @samp{'}
12118 then its value is the numeric value of the immediately following
12119 character.  Any remaining characters are silently ignored if the
12120 @env{POSIXLY_CORRECT} environment variable is set; otherwise, a
12121 warning is printed.  For example, @samp{printf "%d" "'a"} outputs
12122 @samp{97} on hosts that use the ASCII character set, since
12123 @samp{a} has the numeric value 97 in ASCII.
12125 @end itemize
12127 @vindex LC_NUMERIC
12128 A floating-point argument must use a period before any fractional
12129 digits, but is printed according to the @env{LC_NUMERIC} category of the
12130 current locale.  For example, in a locale whose radix character is a
12131 comma, the command @samp{printf %g 3.14} outputs @samp{3,14} whereas
12132 the command @samp{printf %g 3,14} is an error.
12133 @xref{Floating point}.
12135 @kindex \@var{ooo}
12136 @kindex \x@var{hh}
12137 @command{printf} interprets @samp{\@var{ooo}} in @var{format} as an octal number
12138 (if @var{ooo} is 1 to 3 octal digits) specifying a byte to print,
12139 and @samp{\x@var{hh}} as a hexadecimal number (if @var{hh} is 1 to 2 hex
12140 digits) specifying a character to print.
12141 Note however that when @samp{\@var{ooo}} specifies a number larger than 255,
12142 @command{printf} ignores the ninth bit.
12143 For example, @samp{printf '\400'} is equivalent to @samp{printf '\0'}.
12145 @kindex \uhhhh
12146 @kindex \Uhhhhhhhh
12147 @cindex Unicode
12148 @cindex ISO/IEC 10646
12149 @vindex LC_CTYPE
12150 @command{printf} interprets two character syntaxes introduced in
12151 ISO C 99:
12152 @samp{\u} for 16-bit Unicode (ISO/IEC 10646)
12153 characters, specified as
12154 four hexadecimal digits @var{hhhh}, and @samp{\U} for 32-bit Unicode
12155 characters, specified as eight hexadecimal digits @var{hhhhhhhh}.
12156 @command{printf} outputs the Unicode characters
12157 according to the @env{LC_CTYPE} locale.  Unicode characters in the ranges
12158 U+0000@dots{}U+009F, U+D800@dots{}U+DFFF cannot be specified by this syntax,
12159 except for U+0024 ($), U+0040 (@@), and U+0060 (@`).
12161 The processing of @samp{\u} and @samp{\U} requires a full-featured
12162 @code{iconv} facility.  It is activated on systems with glibc 2.2 (or newer),
12163 or when @code{libiconv} is installed prior to this package.  Otherwise
12164 @samp{\u} and @samp{\U} will print as-is.
12166 The only options are a lone @option{--help} or
12167 @option{--version}.  @xref{Common options}.
12168 Options must precede operands.
12170 The Unicode character syntaxes are useful for writing strings in a locale
12171 independent way.  For example, a string containing the Euro currency symbol
12173 @example
12174 $ env printf '\u20AC 14.95'
12175 @end example
12177 @noindent
12178 will be output correctly in all locales supporting the Euro symbol
12179 (ISO-8859-15, UTF-8, and others).  Similarly, a Chinese string
12181 @example
12182 $ env printf '\u4e2d\u6587'
12183 @end example
12185 @noindent
12186 will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc).
12188 Note that in these examples, the @command{printf} command has been
12189 invoked via @command{env} to ensure that we run the program found via
12190 your shell's search path, and not a shell alias or a built-in function.
12192 For larger strings, you don't need to look up the hexadecimal code
12193 values of each character one by one.  ASCII characters mixed with \u
12194 escape sequences is also known as the JAVA source file encoding.  You can
12195 use GNU recode 3.5c (or newer) to convert strings to this encoding.  Here
12196 is how to convert a piece of text into a shell script which will output
12197 this text in a locale-independent way:
12199 @smallexample
12200 $ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \
12201     '\u4e2d\u6587\n' > sample.txt
12202 $ recode BIG5..JAVA < sample.txt \
12203     | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
12204     > sample.sh
12205 @end smallexample
12207 @exitstatus
12210 @node yes invocation
12211 @section @command{yes}: Print a string until interrupted
12213 @pindex yes
12214 @cindex repeated output of a string
12216 @command{yes} prints the command line arguments, separated by spaces and
12217 followed by a newline, forever until it is killed.  If no arguments are
12218 given, it prints @samp{y} followed by a newline forever until killed.
12220 Upon a write error, @command{yes} exits with status @samp{1}.
12222 The only options are a lone @option{--help} or @option{--version}.
12223 To output an argument that begins with
12224 @samp{-}, precede it with @option{--}, e.g., @samp{yes -- --help}.
12225 @xref{Common options}.
12228 @node Conditions
12229 @chapter Conditions
12231 @cindex conditions
12232 @cindex commands for exit status
12233 @cindex exit status commands
12235 This section describes commands that are primarily useful for their exit
12236 status, rather than their output.  Thus, they are often used as the
12237 condition of shell @code{if} statements, or as the last command in a
12238 pipeline.
12240 @menu
12241 * false invocation::            Do nothing, unsuccessfully.
12242 * true invocation::             Do nothing, successfully.
12243 * test invocation::             Check file types and compare values.
12244 * expr invocation::             Evaluate expressions.
12245 @end menu
12248 @node false invocation
12249 @section @command{false}: Do nothing, unsuccessfully
12251 @pindex false
12252 @cindex do nothing, unsuccessfully
12253 @cindex failure exit status
12254 @cindex exit status of @command{false}
12256 @command{false} does nothing except return an exit status of 1, meaning
12257 @dfn{failure}.  It can be used as a place holder in shell scripts
12258 where an unsuccessful command is needed.
12259 In most modern shells, @command{false} is a built-in command, so when
12260 you use @samp{false} in a script, you're probably using the built-in
12261 command, not the one documented here.
12263 @command{false} honors the @option{--help} and @option{--version} options.
12265 This version of @command{false} is implemented as a C program, and is thus
12266 more secure and faster than a shell script implementation, and may safely
12267 be used as a dummy shell for the purpose of disabling accounts.
12269 Note that @command{false} (unlike all other programs documented herein)
12270 exits unsuccessfully, even when invoked with
12271 @option{--help} or @option{--version}.
12273 Portable programs should not assume that the exit status of
12274 @command{false} is 1, as it is greater than 1 on some
12275 non-GNU hosts.
12278 @node true invocation
12279 @section @command{true}: Do nothing, successfully
12281 @pindex true
12282 @cindex do nothing, successfully
12283 @cindex no-op
12284 @cindex successful exit
12285 @cindex exit status of @command{true}
12287 @command{true} does nothing except return an exit status of 0, meaning
12288 @dfn{success}.  It can be used as a place holder in shell scripts
12289 where a successful command is needed, although the shell built-in
12290 command @code{:} (colon) may do the same thing faster.
12291 In most modern shells, @command{true} is a built-in command, so when
12292 you use @samp{true} in a script, you're probably using the built-in
12293 command, not the one documented here.
12295 @command{true} honors the @option{--help} and @option{--version} options.
12297 Note, however, that it is possible to cause @command{true}
12298 to exit with nonzero status: with the @option{--help} or @option{--version}
12299 option, and with standard
12300 output already closed or redirected to a file that evokes an I/O error.
12301 For example, using a Bourne-compatible shell:
12303 @example
12304 $ ./true --version >&-
12305 ./true: write error: Bad file number
12306 $ ./true --version > /dev/full
12307 ./true: write error: No space left on device
12308 @end example
12310 This version of @command{true} is implemented as a C program, and is thus
12311 more secure and faster than a shell script implementation, and may safely
12312 be used as a dummy shell for the purpose of disabling accounts.
12314 @node test invocation
12315 @section @command{test}: Check file types and compare values
12317 @pindex test
12318 @cindex check file types
12319 @cindex compare values
12320 @cindex expression evaluation
12322 @command{test} returns a status of 0 (true) or 1 (false) depending on the
12323 evaluation of the conditional expression @var{expr}.  Each part of the
12324 expression must be a separate argument.
12326 @command{test} has file status checks, string operators, and numeric
12327 comparison operators.
12329 @command{test} has an alternate form that uses opening and closing
12330 square brackets instead a leading @samp{test}.  For example, instead
12331 of @samp{test -d /}, you can write @samp{[ -d / ]}.  The square
12332 brackets must be separate arguments; for example, @samp{[-d /]} does
12333 not have the desired effect.  Since @samp{test @var{expr}} and @samp{[
12334 @var{expr} ]} have the same meaning, only the former form is discussed
12335 below.
12337 Synopses:
12339 @example
12340 test @var{expression}
12341 test
12342 [ @var{expression} ]
12343 [ ]
12344 [ @var{option}
12345 @end example
12347 @mayConflictWithShellBuiltIn{test}
12349 If @var{expression} is omitted, @command{test} returns false.
12350 If @var{expression} is a single argument,
12351 @command{test} returns false if the argument is null and true
12352 otherwise.  The argument
12353 can be any string, including strings like @samp{-d}, @samp{-1},
12354 @samp{--}, @samp{--help}, and @samp{--version} that most other
12355 programs would treat as options.  To get help and version information,
12356 invoke the commands @samp{[ --help} and @samp{[ --version}, without
12357 the usual closing brackets.  @xref{Common options}.
12359 @cindex exit status of @command{test}
12360 Exit status:
12362 @display
12363 0 if the expression is true,
12364 1 if the expression is false,
12365 2 if an error occurred.
12366 @end display
12368 @menu
12369 * File type tests::             -[bcdfhLpSt]
12370 * Access permission tests::     -[gkruwxOG]
12371 * File characteristic tests::   -e -s -nt -ot -ef
12372 * String tests::                -z -n = == !=
12373 * Numeric tests::               -eq -ne -lt -le -gt -ge
12374 * Connectives for test::        ! -a -o
12375 @end menu
12378 @node File type tests
12379 @subsection File type tests
12381 @cindex file type tests
12383 These options test for particular types of files.  (Everything's a file,
12384 but not all files are the same!)
12386 @table @samp
12388 @item -b @var{file}
12389 @opindex -b
12390 @cindex block special check
12391 True if @var{file} exists and is a block special device.
12393 @item -c @var{file}
12394 @opindex -c
12395 @cindex character special check
12396 True if @var{file} exists and is a character special device.
12398 @item -d @var{file}
12399 @opindex -d
12400 @cindex directory check
12401 True if @var{file} exists and is a directory.
12403 @item -f @var{file}
12404 @opindex -f
12405 @cindex regular file check
12406 True if @var{file} exists and is a regular file.
12408 @item -h @var{file}
12409 @itemx -L @var{file}
12410 @opindex -L
12411 @opindex -h
12412 @cindex symbolic link check
12413 True if @var{file} exists and is a symbolic link.
12414 Unlike all other file-related tests, this test does not dereference
12415 @var{file} if it is a symbolic link.
12417 @item -p @var{file}
12418 @opindex -p
12419 @cindex named pipe check
12420 True if @var{file} exists and is a named pipe.
12422 @item -S @var{file}
12423 @opindex -S
12424 @cindex socket check
12425 True if @var{file} exists and is a socket.
12427 @item -t @var{fd}
12428 @opindex -t
12429 @cindex terminal check
12430 True if @var{fd} is a file descriptor that is associated with a
12431 terminal.
12433 @end table
12436 @node Access permission tests
12437 @subsection Access permission tests
12439 @cindex access permission tests
12440 @cindex permission tests
12442 These options test for particular access permissions.
12444 @table @samp
12446 @item -g @var{file}
12447 @opindex -g
12448 @cindex set-group-ID check
12449 True if @var{file} exists and has its set-group-ID bit set.
12451 @item -k @var{file}
12452 @opindex -k
12453 @cindex sticky bit check
12454 True if @var{file} exists and has its @dfn{sticky} bit set.
12456 @item -r @var{file}
12457 @opindex -r
12458 @cindex readable file check
12459 True if @var{file} exists and read permission is granted.
12461 @item -u @var{file}
12462 @opindex -u
12463 @cindex set-user-ID check
12464 True if @var{file} exists and has its set-user-ID bit set.
12466 @item -w @var{file}
12467 @opindex -w
12468 @cindex writable file check
12469 True if @var{file} exists and write permission is granted.
12471 @item -x @var{file}
12472 @opindex -x
12473 @cindex executable file check
12474 True if @var{file} exists and execute permission is granted
12475 (or search permission, if it is a directory).
12477 @item -O @var{file}
12478 @opindex -O
12479 @cindex owned by effective user ID check
12480 True if @var{file} exists and is owned by the current effective user ID.
12482 @item -G @var{file}
12483 @opindex -G
12484 @cindex owned by effective group ID check
12485 True if @var{file} exists and is owned by the current effective group ID.
12487 @end table
12489 @node File characteristic tests
12490 @subsection File characteristic tests
12492 @cindex file characteristic tests
12494 These options test other file characteristics.
12496 @table @samp
12498 @item -e @var{file}
12499 @opindex -e
12500 @cindex existence-of-file check
12501 True if @var{file} exists.
12503 @item -s @var{file}
12504 @opindex -s
12505 @cindex nonempty file check
12506 True if @var{file} exists and has a size greater than zero.
12508 @item @var{file1} -nt @var{file2}
12509 @opindex -nt
12510 @cindex newer-than file check
12511 True if @var{file1} is newer (according to modification date) than
12512 @var{file2}, or if @var{file1} exists and @var{file2} does not.
12514 @item @var{file1} -ot @var{file2}
12515 @opindex -ot
12516 @cindex older-than file check
12517 True if @var{file1} is older (according to modification date) than
12518 @var{file2}, or if @var{file2} exists and @var{file1} does not.
12520 @item @var{file1} -ef @var{file2}
12521 @opindex -ef
12522 @cindex same file check
12523 @cindex hard link check
12524 True if @var{file1} and @var{file2} have the same device and inode
12525 numbers, i.e., if they are hard links to each other.
12527 @end table
12530 @node String tests
12531 @subsection String tests
12533 @cindex string tests
12535 These options test string characteristics.  You may need to quote
12536 @var{string} arguments for the shell.  For example:
12538 @example
12539 test -n "$V"
12540 @end example
12542 The quotes here prevent the wrong arguments from being passed to
12543 @command{test} if @samp{$V} is empty or contains special characters.
12545 @table @samp
12547 @item -z @var{string}
12548 @opindex -z
12549 @cindex zero-length string check
12550 True if the length of @var{string} is zero.
12552 @item -n @var{string}
12553 @itemx @var{string}
12554 @opindex -n
12555 @cindex nonzero-length string check
12556 True if the length of @var{string} is nonzero.
12558 @item @var{string1} = @var{string2}
12559 @opindex =
12560 @cindex equal string check
12561 True if the strings are equal.
12563 @item @var{string1} == @var{string2}
12564 @opindex ==
12565 @cindex equal string check
12566 True if the strings are equal (synonym for =).
12568 @item @var{string1} != @var{string2}
12569 @opindex !=
12570 @cindex not-equal string check
12571 True if the strings are not equal.
12573 @end table
12576 @node Numeric tests
12577 @subsection Numeric tests
12579 @cindex numeric tests
12580 @cindex arithmetic tests
12582 Numeric relational operators.  The arguments must be entirely numeric
12583 (possibly negative), or the special expression @w{@code{-l @var{string}}},
12584 which evaluates to the length of @var{string}.
12586 @table @samp
12588 @item @var{arg1} -eq @var{arg2}
12589 @itemx @var{arg1} -ne @var{arg2}
12590 @itemx @var{arg1} -lt @var{arg2}
12591 @itemx @var{arg1} -le @var{arg2}
12592 @itemx @var{arg1} -gt @var{arg2}
12593 @itemx @var{arg1} -ge @var{arg2}
12594 @opindex -eq
12595 @opindex -ne
12596 @opindex -lt
12597 @opindex -le
12598 @opindex -gt
12599 @opindex -ge
12600 These arithmetic binary operators return true if @var{arg1} is equal,
12601 not-equal, less-than, less-than-or-equal, greater-than, or
12602 greater-than-or-equal than @var{arg2}, respectively.
12604 @end table
12606 For example:
12608 @example
12609 test -1 -gt -2 && echo yes
12610 @result{} yes
12611 test -l abc -gt 1 && echo yes
12612 @result{} yes
12613 test 0x100 -eq 1
12614 @error{} test: integer expression expected before -eq
12615 @end example
12618 @node Connectives for test
12619 @subsection Connectives for @command{test}
12621 @cindex logical connectives
12622 @cindex connectives, logical
12624 The usual logical connectives.
12626 @table @samp
12628 @item ! @var{expr}
12629 @opindex !
12630 True if @var{expr} is false.
12632 @item @var{expr1} -a @var{expr2}
12633 @opindex -a
12634 @cindex logical and operator
12635 @cindex and operator
12636 True if both @var{expr1} and @var{expr2} are true.
12638 @item @var{expr1} -o @var{expr2}
12639 @opindex -o
12640 @cindex logical or operator
12641 @cindex or operator
12642 True if either @var{expr1} or @var{expr2} is true.
12644 @end table
12647 @node expr invocation
12648 @section @command{expr}: Evaluate expressions
12650 @pindex expr
12651 @cindex expression evaluation
12652 @cindex evaluation of expressions
12654 @command{expr} evaluates an expression and writes the result on standard
12655 output.  Each token of the expression must be a separate argument.
12657 Operands are either integers or strings.  Integers consist of one or
12658 more decimal digits, with an optional leading @samp{-}.
12659 @command{expr} converts
12660 anything appearing in an operand position to an integer or a string
12661 depending on the operation being applied to it.
12663 Strings are not quoted for @command{expr} itself, though you may need to
12664 quote them to protect characters with special meaning to the shell,
12665 e.g., spaces.  However, regardless of whether it is quoted, a string
12666 operand should not be a parenthesis or any of @command{expr}'s
12667 operators like @code{+}, so you cannot safely pass an arbitrary string
12668 @code{$str} to expr merely by quoting it to the shell.  One way to
12669 work around this is to use the GNU extension @code{+},
12670 (e.g., @code{+ "$str" = foo}); a more portable way is to use
12671 @code{@w{" $str"}} and to adjust the rest of the expression to take
12672 the leading space into account (e.g., @code{@w{" $str" = " foo"}}).
12674 You should not pass a negative integer or a string with leading
12675 @samp{-} as @command{expr}'s first argument, as it might be
12676 misinterpreted as an option; this can be avoided by parenthesization.
12677 Also, portable scripts should not use a string operand that happens to
12678 take the form of an integer; this can be worked around by inserting
12679 leading spaces as mentioned above.
12681 @cindex parentheses for grouping
12682 Operators may be given as infix symbols or prefix keywords.  Parentheses
12683 may be used for grouping in the usual manner.  You must quote
12684 parentheses and many operators to avoid the shell evaluating them,
12685 however.
12687 When built with support for the GNU MP library, @command{expr} uses
12688 arbitrary-precision arithmetic; otherwise, it uses native arithmetic
12689 types and may fail due to arithmetic overflow.
12691 The only options are @option{--help} and @option{--version}.  @xref{Common
12692 options}.  Options must precede operands.
12694 @cindex exit status of @command{expr}
12695 Exit status:
12697 @display
12698 0 if the expression is neither null nor 0,
12699 1 if the expression is null or 0,
12700 2 if the expression is invalid,
12701 3 if an internal error occurred (e.g., arithmetic overflow).
12702 @end display
12704 @menu
12705 * String expressions::          + : match substr index length
12706 * Numeric expressions::         + - * / %
12707 * Relations for expr::          | & < <= = == != >= >
12708 * Examples of expr::            Examples.
12709 @end menu
12712 @node String expressions
12713 @subsection String expressions
12715 @cindex string expressions
12716 @cindex expressions, string
12718 @command{expr} supports pattern matching and other string operators.  These
12719 have higher precedence than both the numeric and relational operators (in
12720 the next sections).
12722 @table @samp
12724 @item @var{string} : @var{regex}
12725 @cindex pattern matching
12726 @cindex regular expression matching
12727 @cindex matching patterns
12728 Perform pattern matching.  The arguments are converted to strings and the
12729 second is considered to be a (basic, a la GNU @code{grep}) regular
12730 expression, with a @code{^} implicitly prepended.  The first argument is
12731 then matched against this regular expression.
12733 If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the
12734 @code{:} expression returns the part of @var{string} that matched the
12735 subexpression; otherwise, it returns the number of characters matched.
12737 If the match fails, the @code{:} operator returns the null string if
12738 @samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0.
12740 @kindex \( @r{regexp operator}
12741 Only the first @samp{\( @dots{} \)} pair is relevant to the return
12742 value; additional pairs are meaningful only for grouping the regular
12743 expression operators.
12745 @kindex \+ @r{regexp operator}
12746 @kindex \? @r{regexp operator}
12747 @kindex \| @r{regexp operator}
12748 In the regular expression, @code{\+}, @code{\?}, and @code{\|} are
12749 operators which respectively match one or more, zero or one, or separate
12750 alternatives.  SunOS and other @command{expr}'s treat these as regular
12751 characters.  (POSIX allows either behavior.)
12752 @xref{Top, , Regular Expression Library, regex, Regex}, for details of
12753 regular expression syntax.  Some examples are in @ref{Examples of expr}.
12755 @item match @var{string} @var{regex}
12756 @findex match
12757 An alternative way to do pattern matching.  This is the same as
12758 @w{@samp{@var{string} : @var{regex}}}.
12760 @item substr @var{string} @var{position} @var{length}
12761 @findex substr
12762 Returns the substring of @var{string} beginning at @var{position}
12763 with length at most @var{length}.  If either @var{position} or
12764 @var{length} is negative, zero, or non-numeric, returns the null string.
12766 @item index @var{string} @var{charset}
12767 @findex index
12768 Returns the first position in @var{string} where the first character in
12769 @var{charset} was found.  If no character in @var{charset} is found in
12770 @var{string}, return 0.
12772 @item length @var{string}
12773 @findex length
12774 Returns the length of @var{string}.
12776 @item + @var{token}
12777 @kindex +
12778 Interpret @var{token} as a string, even if it is a keyword like @var{match}
12779 or an operator like @code{/}.
12780 This makes it possible to test @code{expr length + "$x"} or
12781 @code{expr + "$x" : '.*/\(.\)'} and have it do the right thing even if
12782 the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
12783 This operator is a GNU extension.  Portable shell scripts should use
12784 @code{@w{" $token"} : @w{' \(.*\)'}} instead of @code{+ "$token"}.
12786 @end table
12788 To make @command{expr} interpret keywords as strings, you must use the
12789 @code{quote} operator.
12792 @node Numeric expressions
12793 @subsection Numeric expressions
12795 @cindex numeric expressions
12796 @cindex expressions, numeric
12798 @command{expr} supports the usual numeric operators, in order of increasing
12799 precedence.  These numeric operators have lower precedence than the
12800 string operators described in the previous section, and higher precedence
12801 than the connectives (next section).
12803 @table @samp
12805 @item + -
12806 @kindex +
12807 @kindex -
12808 @cindex addition
12809 @cindex subtraction
12810 Addition and subtraction.  Both arguments are converted to integers;
12811 an error occurs if this cannot be done.
12813 @item * / %
12814 @kindex *
12815 @kindex /
12816 @kindex %
12817 @cindex multiplication
12818 @cindex division
12819 @cindex remainder
12820 Multiplication, division, remainder.  Both arguments are converted to
12821 integers; an error occurs if this cannot be done.
12823 @end table
12826 @node Relations for expr
12827 @subsection Relations for @command{expr}
12829 @cindex connectives, logical
12830 @cindex logical connectives
12831 @cindex relations, numeric or string
12833 @command{expr} supports the usual logical connectives and relations.  These
12834 have lower precedence than the string and numeric operators
12835 (previous sections).  Here is the list, lowest-precedence operator first.
12837 @table @samp
12839 @item |
12840 @kindex |
12841 @cindex logical or operator
12842 @cindex or operator
12843 Returns its first argument if that is neither null nor zero, otherwise
12844 its second argument if it is neither null nor zero, otherwise 0.  It
12845 does not evaluate its second argument if its first argument is neither
12846 null nor zero.
12848 @item &
12849 @kindex &
12850 @cindex logical and operator
12851 @cindex and operator
12852 Return its first argument if neither argument is null or zero, otherwise
12853 0.  It does not evaluate its second argument if its first argument is
12854 null or zero.
12856 @item < <= = == != >= >
12857 @kindex <
12858 @kindex <=
12859 @kindex =
12860 @kindex ==
12861 @kindex >
12862 @kindex >=
12863 @cindex comparison operators
12864 @vindex LC_COLLATE
12865 Compare the arguments and return 1 if the relation is true, 0 otherwise.
12866 @code{==} is a synonym for @code{=}.  @command{expr} first tries to convert
12867 both arguments to integers and do a numeric comparison; if either
12868 conversion fails, it does a lexicographic comparison using the character
12869 collating sequence specified by the @env{LC_COLLATE} locale.
12871 @end table
12874 @node Examples of expr
12875 @subsection Examples of using @command{expr}
12877 @cindex examples of @command{expr}
12878 Here are a few examples, including quoting for shell metacharacters.
12880 To add 1 to the shell variable @code{foo}, in Bourne-compatible shells:
12882 @example
12883 foo=$(expr $foo + 1)
12884 @end example
12886 To print the non-directory part of the file name stored in
12887 @code{$fname}, which need not contain a @code{/}:
12889 @example
12890 expr $fname : '.*/\(.*\)' '|' $fname
12891 @end example
12893 An example showing that @code{\+} is an operator:
12895 @example
12896 expr aaa : 'a\+'
12897 @result{} 3
12898 @end example
12900 @example
12901 expr abc : 'a\(.\)c'
12902 @result{} b
12903 expr index abcdef cz
12904 @result{} 3
12905 expr index index a
12906 @error{} expr: syntax error
12907 expr index + index a
12908 @result{} 0
12909 @end example
12912 @node Redirection
12913 @chapter Redirection
12915 @cindex redirection
12916 @cindex commands for redirection
12918 Unix shells commonly provide several forms of @dfn{redirection}---ways
12919 to change the input source or output destination of a command.  But one
12920 useful redirection is performed by a separate command, not by the shell;
12921 it's described here.
12923 @menu
12924 * tee invocation::              Redirect output to multiple files or processes.
12925 @end menu
12928 @node tee invocation
12929 @section @command{tee}: Redirect output to multiple files or processes
12931 @pindex tee
12932 @cindex pipe fitting
12933 @cindex destinations, multiple output
12934 @cindex read from stdin and write to stdout and files
12936 The @command{tee} command copies standard input to standard output and also
12937 to any files given as arguments.  This is useful when you want not only
12938 to send some data down a pipe, but also to save a copy.  Synopsis:
12940 @example
12941 tee [@var{option}]@dots{} [@var{file}]@dots{}
12942 @end example
12944 If a file being written to does not already exist, it is created.  If a
12945 file being written to already exists, the data it previously contained
12946 is overwritten unless the @option{-a} option is used.
12948 In previous versions of GNU coreutils (v5.3.0 - v8.23), a @var{file} of @samp{-}
12949 caused @command{tee} to send another copy of input to standard output.
12950 However, as the interleaved output was not very useful, @command{tee} now
12951 conforms to POSIX which explicitly mandates it to treat @samp{-} as a file
12952 with such name.
12954 The program accepts the following options.  Also see @ref{Common options}.
12956 @table @samp
12957 @item -a
12958 @itemx --append
12959 @opindex -a
12960 @opindex --append
12961 Append standard input to the given files rather than overwriting
12962 them.
12964 @item -i
12965 @itemx --ignore-interrupts
12966 @opindex -i
12967 @opindex --ignore-interrupts
12968 Ignore interrupt signals.
12970 @item -p
12971 @itemx --output-error[=@var{mode}]
12972 @opindex -p
12973 @opindex --output-error
12974 Adjust the behavior with errors on the outputs,
12975 with the long form option supporting selection
12976 between the following @var{mode}s:
12978 @table @samp
12979 @item warn
12980 Warn on error opening or writing any output, including pipes.
12981 Writing is continued to still open files/pipes.
12982 Exit status indicates failure if any output has an error.
12984 @item warn-nopipe
12985 This is the default @var{mode} when not specified,
12986 or when the short form @option{-p} is used.
12987 Warn on error opening or writing any output, except pipes.
12988 Writing is continued to still open files/pipes.
12989 Exit status indicates failure if any non pipe output had an error.
12991 @item exit
12992 Exit on error opening or writing any output, including pipes.
12994 @item exit-nopipe
12995 Exit on error opening or writing any output, except pipes.
12996 @end table
12998 @end table
13000 The @command{tee} command is useful when you happen to be transferring a large
13001 amount of data and also want to summarize that data without reading
13002 it a second time.  For example, when you are downloading a DVD image,
13003 you often want to verify its signature or checksum right away.
13004 The inefficient way to do it is simply:
13006 @example
13007 wget http://example.com/some.iso && sha1sum some.iso
13008 @end example
13010 One problem with the above is that it makes you wait for the
13011 download to complete before starting the time-consuming SHA1 computation.
13012 Perhaps even more importantly, the above requires reading
13013 the DVD image a second time (the first was from the network).
13015 The efficient way to do it is to interleave the download
13016 and SHA1 computation.  Then, you'll get the checksum for
13017 free, because the entire process parallelizes so well:
13019 @example
13020 # slightly contrived, to demonstrate process substitution
13021 wget -O - http://example.com/dvd.iso \
13022   | tee >(sha1sum > dvd.sha1) > dvd.iso
13023 @end example
13025 That makes @command{tee} write not just to the expected output file,
13026 but also to a pipe running @command{sha1sum} and saving the final
13027 checksum in a file named @file{dvd.sha1}.
13029 Note, however, that this example relies on a feature of modern shells
13030 called @dfn{process substitution}
13031 (the @samp{>(command)} syntax, above;
13032 @xref{Process Substitution,,Process Substitution, bash,
13033 The Bash Reference Manual}.),
13034 so it works with @command{zsh}, @command{bash}, and @command{ksh},
13035 but not with @command{/bin/sh}.  So if you write code like this
13036 in a shell script, be sure to start the script with @samp{#!/bin/bash}.
13038 Note also that if any of the process substitutions (or piped stdout)
13039 might exit early without consuming all the data, the @option{-p} option
13040 is needed to allow @command{tee} to continue to process the input
13041 to any remaining outputs.
13043 Since the above example writes to one file and one process,
13044 a more conventional and portable use of @command{tee} is even better:
13046 @example
13047 wget -O - http://example.com/dvd.iso \
13048   | tee dvd.iso | sha1sum > dvd.sha1
13049 @end example
13051 You can extend this example to make @command{tee} write to two processes,
13052 computing MD5 and SHA1 checksums in parallel.  In this case,
13053 process substitution is required:
13055 @example
13056 wget -O - http://example.com/dvd.iso \
13057   | tee >(sha1sum > dvd.sha1) \
13058         >(md5sum > dvd.md5) \
13059   > dvd.iso
13060 @end example
13062 This technique is also useful when you want to make a @emph{compressed}
13063 copy of the contents of a pipe.
13064 Consider a tool to graphically summarize disk usage data from @samp{du -ak}.
13065 For a large hierarchy, @samp{du -ak} can run for a long time,
13066 and can easily produce terabytes of data, so you won't want to
13067 rerun the command unnecessarily.  Nor will you want to save
13068 the uncompressed output.
13070 Doing it the inefficient way, you can't even start the GUI
13071 until after you've compressed all of the @command{du} output:
13073 @example
13074 du -ak | gzip -9 > /tmp/du.gz
13075 gzip -d /tmp/du.gz | xdiskusage -a
13076 @end example
13078 With @command{tee} and process substitution, you start the GUI
13079 right away and eliminate the decompression completely:
13081 @example
13082 du -ak | tee >(gzip -9 > /tmp/du.gz) | xdiskusage -a
13083 @end example
13085 Finally, if you regularly create more than one type of
13086 compressed tarball at once, for example when @code{make dist} creates
13087 both @command{gzip}-compressed and @command{bzip2}-compressed tarballs,
13088 there may be a better way.
13089 Typical @command{automake}-generated @file{Makefile} rules create
13090 the two compressed tar archives with commands in sequence, like this
13091 (slightly simplified):
13093 @example
13094 tardir=your-pkg-M.N
13095 tar chof - "$tardir" | gzip  -9 -c > your-pkg-M.N.tar.gz
13096 tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13097 @end example
13099 However, if the hierarchy you are archiving and compressing is larger
13100 than a couple megabytes, and especially if you are using a multi-processor
13101 system with plenty of memory, then you can do much better by reading the
13102 directory contents only once and running the compression programs in parallel:
13104 @example
13105 tardir=your-pkg-M.N
13106 tar chof - "$tardir" \
13107   | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
13108   | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13109 @end example
13111 If you want to further process the output from process substitutions,
13112 and those processes write atomically (i.e., write less than the system's
13113 PIPE_BUF size at a time), that's possible with a construct like:
13115 @example
13116 tardir=your-pkg-M.N
13117 tar chof - "$tardir" \
13118   | tee >(md5sum --tag) > >(sha256sum --tag) \
13119   | sort | gpg --clearsign > your-pkg-M.N.tar.sig
13120 @end example
13122 @exitstatus
13125 @node File name manipulation
13126 @chapter File name manipulation
13128 @cindex file name manipulation
13129 @cindex manipulation of file names
13130 @cindex commands for file name manipulation
13132 This section describes commands that manipulate file names.
13134 @menu
13135 * basename invocation::         Strip directory and suffix from a file name.
13136 * dirname invocation::          Strip last file name component.
13137 * pathchk invocation::          Check file name validity and portability.
13138 * mktemp invocation::           Create temporary file or directory.
13139 * realpath invocation::         Print resolved file names.
13140 @end menu
13143 @node basename invocation
13144 @section @command{basename}: Strip directory and suffix from a file name
13146 @pindex basename
13147 @cindex strip directory and suffix from file names
13148 @cindex directory, stripping from file names
13149 @cindex suffix, stripping from file names
13150 @cindex file names, stripping directory and suffix
13151 @cindex leading directory components, stripping
13153 @command{basename} removes any leading directory components from
13154 @var{name}.  Synopsis:
13156 @example
13157 basename @var{name} [@var{suffix}]
13158 basename @var{option}@dots{} @var{name}@dots{}
13159 @end example
13161 If @var{suffix} is specified and is identical to the end of @var{name},
13162 it is removed from @var{name} as well.  Note that since trailing slashes
13163 are removed prior to suffix matching, @var{suffix} will do nothing if it
13164 contains slashes.  @command{basename} prints the result on standard
13165 output.
13167 @c This test is used both here and in the section on dirname.
13168 @macro basenameAndDirname
13169 Together, @command{basename} and @command{dirname} are designed such
13170 that if @samp{ls "$name"} succeeds, then the command sequence @samp{cd
13171 "$(dirname "$name")"; ls "$(basename "$name")"} will, too.  This works
13172 for everything except file names containing a trailing newline.
13173 @end macro
13174 @basenameAndDirname
13176 POSIX allows the implementation to define the results if
13177 @var{name} is empty or @samp{//}.  In the former case, GNU
13178 @command{basename} returns the empty string.  In the latter case, the
13179 result is @samp{//} on platforms where @var{//} is distinct from
13180 @var{/}, and @samp{/} on platforms where there is no difference.
13182 The program accepts the following options.  Also see @ref{Common options}.
13183 Options must precede operands.
13185 @table @samp
13187 @item -a
13188 @itemx --multiple
13189 @opindex -a
13190 @opindex --multiple
13191 Support more than one argument.  Treat every argument as a @var{name}.
13192 With this, an optional @var{suffix} must be specified using the
13193 @option{-s} option.
13195 @item -s @var{suffix}
13196 @itemx --suffix=@var{suffix}
13197 @opindex -s
13198 @opindex --suffix
13199 Remove a trailing @var{suffix}.
13200 This option implies the @option{-a} option.
13202 @optZero
13204 @end table
13206 @exitstatus
13208 Examples:
13210 @smallexample
13211 # Output "sort".
13212 basename /usr/bin/sort
13214 # Output "stdio".
13215 basename include/stdio.h .h
13217 # Output "stdio".
13218 basename -s .h include/stdio.h
13220 # Output "stdio" followed by "stdlib"
13221 basename -a -s .h include/stdio.h include/stdlib.h
13222 @end smallexample
13225 @node dirname invocation
13226 @section @command{dirname}: Strip last file name component
13228 @pindex dirname
13229 @cindex directory components, printing
13230 @cindex stripping non-directory suffix
13231 @cindex non-directory suffix, stripping
13233 @command{dirname} prints all but the final slash-delimited component
13234 of each @var{name}.  Slashes on either side of the final component are
13235 also removed.  If the string contains no slash, @command{dirname}
13236 prints @samp{.} (meaning the current directory).  Synopsis:
13238 @example
13239 dirname [@var{option}] @var{name}@dots{}
13240 @end example
13242 @var{name} need not be a file name, but if it is, this operation
13243 effectively lists the directory that contains the final component,
13244 including the case when the final component is itself a directory.
13246 @basenameAndDirname
13248 POSIX allows the implementation to define the results if
13249 @var{name} is @samp{//}.  With GNU @command{dirname}, the
13250 result is @samp{//} on platforms where @var{//} is distinct from
13251 @var{/}, and @samp{/} on platforms where there is no difference.
13253 The program accepts the following option.  Also see @ref{Common options}.
13255 @table @samp
13257 @optZero
13259 @end table
13261 @exitstatus
13263 Examples:
13265 @smallexample
13266 # Output "/usr/bin".
13267 dirname /usr/bin/sort
13268 dirname /usr/bin//.//
13270 # Output "dir1" followed by "dir2"
13271 dirname dir1/str dir2/str
13273 # Output ".".
13274 dirname stdio.h
13275 @end smallexample
13278 @node pathchk invocation
13279 @section @command{pathchk}: Check file name validity and portability
13281 @pindex pathchk
13282 @cindex file names, checking validity and portability
13283 @cindex valid file names, checking for
13284 @cindex portable file names, checking for
13286 @command{pathchk} checks validity and portability of file names.  Synopsis:
13288 @example
13289 pathchk [@var{option}]@dots{} @var{name}@dots{}
13290 @end example
13292 For each @var{name}, @command{pathchk} prints an error message if any of
13293 these conditions is true:
13295 @enumerate
13296 @item
13297 One of the existing directories in @var{name} does not have search
13298 (execute) permission,
13299 @item
13300 The length of @var{name} is larger than the maximum supported by the
13301 operating system.
13302 @item
13303 The length of one component of @var{name} is longer than
13304 its file system's maximum.
13305 @end enumerate
13307 A nonexistent @var{name} is not an error, so long a file with that
13308 name could be created under the above conditions.
13310 The program accepts the following options.  Also see @ref{Common options}.
13311 Options must precede operands.
13313 @table @samp
13315 @item -p
13316 @opindex -p
13317 Instead of performing checks based on the underlying file system,
13318 print an error message if any of these conditions is true:
13320 @enumerate
13321 @item
13322 A file name is empty.
13324 @item
13325 A file name contains a character outside the POSIX portable file
13326 name character set, namely, the ASCII letters and digits, @samp{.},
13327 @samp{_}, @samp{-}, and @samp{/}.
13329 @item
13330 The length of a file name or one of its components exceeds the
13331 POSIX minimum limits for portability.
13332 @end enumerate
13334 @item -P
13335 @opindex -P
13336 Print an error message if a file name is empty, or if it contains a component
13337 that begins with @samp{-}.
13339 @item --portability
13340 @opindex --portability
13341 Print an error message if a file name is not portable to all POSIX
13342 hosts.  This option is equivalent to @samp{-p -P}.
13344 @end table
13346 @cindex exit status of @command{pathchk}
13347 Exit status:
13349 @display
13350 0 if all specified file names passed all checks,
13351 1 otherwise.
13352 @end display
13354 @node mktemp invocation
13355 @section @command{mktemp}: Create temporary file or directory
13357 @pindex mktemp
13358 @cindex file names, creating temporary
13359 @cindex directory, creating temporary
13360 @cindex temporary files and directories
13362 @command{mktemp} manages the creation of temporary files and
13363 directories.  Synopsis:
13365 @example
13366 mktemp [@var{option}]@dots{} [@var{template}]
13367 @end example
13369 Safely create a temporary file or directory based on @var{template},
13370 and print its name.  If given, @var{template} must include at least
13371 three consecutive @samp{X}s in the last component.  If omitted, the template
13372 @samp{tmp.XXXXXXXXXX} is used, and option @option{--tmpdir} is
13373 implied.  The final run of @samp{X}s in the @var{template} will be replaced
13374 by alpha-numeric characters; thus, on a case-sensitive file system,
13375 and with a @var{template} including a run of @var{n} instances of @samp{X},
13376 there are @samp{62**@var{n}} potential file names.
13378 Older scripts used to create temporary files by simply joining the
13379 name of the program with the process id (@samp{$$}) as a suffix.
13380 However, that naming scheme is easily predictable, and suffers from a
13381 race condition where the attacker can create an appropriately named
13382 symbolic link, such that when the script then opens a handle to what
13383 it thought was an unused file, it is instead modifying an existing
13384 file.  Using the same scheme to create a directory is slightly safer,
13385 since the @command{mkdir} will fail if the target already exists, but
13386 it is still inferior because it allows for denial of service attacks.
13387 Therefore, modern scripts should use the @command{mktemp} command to
13388 guarantee that the generated name will be unpredictable, and that
13389 knowledge of the temporary file name implies that the file was created
13390 by the current script and cannot be modified by other users.
13392 When creating a file, the resulting file has read and write
13393 permissions for the current user, but no permissions for the group or
13394 others; these permissions are reduced if the current umask is more
13395 restrictive.
13397 Here are some examples (although note that if you repeat them, you
13398 will most likely get different file names):
13400 @itemize @bullet
13402 @item
13403 Create a temporary file in the current directory.
13404 @example
13405 $ mktemp file.XXXX
13406 file.H47c
13407 @end example
13409 @item
13410 Create a temporary file with a known suffix.
13411 @example
13412 $ mktemp --suffix=.txt file-XXXX
13413 file-H08W.txt
13414 $ mktemp file-XXXX-XXXX.txt
13415 file-XXXX-eI9L.txt
13416 @end example
13418 @item
13419 Create a secure fifo relative to the user's choice of @env{TMPDIR},
13420 but falling back to the current directory rather than @file{/tmp}.
13421 Note that @command{mktemp} does not create fifos, but can create a
13422 secure directory in which the fifo can live.  Exit the shell if the
13423 directory or fifo could not be created.
13424 @example
13425 $ dir=$(mktemp -p "$@{TMPDIR:-.@}" -d dir-XXXX) || exit 1
13426 $ fifo=$dir/fifo
13427 $ mkfifo "$fifo" || @{ rmdir "$dir"; exit 1; @}
13428 @end example
13430 @item
13431 Create and use a temporary file if possible, but ignore failure.  The
13432 file will reside in the directory named by @env{TMPDIR}, if specified,
13433 or else in @file{/tmp}.
13434 @example
13435 $ file=$(mktemp -q) && @{
13436 >   # Safe to use $file only within this block.  Use quotes,
13437 >   # since $TMPDIR, and thus $file, may contain whitespace.
13438 >   echo ... > "$file"
13439 >   rm "$file"
13440 > @}
13441 @end example
13443 @item
13444 Act as a semi-random character generator (it is not fully random,
13445 since it is impacted by the contents of the current directory).  To
13446 avoid security holes, do not use the resulting names to create a file.
13447 @example
13448 $ mktemp -u XXX
13450 $ mktemp -u XXX
13452 @end example
13454 @end itemize
13456 The program accepts the following options.  Also see @ref{Common options}.
13458 @table @samp
13460 @item -d
13461 @itemx --directory
13462 @opindex -d
13463 @opindex --directory
13464 Create a directory rather than a file.  The directory will have read,
13465 write, and search permissions for the current user, but no permissions
13466 for the group or others; these permissions are reduced if the current
13467 umask is more restrictive.
13469 @item -q
13470 @itemx --quiet
13471 @opindex -q
13472 @opindex --quiet
13473 Suppress diagnostics about failure to create a file or directory.  The
13474 exit status will still reflect whether a file was created.
13476 @item -u
13477 @itemx --dry-run
13478 @opindex -u
13479 @opindex --dry-run
13480 Generate a temporary name that does not name an existing file, without
13481 changing the file system contents.  Using the output of this command
13482 to create a new file is inherently unsafe, as there is a window of
13483 time between generating the name and using it where another process
13484 can create an object by the same name.
13486 @item -p @var{dir}
13487 @itemx --tmpdir[=@var{dir}]
13488 @opindex -p
13489 @opindex --tmpdir
13490 Treat @var{template} relative to the directory @var{dir}.  If
13491 @var{dir} is not specified (only possible with the long option
13492 @option{--tmpdir}) or is the empty string, use the value of
13493 @env{TMPDIR} if available, otherwise use @samp{/tmp}.  If this is
13494 specified, @var{template} must not be absolute.  However,
13495 @var{template} can still contain slashes, although intermediate
13496 directories must already exist.
13498 @item --suffix=@var{suffix}
13499 @opindex --suffix
13500 Append @var{suffix} to the @var{template}.  @var{suffix} must not
13501 contain slash.  If @option{--suffix} is specified, @var{template} must
13502 end in @samp{X}; if it is not specified, then an appropriate
13503 @option{--suffix} is inferred by finding the last @samp{X} in
13504 @var{template}.  This option exists for use with the default
13505 @var{template} and for the creation of a @var{suffix} that starts with
13506 @samp{X}.
13508 @item -t
13509 @opindex -t
13510 Treat @var{template} as a single file relative to the value of
13511 @env{TMPDIR} if available, or to the directory specified by
13512 @option{-p}, otherwise to @samp{/tmp}.  @var{template} must not
13513 contain slashes.  This option is deprecated; the use of @option{-p}
13514 without @option{-t} offers better defaults (by favoring the command
13515 line over @env{TMPDIR}) and more flexibility (by allowing intermediate
13516 directories).
13518 @end table
13520 @cindex exit status of @command{mktemp}
13521 Exit status:
13523 @display
13524 0 if the file was created,
13525 1 otherwise.
13526 @end display
13529 @node realpath invocation
13530 @section @command{realpath}: Print the resolved file name.
13532 @pindex realpath
13533 @cindex file names, canonicalization
13534 @cindex symlinks, resolution
13535 @cindex canonical file name
13536 @cindex canonicalize a file name
13537 @pindex realpath
13538 @findex realpath
13540 @command{realpath} expands all symbolic links and resolves references to
13541 @samp{/./}, @samp{/../} and extra @samp{/} characters.  By default,
13542 all but the last component of the specified files must exist.  Synopsis:
13544 @example
13545 realpath [@var{option}]@dots{} @var{file}@dots{}
13546 @end example
13548 The program accepts the following options.  Also see @ref{Common options}.
13550 @table @samp
13552 @item -e
13553 @itemx --canonicalize-existing
13554 @opindex -e
13555 @opindex --canonicalize-existing
13556 Ensure that all components of the specified file names exist.
13557 If any component is missing or unavailable, @command{realpath} will output
13558 a diagnostic unless the @option{-q} option is specified, and exit with a
13559 nonzero exit code.  A trailing slash requires that the name resolve to a
13560 directory.
13562 @item -m
13563 @itemx --canonicalize-missing
13564 @opindex -m
13565 @opindex --canonicalize-missing
13566 If any component of a specified file name is missing or unavailable,
13567 treat it as a directory.
13569 @item -L
13570 @itemx --logical
13571 @opindex -L
13572 @opindex --logical
13573 Symbolic links are resolved in the specified file names,
13574 but they are resolved after any subsequent @samp{..} components are processed.
13576 @item -P
13577 @itemx --physical
13578 @opindex -P
13579 @opindex --physical
13580 Symbolic links are resolved in the specified file names,
13581 and they are resolved before any subsequent @samp{..} components are processed.
13582 This is the default mode of operation.
13584 @item -q
13585 @itemx --quiet
13586 @opindex -q
13587 @opindex --quiet
13588 Suppress diagnostic messages for specified file names.
13590 @item --relative-to=@var{file}
13591 @opindex --relative-to
13592 @cindex relpath
13593 Print the resolved file names relative to the specified file.
13594 Note this option honors the @option{-m} and @option{-e} options
13595 pertaining to file existence.
13597 @item --relative-base=@var{base}
13598 @opindex --relative-base
13599 This option is valid when used with @option{--relative-to}, and will restrict
13600 the output of @option{--relative-to} so that relative names are output,
13601 only when @var{file}s are descendants of @var{base}.  Otherwise output the
13602 absolute file name.  If @option{--relative-to} was not specified, then
13603 the descendants of @var{base} are printed relative to @var{base}.  If
13604 @option{--relative-to} is specified, then that directory must be a
13605 descendant of @var{base} for this option to have an effect.
13606 Note: this option honors the @option{-m} and @option{-e}
13607 options pertaining to file existence.  For example:
13609 @example
13610 realpath --relative-to=/usr /tmp /usr/bin
13611 @result{} ../tmp
13612 @result{} bin
13613 realpath --relative-base=/usr /tmp /usr/bin
13614 @result{} /tmp
13615 @result{} bin
13616 @end example
13618 @item -s
13619 @itemx --strip
13620 @itemx --no-symlinks
13621 @opindex -s
13622 @opindex --strip
13623 @opindex --no-symlinks
13624 Do not resolve symbolic links.  Only resolve references to
13625 @samp{/./}, @samp{/../} and remove extra @samp{/} characters.
13626 When combined with the @option{-m} option, realpath operates
13627 only on the file name, and does not touch any actual file.
13629 @optZero
13631 @end table
13633 @cindex exit status of @command{realpath}
13634 Exit status:
13636 @display
13637 0 if all file names were printed without issue.
13638 1 otherwise.
13639 @end display
13642 @node Working context
13643 @chapter Working context
13645 @cindex working context
13646 @cindex commands for printing the working context
13648 This section describes commands that display or alter the context in
13649 which you are working: the current directory, the terminal settings, and
13650 so forth.  See also the user-related commands in the next section.
13652 @menu
13653 * pwd invocation::              Print working directory.
13654 * stty invocation::             Print or change terminal characteristics.
13655 * printenv invocation::         Print environment variables.
13656 * tty invocation::              Print file name of terminal on standard input.
13657 @end menu
13660 @node pwd invocation
13661 @section @command{pwd}: Print working directory
13663 @pindex pwd
13664 @cindex print name of current directory
13665 @cindex current working directory, printing
13666 @cindex working directory, printing
13669 @command{pwd} prints the name of the current directory.  Synopsis:
13671 @example
13672 pwd [@var{option}]@dots{}
13673 @end example
13675 The program accepts the following options.  Also see @ref{Common options}.
13677 @table @samp
13678 @item -L
13679 @itemx --logical
13680 @opindex -L
13681 @opindex --logical
13682 If the contents of the environment variable @env{PWD} provide an
13683 absolute name of the current directory with no @samp{.} or @samp{..}
13684 components, but possibly with symbolic links, then output those
13685 contents.  Otherwise, fall back to default @option{-P} handling.
13687 @item -P
13688 @itemx --physical
13689 @opindex -P
13690 @opindex --physical
13691 Print a fully resolved name for the current directory.  That is, all
13692 components of the printed name will be actual directory names---none
13693 will be symbolic links.
13694 @end table
13696 @cindex symbolic links and @command{pwd}
13697 If @option{-L} and @option{-P} are both given, the last one takes
13698 precedence.  If neither option is given, then this implementation uses
13699 @option{-P} as the default unless the @env{POSIXLY_CORRECT}
13700 environment variable is set.
13702 @mayConflictWithShellBuiltIn{pwd}
13704 @exitstatus
13707 @node stty invocation
13708 @section @command{stty}: Print or change terminal characteristics
13710 @pindex stty
13711 @cindex change or print terminal settings
13712 @cindex terminal settings
13713 @cindex line settings of terminal
13715 @command{stty} prints or changes terminal characteristics, such as baud rate.
13716 Synopses:
13718 @example
13719 stty [@var{option}] [@var{setting}]@dots{}
13720 stty [@var{option}]
13721 @end example
13723 If given no line settings, @command{stty} prints the baud rate, line
13724 discipline number (on systems that support it), and line settings
13725 that have been changed from the values set by @samp{stty sane}.
13726 By default, mode reading and setting are performed on the tty line
13727 connected to standard input, although this can be modified by the
13728 @option{--file} option.
13730 @command{stty} accepts many non-option arguments that change aspects of
13731 the terminal line operation, as described below.
13733 The program accepts the following options.  Also see @ref{Common options}.
13735 @table @samp
13736 @item -a
13737 @itemx --all
13738 @opindex -a
13739 @opindex --all
13740 Print all current settings in human-readable form.  This option may not
13741 be used in combination with any line settings.
13743 @item -F @var{device}
13744 @itemx --file=@var{device}
13745 @opindex -F
13746 @opindex --file
13747 Set the line opened by the file name specified in @var{device} instead of
13748 the tty line connected to standard input.  This option is necessary
13749 because opening a POSIX tty requires use of the
13750 @code{O_NONDELAY} flag to prevent a POSIX tty from blocking
13751 until the carrier detect line is high if
13752 the @code{clocal} flag is not set.  Hence, it is not always possible
13753 to allow the shell to open the device in the traditional manner.
13755 @item -g
13756 @itemx --save
13757 @opindex -g
13758 @opindex --save
13759 @cindex machine-readable @command{stty} output
13760 Print all current settings in a form that can be used as an argument to
13761 another @command{stty} command to restore the current settings.  This option
13762 may not be used in combination with any line settings.
13764 @end table
13766 Many settings can be turned off by preceding them with a @samp{-}.
13767 Such arguments are marked below with ``May be negated'' in their
13768 description.  The descriptions themselves refer to the positive
13769 case, that is, when @emph{not} negated (unless stated otherwise,
13770 of course).
13772 Some settings are not available on all POSIX systems, since they use
13773 extensions.  Such arguments are marked below with
13774 ``Non-POSIX'' in their description.  On non-POSIX
13775 systems, those or other settings also may not
13776 be available, but it's not feasible to document all the variations: just
13777 try it and see.
13779 @command{stty} is installed only on platforms with the POSIX terminal
13780 interface, so portable scripts should not rely on its existence on
13781 non-POSIX platforms.
13783 @exitstatus
13785 @menu
13786 * Control::                     Control settings
13787 * Input::                       Input settings
13788 * Output::                      Output settings
13789 * Local::                       Local settings
13790 * Combination::                 Combination settings
13791 * Characters::                  Special characters
13792 * Special::                     Special settings
13793 @end menu
13796 @node Control
13797 @subsection Control settings
13799 @cindex control settings
13800 Control settings:
13802 @table @samp
13803 @item parenb
13804 @opindex parenb
13805 @cindex two-way parity
13806 Generate parity bit in output and expect parity bit in input.
13807 May be negated.
13809 @item parodd
13810 @opindex parodd
13811 @cindex odd parity
13812 @cindex even parity
13813 Set odd parity (even if negated).  May be negated.
13815 @item cmspar
13816 @opindex cmspar
13817 @cindex constant parity
13818 @cindex stick parity
13819 @cindex mark parity
13820 @cindex space parity
13821 Use "stick" (mark/space) parity.  If parodd is set, the parity bit is
13822 always 1; if parodd is not set, the parity bit is always zero.
13823 Non-POSIX@.  May be negated.
13825 @item cs5
13826 @itemx cs6
13827 @itemx cs7
13828 @itemx cs8
13829 @opindex cs@var{n}
13830 @cindex character size
13831 @cindex eight-bit characters
13832 Set character size to 5, 6, 7, or 8 bits.
13834 @item hup
13835 @itemx hupcl
13836 @opindex hup[cl]
13837 Send a hangup signal when the last process closes the tty.  May be
13838 negated.
13840 @item cstopb
13841 @opindex cstopb
13842 @cindex stop bits
13843 Use two stop bits per character (one if negated).  May be negated.
13845 @item cread
13846 @opindex cread
13847 Allow input to be received.  May be negated.
13849 @item clocal
13850 @opindex clocal
13851 @cindex modem control
13852 Disable modem control signals.  May be negated.
13854 @item crtscts
13855 @opindex crtscts
13856 @cindex hardware flow control
13857 @cindex flow control, hardware
13858 @cindex RTS/CTS flow control
13859 Enable RTS/CTS flow control.  Non-POSIX@.  May be negated.
13861 @item cdtrdsr
13862 @opindex cdtrdsr
13863 @cindex hardware flow control
13864 @cindex flow control, hardware
13865 @cindex DTR/DSR flow control
13866 Enable DTR/DSR flow control. Non-POSIX@.  May be negated.
13867 @end table
13870 @node Input
13871 @subsection Input settings
13873 @cindex input settings
13874 These settings control operations on data received from the terminal.
13876 @table @samp
13877 @item ignbrk
13878 @opindex ignbrk
13879 @cindex breaks, ignoring
13880 Ignore break characters.  May be negated.
13882 @item brkint
13883 @opindex brkint
13884 @cindex breaks, cause interrupts
13885 Make breaks cause an interrupt signal.  May be negated.
13887 @item ignpar
13888 @opindex ignpar
13889 @cindex parity, ignoring
13890 Ignore characters with parity errors.  May be negated.
13892 @item parmrk
13893 @opindex parmrk
13894 @cindex parity errors, marking
13895 Mark parity errors (with a 255-0-character sequence).  May be negated.
13897 @item inpck
13898 @opindex inpck
13899 Enable input parity checking.  May be negated.
13901 @item istrip
13902 @opindex istrip
13903 @cindex eight-bit input
13904 Clear high (8th) bit of input characters.  May be negated.
13906 @item inlcr
13907 @opindex inlcr
13908 @cindex newline, translating to return
13909 Translate newline to carriage return.  May be negated.
13911 @item igncr
13912 @opindex igncr
13913 @cindex return, ignoring
13914 Ignore carriage return.  May be negated.
13916 @item icrnl
13917 @opindex icrnl
13918 @cindex return, translating to newline
13919 Translate carriage return to newline.  May be negated.
13921 @item iutf8
13922 @opindex iutf8
13923 @cindex input encoding, UTF-8
13924 Assume input characters are UTF-8 encoded.  May be negated.
13926 @item ixon
13927 @opindex ixon
13928 @kindex C-s/C-q flow control
13929 @cindex XON/XOFF flow control
13930 Enable XON/XOFF flow control (that is, @kbd{Ctrl-S}/@kbd{Ctrl-Q}).  May
13931 be negated.
13933 @item ixoff
13934 @itemx tandem
13935 @opindex ixoff
13936 @opindex tandem
13937 @cindex software flow control
13938 @cindex flow control, software
13939 Enable sending of @code{stop} character when the system input buffer
13940 is almost full, and @code{start} character when it becomes almost
13941 empty again.  May be negated.
13943 @item iuclc
13944 @opindex iuclc
13945 @cindex uppercase, translating to lowercase
13946 Translate uppercase characters to lowercase.  Non-POSIX@.  May be
13947 negated.  Note ilcuc is not implemented, as one would not be able to issue
13948 almost any (lowercase) Unix command, after invoking it.
13950 @item ixany
13951 @opindex ixany
13952 Allow any character to restart output (only the start character
13953 if negated).  Non-POSIX@.  May be negated.
13955 @item imaxbel
13956 @opindex imaxbel
13957 @cindex beeping at input buffer full
13958 Enable beeping and not flushing input buffer if a character arrives
13959 when the input buffer is full.  Non-POSIX@.  May be negated.
13960 @end table
13963 @node Output
13964 @subsection Output settings
13966 @cindex output settings
13967 These settings control operations on data sent to the terminal.
13969 @table @samp
13970 @item opost
13971 @opindex opost
13972 Postprocess output.  May be negated.
13974 @item olcuc
13975 @opindex olcuc
13976 @cindex lowercase, translating to output
13977 Translate lowercase characters to uppercase.  Non-POSIX@.  May be
13978 negated.  (Note ouclc is not currently implemented.)
13980 @item ocrnl
13981 @opindex ocrnl
13982 @cindex return, translating to newline
13983 Translate carriage return to newline.  Non-POSIX@.  May be negated.
13985 @item onlcr
13986 @opindex onlcr
13987 @cindex newline, translating to crlf
13988 Translate newline to carriage return-newline.  Non-POSIX@.  May be
13989 negated.
13991 @item onocr
13992 @opindex onocr
13993 Do not print carriage returns in the first column.  Non-POSIX@.
13994 May be negated.
13996 @item onlret
13997 @opindex onlret
13998 Newline performs a carriage return.  Non-POSIX@.  May be negated.
14000 @item ofill
14001 @opindex ofill
14002 @cindex pad instead of timing for delaying
14003 Use fill (padding) characters instead of timing for delays.
14004 Non-POSIX@.
14005 May be negated.
14007 @item ofdel
14008 @opindex ofdel
14009 @cindex pad character
14010 Use ASCII DEL characters for fill instead of
14011 ASCII NUL characters.  Non-POSIX@.
14012 May be negated.
14014 @item nl1
14015 @itemx nl0
14016 @opindex nl@var{n}
14017 Newline delay style.  Non-POSIX.
14019 @item cr3
14020 @itemx cr2
14021 @itemx cr1
14022 @itemx cr0
14023 @opindex cr@var{n}
14024 Carriage return delay style.  Non-POSIX.
14026 @item tab3
14027 @itemx tab2
14028 @itemx tab1
14029 @itemx tab0
14030 @opindex tab@var{n}
14031 Horizontal tab delay style.  Non-POSIX.
14033 @item bs1
14034 @itemx bs0
14035 @opindex bs@var{n}
14036 Backspace delay style.  Non-POSIX.
14038 @item vt1
14039 @itemx vt0
14040 @opindex vt@var{n}
14041 Vertical tab delay style.  Non-POSIX.
14043 @item ff1
14044 @itemx ff0
14045 @opindex ff@var{n}
14046 Form feed delay style.  Non-POSIX.
14047 @end table
14050 @node Local
14051 @subsection Local settings
14053 @cindex local settings
14055 @table @samp
14056 @item isig
14057 @opindex isig
14058 Enable @code{interrupt}, @code{quit}, and @code{suspend} special
14059 characters.  May be negated.
14061 @item icanon
14062 @opindex icanon
14063 Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt}
14064 special characters.  May be negated.
14066 @item iexten
14067 @opindex iexten
14068 Enable non-POSIX special characters.  May be negated.
14070 @item echo
14071 @opindex echo
14072 Echo input characters.  May be negated.
14074 @item echoe
14075 @itemx crterase
14076 @opindex echoe
14077 @opindex crterase
14078 Echo @code{erase} characters as backspace-space-backspace.  May be
14079 negated.
14081 @item echok
14082 @opindex echok
14083 @cindex newline echoing after @code{kill}
14084 Echo a newline after a @code{kill} character.  May be negated.
14086 @item echonl
14087 @opindex echonl
14088 @cindex newline, echoing
14089 Echo newline even if not echoing other characters.  May be negated.
14091 @item noflsh
14092 @opindex noflsh
14093 @cindex flushing, disabling
14094 Disable flushing after @code{interrupt} and @code{quit} special
14095 characters.  May be negated.
14097 @item xcase
14098 @opindex xcase
14099 @cindex case translation
14100 Enable input and output of uppercase characters by preceding their
14101 lowercase equivalents with @samp{\}, when @code{icanon} is set.
14102 Non-POSIX@.  May be negated.
14104 @item tostop
14105 @opindex tostop
14106 @cindex background jobs, stopping at terminal write
14107 Stop background jobs that try to write to the terminal.  Non-POSIX@.
14108 May be negated.
14110 @item echoprt
14111 @itemx prterase
14112 @opindex echoprt
14113 @opindex prterase
14114 Echo erased characters backward, between @samp{\} and @samp{/}.
14115 Non-POSIX@.  May be negated.
14117 @item echoctl
14118 @itemx ctlecho
14119 @opindex echoctl
14120 @opindex ctlecho
14121 @cindex control characters, using @samp{^@var{c}}
14122 @cindex hat notation for control characters
14123 Echo control characters in hat notation (@samp{^@var{c}}) instead
14124 of literally.  Non-POSIX@.  May be negated.
14126 @item echoke
14127 @itemx crtkill
14128 @opindex echoke
14129 @opindex crtkill
14130 Echo the @code{kill} special character by erasing each character on
14131 the line as indicated by the @code{echoprt} and @code{echoe} settings,
14132 instead of by the @code{echoctl} and @code{echok} settings.
14133 Non-POSIX@.
14134 May be negated.
14136 @item extproc
14137 @opindex extproc
14138 Enable @samp{LINEMODE}, which is used to avoid echoing
14139 each character over high latency links.  See also
14140 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1116.txt, Internet RFC 1116}.
14141 Non-POSIX@.
14142 May be negated.
14143 @end table
14146 @node Combination
14147 @subsection Combination settings
14149 @cindex combination settings
14150 Combination settings:
14152 @table @samp
14153 @item evenp
14154 @opindex evenp
14155 @itemx parity
14156 @opindex parity
14157 Same as @code{parenb -parodd cs7}.  May be negated.  If negated, same
14158 as @code{-parenb cs8}.
14160 @item oddp
14161 @opindex oddp
14162 Same as @code{parenb parodd cs7}.  May be negated.  If negated, same
14163 as @code{-parenb cs8}.
14165 @item nl
14166 @opindex nl
14167 Same as @code{-icrnl -onlcr}.  May be negated.  If negated, same as
14168 @code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}.
14170 @item ek
14171 @opindex ek
14172 Reset the @code{erase} and @code{kill} special characters to their default
14173 values.
14175 @item sane
14176 @opindex sane
14177 Same as:
14179 @c This is too long to write inline.
14180 @example
14181 cread -ignbrk brkint -inlcr -igncr icrnl
14182 icanon iexten echo echoe echok -echonl -noflsh
14183 -ixoff -iutf8 -iuclc -ixany imaxbel -xcase -olcuc -ocrnl
14184 opost -ofill onlcr -onocr -onlret nl0 cr0 tab0 bs0 vt0 ff0
14185 isig -tostop -ofdel -echoprt echoctl echoke -extproc
14186 @end example
14188 @noindent
14189 and also sets all special characters to their default values.
14191 @item cooked
14192 @opindex cooked
14193 Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus
14194 sets the @code{eof} and @code{eol} characters to their default values
14195 if they are the same as the @code{min} and @code{time} characters.
14196 May be negated.  If negated, same as @code{raw}.
14198 @item raw
14199 @opindex raw
14200 Same as:
14202 @example
14203 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
14204 -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost
14205 -isig -iuclc -ixany -imaxbel -xcase min 1 time 0
14206 @end example
14208 @noindent
14209 May be negated.  If negated, same as @code{cooked}.
14211 @item cbreak
14212 @opindex cbreak
14213 Same as @option{-icanon}.  May be negated.  If negated, same as
14214 @code{icanon}.
14216 @item pass8
14217 @opindex pass8
14218 @cindex eight-bit characters
14219 Same as @code{-parenb -istrip cs8}.  May be negated.  If negated,
14220 same as @code{parenb istrip cs7}.
14222 @item litout
14223 @opindex litout
14224 Same as @option{-parenb -istrip -opost cs8}.  May be negated.
14225 If negated, same as @code{parenb istrip opost cs7}.
14227 @item decctlq
14228 @opindex decctlq
14229 Same as @option{-ixany}.  Non-POSIX@.  May be negated.
14231 @item tabs
14232 @opindex tabs
14233 Same as @code{tab0}.  Non-POSIX@.  May be negated.  If negated, same
14234 as @code{tab3}.
14236 @item lcase
14237 @itemx LCASE
14238 @opindex lcase
14239 @opindex LCASE
14240 Same as @code{xcase iuclc olcuc}.  Non-POSIX@.  May be negated.
14241 (Used for terminals with uppercase characters only.)
14243 @item crt
14244 @opindex crt
14245 Same as @code{echoe echoctl echoke}.
14247 @item dec
14248 @opindex dec
14249 Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}.
14250 @end table
14253 @node Characters
14254 @subsection Special characters
14256 @cindex special characters
14257 @cindex characters, special
14259 The special characters' default values vary from system to system.
14260 They are set with the syntax @samp{name value}, where the names are
14261 listed below and the value can be given either literally, in hat
14262 notation (@samp{^@var{c}}), or as an integer which may start with
14263 @samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or
14264 any other digit to indicate decimal.
14266 @cindex disabling special characters
14267 @kindex u@r{, and disabling special characters}
14268 For GNU stty, giving a value of @code{^-} or @code{undef} disables that
14269 special character.  (This is incompatible with Ultrix @command{stty},
14270 which uses  a value of @samp{u} to disable a special character.  GNU
14271 @command{stty} treats a value @samp{u} like any other, namely to set that
14272 special character to @key{U}.)
14274 @table @samp
14276 @item intr
14277 @opindex intr
14278 Send an interrupt signal.
14280 @item quit
14281 @opindex quit
14282 Send a quit signal.
14284 @item erase
14285 @opindex erase
14286 Erase the last character typed.
14288 @item kill
14289 @opindex kill
14290 Erase the current line.
14292 @item eof
14293 @opindex eof
14294 Send an end of file (terminate the input).
14296 @item eol
14297 @opindex eol
14298 End the line.
14300 @item eol2
14301 @opindex eol2
14302 Alternate character to end the line.  Non-POSIX.
14304 @item discard
14305 @opindex discard
14306 @opindex flush
14307 Alternate character to toggle discarding of output.  Non-POSIX.
14309 @item swtch
14310 @opindex swtch
14311 Switch to a different shell layer.  Non-POSIX.
14313 @item status
14314 @opindex status
14315 Send an info signal.  Not currently supported on Linux.  Non-POSIX.
14317 @item start
14318 @opindex start
14319 Restart the output after stopping it.
14321 @item stop
14322 @opindex stop
14323 Stop the output.
14325 @item susp
14326 @opindex susp
14327 Send a terminal stop signal.
14329 @item dsusp
14330 @opindex dsusp
14331 Send a terminal stop signal after flushing the input.  Non-POSIX.
14333 @item rprnt
14334 @opindex rprnt
14335 Redraw the current line.  Non-POSIX.
14337 @item werase
14338 @opindex werase
14339 Erase the last word typed.  Non-POSIX.
14341 @item lnext
14342 @opindex lnext
14343 Enter the next character typed literally, even if it is a special
14344 character.  Non-POSIX.
14345 @end table
14348 @node Special
14349 @subsection Special settings
14351 @cindex special settings
14353 @table @samp
14354 @item min @var{n}
14355 @opindex min
14356 Set the minimum number of characters that will satisfy a read until
14357 the time value has expired, when @option{-icanon} is set.
14359 @item time @var{n}
14360 @opindex time
14361 Set the number of tenths of a second before reads time out if the minimum
14362 number of characters have not been read, when @option{-icanon} is set.
14364 @item ispeed @var{n}
14365 @opindex ispeed
14366 Set the input speed to @var{n}.
14368 @item ospeed @var{n}
14369 @opindex ospeed
14370 Set the output speed to @var{n}.
14372 @item rows @var{n}
14373 @opindex rows
14374 Tell the tty kernel driver that the terminal has @var{n} rows.
14375 Non-POSIX.
14377 @item cols @var{n}
14378 @itemx columns @var{n}
14379 @opindex cols
14380 @opindex columns
14381 Tell the kernel that the terminal has @var{n} columns.  Non-POSIX.
14383 @item size
14384 @opindex size
14385 @vindex LINES
14386 @vindex COLUMNS
14387 Print the number of rows and columns that the kernel thinks the
14388 terminal has.  (Systems that don't support rows and columns in the kernel
14389 typically use the environment variables @env{LINES} and @env{COLUMNS}
14390 instead; however, GNU @command{stty} does not know anything about them.)
14391 Non-POSIX.
14393 @item line @var{n}
14394 @opindex line
14395 Use line discipline @var{n}.  Non-POSIX.
14397 @item speed
14398 @opindex speed
14399 Print the terminal speed.
14401 @item @var{n}
14402 @cindex baud rate, setting
14403 Set the input and output speeds to @var{n}.  @var{n} can be one of: 0
14404 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200
14405 38400 @code{exta} @code{extb}.  @code{exta} is the same as 19200;
14406 @code{extb} is the same as 38400.  Many systems, including GNU/Linux,
14407 support higher speeds.  The @command{stty} command includes support
14408 for speeds of
14409 57600,
14410 115200,
14411 230400,
14412 460800,
14413 500000,
14414 576000,
14415 921600,
14416 1000000,
14417 1152000,
14418 1500000,
14419 2000000,
14420 2500000,
14421 3000000,
14422 3500000,
14424 4000000 where the system supports these.
14425 0 hangs up the line if @option{-clocal} is set.
14426 @end table
14429 @node printenv invocation
14430 @section @command{printenv}: Print all or some environment variables
14432 @pindex printenv
14433 @cindex printing all or some environment variables
14434 @cindex environment variables, printing
14436 @command{printenv} prints environment variable values.  Synopsis:
14438 @example
14439 printenv [@var{option}] [@var{variable}]@dots{}
14440 @end example
14442 If no @var{variable}s are specified, @command{printenv} prints the value of
14443 every environment variable.  Otherwise, it prints the value of each
14444 @var{variable} that is set, and nothing for those that are not set.
14446 The program accepts the following option.  Also see @ref{Common options}.
14448 @table @samp
14450 @optNull
14452 @end table
14454 @cindex exit status of @command{printenv}
14455 Exit status:
14457 @display
14458 0 if all variables specified were found
14459 1 if at least one specified variable was not found
14460 2 if a write error occurred
14461 @end display
14464 @node tty invocation
14465 @section @command{tty}: Print file name of terminal on standard input
14467 @pindex tty
14468 @cindex print terminal file name
14469 @cindex terminal file name, printing
14471 @command{tty} prints the file name of the terminal connected to its standard
14472 input.  It prints @samp{not a tty} if standard input is not a terminal.
14473 Synopsis:
14475 @example
14476 tty [@var{option}]@dots{}
14477 @end example
14479 The program accepts the following option.  Also see @ref{Common options}.
14481 @table @samp
14483 @item -s
14484 @itemx --silent
14485 @itemx --quiet
14486 @opindex -s
14487 @opindex --silent
14488 @opindex --quiet
14489 Print nothing; only return an exit status.
14491 @end table
14493 @cindex exit status of @command{tty}
14494 Exit status:
14496 @display
14497 0 if standard input is a terminal
14498 1 if standard input is not a terminal
14499 2 if given incorrect arguments
14500 3 if a write error occurs
14501 @end display
14504 @node User information
14505 @chapter User information
14507 @cindex user information, commands for
14508 @cindex commands for printing user information
14510 This section describes commands that print user-related information:
14511 logins, groups, and so forth.
14513 @menu
14514 * id invocation::               Print user identity.
14515 * logname invocation::          Print current login name.
14516 * whoami invocation::           Print effective user ID.
14517 * groups invocation::           Print group names a user is in.
14518 * users invocation::            Print login names of users currently logged in.
14519 * who invocation::              Print who is currently logged in.
14520 @end menu
14523 @node id invocation
14524 @section @command{id}: Print user identity
14526 @pindex id
14527 @cindex real user and group IDs, printing
14528 @cindex effective user and group IDs, printing
14529 @cindex printing real and effective user and group IDs
14531 @command{id} prints information about the given user, or the process
14532 running it if no user is specified.  Synopsis:
14534 @example
14535 id [@var{option}]@dots{} [@var{user}]
14536 @end example
14538 @var{user} can be either a user ID or a name, with name look-up
14539 taking precedence unless the ID is specified with a leading @samp{+}.
14540 @xref{Disambiguating names and IDs}.
14542 @vindex POSIXLY_CORRECT
14543 By default, it prints the real user ID, real group ID, effective user ID
14544 if different from the real user ID, effective group ID if different from
14545 the real group ID, and supplemental group IDs.
14546 In addition, if SELinux
14547 is enabled and the @env{POSIXLY_CORRECT} environment variable is not set,
14548 then print @samp{context=@var{c}}, where @var{c} is the security context.
14550 Each of these numeric values is preceded by an identifying string and
14551 followed by the corresponding user or group name in parentheses.
14553 The options cause @command{id} to print only part of the above information.
14554 Also see @ref{Common options}.
14556 @table @samp
14557 @item -g
14558 @itemx --group
14559 @opindex -g
14560 @opindex --group
14561 Print only the group ID.
14563 @item -G
14564 @itemx --groups
14565 @opindex -G
14566 @opindex --groups
14567 Print only the group ID and the supplementary groups.
14569 @item -n
14570 @itemx --name
14571 @opindex -n
14572 @opindex --name
14573 Print the user or group name instead of the ID number.  Requires
14574 @option{-u}, @option{-g}, or @option{-G}.
14576 @item -r
14577 @itemx --real
14578 @opindex -r
14579 @opindex --real
14580 Print the real, instead of effective, user or group ID@.  Requires
14581 @option{-u}, @option{-g}, or @option{-G}.
14583 @item -u
14584 @itemx --user
14585 @opindex -u
14586 @opindex --user
14587 Print only the user ID.
14589 @item -Z
14590 @itemx --context
14591 @opindex -Z
14592 @opindex --context
14593 @cindex SELinux
14594 @cindex security context
14595 Print only the security context of the process, which is generally
14596 the user's security context inherited from the parent process.
14597 If neither SELinux or SMACK is enabled then print a warning and
14598 set the exit status to 1.
14600 @item -z
14601 @itemx --zero
14602 @opindex -z
14603 @opindex --zero
14604 Delimit output items with NUL characters.
14605 This option is not permitted when using the default format.
14607 Example:
14608 @example
14609 $ id -Gn --zero
14610 users <NUL> devs <NUL>
14611 @end example
14613 @end table
14615 @macro primaryAndSupplementaryGroups{cmd,arg}
14616 Primary and supplementary groups for a process are normally inherited
14617 from its parent and are usually unchanged since login.  This means
14618 that if you change the group database after logging in, @command{\cmd\}
14619 will not reflect your changes within your existing login session.
14620 Running @command{\cmd\} with a \arg\ causes the user and group
14621 database to be consulted afresh, and so will give a different result.
14622 @end macro
14623 @primaryAndSupplementaryGroups{id,user argument}
14625 @exitstatus
14627 @node logname invocation
14628 @section @command{logname}: Print current login name
14630 @pindex logname
14631 @cindex printing user's login name
14632 @cindex login name, printing
14633 @cindex user name, printing
14635 @flindex utmp
14636 @command{logname} prints the calling user's name, as found in a
14637 system-maintained file (often @file{/var/run/utmp} or
14638 @file{/etc/utmp}), and exits with a status of 0.  If there is no entry
14639 for the calling process, @command{logname} prints
14640 an error message and exits with a status of 1.
14642 The only options are @option{--help} and @option{--version}.  @xref{Common
14643 options}.
14645 @exitstatus
14648 @node whoami invocation
14649 @section @command{whoami}: Print effective user ID
14651 @pindex whoami
14652 @cindex effective user ID, printing
14653 @cindex printing the effective user ID
14655 @command{whoami} prints the user name associated with the current
14656 effective user ID@.  It is equivalent to the command @samp{id -un}.
14658 The only options are @option{--help} and @option{--version}.  @xref{Common
14659 options}.
14661 @exitstatus
14664 @node groups invocation
14665 @section @command{groups}: Print group names a user is in
14667 @pindex groups
14668 @cindex printing groups a user is in
14669 @cindex supplementary groups, printing
14671 @command{groups} prints the names of the primary and any supplementary
14672 groups for each given @var{username}, or the current process if no names
14673 are given.  If more than one name is given, the name of each user is
14674 printed before
14675 the list of that user's groups and the user name is separated from the
14676 group list by a colon.  Synopsis:
14678 @example
14679 groups [@var{username}]@dots{}
14680 @end example
14682 The group lists are equivalent to the output of the command @samp{id -Gn}.
14684 The only options are @option{--help} and @option{--version}.  @xref{Common
14685 options}.
14687 @primaryAndSupplementaryGroups{groups,list of users}
14689 @exitstatus
14691 @node users invocation
14692 @section @command{users}: Print login names of users currently logged in
14694 @pindex users
14695 @cindex printing current usernames
14696 @cindex usernames, printing current
14698 @cindex login sessions, printing users with
14699 @command{users} prints on a single line a blank-separated list of user
14700 names of users currently logged in to the current host.  Each user name
14701 corresponds to a login session, so if a user has more than one login
14702 session, that user's name will appear the same number of times in the
14703 output.  Synopsis:
14705 @example
14706 users [@var{file}]
14707 @end example
14709 @flindex utmp
14710 @flindex wtmp
14711 With no @var{file} argument, @command{users} extracts its information from
14712 a system-maintained file (often @file{/var/run/utmp} or
14713 @file{/etc/utmp}).  If a file argument is given, @command{users} uses
14714 that file instead.  A common choice is @file{/var/log/wtmp}.
14716 The only options are @option{--help} and @option{--version}.  @xref{Common
14717 options}.
14719 The @command{users} command is installed only on platforms with the
14720 POSIX @code{<utmpx.h>} include file or equivalent, so portable scripts
14721 should not rely on its existence on non-POSIX platforms.
14723 @exitstatus
14726 @node who invocation
14727 @section @command{who}: Print who is currently logged in
14729 @pindex who
14730 @cindex printing current user information
14731 @cindex information, about current users
14733 @command{who} prints information about users who are currently logged on.
14734 Synopsis:
14736 @example
14737 @command{who} [@var{option}] [@var{file}] [am i]
14738 @end example
14740 @cindex terminal lines, currently used
14741 @cindex login time
14742 @cindex remote hostname
14743 If given no non-option arguments, @command{who} prints the following
14744 information for each user currently logged on: login name, terminal
14745 line, login time, and remote hostname or X display.
14747 @flindex utmp
14748 @flindex wtmp
14749 If given one non-option argument, @command{who} uses that instead of
14750 a default system-maintained file (often @file{/var/run/utmp} or
14751 @file{/etc/utmp}) as the name of the file containing the record of
14752 users logged on.  @file{/var/log/wtmp} is commonly given as an argument
14753 to @command{who} to look at who has previously logged on.
14755 @opindex am i
14756 @opindex who am i
14757 If given two non-option arguments, @command{who} prints only the entry
14758 for the user running it (determined from its standard input), preceded
14759 by the hostname.  Traditionally, the two arguments given are @samp{am
14760 i}, as in @samp{who am i}.
14762 @vindex TZ
14763 Time stamps are listed according to the time zone rules specified by
14764 the @env{TZ} environment variable, or by the system default rules if
14765 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
14766 with @env{TZ}, libc, The GNU C Library Reference Manual}.
14768 The program accepts the following options.  Also see @ref{Common options}.
14770 @table @samp
14772 @item -a
14773 @itemx --all
14774 @opindex -a
14775 @opindex --all
14776 Same as @samp{-b -d --login -p -r -t -T -u}.
14778 @item -b
14779 @itemx --boot
14780 @opindex -b
14781 @opindex --boot
14782 Print the date and time of last system boot.
14784 @item -d
14785 @itemx --dead
14786 @opindex -d
14787 @opindex --dead
14788 Print information corresponding to dead processes.
14790 @item -H
14791 @itemx --heading
14792 @opindex -H
14793 @opindex --heading
14794 Print a line of column headings.
14796 @item -l
14797 @itemx --login
14798 @opindex -l
14799 @opindex --login
14800 List only the entries that correspond to processes via which the
14801 system is waiting for a user to login.  The user name is always @samp{LOGIN}.
14803 @item --lookup
14804 @opindex --lookup
14805 Attempt to canonicalize hostnames found in utmp through a DNS lookup.  This
14806 is not the default because it can cause significant delays on systems with
14807 automatic dial-up internet access.
14809 @item -m
14810 @opindex -m
14811 Same as @samp{who am i}.
14813 @item -p
14814 @itemx --process
14815 @opindex -p
14816 @opindex --process
14817 List active processes spawned by init.
14819 @item -q
14820 @itemx --count
14821 @opindex -q
14822 @opindex --count
14823 Print only the login names and the number of users logged on.
14824 Overrides all other options.
14826 @item -r
14827 @itemx --runlevel
14828 @opindex -r
14829 @opindex --runlevel
14830 Print the current (and maybe previous) run-level of the init process.
14832 @item -s
14833 @opindex -s
14834 Ignored; for compatibility with other versions of @command{who}.
14836 @item -t
14837 @itemx --time
14838 @opindex -t
14839 @opindex --time
14840 Print last system clock change.
14842 @item -u
14843 @opindex -u
14844 @cindex idle time
14845 After the login time, print the number of hours and minutes that the
14846 user has been idle.  @samp{.} means the user was active in the last minute.
14847 @samp{old} means the user has been idle for more than 24 hours.
14849 @item -w
14850 @itemx -T
14851 @itemx --mesg
14852 @itemx --message
14853 @itemx --writable
14854 @opindex -w
14855 @opindex -T
14856 @opindex --mesg
14857 @opindex --message
14858 @opindex --writable
14859 @cindex message status
14860 @pindex write@r{, allowed}
14861 After each login name print a character indicating the user's message status:
14863 @display
14864 @samp{+} allowing @code{write} messages
14865 @samp{-} disallowing @code{write} messages
14866 @samp{?} cannot find terminal device
14867 @end display
14869 @end table
14871 The @command{who} command is installed only on platforms with the
14872 POSIX @code{<utmpx.h>} include file or equivalent, so portable scripts
14873 should not rely on its existence on non-POSIX platforms.
14875 @exitstatus
14878 @node System context
14879 @chapter System context
14881 @cindex system context
14882 @cindex context, system
14883 @cindex commands for system context
14885 This section describes commands that print or change system-wide
14886 information.
14888 @menu
14889 * date invocation::             Print or set system date and time.
14890 * arch invocation::             Print machine hardware name.
14891 * nproc invocation::            Print the number of processors.
14892 * uname invocation::            Print system information.
14893 * hostname invocation::         Print or set system name.
14894 * hostid invocation::           Print numeric host identifier.
14895 * uptime invocation::           Print system uptime and load.
14896 @end menu
14898 @node date invocation
14899 @section @command{date}: Print or set system date and time
14901 @pindex date
14902 @cindex time, printing or setting
14903 @cindex printing the current time
14905 Synopses:
14907 @example
14908 date [@var{option}]@dots{} [+@var{format}]
14909 date [-u|--utc|--universal] @c this avoids a newline in the output
14910 [ MMDDhhmm[[CC]YY][.ss] ]
14911 @end example
14913 @vindex LC_TIME
14914 Invoking @command{date} with no @var{format} argument is equivalent to invoking
14915 it with a default format that depends on the @env{LC_TIME} locale category.
14916 In the default C locale, this format is @samp{'+%a %b %e %H:%M:%S %Z %Y'},
14917 so the output looks like @samp{Thu Mar @ 3 13:47:51 PST 2005}.
14919 @vindex TZ
14920 Normally, @command{date} uses the time zone rules indicated by the
14921 @env{TZ} environment variable, or the system default rules if @env{TZ}
14922 is not set.  @xref{TZ Variable,, Specifying the Time Zone with
14923 @env{TZ}, libc, The GNU C Library Reference Manual}.
14925 @findex strftime @r{and @command{date}}
14926 @cindex time formats
14927 @cindex formatting times
14928 If given an argument that starts with a @samp{+}, @command{date} prints the
14929 current date and time (or the date and time specified by the
14930 @option{--date} option, see below) in the format defined by that argument,
14931 which is similar to that of the @code{strftime} function.  Except for
14932 conversion specifiers, which start with @samp{%}, characters in the
14933 format string are printed unchanged.  The conversion specifiers are
14934 described below.
14936 @exitstatus
14938 @menu
14939 * Time conversion specifiers::     %[HIklMNpPrRsSTXzZ]
14940 * Date conversion specifiers::     %[aAbBcCdDeFgGhjmuUVwWxyY]
14941 * Literal conversion specifiers::  %[%nt]
14942 * Padding and other flags::        Pad with zeros, spaces, etc.
14943 * Setting the time::               Changing the system clock.
14944 * Options for date::               Instead of the current time.
14945 @detailmenu
14946 * Date input formats::             Specifying date strings.
14947 @end detailmenu
14948 * Examples of date::               Examples.
14949 @end menu
14951 @node Time conversion specifiers
14952 @subsection Time conversion specifiers
14954 @cindex time conversion specifiers
14955 @cindex conversion specifiers, time
14957 @command{date} conversion specifiers related to times.
14959 @table @samp
14960 @item %H
14961 hour (@samp{00}@dots{}@samp{23})
14962 @item %I
14963 hour (@samp{01}@dots{}@samp{12})
14964 @item %k
14965 hour, space padded (@samp{ 0}@dots{}@samp{23}); equivalent to @samp{%_H}@.
14966 This is a GNU extension.
14967 @item %l
14968 hour, space padded (@samp{ 1}@dots{}@samp{12}); equivalent to @samp{%_I}@.
14969 This is a GNU extension.
14970 @item %M
14971 minute (@samp{00}@dots{}@samp{59})
14972 @item %N
14973 nanoseconds (@samp{000000000}@dots{}@samp{999999999}).
14974 This is a GNU extension.
14975 @item %p
14976 locale's equivalent of either @samp{AM} or @samp{PM};
14977 blank in many locales.
14978 Noon is treated as @samp{PM} and midnight as @samp{AM}.
14979 @item %P
14980 like @samp{%p}, except lower case.
14981 This is a GNU extension.
14982 @item %r
14983 locale's 12-hour clock time (e.g., @samp{11:11:04 PM})
14984 @item %R
14985 24-hour hour and minute.  Same as @samp{%H:%M}.
14986 @item %s
14987 @cindex epoch, seconds since
14988 @cindex seconds since the epoch
14989 @cindex beginning of time
14990 @cindex leap seconds
14991 seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC@.
14992 Leap seconds are not counted unless leap second support is available.
14993 @xref{%s-examples}, for examples.
14994 This is a GNU extension.
14995 @item %S
14996 @cindex leap seconds
14997 second (@samp{00}@dots{}@samp{60}).
14998 This may be @samp{60} if leap seconds are supported.
14999 @item %T
15000 24-hour hour, minute, and second.  Same as @samp{%H:%M:%S}.
15001 @item %X
15002 locale's time representation (e.g., @samp{23:13:48})
15003 @item %z
15004 @w{RFC 2822/ISO 8601} style numeric time zone
15005 (e.g., @samp{-0600} or @samp{+0530}), or nothing if no
15006 time zone is determinable.  This value reflects the numeric time zone
15007 appropriate for the current time, using the time zone rules specified
15008 by the @env{TZ} environment variable.
15009 The time (and optionally, the time zone rules) can be overridden
15010 by the @option{--date} option.
15011 @item %:z
15012 @w{RFC 3339/ISO 8601} style numeric time zone with
15013 @samp{:} (e.g., @samp{-06:00} or @samp{+05:30}), or nothing if no time
15014 zone is determinable.
15015 This is a GNU extension.
15016 @item %::z
15017 Numeric time zone to the nearest second with @samp{:} (e.g.,
15018 @samp{-06:00:00} or @samp{+05:30:00}), or nothing if no time zone is
15019 determinable.
15020 This is a GNU extension.
15021 @item %:::z
15022 Numeric time zone with @samp{:} using the minimum necessary precision
15023 (e.g., @samp{-06}, @samp{+05:30}, or @samp{-04:56:02}), or nothing if
15024 no time zone is determinable.
15025 This is a GNU extension.
15026 @item %Z
15027 alphabetic time zone abbreviation (e.g., @samp{EDT}), or nothing if no
15028 time zone is determinable.  See @samp{%z} for how it is determined.
15029 @end table
15032 @node Date conversion specifiers
15033 @subsection Date conversion specifiers
15035 @cindex date conversion specifiers
15036 @cindex conversion specifiers, date
15038 @command{date} conversion specifiers related to dates.
15040 @table @samp
15041 @item %a
15042 locale's abbreviated weekday name (e.g., @samp{Sun})
15043 @item %A
15044 locale's full weekday name, variable length (e.g., @samp{Sunday})
15045 @item %b
15046 locale's abbreviated month name (e.g., @samp{Jan})
15047 @item %B
15048 locale's full month name, variable length (e.g., @samp{January})
15049 @item %c
15050 locale's date and time (e.g., @samp{Thu Mar @ 3 23:05:25 2005})
15051 @item %C
15052 century.  This is like @samp{%Y}, except the last two digits are omitted.
15053 For example, it is @samp{20} if @samp{%Y} is @samp{2000},
15054 and is @samp{-0} if @samp{%Y} is @samp{-001}.
15055 It is normally at least two characters, but it may be more.
15056 @item %d
15057 day of month (e.g., @samp{01})
15058 @item %D
15059 date; same as @samp{%m/%d/%y}
15060 @item %e
15061 day of month, space padded; same as @samp{%_d}
15062 @item %F
15063 full date in ISO 8601 format; same as @samp{%Y-%m-%d}.
15064 This is a good choice for a date format, as it is standard and
15065 is easy to sort in the usual case where years are in the range
15066 0000@dots{}9999.
15067 @item %g
15068 year corresponding to the ISO week number, but without the century
15069 (range @samp{00} through @samp{99}).  This has the same format and value
15070 as @samp{%y}, except that if the ISO week number (see
15071 @samp{%V}) belongs
15072 to the previous or next year, that year is used instead.
15073 @item %G
15074 year corresponding to the ISO week number.  This has the
15075 same format and value as @samp{%Y}, except that if the ISO
15076 week number (see
15077 @samp{%V}) belongs to the previous or next year, that year is used
15078 instead.
15079 It is normally useful only if @samp{%V} is also used;
15080 for example, the format @samp{%G-%m-%d} is probably a mistake,
15081 since it combines the ISO week number year with the conventional month and day.
15082 @item %h
15083 same as @samp{%b}
15084 @item %j
15085 day of year (@samp{001}@dots{}@samp{366})
15086 @item %m
15087 month (@samp{01}@dots{}@samp{12})
15088 @item %u
15089 day of week (@samp{1}@dots{}@samp{7}) with @samp{1} corresponding to Monday
15090 @item %U
15091 week number of year, with Sunday as the first day of the week
15092 (@samp{00}@dots{}@samp{53}).
15093 Days in a new year preceding the first Sunday are in week zero.
15094 @item %V
15095 ISO week number, that is, the
15096 week number of year, with Monday as the first day of the week
15097 (@samp{01}@dots{}@samp{53}).
15098 If the week containing January 1 has four or more days in
15099 the new year, then it is considered week 1; otherwise, it is week 53 of
15100 the previous year, and the next week is week 1.  (See the ISO 8601
15101 standard.)
15102 @item %w
15103 day of week (@samp{0}@dots{}@samp{6}) with 0 corresponding to Sunday
15104 @item %W
15105 week number of year, with Monday as first day of week
15106 (@samp{00}@dots{}@samp{53}).
15107 Days in a new year preceding the first Monday are in week zero.
15108 @item %x
15109 locale's date representation (e.g., @samp{12/31/99})
15110 @item %y
15111 last two digits of year (@samp{00}@dots{}@samp{99})
15112 @item %Y
15113 year.  This is normally at least four characters, but it may be more.
15114 Year @samp{0000} precedes year @samp{0001}, and year @samp{-001}
15115 precedes year @samp{0000}.
15116 @end table
15119 @node Literal conversion specifiers
15120 @subsection Literal conversion specifiers
15122 @cindex literal conversion specifiers
15123 @cindex conversion specifiers, literal
15125 @command{date} conversion specifiers that produce literal strings.
15127 @table @samp
15128 @item %%
15129 a literal %
15130 @item %n
15131 a newline
15132 @item %t
15133 a horizontal tab
15134 @end table
15137 @node Padding and other flags
15138 @subsection Padding and other flags
15140 @cindex numeric field padding
15141 @cindex padding of numeric fields
15142 @cindex fields, padding numeric
15144 Unless otherwise specified, @command{date} normally pads numeric fields
15145 with zeros, so that, for
15146 example, numeric months are always output as two digits.
15147 Seconds since the epoch are not padded, though,
15148 since there is no natural width for them.
15150 As a GNU extension, @command{date} recognizes any of the
15151 following optional flags after the @samp{%}:
15153 @table @samp
15154 @item -
15155 (hyphen) Do not pad the field; useful if the output is intended for
15156 human consumption.
15157 @item _
15158 (underscore) Pad with spaces; useful if you need a fixed
15159 number of characters in the output, but zeros are too distracting.
15160 @item 0
15161 (zero) Pad with zeros even if the conversion specifier
15162 would normally pad with spaces.
15163 @item ^
15164 Use upper case characters if possible.
15165 @item #
15166 Use opposite case characters if possible.
15167 A field that is normally upper case becomes lower case, and vice versa.
15168 @end table
15170 @noindent
15171 Here are some examples of padding:
15173 @example
15174 date +%d/%m -d "Feb 1"
15175 @result{} 01/02
15176 date +%-d/%-m -d "Feb 1"
15177 @result{} 1/2
15178 date +%_d/%_m -d "Feb 1"
15179 @result{}  1/ 2
15180 @end example
15182 As a GNU extension, you can specify the field width
15183 (after any flag, if present) as a decimal number.  If the natural size of the
15184 output of the field has less than the specified number of characters,
15185 the result is written right adjusted and padded to the given
15186 size.  For example, @samp{%9B} prints the right adjusted month name in
15187 a field of width 9.
15189 An optional modifier can follow the optional flag and width
15190 specification.  The modifiers are:
15192 @table @samp
15193 @item E
15194 Use the locale's alternate representation for date and time.  This
15195 modifier applies to the @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X},
15196 @samp{%y} and @samp{%Y} conversion specifiers.  In a Japanese locale, for
15197 example, @samp{%Ex} might yield a date format based on the Japanese
15198 Emperors' reigns.
15200 @item O
15201 Use the locale's alternate numeric symbols for numbers.  This modifier
15202 applies only to numeric conversion specifiers.
15203 @end table
15205 If the format supports the modifier but no alternate representation
15206 is available, it is ignored.
15209 @node Setting the time
15210 @subsection Setting the time
15212 @cindex setting the time
15213 @cindex time setting
15214 @cindex appropriate privileges
15216 If given an argument that does not start with @samp{+}, @command{date} sets
15217 the system clock to the date and time specified by that argument (as
15218 described below).  You must have appropriate privileges to set the
15219 system clock.  Note for changes to persist across a reboot, the
15220 hardware clock may need to be updated from the system clock, which
15221 might not happen automatically on your system.
15223 The argument must consist entirely of digits, which have the following
15224 meaning:
15226 @table @samp
15227 @item MM
15228 month
15229 @item DD
15230 day within month
15231 @item hh
15232 hour
15233 @item mm
15234 minute
15235 @item CC
15236 first two digits of year (optional)
15237 @item YY
15238 last two digits of year (optional)
15239 @item ss
15240 second (optional)
15241 @end table
15243 Note, the @option{--date} and @option{--set} options may not be used with an
15244 argument in the above format.  The @option{--universal} option may be used
15245 with such an argument to indicate that the specified date and time are
15246 relative to Coordinated Universal Time rather than to the local time zone.
15249 @node Options for date
15250 @subsection Options for @command{date}
15252 @cindex @command{date} options
15253 @cindex options for @command{date}
15255 The program accepts the following options.  Also see @ref{Common options}.
15257 @table @samp
15259 @item -d @var{datestr}
15260 @itemx --date=@var{datestr}
15261 @opindex -d
15262 @opindex --date
15263 @cindex parsing date strings
15264 @cindex date strings, parsing
15265 @cindex arbitrary date strings, parsing
15266 @opindex yesterday
15267 @opindex tomorrow
15268 @opindex next @var{day}
15269 @opindex last @var{day}
15270 Display the date and time specified in @var{datestr} instead of the
15271 current date and time.  @var{datestr} can be in almost any common
15272 format.  It can contain month names, time zones, @samp{am} and @samp{pm},
15273 @samp{yesterday}, etc.  For example, @option{--date="2004-02-27
15274 14:19:13.489392193 +0530"} specifies the instant of time that is
15275 489,392,193 nanoseconds after February 27, 2004 at 2:19:13 PM in a
15276 time zone that is 5 hours and 30 minutes east of UTC.@*
15277 Note: input currently must be in locale independent format.  E.g., the
15278 LC_TIME=C below is needed to print back the correct date in many locales:
15279 @example
15280 date -d "$(LC_TIME=C date)"
15281 @end example
15282 @xref{Date input formats}.
15284 @item -f @var{datefile}
15285 @itemx --file=@var{datefile}
15286 @opindex -f
15287 @opindex --file
15288 Parse each line in @var{datefile} as with @option{-d} and display the
15289 resulting date and time.  If @var{datefile} is @samp{-}, use standard
15290 input.  This is useful when you have many dates to process, because the
15291 system overhead of starting up the @command{date} executable many times can
15292 be considerable.
15294 @item -I[@var{timespec}]
15295 @itemx --iso-8601[=@var{timespec}]
15296 @opindex -I[@var{timespec}]
15297 @opindex --iso-8601[=@var{timespec}]
15298 Display the date using the ISO 8601 format, @samp{%Y-%m-%d}.
15300 The argument @var{timespec} specifies the number of additional
15301 terms of the time to include.  It can be one of the following:
15302 @table @samp
15303 @item auto
15304 Print just the date.  This is the default if @var{timespec} is omitted.
15306 @item hours
15307 Append the hour of the day to the date.
15309 @item minutes
15310 Append the hours and minutes.
15312 @item seconds
15313 Append the hours, minutes and seconds.
15315 @item ns
15316 Append the hours, minutes, seconds and nanoseconds.
15317 @end table
15319 If showing any time terms, then include the time zone using the format
15320 @samp{%:z}.
15321 @macro dateParseNote
15322 This format is always suitable as input
15323 for the @option{--date} (@option{-d}) and @option{--file}
15324 (@option{-f}) options, regardless of the current locale.
15325 @end macro
15326 @dateParseNote
15328 @item -r @var{file}
15329 @itemx --reference=@var{file}
15330 @opindex -r
15331 @opindex --reference
15332 Display the date and time of the last modification of @var{file},
15333 instead of the current date and time.
15335 @item -R
15336 @itemx --rfc-822
15337 @itemx --rfc-2822
15338 @opindex -R
15339 @opindex --rfc-822
15340 @opindex --rfc-2822
15341 Display the date and time using the format @samp{%a, %d %b %Y %H:%M:%S
15342 %z}, evaluated in the C locale so abbreviations are always in English.
15343 For example:
15345 @example
15346 Fri, 09 Sep 2005 13:51:39 -0700
15347 @end example
15349 This format conforms to
15350 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet
15351 RFCs 2822} and
15352 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, 822}, the
15353 current and previous standards for Internet email.
15355 @item --rfc-3339=@var{timespec}
15356 @opindex --rfc-3339=@var{timespec}
15357 Display the date using a format specified by
15358 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet
15359 RFC 3339}.  This is a subset of the ISO 8601
15360 format, except that it also permits applications to use a space rather
15361 than a @samp{T} to separate dates from times.
15362 @dateParseNote
15364 The argument @var{timespec} specifies how much of the time to include.
15365 It can be one of the following:
15367 @table @samp
15368 @item date
15369 Print just the full-date, e.g., @samp{2005-09-14}.
15370 This is equivalent to the format @samp{%Y-%m-%d}.
15372 @item seconds
15373 Print the full-date and full-time separated by a space, e.g.,
15374 @samp{2005-09-14 00:56:06+05:30}.  The output ends with a numeric
15375 time-offset; here the @samp{+05:30} means that local time is five
15376 hours and thirty minutes east of UTC@.  This is equivalent to
15377 the format @samp{%Y-%m-%d %H:%M:%S%:z}.
15379 @item ns
15380 Like @samp{seconds}, but also print nanoseconds, e.g.,
15381 @samp{2005-09-14 00:56:06.998458565+05:30}.
15382 This is equivalent to the format @samp{%Y-%m-%d %H:%M:%S.%N%:z}.
15384 @end table
15386 @item -s @var{datestr}
15387 @itemx --set=@var{datestr}
15388 @opindex -s
15389 @opindex --set
15390 Set the date and time to @var{datestr}.  See @option{-d} above.
15391 See also @ref{Setting the time}.
15393 @item -u
15394 @itemx --utc
15395 @itemx --universal
15396 @opindex -u
15397 @opindex --utc
15398 @opindex --universal
15399 @cindex Coordinated Universal Time
15400 @cindex UTC
15401 @cindex Greenwich Mean Time
15402 @cindex GMT
15403 @cindex leap seconds
15404 @vindex TZ
15405 Use Coordinated Universal Time (UTC) by operating as if the
15406 @env{TZ} environment variable were set to the string @samp{UTC0}.
15407 Coordinated
15408 Universal Time is often called ``Greenwich Mean Time'' (GMT) for
15409 historical reasons.
15410 Typically, systems ignore leap seconds and thus implement an
15411 approximation to UTC rather than true UTC.
15412 @end table
15415 @node Examples of date
15416 @subsection Examples of @command{date}
15418 @cindex examples of @command{date}
15420 Here are a few examples.  Also see the documentation for the @option{-d}
15421 option in the previous section.
15423 @itemize @bullet
15425 @item
15426 To print the date of the day before yesterday:
15428 @example
15429 date --date='2 days ago'
15430 @end example
15432 @item
15433 To print the date of the day three months and one day hence:
15435 @example
15436 date --date='3 months 1 day'
15437 @end example
15439 @item
15440 To print the day of year of Christmas in the current year:
15442 @example
15443 date --date='25 Dec' +%j
15444 @end example
15446 @item
15447 To print the current full month name and the day of the month:
15449 @example
15450 date '+%B %d'
15451 @end example
15453 But this may not be what you want because for the first nine days of
15454 the month, the @samp{%d} expands to a zero-padded two-digit field,
15455 for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}.
15457 @item
15458 To print a date without the leading zero for one-digit days
15459 of the month, you can use the (GNU extension)
15460 @samp{-} flag to suppress
15461 the padding altogether:
15463 @example
15464 date -d 1may '+%B %-d
15465 @end example
15467 @item
15468 To print the current date and time in the format required by many
15469 non-GNU versions of @command{date} when setting the system clock:
15471 @example
15472 date +%m%d%H%M%Y.%S
15473 @end example
15475 @item
15476 To set the system clock forward by two minutes:
15478 @example
15479 date --set='+2 minutes'
15480 @end example
15482 @item
15483 To print the date in RFC 2822 format,
15484 use @samp{date --rfc-2822}.  Here is some example output:
15486 @example
15487 Fri, 09 Sep 2005 13:51:39 -0700
15488 @end example
15490 @anchor{%s-examples}
15491 @item
15492 To convert a date string to the number of seconds since the epoch
15493 (which is 1970-01-01 00:00:00 UTC), use the @option{--date} option with
15494 the @samp{%s} format.  That can be useful in sorting and/or graphing
15495 and/or comparing data by date.  The following command outputs the
15496 number of the seconds since the epoch for the time two minutes after the
15497 epoch:
15499 @example
15500 date --date='1970-01-01 00:02:00 +0000' +%s
15502 @end example
15504 If you do not specify time zone information in the date string,
15505 @command{date} uses your computer's idea of the time zone when
15506 interpreting the string.  For example, if your computer's time zone is
15507 that of Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000
15508 seconds) behind UTC:
15510 @example
15511 # local time zone used
15512 date --date='1970-01-01 00:02:00' +%s
15513 18120
15514 @end example
15516 @item
15517 If you're sorting or graphing dated data, your raw date values may be
15518 represented as seconds since the epoch.  But few people can look at
15519 the date @samp{946684800} and casually note ``Oh, that's the first second
15520 of the year 2000 in Greenwich, England.''
15522 @example
15523 date --date='2000-01-01 UTC' +%s
15524 946684800
15525 @end example
15527 An alternative is to use the @option{--utc} (@option{-u}) option.
15528 Then you may omit @samp{UTC} from the date string.  Although this
15529 produces the same result for @samp{%s} and many other format sequences,
15530 with a time zone offset different from zero, it would give a different
15531 result for zone-dependent formats like @samp{%z}.
15533 @example
15534 date -u --date=2000-01-01 +%s
15535 946684800
15536 @end example
15538 To convert such an unwieldy number of seconds back to
15539 a more readable form, use a command like this:
15541 @smallexample
15542 # local time zone used
15543 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
15544 1999-12-31 19:00:00 -0500
15545 @end smallexample
15547 Or if you do not mind depending on the @samp{@@} feature present since
15548 coreutils 5.3.0, you could shorten this to:
15550 @smallexample
15551 date -d @@946684800 +"%F %T %z"
15552 1999-12-31 19:00:00 -0500
15553 @end smallexample
15555 Often it is better to output UTC-relative date and time:
15557 @smallexample
15558 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
15559 2000-01-01 00:00:00 +0000
15560 @end smallexample
15562 @item
15563 @cindex leap seconds
15564 Typically the seconds count omits leap seconds, but some systems are
15565 exceptions.  Because leap seconds are not predictable, the mapping
15566 between the seconds count and a future timestamp is not reliable on
15567 the atypical systems that include leap seconds in their counts.
15569 Here is how the two kinds of systems handle the leap second at
15570 2012-06-30 23:59:60 UTC:
15572 @example
15573 # Typical systems ignore leap seconds:
15574 date --date='2012-06-30 23:59:59 +0000' +%s
15575 1341100799
15576 date --date='2012-06-30 23:59:60 +0000' +%s
15577 date: invalid date '2012-06-30 23:59:60 +0000'
15578 date --date='2012-07-01 00:00:00 +0000' +%s
15579 1341100800
15580 @end example
15582 @example
15583 # Atypical systems count leap seconds:
15584 date --date='2012-06-30 23:59:59 +0000' +%s
15585 1341100823
15586 date --date='2012-06-30 23:59:60 +0000' +%s
15587 1341100824
15588 date --date='2012-07-01 00:00:00 +0000' +%s
15589 1341100825
15590 @end example
15592 @end itemize
15595 @node arch invocation
15596 @section @command{arch}: Print machine hardware name
15598 @pindex arch
15599 @cindex print machine hardware name
15600 @cindex system information, printing
15602 @command{arch} prints the machine hardware name,
15603 and is equivalent to @samp{uname -m}.
15604 Synopsis:
15606 @example
15607 arch [@var{option}]
15608 @end example
15610 The program accepts the @ref{Common options} only.
15612 @command{arch} is not installed by default, so portable scripts should
15613 not rely on its existence.
15615 @exitstatus
15618 @node nproc invocation
15619 @section @command{nproc}: Print the number of available processors
15621 @pindex nproc
15622 @cindex Print the number of processors
15623 @cindex system information, printing
15625 Print the number of processing units available to the current process,
15626 which may be less than the number of online processors.
15627 If this information is not accessible, then print the number of
15628 processors installed.  If the @env{OMP_NUM_THREADS} environment variable is
15629 set, then it will determine the returned value.  The result is guaranteed to be
15630 greater than zero.  Synopsis:
15632 @example
15633 nproc [@var{option}]
15634 @end example
15636 The program accepts the following options.  Also see @ref{Common options}.
15638 @table @samp
15640 @item --all
15641 @opindex --all
15642 Print the number of installed processors on the system, which may
15643 be greater than the number online or available to the current process.
15644 The @env{OMP_NUM_THREADS} environment variable is not honored in this case.
15646 @item --ignore=@var{number}
15647 @opindex --ignore
15648 If possible, exclude this @var{number} of processing units.
15650 @end table
15652 @exitstatus
15655 @node uname invocation
15656 @section @command{uname}: Print system information
15658 @pindex uname
15659 @cindex print system information
15660 @cindex system information, printing
15662 @command{uname} prints information about the machine and operating system
15663 it is run on.  If no options are given, @command{uname} acts as if the
15664 @option{-s} option were given.  Synopsis:
15666 @example
15667 uname [@var{option}]@dots{}
15668 @end example
15670 If multiple options or @option{-a} are given, the selected information is
15671 printed in this order:
15673 @example
15674 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
15675 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
15676 @end example
15678 The information may contain internal spaces, so such output cannot be
15679 parsed reliably.  In the following example, @var{release} is
15680 @samp{2.2.18ss.e820-bda652a #4 SMP Tue Jun 5 11:24:08 PDT 2001}:
15682 @smallexample
15683 uname -a
15684 @result{} Linux dumdum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686@c
15685  unknown unknown GNU/Linux
15686 @end smallexample
15689 The program accepts the following options.  Also see @ref{Common options}.
15691 @table @samp
15693 @item -a
15694 @itemx --all
15695 @opindex -a
15696 @opindex --all
15697 Print all of the below information, except omit the processor type
15698 and the hardware platform name if they are unknown.
15700 @item -i
15701 @itemx --hardware-platform
15702 @opindex -i
15703 @opindex --hardware-platform
15704 @cindex implementation, hardware
15705 @cindex hardware platform
15706 @cindex platform, hardware
15707 Print the hardware platform name
15708 (sometimes called the hardware implementation).
15709 Print @samp{unknown} if this information is not available.
15710 Note this is non-portable (even across GNU/Linux distributions).
15712 @item -m
15713 @itemx --machine
15714 @opindex -m
15715 @opindex --machine
15716 @cindex machine type
15717 @cindex hardware class
15718 @cindex hardware type
15719 Print the machine hardware name (sometimes called the hardware class
15720 or hardware type).
15722 @item -n
15723 @itemx --nodename
15724 @opindex -n
15725 @opindex --nodename
15726 @cindex hostname
15727 @cindex node name
15728 @cindex network node name
15729 Print the network node hostname.
15731 @item -p
15732 @itemx --processor
15733 @opindex -p
15734 @opindex --processor
15735 @cindex host processor type
15736 Print the processor type (sometimes called the instruction set
15737 architecture or ISA).
15738 Print @samp{unknown} if this information is not available.
15739 Note this is non-portable (even across GNU/Linux distributions).
15741 @item -o
15742 @itemx --operating-system
15743 @opindex -o
15744 @opindex --operating-system
15745 @cindex operating system name
15746 Print the name of the operating system.
15748 @item -r
15749 @itemx --kernel-release
15750 @opindex -r
15751 @opindex --kernel-release
15752 @cindex kernel release
15753 @cindex release of kernel
15754 Print the kernel release.
15756 @item -s
15757 @itemx --kernel-name
15758 @opindex -s
15759 @opindex --kernel-name
15760 @cindex kernel name
15761 @cindex name of kernel
15762 Print the kernel name.
15763 POSIX 1003.1-2001 (@pxref{Standards conformance}) calls this
15764 ``the implementation of the operating system'', because the
15765 POSIX specification itself has no notion of ``kernel''.
15766 The kernel name might be the same as the operating system name printed
15767 by the @option{-o} or @option{--operating-system} option, but it might
15768 differ.  Some operating systems (e.g., FreeBSD, HP-UX) have the same
15769 name as their underlying kernels; others (e.g., GNU/Linux, Solaris)
15770 do not.
15772 @item -v
15773 @itemx --kernel-version
15774 @opindex -v
15775 @opindex --kernel-version
15776 @cindex kernel version
15777 @cindex version of kernel
15778 Print the kernel version.
15780 @end table
15782 @exitstatus
15785 @node hostname invocation
15786 @section @command{hostname}: Print or set system name
15788 @pindex hostname
15789 @cindex setting the hostname
15790 @cindex printing the hostname
15791 @cindex system name, printing
15792 @cindex appropriate privileges
15794 With no arguments, @command{hostname} prints the name of the current host
15795 system.  With one argument, it sets the current host name to the
15796 specified string.  You must have appropriate privileges to set the host
15797 name.  Synopsis:
15799 @example
15800 hostname [@var{name}]
15801 @end example
15803 The only options are @option{--help} and @option{--version}.  @xref{Common
15804 options}.
15806 @command{hostname} is not installed by default, and other packages
15807 also supply a @command{hostname} command, so portable scripts should
15808 not rely on its existence or on the exact behavior documented above.
15810 @exitstatus
15813 @node hostid invocation
15814 @section @command{hostid}: Print numeric host identifier
15816 @pindex hostid
15817 @cindex printing the host identifier
15819 @command{hostid} prints the numeric identifier of the current host
15820 in hexadecimal.  This command accepts no arguments.
15821 The only options are @option{--help} and @option{--version}.
15822 @xref{Common options}.
15824 For example, here's what it prints on one system I use:
15826 @example
15827 $ hostid
15828 1bac013d
15829 @end example
15831 On that system, the 32-bit quantity happens to be closely
15832 related to the system's Internet address, but that isn't always
15833 the case.
15835 @command{hostid} is installed only on systems that have the
15836 @code{gethostid} function, so portable scripts should not rely on its
15837 existence.
15839 @exitstatus
15841 @node uptime invocation
15842 @section @command{uptime}: Print system uptime and load
15844 @pindex uptime
15845 @cindex printing the system uptime and load
15847 @command{uptime} prints the current time, the system's uptime, the
15848 number of logged-in users and the current load average.
15850 If an argument is specified, it is used as the file to be read
15851 to discover how many users are logged in.  If no argument is
15852 specified, a system default is used (@command{uptime --help} indicates
15853 the default setting).
15855 The only options are @option{--help} and @option{--version}.
15856 @xref{Common options}.
15858 For example, here's what it prints right now on one system I use:
15860 @example
15861 $ uptime
15862  14:07  up   3:35,  3 users,  load average: 1.39, 1.15, 1.04
15863 @end example
15865 The precise method of calculation of load average varies somewhat
15866 between systems.  Some systems calculate it as the average number of
15867 runnable processes over the last 1, 5 and 15 minutes, but some systems
15868 also include processes in the uninterruptible sleep state (that is,
15869 those processes which are waiting for disk I/O).  The Linux kernel
15870 includes uninterruptible processes.
15872 @command{uptime} is installed only on platforms with infrastructure
15873 for obtaining the boot time, and other packages also supply an
15874 @command{uptime} command, so portable scripts should not rely on its
15875 existence or on the exact behavior documented above.
15877 @exitstatus
15879 @node SELinux context
15880 @chapter SELinux context
15882 @cindex SELinux context
15883 @cindex SELinux, context
15884 @cindex commands for SELinux context
15886 This section describes commands for operations with SELinux
15887 contexts.
15889 @menu
15890 * chcon invocation::            Change SELinux context of file
15891 * runcon invocation::           Run a command in specified SELinux context
15892 @end menu
15894 @node chcon invocation
15895 @section @command{chcon}: Change SELinux context of file
15897 @pindex chcon
15898 @cindex changing security context
15899 @cindex change SELinux context
15901 @command{chcon} changes the SELinux security context of the selected files.
15902 Synopses:
15904 @smallexample
15905 chcon [@var{option}]@dots{} @var{context} @var{file}@dots{}
15906 chcon [@var{option}]@dots{} [-u @var{user}] [-r @var{role}] [-l @var{range}]@c
15907  [-t @var{type}] @var{file}@dots{}
15908 chcon [@var{option}]@dots{} --reference=@var{rfile} @var{file}@dots{}
15909 @end smallexample
15911 Change the SELinux security context of each @var{file} to @var{context}.
15912 With @option{--reference}, change the security context of each @var{file}
15913 to that of @var{rfile}.
15915 The program accepts the following options.  Also see @ref{Common options}.
15917 @table @samp
15919 @item --dereference
15920 @opindex --dereference
15921 Do not affect symbolic links but what they refer to; this is the default.
15923 @item -h
15924 @itemx --no-dereference
15925 @opindex -h
15926 @opindex --no-dereference
15927 @cindex no dereference
15928 Affect the symbolic links themselves instead of any referenced file.
15930 @item --reference=@var{rfile}
15931 @opindex --reference
15932 @cindex reference file
15933 Use @var{rfile}'s security context rather than specifying a @var{context} value.
15935 @item -R
15936 @itemx --recursive
15937 @opindex -R
15938 @opindex --recursive
15939 Operate on files and directories recursively.
15941 @item --preserve-root
15942 @opindex --preserve-root
15943 Refuse to operate recursively on the root directory, @file{/},
15944 when used together with the @option{--recursive} option.
15945 @xref{Treating / specially}.
15947 @item --no-preserve-root
15948 @opindex --no-preserve-root
15949 Do not treat the root directory, @file{/}, specially when operating
15950 recursively; this is the default.
15951 @xref{Treating / specially}.
15953 @choptH
15954 @xref{Traversing symlinks}.
15956 @choptL
15957 @xref{Traversing symlinks}.
15959 @choptP
15960 @xref{Traversing symlinks}.
15962 @item -v
15963 @itemx --verbose
15964 @opindex -v
15965 @opindex --verbose
15966 @cindex diagnostic
15967 Output a diagnostic for every file processed.
15969 @item -u @var{user}
15970 @itemx --user=@var{user}
15971 @opindex -u
15972 @opindex --user
15973 Set user @var{user} in the target security context.
15975 @item -r @var{role}
15976 @itemx --role=@var{role}
15977 @opindex -r
15978 @opindex --role
15979 Set role @var{role} in the target security context.
15981 @item -t @var{type}
15982 @itemx --type=@var{type}
15983 @opindex -t
15984 @opindex --type
15985 Set type @var{type} in the target security context.
15987 @item -l @var{range}
15988 @itemx --range=@var{range}
15989 @opindex -l
15990 @opindex --range
15991 Set range @var{range} in the target security context.
15993 @end table
15995 @exitstatus
15997 @node runcon invocation
15998 @section @command{runcon}: Run a command in specified SELinux context
16000 @pindex runcon
16001 @cindex run with security context
16004 @command{runcon} runs file in specified SELinux security context.
16006 Synopses:
16007 @smallexample
16008 runcon @var{context} @var{command} [@var{args}]
16009 runcon [ -c ] [-u @var{user}] [-r @var{role}] [-t @var{type}]@c
16010  [-l @var{range}] @var{command} [@var{args}]
16011 @end smallexample
16013 Run @var{command} with completely-specified @var{context}, or with
16014 current or transitioned security context modified by one or more of @var{level},
16015 @var{role}, @var{type} and @var{user}.
16017 If none of @option{-c}, @option{-t}, @option{-u}, @option{-r}, or @option{-l}
16018 is specified, the first argument is used as the complete context.
16019 Any additional arguments after @var{command}
16020 are interpreted as arguments to the command.
16022 With neither @var{context} nor @var{command}, print the current
16023 security context.
16025 The program accepts the following options.  Also see @ref{Common options}.
16027 @table @samp
16029 @item -c
16030 @itemx --compute
16031 @opindex -c
16032 @opindex --compute
16033 Compute process transition context before modifying.
16035 @item -u @var{user}
16036 @itemx --user=@var{user}
16037 @opindex -u
16038 @opindex --user
16039 Set user @var{user} in the target security context.
16041 @item -r @var{role}
16042 @itemx --role=@var{role}
16043 @opindex -r
16044 @opindex --role
16045 Set role @var{role} in the target security context.
16047 @item -t @var{type}
16048 @itemx --type=@var{type}
16049 @opindex -t
16050 @opindex --type
16051 Set type @var{type} in the target security context.
16053 @item -l @var{range}
16054 @itemx --range=@var{range}
16055 @opindex -l
16056 @opindex --range
16057 Set range @var{range} in the target security context.
16059 @end table
16061 @cindex exit status of @command{runcon}
16062 Exit status:
16064 @display
16065 126 if @var{command} is found but cannot be invoked
16066 127 if @command{runcon} itself fails or if @var{command} cannot be found
16067 the exit status of @var{command} otherwise
16068 @end display
16070 @node Modified command invocation
16071 @chapter Modified command invocation
16073 @cindex modified command invocation
16074 @cindex invocation of commands, modified
16075 @cindex commands for invoking other commands
16077 This section describes commands that run other commands in some context
16078 different than the current one: a modified environment, as a different
16079 user, etc.
16081 @menu
16082 * chroot invocation::           Modify the root directory.
16083 * env invocation::              Modify environment variables.
16084 * nice invocation::             Modify niceness.
16085 * nohup invocation::            Immunize to hangups.
16086 * stdbuf invocation::           Modify buffering of standard streams.
16087 * timeout invocation::          Run with time limit.
16088 @end menu
16091 @node chroot invocation
16092 @section @command{chroot}: Run a command with a different root directory
16094 @pindex chroot
16095 @cindex running a program in a specified root directory
16096 @cindex root directory, running a program in a specified
16098 @command{chroot} runs a command with a specified root directory.
16099 On many systems, only the super-user can do this.@footnote{However,
16100 some systems (e.g., FreeBSD) can be configured to allow certain regular
16101 users to use the @code{chroot} system call, and hence to run this program.
16102 Also, on Cygwin, anyone can run the @command{chroot} command, because the
16103 underlying function is non-privileged due to lack of support in MS-Windows.
16104 Furthermore, the @command{chroot} command avoids the @code{chroot} system call
16105 when @var{newroot} is identical to the old @file{/} directory for consistency
16106 with systems where this is allowed for non-privileged users.}.
16107 Synopses:
16109 @example
16110 chroot @var{option} @var{newroot} [@var{command} [@var{args}]@dots{}]
16111 chroot @var{option}
16112 @end example
16114 Ordinarily, file names are looked up starting at the root of the
16115 directory structure, i.e., @file{/}.  @command{chroot} changes the root to
16116 the directory @var{newroot} (which must exist), then changes the working
16117 directory to @file{/}, and finally runs @var{command} with optional @var{args}.
16118 If @var{command} is not specified, the default is the value of the @env{SHELL}
16119 environment variable or @command{/bin/sh} if not set, invoked with the
16120 @option{-i} option.
16121 @var{command} must not be a special built-in utility
16122 (@pxref{Special built-in utilities}).
16124 The program accepts the following options.  Also see @ref{Common options}.
16125 Options must precede operands.
16127 @table @samp
16129 @item --groups=@var{groups}
16130 @opindex --groups
16131 Use this option to override the supplementary @var{groups} to be
16132 used by the new process.
16133 The items in the list (names or numeric IDs) must be separated by commas.
16134 Use @samp{--groups=''} to disable the supplementary group look-up
16135 implicit in the @option{--userspec} option.
16137 @item --userspec=@var{user}[:@var{group}]
16138 @opindex --userspec
16139 By default, @var{command} is run with the same credentials
16140 as the invoking process.
16141 Use this option to run it as a different @var{user} and/or with a
16142 different primary @var{group}.
16143 If a @var{user} is specified then the supplementary groups
16144 are set according to the system defined list for that user,
16145 unless overridden with the @option{--groups} option.
16147 @item --skip-chdir
16148 @opindex --skip-chdir
16149 Use this option to not change the working directory to @file{/} after changing
16150 the root directory to @var{newroot}, i.e., inside the chroot.
16151 This option is only permitted when @var{newroot} is the old @file{/} directory,
16152 and therefore is mostly useful together with the @option{--groups} and
16153 @option{--userspec} options to retain the previous working directory.
16155 @end table
16157 The user and group name look-up performed by the @option{--userspec}
16158 and @option{--groups} options, is done both outside and inside
16159 the chroot, with successful look-ups inside the chroot taking precedence.
16160 If the specified user or group items are intended to represent a numeric ID,
16161 then a name to ID resolving step is avoided by specifying a leading @samp{+}.
16162 @xref{Disambiguating names and IDs}.
16164 Here are a few tips to help avoid common problems in using chroot.
16165 To start with a simple example, make @var{command} refer to a statically
16166 linked binary.  If you were to use a dynamically linked executable, then
16167 you'd have to arrange to have the shared libraries in the right place under
16168 your new root directory.
16170 For example, if you create a statically linked @command{ls} executable,
16171 and put it in @file{/tmp/empty}, you can run this command as root:
16173 @example
16174 $ chroot /tmp/empty /ls -Rl /
16175 @end example
16177 Then you'll see output like this:
16179 @example
16181 total 1023
16182 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
16183 @end example
16185 If you want to use a dynamically linked executable, say @command{bash},
16186 then first run @samp{ldd bash} to see what shared objects it needs.
16187 Then, in addition to copying the actual binary, also copy the listed
16188 files to the required positions under your intended new root directory.
16189 Finally, if the executable requires any other files (e.g., data, state,
16190 device files), copy them into place, too.
16192 @command{chroot} is installed only on systems that have the
16193 @code{chroot} function, so portable scripts should not rely on its
16194 existence.
16196 @cindex exit status of @command{chroot}
16197 Exit status:
16199 @display
16200 125 if @command{chroot} itself fails
16201 126 if @var{command} is found but cannot be invoked
16202 127 if @var{command} cannot be found
16203 the exit status of @var{command} otherwise
16204 @end display
16207 @node env invocation
16208 @section @command{env}: Run a command in a modified environment
16210 @pindex env
16211 @cindex environment, running a program in a modified
16212 @cindex modified environment, running a program in a
16213 @cindex running a program in a modified environment
16215 @command{env} runs a command with a modified environment.  Synopses:
16217 @example
16218 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
16219 [@var{command} [@var{args}]@dots{}]
16221 @end example
16223 Operands of the form @samp{@var{variable}=@var{value}} set
16224 the environment variable @var{variable} to value @var{value}.
16225 @var{value} may be empty (@samp{@var{variable}=}).  Setting a variable
16226 to an empty value is different from unsetting it.
16227 These operands are evaluated left-to-right, so if two operands
16228 mention the same variable the earlier is ignored.
16230 Environment variable names can be empty, and can contain any
16231 characters other than @samp{=} and ASCII NUL.
16232 However, it is wise to limit yourself to names that
16233 consist solely of underscores, digits, and ASCII letters,
16234 and that begin with a non-digit, as applications like the shell do not
16235 work well with other names.
16237 @vindex PATH
16238 The first operand that does not contain the character @samp{=}
16239 specifies the program to invoke; it is
16240 searched for according to the @env{PATH} environment variable.  Any
16241 remaining arguments are passed as arguments to that program.
16242 The program should not be a special built-in utility
16243 (@pxref{Special built-in utilities}).
16245 Modifications to @env{PATH} take effect prior to searching for
16246 @var{command}.  Use caution when reducing @env{PATH}; behavior is
16247 not portable when @env{PATH} is undefined or omits key directories
16248 such as @file{/bin}.
16250 In the rare case that a utility contains a @samp{=} in the name, the
16251 only way to disambiguate it from a variable assignment is to use an
16252 intermediate command for @var{command}, and pass the problematic
16253 program name via @var{args}.  For example, if @file{./prog=} is an
16254 executable in the current @env{PATH}:
16256 @example
16257 env prog= true # runs 'true', with prog= in environment
16258 env ./prog= true # runs 'true', with ./prog= in environment
16259 env -- prog= true # runs 'true', with prog= in environment
16260 env sh -c '\prog= true' # runs 'prog=' with argument 'true'
16261 env sh -c 'exec "$@@"' sh prog= true # also runs 'prog='
16262 @end example
16264 @cindex environment, printing
16266 If no command name is specified following the environment
16267 specifications, the resulting environment is printed.  This is like
16268 specifying the @command{printenv} program.
16270 For some examples, suppose the environment passed to @command{env}
16271 contains @samp{LOGNAME=rms}, @samp{EDITOR=emacs}, and
16272 @samp{PATH=.:/gnubin:/hacks}:
16274 @itemize @bullet
16276 @item
16277 Output the current environment.
16278 @example
16279 $ env | LC_ALL=C sort
16280 EDITOR=emacs
16281 LOGNAME=rms
16282 PATH=.:/gnubin:/hacks
16283 @end example
16285 @item
16286 Run @command{foo} with a reduced environment, preserving only the
16287 original @env{PATH} to avoid problems in locating @command{foo}.
16288 @example
16289 env - PATH="$PATH" foo
16290 @end example
16292 @item
16293 Run @command{foo} with the environment containing @samp{LOGNAME=rms},
16294 @samp{EDITOR=emacs}, and @samp{PATH=.:/gnubin:/hacks}, and guarantees
16295 that @command{foo} was found in the file system rather than as a shell
16296 built-in.
16297 @example
16298 env foo
16299 @end example
16301 @item
16302 Run @command{nemacs} with the environment containing @samp{LOGNAME=foo},
16303 @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks}, and
16304 @samp{DISPLAY=gnu:0}.
16305 @example
16306 env DISPLAY=gnu:0 LOGNAME=foo nemacs
16307 @end example
16309 @item
16310 Attempt to run the program @command{/energy/--} (as that is the only
16311 possible path search result); if the command exists, the environment
16312 will contain @samp{LOGNAME=rms} and @samp{PATH=/energy}, and the
16313 arguments will be @samp{e=mc2}, @samp{bar}, and @samp{baz}.
16314 @example
16315 env -u EDITOR PATH=/energy -- e=mc2 bar baz
16316 @end example
16318 @end itemize
16321 The program accepts the following options.  Also see @ref{Common options}.
16322 Options must precede operands.
16324 @table @samp
16326 @optNull
16328 @item -u @var{name}
16329 @itemx --unset=@var{name}
16330 @opindex -u
16331 @opindex --unset
16332 Remove variable @var{name} from the environment, if it was in the
16333 environment.
16335 @item -
16336 @itemx -i
16337 @itemx --ignore-environment
16338 @opindex -
16339 @opindex -i
16340 @opindex --ignore-environment
16341 Start with an empty environment, ignoring the inherited environment.
16343 @end table
16345 @cindex exit status of @command{env}
16346 Exit status:
16348 @display
16349 0   if no @var{command} is specified and the environment is output
16350 125 if @command{env} itself fails
16351 126 if @var{command} is found but cannot be invoked
16352 127 if @var{command} cannot be found
16353 the exit status of @var{command} otherwise
16354 @end display
16357 @node nice invocation
16358 @section @command{nice}: Run a command with modified niceness
16360 @pindex nice
16361 @cindex niceness
16362 @cindex scheduling, affecting
16363 @cindex appropriate privileges
16365 @command{nice} prints a process's @dfn{niceness}, or runs
16366 a command with modified niceness.  @dfn{niceness} affects how
16367 favorably the process is scheduled in the system.
16368 Synopsis:
16370 @example
16371 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
16372 @end example
16374 If no arguments are given, @command{nice} prints the current niceness.
16375 Otherwise, @command{nice} runs the given @var{command} with its
16376 niceness adjusted.  By default, its niceness is incremented by 10.
16378 Niceness values range at least from @minus{}20 (process has high priority
16379 and gets more resources, thus slowing down other processes) through 19
16380 (process has lower priority and runs slowly itself, but has less impact
16381 on the speed of other running processes).  Some systems
16382 may have a wider range of niceness values; conversely, other systems may
16383 enforce more restrictive limits.  An attempt to set the niceness
16384 outside the supported range is treated as an attempt to use the
16385 minimum or maximum supported value.
16387 A niceness should not be confused with a scheduling priority, which
16388 lets applications determine the order in which threads are scheduled
16389 to run.  Unlike a priority, a niceness is merely advice to the
16390 scheduler, which the scheduler is free to ignore.  Also, as a point of
16391 terminology, POSIX defines the behavior of @command{nice} in
16392 terms of a @dfn{nice value}, which is the non-negative difference
16393 between a niceness and the minimum niceness.  Though @command{nice}
16394 conforms to POSIX, its documentation and diagnostics use the
16395 term ``niceness'' for compatibility with historical practice.
16397 @var{command} must not be a special built-in utility (@pxref{Special
16398 built-in utilities}).
16400 @mayConflictWithShellBuiltIn{nice}
16402 Note to change the @dfn{niceness} of an existing process,
16403 one needs to use the @command{renice} command.
16405 The program accepts the following option.  Also see @ref{Common options}.
16406 Options must precede operands.
16408 @table @samp
16409 @item -n @var{adjustment}
16410 @itemx --adjustment=@var{adjustment}
16411 @opindex -n
16412 @opindex --adjustment
16413 Add @var{adjustment} instead of 10 to the command's niceness.  If
16414 @var{adjustment} is negative and you lack appropriate privileges,
16415 @command{nice} issues a warning but otherwise acts as if you specified
16416 a zero adjustment.
16418 For compatibility @command{nice} also supports an obsolete
16419 option syntax @option{-@var{adjustment}}.  New scripts should use
16420 @option{-n @var{adjustment}} instead.
16422 @end table
16424 @command{nice} is installed only on systems that have the POSIX
16425 @code{setpriority} function, so portable scripts should not rely on
16426 its existence on non-POSIX platforms.
16428 @cindex exit status of @command{nice}
16429 Exit status:
16431 @display
16432 0   if no @var{command} is specified and the niceness is output
16433 125 if @command{nice} itself fails
16434 126 if @var{command} is found but cannot be invoked
16435 127 if @var{command} cannot be found
16436 the exit status of @var{command} otherwise
16437 @end display
16439 It is sometimes useful to run a non-interactive program with reduced niceness.
16441 @example
16442 $ nice factor 4611686018427387903
16443 @end example
16445 Since @command{nice} prints the current niceness,
16446 you can invoke it through itself to demonstrate how it works.
16448 The default behavior is to increase the niceness by @samp{10}:
16450 @example
16451 $ nice
16453 $ nice nice
16455 $ nice -n 10 nice
16457 @end example
16459 The @var{adjustment} is relative to the current niceness.  In the
16460 next example, the first @command{nice} invocation runs the second one
16461 with niceness 10, and it in turn runs the final one with a niceness
16462 that is 3 more:
16464 @example
16465 $ nice nice -n 3 nice
16467 @end example
16469 Specifying a niceness larger than the supported range
16470 is the same as specifying the maximum supported value:
16472 @example
16473 $ nice -n 10000000000 nice
16475 @end example
16477 Only a privileged user may run a process with lower niceness:
16479 @example
16480 $ nice -n -1 nice
16481 nice: cannot set niceness: Permission denied
16483 $ sudo nice -n -1 nice
16485 @end example
16488 @node nohup invocation
16489 @section @command{nohup}: Run a command immune to hangups
16491 @pindex nohup
16492 @cindex hangups, immunity to
16493 @cindex immunity to hangups
16494 @cindex logging out and continuing to run
16496 @flindex nohup.out
16497 @command{nohup} runs the given @var{command} with hangup signals ignored,
16498 so that the command can continue running in the background after you log
16499 out.  Synopsis:
16501 @example
16502 nohup @var{command} [@var{arg}]@dots{}
16503 @end example
16505 If standard input is a terminal, redirect it so that terminal sessions
16506 do not mistakenly consider the terminal to be used by the command.
16507 Make the substitute file descriptor unreadable, so that commands that
16508 mistakenly attempt to read from standard input can report an error.
16509 This redirection is a GNU extension; programs intended to be portable
16510 to non-GNU hosts can use @samp{nohup @var{command} [@var{arg}]@dots{}
16511 0>/dev/null} instead.
16513 @flindex nohup.out
16514 If standard output is a terminal, the command's standard output is appended
16515 to the file @file{nohup.out}; if that cannot be written to, it is appended
16516 to the file @file{$HOME/nohup.out}; and if that cannot be written to, the
16517 command is not run.
16518 Any @file{nohup.out} or @file{$HOME/nohup.out} file created by
16519 @command{nohup} is made readable and writable only to the user,
16520 regardless of the current umask settings.
16522 If standard error is a terminal, it is normally redirected to the same file
16523 descriptor as the (possibly-redirected) standard output.
16524 However, if standard output is closed, standard error terminal output
16525 is instead appended to the file @file{nohup.out} or
16526 @file{$HOME/nohup.out} as above.
16528 To capture the command's output to a file other than @file{nohup.out}
16529 you can redirect it.  For example, to capture the output of
16530 @command{make}:
16532 @example
16533 nohup make > make.log
16534 @end example
16536 @command{nohup} does not automatically put the command it runs in the
16537 background; you must do that explicitly, by ending the command line
16538 with an @samp{&}.  Also, @command{nohup} does not alter the
16539 niceness of @var{command}; use @command{nice} for that,
16540 e.g., @samp{nohup nice @var{command}}.
16542 @var{command} must not be a special built-in utility (@pxref{Special
16543 built-in utilities}).
16545 The only options are @option{--help} and @option{--version}.  @xref{Common
16546 options}.  Options must precede operands.
16548 @cindex exit status of @command{nohup}
16549 Exit status:
16551 @display
16552 125 if @command{nohup} itself fails, and @env{POSIXLY_CORRECT} is not set
16553 126 if @var{command} is found but cannot be invoked
16554 127 if @var{command} cannot be found
16555 the exit status of @var{command} otherwise
16556 @end display
16558 If @env{POSIXLY_CORRECT} is set, internal failures give status 127
16559 instead of 125.
16562 @node stdbuf invocation
16563 @section @command{stdbuf}: Run a command with modified I/O stream buffering
16565 @pindex stdbuf
16566 @cindex standard streams, buffering
16567 @cindex line buffered
16569 @command{stdbuf} allows one to modify the buffering operations of the
16570 three standard I/O streams associated with a program.  Synopsis:
16572 @example
16573 stdbuf @var{option}@dots{} @var{command}
16574 @end example
16576 @var{command} must start with the name of a program that
16577 @enumerate
16578 @item
16579 uses the ISO C @code{FILE} streams for input/output (note the
16580 programs @command{dd} and @command{cat} don't do that),
16582 @item
16583 does not adjust the buffering of its standard streams (note the
16584 program @command{tee} is not in this category).
16585 @end enumerate
16587 Any additional @var{arg}s are passed as additional arguments to the
16588 @var{command}.
16590 The program accepts the following options.  Also see @ref{Common options}.
16592 @table @samp
16594 @item -i @var{mode}
16595 @itemx --input=@var{mode}
16596 @opindex -i
16597 @opindex --input
16598 Adjust the standard input stream buffering.
16600 @item -o @var{mode}
16601 @itemx --output=@var{mode}
16602 @opindex -o
16603 @opindex --output
16604 Adjust the standard output stream buffering.
16606 @item -e @var{mode}
16607 @itemx --error=@var{mode}
16608 @opindex -e
16609 @opindex --error
16610 Adjust the standard error stream buffering.
16612 @end table
16614 The @var{mode} can be specified as follows:
16616 @table @samp
16618 @item L
16619 Set the stream to line buffered mode.
16620 In this mode data is coalesced until a newline is output or
16621 input is read from any stream attached to a terminal device.
16622 This option is invalid with standard input.
16624 @item 0
16625 Disable buffering of the selected stream.
16626 In this mode, data is output immediately and only the
16627 amount of data requested is read from input.
16628 Note the difference in function for input and output.
16629 Disabling buffering for input will not influence the responsiveness
16630 or blocking behavior of the stream input functions.
16631 For example @code{fread} will still block until @code{EOF} or error,
16632 even if the underlying @code{read} returns less data than requested.
16634 @item @var{size}
16635 Specify the size of the buffer to use in fully buffered mode.
16636 @multiplierSuffixesNoBlocks{size}
16638 @end table
16640 @command{stdbuf} is installed only on platforms that use the
16641 Executable and Linkable Format (ELF) and support the
16642 @code{constructor} attribute, so portable scripts should not rely on
16643 its existence.
16645 @cindex exit status of @command{stdbuf}
16646 Exit status:
16648 @display
16649 125 if @command{stdbuf} itself fails
16650 126 if @var{command} is found but cannot be invoked
16651 127 if @var{command} cannot be found
16652 the exit status of @var{command} otherwise
16653 @end display
16656 @node timeout invocation
16657 @section @command{timeout}: Run a command with a time limit
16659 @pindex timeout
16660 @cindex time limit
16661 @cindex run commands with bounded time
16663 @command{timeout} runs the given @var{command} and kills it if it is
16664 still running after the specified time interval.  Synopsis:
16666 @example
16667 timeout [@var{option}] @var{duration} @var{command} [@var{arg}]@dots{}
16668 @end example
16670 @var{command} must not be a special built-in utility (@pxref{Special
16671 built-in utilities}).
16673 The program accepts the following options.  Also see @ref{Common options}.
16674 Options must precede operands.
16676 @table @samp
16677 @item --preserve-status
16678 @opindex --preserve-status
16679 Return the exit status of the managed @var{command} on timeout, rather than
16680 a specific exit status indicating a timeout.  This is useful if the
16681 managed @var{command} supports running for an indeterminate amount of time.
16683 @item --foreground
16684 @opindex --foreground
16685 Don't create a separate background program group, so that
16686 the managed @var{command} can use the foreground TTY normally.
16687 This is needed to support timing out commands not started
16688 directly from an interactive shell, in two situations.
16689 @enumerate
16690 @item
16691 @var{command} is interactive and needs to read from the terminal for example
16692 @item
16693 the user wants to support sending signals directly to @var{command}
16694 from the terminal (like Ctrl-C for example)
16695 @end enumerate
16697 Note in this mode of operation, any children of @var{command}
16698 will not be timed out.  Also SIGCONT will not be sent to @var{command},
16699 as it's generally not needed with foreground processes, and can
16700 cause intermittent signal delivery issues with programs that are monitors
16701 themselves (like GDB for example).
16703 @item -k @var{duration}
16704 @itemx --kill-after=@var{duration}
16705 @opindex -k
16706 @opindex --kill-after
16707 Ensure the monitored @var{command} is killed by also sending a @samp{KILL}
16708 signal, after the specified @var{duration}.  Without this option, if the
16709 selected signal proves not to be fatal, @command{timeout} does not kill
16710 the @var{command}.
16712 @item -s @var{signal}
16713 @itemx --signal=@var{signal}
16714 @opindex -s
16715 @opindex --signal
16716 Send this @var{signal} to @var{command} on timeout, rather than the
16717 default @samp{TERM} signal.  @var{signal} may be a name like @samp{HUP}
16718 or a number.  @xref{Signal specifications}.
16719 @end table
16721 @cindex time units
16722 @var{duration} is a floating point number followed by an optional unit:
16723 @display
16724 @samp{s} for seconds (the default)
16725 @samp{m} for minutes
16726 @samp{h} for hours
16727 @samp{d} for days
16728 @end display
16729 A duration of 0 disables the associated timeout.
16730 Note that the actual timeout duration is dependent on system conditions,
16731 which should be especially considered when specifying sub-second timeouts.
16733 @cindex exit status of @command{timeout}
16734 Exit status:
16736 @display
16737 124 if @var{command} times out
16738 125 if @command{timeout} itself fails
16739 126 if @var{command} is found but cannot be invoked
16740 127 if @var{command} cannot be found
16741 137 if @var{command} is sent the KILL(9) signal (128+9)
16742 the exit status of @var{command} otherwise
16743 @end display
16746 @node Process control
16747 @chapter Process control
16749 @cindex processes, commands for controlling
16750 @cindex commands for controlling processes
16752 @menu
16753 * kill invocation::             Sending a signal to processes.
16754 @end menu
16757 @node kill invocation
16758 @section @command{kill}: Send a signal to processes
16760 @pindex kill
16761 @cindex send a signal to processes
16763 The @command{kill} command sends a signal to processes, causing them
16764 to terminate or otherwise act upon receiving the signal in some way.
16765 Alternatively, it lists information about signals.  Synopses:
16767 @example
16768 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
16769 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
16770 @end example
16772 @mayConflictWithShellBuiltIn{kill}
16774 The first form of the @command{kill} command sends a signal to all
16775 @var{pid} arguments.  The default signal to send if none is specified
16776 is @samp{TERM}@.  The special signal number @samp{0} does not denote a
16777 valid signal, but can be used to test whether the @var{pid} arguments
16778 specify processes to which a signal could be sent.
16780 If @var{pid} is positive, the signal is sent to the process with the
16781 process ID @var{pid}.  If @var{pid} is zero, the signal is sent to all
16782 processes in the process group of the current process.  If @var{pid}
16783 is @minus{}1, the signal is sent to all processes for which the user has
16784 permission to send a signal.  If @var{pid} is less than @minus{}1, the signal
16785 is sent to all processes in the process group that equals the absolute
16786 value of @var{pid}.
16788 If @var{pid} is not positive, a system-dependent set of system
16789 processes is excluded from the list of processes to which the signal
16790 is sent.
16792 If a negative @var{pid} argument is desired as the first one, it
16793 should be preceded by @option{--}.  However, as a common extension to
16794 POSIX, @option{--} is not required with @samp{kill
16795 -@var{signal} -@var{pid}}.  The following commands are equivalent:
16797 @example
16798 kill -15 -1
16799 kill -TERM -1
16800 kill -s TERM -- -1
16801 kill -- -1
16802 @end example
16804 The first form of the @command{kill} command succeeds if every @var{pid}
16805 argument specifies at least one process that the signal was sent to.
16807 The second form of the @command{kill} command lists signal information.
16808 Either the @option{-l} or @option{--list} option, or the @option{-t}
16809 or @option{--table} option must be specified.  Without any
16810 @var{signal} argument, all supported signals are listed.  The output
16811 of @option{-l} or @option{--list} is a list of the signal names, one
16812 per line; if @var{signal} is already a name, the signal number is
16813 printed instead.  The output of @option{-t} or @option{--table} is a
16814 table of signal numbers, names, and descriptions.  This form of the
16815 @command{kill} command succeeds if all @var{signal} arguments are valid
16816 and if there is no output error.
16818 The @command{kill} command also supports the @option{--help} and
16819 @option{--version} options.  @xref{Common options}.
16821 A @var{signal} may be a signal name like @samp{HUP}, or a signal
16822 number like @samp{1}, or an exit status of a process terminated by the
16823 signal.  A signal name can be given in canonical form or prefixed by
16824 @samp{SIG}@.  The case of the letters is ignored, except for the
16825 @option{-@var{signal}} option which must use upper case to avoid
16826 ambiguity with lower case option letters.
16827 @xref{Signal specifications}, for a list of supported
16828 signal names and numbers.
16830 @node Delaying
16831 @chapter Delaying
16833 @cindex delaying commands
16834 @cindex commands for delaying
16836 @c Perhaps @command{wait} or other commands should be described here also?
16838 @menu
16839 * sleep invocation::            Delay for a specified time.
16840 @end menu
16843 @node sleep invocation
16844 @section @command{sleep}: Delay for a specified time
16846 @pindex sleep
16847 @cindex delay for a specified time
16849 @command{sleep} pauses for an amount of time specified by the sum of
16850 the values of the command line arguments.
16851 Synopsis:
16853 @example
16854 sleep @var{number}[smhd]@dots{}
16855 @end example
16857 @cindex time units
16858 Each argument is a number followed by an optional unit; the default
16859 is seconds.  The units are:
16861 @table @samp
16862 @item s
16863 seconds
16864 @item m
16865 minutes
16866 @item h
16867 hours
16868 @item d
16869 days
16870 @end table
16872 Historical implementations of @command{sleep} have required that
16873 @var{number} be an integer, and only accepted a single argument
16874 without a suffix.  However, GNU @command{sleep} accepts
16875 arbitrary floating point numbers.  @xref{Floating point}.
16877 The only options are @option{--help} and @option{--version}.  @xref{Common
16878 options}.
16880 @c sleep is a shell built-in at least with Solaris 11's /bin/sh
16881 @mayConflictWithShellBuiltIn{sleep}
16883 @exitstatus
16886 @node Numeric operations
16887 @chapter Numeric operations
16889 @cindex numeric operations
16890 These programs do numerically-related operations.
16892 @menu
16893 * factor invocation::              Show factors of numbers.
16894 * numfmt invocation::              Reformat numbers.
16895 * seq invocation::                 Print sequences of numbers.
16896 @end menu
16899 @node factor invocation
16900 @section @command{factor}: Print prime factors
16902 @pindex factor
16903 @cindex prime factors
16905 @command{factor} prints prime factors.  Synopses:
16907 @example
16908 factor [@var{number}]@dots{}
16909 factor @var{option}
16910 @end example
16912 If no @var{number} is specified on the command line, @command{factor} reads
16913 numbers from standard input, delimited by newlines, tabs, or spaces.
16915 The @command{factor} command supports only a small number of options:
16917 @table @samp
16918 @item --help
16919 Print a short help on standard output, then exit without further
16920 processing.
16922 @item --version
16923 Print the program version on standard output, then exit without further
16924 processing.
16925 @end table
16927 Factoring the product of the eighth and ninth Mersenne primes
16928 takes about 30 milliseconds of CPU time on a 2.2 GHz Athlon.
16930 @example
16931 M8=$(echo 2^31-1|bc)
16932 M9=$(echo 2^61-1|bc)
16933 n=$(echo "$M8 * $M9" | bc)
16934 /usr/bin/time -f %U factor $n
16935 4951760154835678088235319297: 2147483647 2305843009213693951
16936 0.03
16937 @end example
16939 Similarly, factoring the eighth Fermat number @math{2^{256}+1} takes
16940 about 20 seconds on the same machine.
16942 Factoring large numbers is, in general, hard.  The Pollard-Brent rho
16943 algorithm used by @command{factor} is particularly effective for
16944 numbers with relatively small factors.  If you wish to factor large
16945 numbers which do not have small factors (for example, numbers which
16946 are the product of two large primes), other methods are far better.
16948 If @command{factor} is built without using GNU MP, only
16949 single-precision arithmetic is available, and so large numbers
16950 (typically @math{2^{128}} and above) will not be supported.
16951 The single-precision code uses an algorithm which is designed
16952 for factoring smaller numbers.
16954 @exitstatus
16957 @node numfmt invocation
16958 @section @command{numfmt}: Reformat numbers
16960 @pindex numfmt
16962 @command{numfmt} reads numbers in various representations and reformats them
16963 as requested.  The most common usage is converting numbers to/from @emph{human}
16964 representation (e.g. @samp{4G} @expansion{} @samp{4,000,000,000}).
16966 @example
16967 numfmt [@var{option}]@dots{} [@var{number}]
16968 @end example
16970 @command{numfmt} converts each @var{number} on the command-line according to the
16971 specified options (see below).  If no @var{number}s are given, it reads numbers
16972 from standard input.  @command{numfmt} can optionally extract numbers from
16973 specific columns, maintaining proper line padding and alignment.
16975 @exitstatus
16977 See @option{--invalid} for additional information regarding exit status.
16979 @subsection General options
16981 The program accepts the following options.  Also see @ref{Common options}.
16983 @table @samp
16985 @item --debug
16986 @opindex --debug
16987 Print (to standard error) warning messages about possible erroneous usage.
16989 @item -d @var{d}
16990 @itemx --delimiter=@var{d}
16991 @opindex -d
16992 @opindex --delimiter
16993 Use the character @var{d} as input field separator (default: whitespace).
16994 @emph{Note}: Using non-default delimiter turns off automatic padding.
16996 @item --field=@var{fields}
16997 @opindex --field
16998 Convert the number in input field @var{fields} (default: 1).
16999 @var{fields} supports @command{cut} style field ranges:
17001 @example
17002 N    N'th field, counted from 1
17003 N-   from N'th field, to end of line
17004 N-M  from N'th to M'th field (inclusive)
17005 -M   from first to M'th field (inclusive)
17006 -    all fields
17007 @end example
17010 @item --format=@var{format}
17011 @opindex --format
17012 Use printf-style floating FORMAT string.  The @var{format} string must contain
17013 one @samp{%f} directive, optionally with @samp{'}, @samp{-}, @samp{0}, width
17014 or precision modifiers.  The @samp{'} modifier will enable @option{--grouping},
17015 the @samp{-} modifier will enable left-aligned @option{--padding} and the width
17016 modifier will enable right-aligned @option{--padding}.  The @samp{0} width
17017 modifier (without the @samp{-} modifier) will generate leading zeros on the
17018 number, up to the specified width.  A precision specification like @samp{%.1f}
17019 will override the precision determined from the input data or set due to
17020 @option{--to} option auto scaling.
17022 @item --from=@var{unit}
17023 @opindex --from
17024 Auto-scales input numbers according to @var{unit}.  See UNITS below.
17025 The default is no scaling, meaning suffixes (e.g. @samp{M}, @samp{G}) will
17026 trigger an error.
17028 @item --from-unit=@var{n}
17029 @opindex --from-unit
17030 Specify the input unit size (instead of the default 1).  Use this option when
17031 the input numbers represent other units (e.g. if the input number @samp{10}
17032 represents 10 units of 512 bytes, use @samp{--from-unit=512}).
17033 Suffixes are handled as with @samp{--from=auto}.
17035 @item --grouping
17036 @opindex --grouping
17037 Group digits in output numbers according to the current locale's grouping rules
17038 (e.g @emph{Thousands Separator} character, commonly @samp{.} (dot) or @samp{,}
17039 comma).  This option has no effect in @samp{POSIX/C} locale.
17041 @item --header[=@var{n}]
17042 @opindex --header
17043 @opindex --header=N
17044 Print the first @var{n} (default: 1) lines without any conversion.
17046 @item --invalid=@var{mode}
17047 @opindex --invalid
17048 The default action on input errors is to exit immediately with status code 2.
17049 @option{--invalid=@samp{abort}} explicitly specifies this default mode.
17050 With a @var{mode} of @samp{fail}, print a warning for @emph{each} conversion
17051 error, and exit with status 2.  With a @var{mode} of @samp{warn}, exit with
17052 status 0, even in the presence of conversion errors, and with a @var{mode} of
17053 @samp{ignore} do not even print diagnostics.
17055 @item --padding=@var{n}
17056 @opindex --padding
17057 Pad the output numbers to @var{n} characters, by adding spaces.  If @var{n} is
17058 a positive number, numbers will be right-aligned.  If @var{n} is a negative
17059 number, numbers will be left-aligned.  By default, numbers are automatically
17060 aligned based on the input line's width (only with the default delimiter).
17062 @item --round=@var{method}
17063 @opindex --round
17064 @opindex --round=up
17065 @opindex --round=down
17066 @opindex --round=from-zero
17067 @opindex --round=towards-zero
17068 @opindex --round=nearest
17069 When converting number representations, round the number according to
17070 @var{method}, which can be @samp{up}, @samp{down},
17071 @samp{from-zero} (the default), @samp{towards-zero}, @samp{nearest}.
17073 @item --suffix=@var{suffix}
17074 @opindex --suffix
17075 Add @samp{SUFFIX} to the output numbers, and accept optional @samp{SUFFIX} in
17076 input numbers.
17078 @item --to=@var{unit}
17079 @opindex --to
17080 Auto-scales output numbers according to @var{unit}.  See @emph{Units} below.
17081 The default is no scaling, meaning all the digits of the number are printed.
17083 @item --to-unit=@var{n}
17084 @opindex --to-unit
17085 Specify the output unit size (instead of the default 1).  Use this option when
17086 the output numbers represent other units (e.g. to represent @samp{4,000,000}
17087 bytes in blocks of 1KB, use @samp{--to=si --to-unit=1000}).
17088 Suffixes are handled as with @samp{--from=auto}.
17090 @end table
17092 @subsection Possible @var{unit}s:
17094 The following are the possible @var{unit} options with @option{--from=UNITS} and
17095 @option{--to=UNITS}:
17097 @table @var
17099 @item none
17100 No scaling is performed.  For input numbers, no suffixes are accepted, and any
17101 trailing characters following the number will trigger an error.  For output
17102 numbers, all digits of the numbers will be printed.
17104 @item si
17105 Auto-scale numbers according to the @emph{International System of Units (SI)}
17106 standard.
17107 For input numbers, accept one of the following suffixes.
17108 For output numbers, values larger than 1000 will be rounded, and printed with
17109 one of the following suffixes:
17111 @example
17112 @samp{K}  =>  @math{1000^1 = 10^3} (Kilo)
17113 @samp{M}  =>  @math{1000^2 = 10^6} (Mega)
17114 @samp{G}  =>  @math{1000^3 = 10^9} (Giga)
17115 @samp{T}  =>  @math{1000^4 = 10^{12}} (Tera)
17116 @samp{P}  =>  @math{1000^5 = 10^{15}} (Peta)
17117 @samp{E}  =>  @math{1000^6 = 10^{18}} (Exa)
17118 @samp{Z}  =>  @math{1000^7 = 10^{21}} (Zetta)
17119 @samp{Y}  =>  @math{1000^8 = 10^{24}} (Yotta)
17120 @end example
17122 @item iec
17123 Auto-scale numbers according to the @emph{International Electrotechnical
17124 Commission (IEC)} standard.
17125 For input numbers, accept one of the following suffixes.
17126 For output numbers, values larger than 1024 will be rounded, and printed with
17127 one of the following suffixes:
17129 @example
17130 @samp{K}  =>  @math{1024^1 = 2^{10}} (Kibi)
17131 @samp{M}  =>  @math{1024^2 = 2^{20}} (Mebi)
17132 @samp{G}  =>  @math{1024^3 = 2^{30}} (Gibi)
17133 @samp{T}  =>  @math{1024^4 = 2^{40}} (Tebi)
17134 @samp{P}  =>  @math{1024^5 = 2^{50}} (Pebi)
17135 @samp{E}  =>  @math{1024^6 = 2^{60}} (Exbi)
17136 @samp{Z}  =>  @math{1024^7 = 2^{70}} (Zebi)
17137 @samp{Y}  =>  @math{1024^8 = 2^{80}} (Yobi)
17138 @end example
17140 The @option{iec} option uses a single letter suffix (e.g. @samp{G}), which is
17141 not fully standard, as the @emph{iec} standard recommends a two-letter symbol
17142 (e.g @samp{Gi}) - but in practice, this method common.  Compare with
17143 the @option{iec-i} option.
17145 @item iec-i
17146 Auto-scale numbers according to the @emph{International Electrotechnical
17147 Commission (IEC)} standard.
17148 For input numbers, accept one of the following suffixes.
17149 For output numbers, values larger than 1024 will be rounded, and printed with
17150 one of the following suffixes:
17152 @example
17153 @samp{Ki}  =>  @math{1024^1 = 2^{10}} (Kibi)
17154 @samp{Mi}  =>  @math{1024^2 = 2^{20}} (Mebi)
17155 @samp{Gi}  =>  @math{1024^3 = 2^{30}} (Gibi)
17156 @samp{Ti}  =>  @math{1024^4 = 2^{40}} (Tebi)
17157 @samp{Pi}  =>  @math{1024^5 = 2^{50}} (Pebi)
17158 @samp{Ei}  =>  @math{1024^6 = 2^{60}} (Exbi)
17159 @samp{Zi}  =>  @math{1024^7 = 2^{70}} (Zebi)
17160 @samp{Yi}  =>  @math{1024^8 = 2^{80}} (Yobi)
17161 @end example
17163 The @option{iec-i} option uses a two-letter suffix symbol (e.g. @samp{Gi}),
17164 as the @emph{iec} standard recommends, but this is not always common in
17165 practice.  Compare with the @option{iec} option.
17167 @item auto
17168 @samp{auto} can only be used with @option{--from}.  With this method, numbers
17169 with @samp{K},@samp{M},@samp{G},@samp{T},@samp{P},@samp{E},@samp{Z},@samp{Y}
17170 suffixes are interpreted as @emph{SI} values, and numbers with @samp{Ki},
17171 @samp{Mi},@samp{Gi},@samp{Ti},@samp{Pi},@samp{Ei},@samp{Zi},@samp{Yi} suffixes
17172 are interpreted as @emph{IEC} values.
17174 @end table
17176 @subsection Examples of using @command{numfmt}
17178 Converting a single number from/to @emph{human} representation:
17179 @example
17180 $ numfmt --to=si 500000
17181 500K
17183 $ numfmt --to=iec 500000
17184 489K
17186 $ numfmt --to=iec-i 500000
17187 489Ki
17189 $ numfmt --from=si 1M
17190 1000000
17192 $ numfmt --from=iec 1M
17193 1048576
17195 # with '--from=auto', M=Mega, Mi=Mebi
17196 $ numfmt --from=auto 1M
17197 1000000
17198 $ numfmt --from=auto 1Mi
17199 1048576
17200 @end example
17202 Converting from @samp{SI} to @samp{IEC} scales (e.g. when a harddisk capacity is
17203 advertised as @samp{1TB}, while checking the drive's capacity gives lower
17204 values):
17206 @example
17207 $ numfmt --from=si --to=iec 1T
17208 932G
17209 @end example
17212 Converting a single field from an input file / piped input (these contrived
17213 examples are for demonstration purposes only, as both @command{ls} and
17214 @command{df} support the @option{--human-readable} option to
17215 output sizes in human-readable format):
17217 @example
17218 # Third field (file size) will be shown in SI representation
17219 $ ls -log | numfmt --field 3 --header --to=si | head -n4
17220 -rw-r--r--  1     94K Aug 23  2011 ABOUT-NLS
17221 -rw-r--r--  1    3.7K Jan  7 16:15 AUTHORS
17222 -rw-r--r--  1     36K Jun  1  2011 COPYING
17223 -rw-r--r--  1       0 Jan  7 15:15 ChangeLog
17225 # Second field (size) will be shown in IEC representation
17226 $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
17227 File system   1B-blocks        Used  Available Use% Mounted on
17228 rootfs             132G   104741408   26554036  80% /
17229 tmpfs              794M        7580     804960   1% /run/shm
17230 /dev/sdb1          694G   651424756   46074696  94% /home
17231 @end example
17234 Output can be tweaked using @option{--padding} or @option{--format}:
17236 @example
17237 # Pad to 10 characters, right-aligned
17238 $ du -s * | numfmt --to=si --padding=10
17239       2.5K config.log
17240        108 config.status
17241       1.7K configure
17242         20 configure.ac
17244 # Pad to 10 characters, left-aligned
17245 $ du -s * | numfmt --to=si --padding=-10
17246 2.5K       config.log
17247 108        config.status
17248 1.7K       configure
17249 20         configure.ac
17251 # Pad to 10 characters, left-aligned, using 'format'
17252 $ du -s * | numfmt --to=si --format="%10f"
17253       2.5K config.log
17254        108 config.status
17255       1.7K configure
17256         20 configure.ac
17258 # Pad to 10 characters, left-aligned, using 'format'
17259 $ du -s * | numfmt --to=si --padding="%-10f"
17260 2.5K       config.log
17261 108        config.status
17262 1.7K       configure
17263 20         configure.ac
17264 @end example
17266 With locales that support grouping digits, using @option{--grouping} or
17267 @option{--format} enables grouping.  In @samp{POSIX} locale, grouping is
17268 silently ignored:
17270 @example
17271 $ LC_ALL=C numfmt --from=iec --grouping 2G
17272 2147483648
17274 $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
17275 2,147,483,648
17277 $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
17278 2,14,74,83,648
17280 $ LC_ALL=C ./src/numfmt --from=iec --format="==%'15f==" 2G
17281 ==     2147483648==
17283 $ LC_ALL=en_US.utf8 ./src/numfmt --from=iec --format="==%'15f==" 2G
17284 ==  2,147,483,648==
17286 $ LC_ALL=en_US.utf8 ./src/numfmt --from=iec --format="==%'-15f==" 2G
17287 ==2,147,483,648  ==
17289 $ LC_ALL=ta_IN ./src/numfmt --from=iec --format="==%'15f==" 2G
17290 == 2,14,74,83,648==
17291 @end example
17294 @node seq invocation
17295 @section @command{seq}: Print numeric sequences
17297 @pindex seq
17298 @cindex numeric sequences
17299 @cindex sequence of numbers
17301 @command{seq} prints a sequence of numbers to standard output.  Synopses:
17303 @example
17304 seq [@var{option}]@dots{} @var{last}
17305 seq [@var{option}]@dots{} @var{first} @var{last}
17306 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
17307 @end example
17309 @command{seq} prints the numbers from @var{first} to @var{last} by
17310 @var{increment}.  By default, each number is printed on a separate line.
17311 When @var{increment} is not specified, it defaults to @samp{1},
17312 even when @var{first} is larger than @var{last}.
17313 @var{first} also defaults to @samp{1}.  So @code{seq 1} prints
17314 @samp{1}, but @code{seq 0} and @code{seq 10 5} produce no output.
17315 The sequence of numbers ends when the sum of the current number and
17316 @var{increment} would become greater than @var{last},
17317 so @code{seq 1 10 10} only produces @samp{1}.
17318 Floating-point numbers may be specified.  @xref{Floating point}.
17320 The program accepts the following options.  Also see @ref{Common options}.
17321 Options must precede operands.
17323 @table @samp
17324 @item -f @var{format}
17325 @itemx --format=@var{format}
17326 @opindex -f
17327 @opindex --format
17328 @cindex formatting of numbers in @command{seq}
17329 Print all numbers using @var{format}.
17330 @var{format} must contain exactly one of the @samp{printf}-style
17331 floating point conversion specifications @samp{%a}, @samp{%e},
17332 @samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F}, @samp{%G}@.
17333 The @samp{%} may be followed by zero or more flags taken from the set
17334 @samp{-+#0 '}, then an optional width containing one or more digits,
17335 then an optional precision consisting of a @samp{.} followed by zero
17336 or more digits.  @var{format} may also contain any number of @samp{%%}
17337 conversion specifications.  All conversion specifications have the
17338 same meaning as with @samp{printf}.
17340 The default format is derived from @var{first}, @var{step}, and
17341 @var{last}.  If these all use a fixed point decimal representation,
17342 the default format is @samp{%.@var{p}f}, where @var{p} is the minimum
17343 precision that can represent the output numbers exactly.  Otherwise,
17344 the default format is @samp{%g}.
17346 @item -s @var{string}
17347 @itemx --separator=@var{string}
17348 @opindex -s
17349 @opindex --separator
17350 @cindex separator for numbers in @command{seq}
17351 Separate numbers with @var{string}; default is a newline.
17352 The output always terminates with a newline.
17354 @item -w
17355 @itemx --equal-width
17356 @opindex -w
17357 @opindex --equal-width
17358 Print all numbers with the same width, by padding with leading zeros.
17359 @var{first}, @var{step}, and @var{last} should all use a fixed point
17360 decimal representation.
17361 (To have other kinds of padding, use @option{--format}).
17363 @end table
17365 You can get finer-grained control over output with @option{-f}:
17367 @example
17368 $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
17369 (-9.00E+05)
17370 ( 2.00E+05)
17371 ( 1.30E+06)
17372 @end example
17374 If you want hexadecimal integer output, you can use @command{printf}
17375 to perform the conversion:
17377 @example
17378 $ printf '%x\n' $(seq 1048575 1024 1050623)
17379 fffff
17380 1003ff
17381 1007ff
17382 @end example
17384 For very long lists of numbers, use xargs to avoid
17385 system limitations on the length of an argument list:
17387 @example
17388 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
17389 f423e
17390 f423f
17391 f4240
17392 @end example
17394 To generate octal output, use the printf @code{%o} format instead
17395 of @code{%x}.
17397 On most systems, seq can produce whole-number output for values up to
17398 at least @math{2^{53}}.  Larger integers are approximated.  The details
17399 differ depending on your floating-point implementation.
17400 @xref{Floating point}.  A common
17401 case is that @command{seq} works with integers through @math{2^{64}},
17402 and larger integers may not be numerically correct:
17404 @example
17405 $ seq 50000000000000000000 2 50000000000000000004
17406 50000000000000000000
17407 50000000000000000000
17408 50000000000000000004
17409 @end example
17411 However, note that when limited to non-negative whole numbers,
17412 an increment of 1 and no format-specifying option, seq can print
17413 arbitrarily large numbers.
17415 Be careful when using @command{seq} with outlandish values: otherwise
17416 you may see surprising results, as @command{seq} uses floating point
17417 internally.  For example, on the x86 platform, where the internal
17418 representation uses a 64-bit fraction, the command:
17420 @example
17421 seq 1 0.0000000000000000001 1.0000000000000000009
17422 @end example
17424 outputs 1.0000000000000000007 twice and skips 1.0000000000000000008.
17426 @exitstatus
17429 @node File permissions
17430 @chapter File permissions
17431 @include perm.texi
17433 @include parse-datetime.texi
17435 @c              What's GNU?
17436 @c              Arnold Robbins
17437 @node Opening the software toolbox
17438 @chapter Opening the Software Toolbox
17440 An earlier version of this chapter appeared in
17441 @uref{http://www.linuxjournal.com/article.php?sid=2762, the
17442 @cite{What's GNU@?} column of the June 1994 @cite{Linux Journal}}.
17443 It was written by Arnold Robbins.
17445 @menu
17446 * Toolbox introduction::        Toolbox introduction
17447 * I/O redirection::             I/O redirection
17448 * The who command::             The @command{who} command
17449 * The cut command::             The @command{cut} command
17450 * The sort command::            The @command{sort} command
17451 * The uniq command::            The @command{uniq} command
17452 * Putting the tools together::  Putting the tools together
17453 @end menu
17456 @node Toolbox introduction
17457 @unnumberedsec Toolbox Introduction
17459 This month's column is only peripherally related to the GNU Project, in
17460 that it describes a number of the GNU tools on your GNU/Linux system
17461 and how they
17462 might be used.  What it's really about is the ``Software Tools'' philosophy
17463 of program development and usage.
17465 The software tools philosophy was an important and integral concept
17466 in the initial design and development of Unix (of which Linux and GNU are
17467 essentially clones).  Unfortunately, in the modern day press of
17468 Internetworking and flashy GUIs, it seems to have fallen by the
17469 wayside.  This is a shame, since it provides a powerful mental model
17470 for solving many kinds of problems.
17472 Many people carry a Swiss Army knife around in their pants pockets (or
17473 purse).  A Swiss Army knife is a handy tool to have: it has several knife
17474 blades, a screwdriver, tweezers, toothpick, nail file, corkscrew, and perhaps
17475 a number of other things on it.  For the everyday, small miscellaneous jobs
17476 where you need a simple, general purpose tool, it's just the thing.
17478 On the other hand, an experienced carpenter doesn't build a house using
17479 a Swiss Army knife.  Instead, he has a toolbox chock full of specialized
17480 tools---a saw, a hammer, a screwdriver, a plane, and so on.  And he knows
17481 exactly when and where to use each tool; you won't catch him hammering nails
17482 with the handle of his screwdriver.
17484 The Unix developers at Bell Labs were all professional programmers and trained
17485 computer scientists.  They had found that while a one-size-fits-all program
17486 might appeal to a user because there's only one program to use, in practice
17487 such programs are
17489 @enumerate a
17490 @item
17491 difficult to write,
17493 @item
17494 difficult to maintain and
17495 debug, and
17497 @item
17498 difficult to extend to meet new situations.
17499 @end enumerate
17501 Instead, they felt that programs should be specialized tools.  In short, each
17502 program ``should do one thing well.''  No more and no less.  Such programs are
17503 simpler to design, write, and get right---they only do one thing.
17505 Furthermore, they found that with the right machinery for hooking programs
17506 together, that the whole was greater than the sum of the parts.  By combining
17507 several special purpose programs, you could accomplish a specific task
17508 that none of the programs was designed for, and accomplish it much more
17509 quickly and easily than if you had to write a special purpose program.
17510 We will see some (classic) examples of this further on in the column.
17511 (An important additional point was that, if necessary, take a detour
17512 and build any software tools you may need first, if you don't already
17513 have something appropriate in the toolbox.)
17515 @node I/O redirection
17516 @unnumberedsec I/O Redirection
17518 Hopefully, you are familiar with the basics of I/O redirection in the
17519 shell, in particular the concepts of ``standard input,'' ``standard output,''
17520 and ``standard error''.  Briefly, ``standard input'' is a data source, where
17521 data comes from.  A program should not need to either know or care if the
17522 data source is a disk file, a keyboard, a magnetic tape, or even a punched
17523 card reader.  Similarly, ``standard output'' is a data sink, where data goes
17524 to.  The program should neither know nor care where this might be.
17525 Programs that only read their standard input, do something to the data,
17526 and then send it on, are called @dfn{filters}, by analogy to filters in a
17527 water pipeline.
17529 With the Unix shell, it's very easy to set up data pipelines:
17531 @smallexample
17532 program_to_create_data | filter1 | ... | filterN > final.pretty.data
17533 @end smallexample
17535 We start out by creating the raw data; each filter applies some successive
17536 transformation to the data, until by the time it comes out of the pipeline,
17537 it is in the desired form.
17539 This is fine and good for standard input and standard output.  Where does the
17540 standard error come in to play?  Well, think about @command{filter1} in
17541 the pipeline above.  What happens if it encounters an error in the data it
17542 sees?  If it writes an error message to standard output, it will just
17543 disappear down the pipeline into @command{filter2}'s input, and the
17544 user will probably never see it.  So programs need a place where they can send
17545 error messages so that the user will notice them.  This is standard error,
17546 and it is usually connected to your console or window, even if you have
17547 redirected standard output of your program away from your screen.
17549 For filter programs to work together, the format of the data has to be
17550 agreed upon.  The most straightforward and easiest format to use is simply
17551 lines of text.  Unix data files are generally just streams of bytes, with
17552 lines delimited by the ASCII LF (Line Feed) character,
17553 conventionally called a ``newline'' in the Unix literature.  (This is
17554 @code{'\n'} if you're a C programmer.)  This is the format used by all
17555 the traditional filtering programs.  (Many earlier operating systems
17556 had elaborate facilities and special purpose programs for managing
17557 binary data.  Unix has always shied away from such things, under the
17558 philosophy that it's easiest to simply be able to view and edit your
17559 data with a text editor.)
17561 OK, enough introduction.  Let's take a look at some of the tools, and then
17562 we'll see how to hook them together in interesting ways.   In the following
17563 discussion, we will only present those command line options that interest
17564 us.  As you should always do, double check your system documentation
17565 for the full story.
17567 @node The who command
17568 @unnumberedsec The @command{who} Command
17570 The first program is the @command{who} command.  By itself, it generates a
17571 list of the users who are currently logged in.  Although I'm writing
17572 this on a single-user system, we'll pretend that several people are
17573 logged in:
17575 @example
17576 $ who
17577 @print{} arnold   console Jan 22 19:57
17578 @print{} miriam   ttyp0   Jan 23 14:19(:0.0)
17579 @print{} bill     ttyp1   Jan 21 09:32(:0.0)
17580 @print{} arnold   ttyp2   Jan 23 20:48(:0.0)
17581 @end example
17583 Here, the @samp{$} is the usual shell prompt, at which I typed @samp{who}.
17584 There are three people logged in, and I am logged in twice.  On traditional
17585 Unix systems, user names are never more than eight characters long.  This
17586 little bit of trivia will be useful later.  The output of @command{who} is nice,
17587 but the data is not all that exciting.
17589 @node The cut command
17590 @unnumberedsec The @command{cut} Command
17592 The next program we'll look at is the @command{cut} command.  This program
17593 cuts out columns or fields of input data.  For example, we can tell it
17594 to print just the login name and full name from the @file{/etc/passwd}
17595 file.  The @file{/etc/passwd} file has seven fields, separated by
17596 colons:
17598 @example
17599 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
17600 @end example
17602 To get the first and fifth fields, we would use @command{cut} like this:
17604 @example
17605 $ cut -d: -f1,5 /etc/passwd
17606 @print{} root:Operator
17607 @dots{}
17608 @print{} arnold:Arnold D. Robbins
17609 @print{} miriam:Miriam A. Robbins
17610 @dots{}
17611 @end example
17613 With the @option{-c} option, @command{cut} will cut out specific characters
17614 (i.e., columns) in the input lines.  This is useful for input data
17615 that has fixed width fields, and does not have a field separator.  For
17616 example, list the Monday dates for the current month:
17618 @c Is using cal ok?  Looked at gcal, but I don't like it.
17619 @example
17620 $ cal | cut -c 3-5
17621 @print{}Mo
17622 @print{}
17623 @print{}  6
17624 @print{} 13
17625 @print{} 20
17626 @print{} 27
17627 @end example
17629 @node The sort command
17630 @unnumberedsec The @command{sort} Command
17632 Next we'll look at the @command{sort} command.  This is one of the most
17633 powerful commands on a Unix-style system; one that you will often find
17634 yourself using when setting up fancy data plumbing.
17636 The @command{sort}
17637 command reads and sorts each file named on the command line.  It then
17638 merges the sorted data and writes it to standard output.  It will read
17639 standard input if no files are given on the command line (thus
17640 making it into a filter).  The sort is based on the character collating
17641 sequence or based on user-supplied ordering criteria.
17644 @node The uniq command
17645 @unnumberedsec The @command{uniq} Command
17647 Finally (at least for now), we'll look at the @command{uniq} program.  When
17648 sorting data, you will often end up with duplicate lines, lines that
17649 are identical.  Usually, all you need is one instance of each line.
17650 This is where @command{uniq} comes in.  The @command{uniq} program reads its
17651 standard input.  It prints only one
17652 copy of each repeated line.  It does have several options.  Later on,
17653 we'll use the @option{-c} option, which prints each unique line, preceded
17654 by a count of the number of times that line occurred in the input.
17657 @node Putting the tools together
17658 @unnumberedsec Putting the Tools Together
17660 Now, let's suppose this is a large ISP server system with dozens of users
17661 logged in.  The management wants the system administrator to write a
17662 program that will
17663 generate a sorted list of logged in users.  Furthermore, even if a user
17664 is logged in multiple times, his or her name should only show up in the
17665 output once.
17667 The administrator could sit down with the system documentation and write a C
17668 program that did this.  It would take perhaps a couple of hundred lines
17669 of code and about two hours to write it, test it, and debug it.
17670 However, knowing the software toolbox, the administrator can instead start out
17671 by generating just a list of logged on users:
17673 @example
17674 $ who | cut -c1-8
17675 @print{} arnold
17676 @print{} miriam
17677 @print{} bill
17678 @print{} arnold
17679 @end example
17681 Next, sort the list:
17683 @example
17684 $ who | cut -c1-8 | sort
17685 @print{} arnold
17686 @print{} arnold
17687 @print{} bill
17688 @print{} miriam
17689 @end example
17691 Finally, run the sorted list through @command{uniq}, to weed out duplicates:
17693 @example
17694 $ who | cut -c1-8 | sort | uniq
17695 @print{} arnold
17696 @print{} bill
17697 @print{} miriam
17698 @end example
17700 The @command{sort} command actually has a @option{-u} option that does what
17701 @command{uniq} does.  However, @command{uniq} has other uses for which one
17702 cannot substitute @samp{sort -u}.
17704 The administrator puts this pipeline into a shell script, and makes it
17705 available for
17706 all the users on the system (@samp{#} is the system administrator,
17707 or @code{root}, prompt):
17709 @example
17710 # cat > /usr/local/bin/listusers
17711 who | cut -c1-8 | sort | uniq
17713 # chmod +x /usr/local/bin/listusers
17714 @end example
17716 There are four major points to note here.  First, with just four
17717 programs, on one command line, the administrator was able to save about two
17718 hours worth of work.  Furthermore, the shell pipeline is just about as
17719 efficient as the C program would be, and it is much more efficient in
17720 terms of programmer time.  People time is much more expensive than
17721 computer time, and in our modern ``there's never enough time to do
17722 everything'' society, saving two hours of programmer time is no mean
17723 feat.
17725 Second, it is also important to emphasize that with the
17726 @emph{combination} of the tools, it is possible to do a special
17727 purpose job never imagined by the authors of the individual programs.
17729 Third, it is also valuable to build up your pipeline in stages, as we did here.
17730 This allows you to view the data at each stage in the pipeline, which helps
17731 you acquire the confidence that you are indeed using these tools correctly.
17733 Finally, by bundling the pipeline in a shell script, other users can use
17734 your command, without having to remember the fancy plumbing you set up for
17735 them.  In terms of how you run them, shell scripts and compiled programs are
17736 indistinguishable.
17738 After the previous warm-up exercise, we'll look at two additional, more
17739 complicated pipelines.  For them, we need to introduce two more tools.
17741 The first is the @command{tr} command, which stands for ``transliterate.''
17742 The @command{tr} command works on a character-by-character basis, changing
17743 characters.  Normally it is used for things like mapping upper case to
17744 lower case:
17746 @example
17747 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
17748 @print{} this example has mixed case!
17749 @end example
17751 There are several options of interest:
17753 @table @code
17754 @item -c
17755 work on the complement of the listed characters, i.e.,
17756 operations apply to characters not in the given set
17758 @item -d
17759 delete characters in the first set from the output
17761 @item -s
17762 squeeze repeated characters in the output into just one character.
17763 @end table
17765 We will be using all three options in a moment.
17767 The other command we'll look at is @command{comm}.  The @command{comm}
17768 command takes two sorted input files as input data, and prints out the
17769 files' lines in three columns.  The output columns are the data lines
17770 unique to the first file, the data lines unique to the second file, and
17771 the data lines that are common to both.  The @option{-1}, @option{-2}, and
17772 @option{-3} command line options @emph{omit} the respective columns.  (This is
17773 non-intuitive and takes a little getting used to.)  For example:
17775 @example
17776 $ cat f1
17777 @print{} 11111
17778 @print{} 22222
17779 @print{} 33333
17780 @print{} 44444
17781 $ cat f2
17782 @print{} 00000
17783 @print{} 22222
17784 @print{} 33333
17785 @print{} 55555
17786 $ comm f1 f2
17787 @print{}         00000
17788 @print{} 11111
17789 @print{}                 22222
17790 @print{}                 33333
17791 @print{} 44444
17792 @print{}         55555
17793 @end example
17795 The file name @file{-} tells @command{comm} to read standard input
17796 instead of a regular file.
17798 Now we're ready to build a fancy pipeline.  The first application is a word
17799 frequency counter.  This helps an author determine if he or she is over-using
17800 certain words.
17802 The first step is to change the case of all the letters in our input file
17803 to one case.  ``The'' and ``the'' are the same word when doing counting.
17805 @example
17806 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
17807 @end example
17809 The next step is to get rid of punctuation.  Quoted words and unquoted words
17810 should be treated identically; it's easiest to just get the punctuation out of
17811 the way.
17813 @smallexample
17814 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
17815 @end smallexample
17817 The second @command{tr} command operates on the complement of the listed
17818 characters, which are all the letters, the digits, the underscore, and
17819 the blank.  The @samp{\n} represents the newline character; it has to
17820 be left alone.  (The ASCII tab character should also be included for
17821 good measure in a production script.)
17823 At this point, we have data consisting of words separated by blank space.
17824 The words only contain alphanumeric characters (and the underscore).  The
17825 next step is break the data apart so that we have one word per line.  This
17826 makes the counting operation much easier, as we will see shortly.
17828 @smallexample
17829 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
17830 > tr -s ' ' '\n' | ...
17831 @end smallexample
17833 This command turns blanks into newlines.  The @option{-s} option squeezes
17834 multiple newline characters in the output into just one.  This helps us
17835 avoid blank lines.  (The @samp{>} is the shell's ``secondary prompt.''
17836 This is what the shell prints when it notices you haven't finished
17837 typing in all of a command.)
17839 We now have data consisting of one word per line, no punctuation, all one
17840 case.  We're ready to count each word:
17842 @smallexample
17843 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
17844 > tr -s ' ' '\n' | sort | uniq -c | ...
17845 @end smallexample
17847 At this point, the data might look something like this:
17849 @example
17850      60 a
17851       2 able
17852       6 about
17853       1 above
17854       2 accomplish
17855       1 acquire
17856       1 actually
17857       2 additional
17858 @end example
17860 The output is sorted by word, not by count!  What we want is the most
17861 frequently used words first.  Fortunately, this is easy to accomplish,
17862 with the help of two more @command{sort} options:
17864 @table @code
17865 @item -n
17866 do a numeric sort, not a textual one
17868 @item -r
17869 reverse the order of the sort
17870 @end table
17872 The final pipeline looks like this:
17874 @smallexample
17875 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
17876 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
17877 @print{}    156 the
17878 @print{}     60 a
17879 @print{}     58 to
17880 @print{}     51 of
17881 @print{}     51 and
17882 @dots{}
17883 @end smallexample
17885 Whew!  That's a lot to digest.  Yet, the same principles apply.  With six
17886 commands, on two lines (really one long one split for convenience), we've
17887 created a program that does something interesting and useful, in much
17888 less time than we could have written a C program to do the same thing.
17890 A minor modification to the above pipeline can give us a simple spelling
17891 checker!  To determine if you've spelled a word correctly, all you have to
17892 do is look it up in a dictionary.  If it is not there, then chances are
17893 that your spelling is incorrect.  So, we need a dictionary.
17894 The conventional location for a dictionary is @file{/usr/dict/words}.
17895 On my GNU/Linux system,@footnote{Redhat Linux 6.1, for the November 2000
17896 revision of this article.}
17897 this is a sorted, 45,402 word dictionary.
17899 Now, how to compare our file with the dictionary?  As before, we generate
17900 a sorted list of words, one per line:
17902 @smallexample
17903 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
17904 > tr -s ' ' '\n' | sort -u | ...
17905 @end smallexample
17907 Now, all we need is a list of words that are @emph{not} in the
17908 dictionary.  Here is where the @command{comm} command comes in.
17910 @smallexample
17911 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
17912 > tr -s ' ' '\n' | sort -u |
17913 > comm -23 - /usr/dict/words
17914 @end smallexample
17916 The @option{-2} and @option{-3} options eliminate lines that are only in the
17917 dictionary (the second file), and lines that are in both files.  Lines
17918 only in the first file (standard input, our stream of words), are
17919 words that are not in the dictionary.  These are likely candidates for
17920 spelling errors.  This pipeline was the first cut at a production
17921 spelling checker on Unix.
17923 There are some other tools that deserve brief mention.
17925 @table @command
17926 @item grep
17927 search files for text that matches a regular expression
17929 @item wc
17930 count lines, words, characters
17932 @item tee
17933 a T-fitting for data pipes, copies data to files and to standard output
17935 @item sed
17936 the stream editor, an advanced tool
17938 @item awk
17939 a data manipulation language, another advanced tool
17940 @end table
17942 The software tools philosophy also espoused the following bit of
17943 advice: ``Let someone else do the hard part.''  This means, take
17944 something that gives you most of what you need, and then massage it the
17945 rest of the way until it's in the form that you want.
17947 To summarize:
17949 @enumerate 1
17950 @item
17951 Each program should do one thing well.  No more, no less.
17953 @item
17954 Combining programs with appropriate plumbing leads to results where
17955 the whole is greater than the sum of the parts.  It also leads to novel
17956 uses of programs that the authors might never have imagined.
17958 @item
17959 Programs should never print extraneous header or trailer data, since these
17960 could get sent on down a pipeline.  (A point we didn't mention earlier.)
17962 @item
17963 Let someone else do the hard part.
17965 @item
17966 Know your toolbox!  Use each program appropriately.  If you don't have an
17967 appropriate tool, build one.
17968 @end enumerate
17970 As of this writing, all the programs discussed are available from
17971 @uref{http://ftp.gnu.org/old-gnu/textutils/textutils-1.22.tar.gz},
17972 with more recent versions available from
17973 @uref{http://ftp.gnu.org/gnu/coreutils}.
17975 None of what I have presented in this column is new.  The Software Tools
17976 philosophy was first introduced in the book @cite{Software Tools}, by
17977 Brian Kernighan and P.J. Plauger (Addison-Wesley, ISBN 0-201-03669-X).
17978 This book showed how to write and use software tools.  It was written in
17979 1976, using a preprocessor for FORTRAN named @command{ratfor} (RATional
17980 FORtran).  At the time, C was not as ubiquitous as it is now; FORTRAN
17981 was.  The last chapter presented a @command{ratfor} to FORTRAN
17982 processor, written in @command{ratfor}.  @command{ratfor} looks an awful
17983 lot like C; if you know C, you won't have any problem following the
17984 code.
17986 In 1981, the book was updated and made available as @cite{Software Tools
17987 in Pascal} (Addison-Wesley, ISBN 0-201-10342-7).  Both books are
17988 still in print and are well worth
17989 reading if you're a programmer.  They certainly made a major change in
17990 how I view programming.
17992 The programs in both books are available from
17993 @uref{http://cm.bell-labs.com/who/bwk, Brian Kernighan's home page}.
17994 For a number of years, there was an active
17995 Software Tools Users Group, whose members had ported the original
17996 @command{ratfor} programs to essentially every computer system with a
17997 FORTRAN compiler.  The popularity of the group waned in the middle 1980s
17998 as Unix began to spread beyond universities.
18000 With the current proliferation of GNU code and other clones of Unix programs,
18001 these programs now receive little attention; modern C versions are
18002 much more efficient and do more than these programs do.  Nevertheless, as
18003 exposition of good programming style, and evangelism for a still-valuable
18004 philosophy, these books are unparalleled, and I recommend them highly.
18006 Acknowledgment: I would like to express my gratitude to Brian Kernighan
18007 of Bell Labs, the original Software Toolsmith, for reviewing this column.
18009 @node GNU Free Documentation License
18010 @appendix GNU Free Documentation License
18012 @include fdl.texi
18014 @node Concept index
18015 @unnumbered Index
18017 @printindex cp
18019 @bye
18021 @c Local variables:
18022 @c texinfo-column-for-description: 32
18023 @c End: