env: add --chdir option
[coreutils.git] / doc / coreutils.texi
blob5c424c166fb2233c64bad125e7329466abea356d
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 * b2sum: (coreutils)b2sum invocation.           Print or check BLAKE2 digests.
41 * base32: (coreutils)base32 invocation.         Base32 encode/decode data.
42 * base64: (coreutils)base64 invocation.         Base64 encode/decode data.
43 * basename: (coreutils)basename invocation.     Strip directory and suffix.
44 * cat: (coreutils)cat invocation.               Concatenate and write files.
45 * chcon: (coreutils)chcon invocation.           Change SELinux CTX of files.
46 * chgrp: (coreutils)chgrp invocation.           Change file groups.
47 * chmod: (coreutils)chmod invocation.           Change access permissions.
48 * chown: (coreutils)chown invocation.           Change file owners and groups.
49 * chroot: (coreutils)chroot invocation.         Specify the root directory.
50 * cksum: (coreutils)cksum invocation.           Print POSIX CRC checksum.
51 * comm: (coreutils)comm invocation.             Compare sorted files by line.
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-2017 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 b2sum 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 * File timestamps::              File timestamp issues
213 * Date input formats::           Specifying date strings
214 * Opening the software toolbox:: The software tools philosophy
215 * GNU Free Documentation License:: Copying and sharing this manual
216 * Concept index::                General index
218 @detailmenu
219  --- The Detailed Node Listing ---
221 Common Options
223 * Exit status::                  Indicating program success or failure
224 * Backup options::               Backup options
225 * Block size::                   Block size
226 * Floating point::               Floating point number representation
227 * Signal specifications::        Specifying signals
228 * Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
229 * Random sources::               Sources of random data
230 * Target directory::             Target directory
231 * Trailing slashes::             Trailing slashes
232 * Traversing symlinks::          Traversing symlinks to directories
233 * Treating / specially::         Treating / specially
234 * Standards conformance::        Standards conformance
235 * Multi-call invocation::        Multi-call program invocation
237 Output of entire files
239 * cat invocation::               Concatenate and write files
240 * tac invocation::               Concatenate and write files in reverse
241 * nl invocation::                Number lines and write files
242 * od invocation::                Write files in octal or other formats
243 * base32 invocation::            Transform data into printable data
244 * base64 invocation::            Transform data into printable data
246 Formatting file contents
248 * fmt invocation::               Reformat paragraph text
249 * pr invocation::                Paginate or columnate files for printing
250 * fold invocation::              Wrap input lines to fit in specified width
252 Output of parts of files
254 * head invocation::              Output the first part of files
255 * tail invocation::              Output the last part of files
256 * split invocation::             Split a file into fixed-size pieces
257 * csplit invocation::            Split a file into context-determined pieces
259 Summarizing files
261 * wc invocation::                Print newline, word, and byte counts
262 * sum invocation::               Print checksum and block counts
263 * cksum invocation::             Print CRC checksum and byte counts
264 * b2sum invocation::             Print or check BLAKE2 digests
265 * md5sum invocation::            Print or check MD5 digests
266 * sha1sum invocation::           Print or check SHA-1 digests
267 * sha2 utilities::               Print or check SHA-2 digests
269 Operating on sorted files
271 * sort invocation::              Sort text files
272 * shuf invocation::              Shuffle text files
273 * uniq invocation::              Uniquify files
274 * comm invocation::              Compare two sorted files line by line
275 * ptx invocation::               Produce a permuted index of file contents
276 * tsort invocation::             Topological sort
278 @command{ptx}: Produce permuted indexes
280 * General options in ptx::       Options which affect general program behavior
281 * Charset selection in ptx::     Underlying character set considerations
282 * Input processing in ptx::      Input fields, contexts, and keyword selection
283 * Output formatting in ptx::     Types of output format, and sizing the fields
284 * Compatibility in ptx::         The GNU extensions to @command{ptx}
286 Operating on fields
288 * cut invocation::               Print selected parts of lines
289 * paste invocation::             Merge lines of files
290 * join invocation::              Join lines on a common field
292 Operating on characters
294 * tr invocation::                Translate, squeeze, and/or delete characters
295 * expand invocation::            Convert tabs to spaces
296 * unexpand invocation::          Convert spaces to tabs
298 @command{tr}: Translate, squeeze, and/or delete characters
300 * Character sets::               Specifying sets of characters
301 * Translating::                  Changing one set of characters to another
302 * Squeezing and deleting::       Removing characters
304 Directory listing
306 * ls invocation::                List directory contents
307 * dir invocation::               Briefly list directory contents
308 * vdir invocation::              Verbosely list directory contents
309 * dircolors invocation::         Color setup for @command{ls}
311 @command{ls}:  List directory contents
313 * Which files are listed::       Which files are listed
314 * What information is listed::   What information is listed
315 * Sorting the output::           Sorting the output
316 * Details about version sort::   More details about version sort
317 * General output formatting::    General output formatting
318 * Formatting the file names::    Formatting the file names
320 Basic operations
322 * cp invocation::                Copy files and directories
323 * dd invocation::                Convert and copy a file
324 * install invocation::           Copy files and set attributes
325 * mv invocation::                Move (rename) files
326 * rm invocation::                Remove files or directories
327 * shred invocation::             Remove files more securely
329 Special file types
331 * link invocation::              Make a hard link via the link syscall
332 * ln invocation::                Make links between files
333 * mkdir invocation::             Make directories
334 * mkfifo invocation::            Make FIFOs (named pipes)
335 * mknod invocation::             Make block or character special files
336 * readlink invocation::          Print value of a symlink or canonical file name
337 * rmdir invocation::             Remove empty directories
338 * unlink invocation::            Remove files via unlink syscall
340 Changing file attributes
342 * chown invocation::             Change file owner and group
343 * chgrp invocation::             Change group ownership
344 * chmod invocation::             Change access permissions
345 * touch invocation::             Change file timestamps
347 Disk usage
349 * df invocation::                Report file system disk space usage
350 * du invocation::                Estimate file space usage
351 * stat invocation::              Report file or file system status
352 * sync invocation::              Synchronize cached writes to persistent storage
353 * truncate invocation::          Shrink or extend the size of a file
355 Printing text
357 * echo invocation::              Print a line of text
358 * printf invocation::            Format and print data
359 * yes invocation::               Print a string until interrupted
361 Conditions
363 * false invocation::             Do nothing, unsuccessfully
364 * true invocation::              Do nothing, successfully
365 * test invocation::              Check file types and compare values
366 * expr invocation::              Evaluate expressions
368 @command{test}: Check file types and compare values
370 * File type tests::              File type tests
371 * Access permission tests::      Access permission tests
372 * File characteristic tests::    File characteristic tests
373 * String tests::                 String tests
374 * Numeric tests::                Numeric tests
376 @command{expr}: Evaluate expression
378 * String expressions::           + : match substr index length
379 * Numeric expressions::          + - * / %
380 * Relations for expr::           | & < <= = == != >= >
381 * Examples of expr::             Examples of using @command{expr}
383 Redirection
385 * tee invocation::               Redirect output to multiple files or processes
387 File name manipulation
389 * basename invocation::          Strip directory and suffix from a file name
390 * dirname invocation::           Strip last file name component
391 * pathchk invocation::           Check file name validity and portability
392 * mktemp invocation::            Create temporary file or directory
393 * realpath invocation::          Print resolved file names
395 Working context
397 * pwd invocation::               Print working directory
398 * stty invocation::              Print or change terminal characteristics
399 * printenv invocation::          Print all or some environment variables
400 * tty invocation::               Print file name of terminal on standard input
402 @command{stty}: Print or change terminal characteristics
404 * Control::                      Control settings
405 * Input::                        Input settings
406 * Output::                       Output settings
407 * Local::                        Local settings
408 * Combination::                  Combination settings
409 * Characters::                   Special characters
410 * Special::                      Special settings
412 User information
414 * id invocation::                Print user identity
415 * logname invocation::           Print current login name
416 * whoami invocation::            Print effective user ID
417 * groups invocation::            Print group names a user is in
418 * users invocation::             Print login names of users currently logged in
419 * who invocation::               Print who is currently logged in
421 System context
423 * arch invocation::              Print machine hardware name
424 * date invocation::              Print or set system date and time
425 * nproc invocation::             Print the number of processors
426 * uname invocation::             Print system information
427 * hostname invocation::          Print or set system name
428 * hostid invocation::            Print numeric host identifier
429 * uptime invocation::            Print system uptime and load
431 @command{date}: Print or set system date and time
433 * Time conversion specifiers::   %[HIklMNpPrRsSTXzZ]
434 * Date conversion specifiers::   %[aAbBcCdDeFgGhjmuUVwWxyY]
435 * Literal conversion specifiers:: %[%nt]
436 * Padding and other flags::      Pad with zeros, spaces, etc.
437 * Setting the time::             Changing the system clock
438 * Options for date::             Instead of the current time
439 * Date input formats::           Specifying date strings
440 * Examples of date::             Examples
442 SELinux context
444 * chcon invocation::             Change SELinux context of file
445 * runcon invocation::            Run a command in specified SELinux context
447 Modified command invocation
449 * chroot invocation::            Run a command with a different root directory
450 * env invocation::               Run a command in a modified environment
451 * nice invocation::              Run a command with modified niceness
452 * nohup invocation::             Run a command immune to hangups
453 * stdbuf invocation::            Run a command with modified I/O buffering
454 * timeout invocation::           Run a command with a time limit
456 Process control
458 * kill invocation::              Sending a signal to processes.
460 Delaying
462 * sleep invocation::             Delay for a specified time
464 Numeric operations
466 * factor invocation::            Print prime factors
467 * numfmt invocation::            Reformat numbers
468 * seq invocation::               Print numeric sequences
471 File timestamps
473 * File timestamps::              File timestamp issues
475 File permissions
477 * Mode Structure::               Structure of file mode bits
478 * Symbolic Modes::               Mnemonic representation of file mode bits
479 * Numeric Modes::                File mode bits as octal numbers
480 * Directory Setuid and Setgid::  Set-user-ID and set-group-ID on directories
482 Date input formats
484 * General date syntax::          Common rules
485 * Calendar date items::          19 Dec 1994
486 * Time of day items::            9:20pm
487 * Time zone items::              EST, PDT, UTC, @dots{}
488 * Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500
489 * Day of week items::            Monday and others
490 * Relative items in date strings:: next tuesday, 2 years ago
491 * Pure numbers in date strings:: 19931219, 1440
492 * Seconds since the Epoch::      @@1078100502
493 * Specifying time zone rules::   TZ="America/New_York", TZ="UTC0"
494 * Authors of parse_datetime::    Bellovin, Eggert, Salz, Berets, et al.
496 Opening the software toolbox
498 * Toolbox introduction::         Toolbox introduction
499 * I/O redirection::              I/O redirection
500 * The who command::              The @command{who} command
501 * The cut command::              The @command{cut} command
502 * The sort command::             The @command{sort} command
503 * The uniq command::             The @command{uniq} command
504 * Putting the tools together::   Putting the tools together
506 Copying This Manual
508 * GNU Free Documentation License::     Copying and sharing this manual
510 @end detailmenu
511 @end menu
514 @node Introduction
515 @chapter Introduction
517 This manual is a work in progress: many sections make no attempt to explain
518 basic concepts in a way suitable for novices.  Thus, if you are interested,
519 please get involved in improving this manual.  The entire GNU community
520 will benefit.
522 @cindex POSIX
523 The GNU utilities documented here are mostly compatible with the
524 POSIX standard.
525 @cindex bugs, reporting
527 Please report bugs to @email{bug-coreutils@@gnu.org}.
528 Include the version number, machine architecture, input files, and
529 any other information needed to reproduce the bug: your input, what you
530 expected, what you got, and why it is wrong.
532 If you have a problem with @command{sort} or @command{date}, try using the
533 @option{--debug} option, as it can can often help find and fix problems without
534 having to wait for an answer to a bug report.  If the debug output
535 does not suffice to fix the problem on your own, please compress and
536 attach it to the rest of your bug report.
538 Although diffs are welcome,
539 please include a description of the problem as well, since this is
540 sometimes difficult to infer.  @xref{Bugs, , , gcc, Using and Porting GNU CC}.
542 @cindex Berry, K.
543 @cindex Paterson, R.
544 @cindex Stallman, R.
545 @cindex Pinard, F.
546 @cindex MacKenzie, D.
547 @cindex Meyering, J.
548 @cindex Youmans, B.
549 This manual was originally derived from the Unix man pages in the
550 distributions, which were written by David MacKenzie and updated by Jim
551 Meyering.  What you are reading now is the authoritative documentation
552 for these utilities; the man pages are no longer being maintained.  The
553 original @command{fmt} man page was written by Ross Paterson.  Fran@,{c}ois
554 Pinard did the initial conversion to Texinfo format.  Karl Berry did the
555 indexing, some reorganization, and editing of the results.  Brian
556 Youmans of the Free Software Foundation office staff combined the
557 manuals for textutils, fileutils, and sh-utils to produce the present
558 omnibus manual.  Richard Stallman contributed his usual invaluable
559 insights to the overall process.
561 @node Common options
562 @chapter Common options
564 @macro optBackup
565 @item -b
566 @itemx --backup[=@var{method}]
567 @opindex -b
568 @opindex --backup
569 @vindex VERSION_CONTROL
570 @cindex backups, making
571 @xref{Backup options}.
572 Make a backup of each file that would otherwise be overwritten or removed.
573 @end macro
575 @macro optBackupSuffix
576 @item -S @var{suffix}
577 @itemx --suffix=@var{suffix}
578 @opindex -S
579 @opindex --suffix
580 Append @var{suffix} to each backup file made with @option{-b}.
581 @xref{Backup options}.
582 @end macro
584 @macro optTargetDirectory
585 @item -t @var{directory}
586 @itemx --target-directory=@var{directory}
587 @opindex -t
588 @opindex --target-directory
589 @cindex target directory
590 @cindex destination directory
591 Specify the destination @var{directory}.
592 @xref{Target directory}.
593 @end macro
595 @macro optNoTargetDirectory
596 @item -T
597 @itemx --no-target-directory
598 @opindex -T
599 @opindex --no-target-directory
600 @cindex target directory
601 @cindex destination directory
602 Do not treat the last operand specially when it is a directory or a
603 symbolic link to a directory.  @xref{Target directory}.
604 @end macro
606 @macro outputNUL
607 @cindex output NUL-byte-terminated lines
608 Output a zero byte (ASCII NUL) at the end of each line,
609 rather than a newline.  This option enables other programs to parse the
610 output even when that output would contain data with embedded newlines.
611 @end macro
613 @macro optNull
614 @item -0
615 @itemx --null
616 @opindex -0
617 @opindex --null
618 @outputNUL
619 @end macro
621 @macro optZero
622 @item -z
623 @itemx --zero
624 @opindex -z
625 @opindex --zero
626 @outputNUL
627 @end macro
629 @macro optZeroTerminated
630 @item -z
631 @itemx --zero-terminated
632 @opindex -z
633 @opindex --zero-terminated
634 @cindex process zero-terminated items
635 Delimit items with a zero byte rather than a newline (ASCII LF).
636 I.e., treat input as items separated by ASCII NUL
637 and terminate output items with ASCII NUL.
638 This option can be useful in conjunction with @samp{perl -0} or
639 @samp{find -print0} and @samp{xargs -0} which do the same in order to
640 reliably handle arbitrary file names (even those containing blanks
641 or other special characters).
642 @end macro
644 @macro optSi
645 @item --si
646 @opindex --si
647 @cindex SI output
648 Append an SI-style abbreviation to each size, such as @samp{M} for
649 megabytes.  Powers of 1000 are used, not 1024; @samp{M} stands for
650 1,000,000 bytes.  This option is equivalent to
651 @option{--block-size=si}.  Use the @option{-h} or
652 @option{--human-readable} option if
653 you prefer powers of 1024.
654 @end macro
656 @macro optHumanReadable
657 @item -h
658 @itemx --human-readable
659 @opindex -h
660 @opindex --human-readable
661 @cindex human-readable output
662 Append a size letter to each size, such as @samp{M} for mebibytes.
663 Powers of 1024 are used, not 1000; @samp{M} stands for 1,048,576 bytes.
664 This option is equivalent to @option{--block-size=human-readable}.
665 Use the @option{--si} option if you prefer powers of 1000.
666 @end macro
668 @macro optStripTrailingSlashes
669 @item --strip-trailing-slashes
670 @opindex --strip-trailing-slashes
671 @cindex stripping trailing slashes
672 Remove any trailing slashes from each @var{source} argument.
673 @xref{Trailing slashes}.
674 @end macro
676 @macro mayConflictWithShellBuiltIn{cmd}
677 @cindex conflicts with shell built-ins
678 @cindex built-in shell commands, conflicts with
679 Due to shell aliases and built-in @command{\cmd\} functions, using an
680 unadorned @command{\cmd\} interactively or in a script may get you
681 different functionality than that described here.  Invoke it via
682 @command{env} (i.e., @code{env \cmd\ @dots{}}) to avoid interference
683 from the shell.
685 @end macro
687 @macro multiplierSuffixes{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{b}  =>            512 ("blocks")
692 @samp{KB} =>           1000 (KiloBytes)
693 @samp{K}  =>           1024 (KibiBytes)
694 @samp{MB} =>      1000*1000 (MegaBytes)
695 @samp{M}  =>      1024*1024 (MebiBytes)
696 @samp{GB} => 1000*1000*1000 (GigaBytes)
697 @samp{G}  => 1024*1024*1024 (GibiBytes)
698 @end example
699 and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
700 @end macro
702 @c FIXME: same as above, but no ``blocks'' line.
703 @macro multiplierSuffixesNoBlocks{varName}
704 @var{\varName\} may be, or may be an integer optionally followed by,
705 one of the following multiplicative suffixes:
706 @example
707 @samp{KB} =>           1000 (KiloBytes)
708 @samp{K}  =>           1024 (KibiBytes)
709 @samp{MB} =>      1000*1000 (MegaBytes)
710 @samp{M}  =>      1024*1024 (MebiBytes)
711 @samp{GB} => 1000*1000*1000 (GigaBytes)
712 @samp{G}  => 1024*1024*1024 (GibiBytes)
713 @end example
714 and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
715 @end macro
717 @cindex common options
719 Certain options are available in all of these programs.  Rather than
720 writing identical descriptions for each of the programs, they are
721 described here.  (In fact, every GNU program accepts (or should accept)
722 these options.)
724 @vindex POSIXLY_CORRECT
725 Normally options and operands can appear in any order, and programs act
726 as if all the options appear before any operands.  For example,
727 @samp{sort -r passwd -t :} acts like @samp{sort -r -t : passwd}, since
728 @samp{:} is an option-argument of @option{-t}.  However, if the
729 @env{POSIXLY_CORRECT} environment variable is set, options must appear
730 before operands, unless otherwise specified for a particular command.
732 A few programs can usefully have trailing operands with leading
733 @samp{-}.  With such a program, options must precede operands even if
734 @env{POSIXLY_CORRECT} is not set, and this fact is noted in the
735 program description.  For example, the @command{env} command's options
736 must appear before its operands, since in some cases the operands
737 specify a command that itself contains options.
739 Most programs that accept long options recognize unambiguous
740 abbreviations of those options.  For example, @samp{rmdir
741 --ignore-fail-on-non-empty} can be invoked as @samp{rmdir
742 --ignore-fail} or even @samp{rmdir --i}.  Ambiguous options, such as
743 @samp{ls --h}, are identified as such.
745 Some of these programs recognize the @option{--help} and @option{--version}
746 options only when one of them is the sole command line argument.  For
747 these programs, abbreviations of the long options are not always recognized.
749 @table @samp
751 @item --help
752 @opindex --help
753 @cindex help, online
754 Print a usage message listing all available options, then exit successfully.
756 @item --version
757 @opindex --version
758 @cindex version number, finding
759 Print the version number, then exit successfully.
761 @item --
762 @opindex --
763 @cindex option delimiter
764 Delimit the option list.  Later arguments, if any, are treated as
765 operands even if they begin with @samp{-}.  For example, @samp{sort --
766 -r} reads from the file named @file{-r}.
768 @end table
770 @cindex standard input
771 @cindex standard output
772 A single @samp{-} operand is not really an option, though it looks like one.  It
773 stands for a file operand, and some tools treat it as standard input, or as
774 standard output if that is clear from the context.  For example, @samp{sort -}
775 reads from standard input, and is equivalent to plain @samp{sort}.  Unless
776 otherwise specified, a @samp{-} can appear as any operand that requires a file
777 name.
779 @menu
780 * Exit status::                 Indicating program success or failure.
781 * Backup options::              -b -S, in some programs.
782 * Block size::                  BLOCK_SIZE and --block-size, in some programs.
783 * Floating point::              Floating point number representation.
784 * Signal specifications::       Specifying signals using the --signal option.
785 * Disambiguating names and IDs:: chgrp, chown, chroot, id: user and group syntax
786 * Random sources::              --random-source, in some programs.
787 * Target directory::            Specifying a target directory, in some programs.
788 * Trailing slashes::            --strip-trailing-slashes, in some programs.
789 * Traversing symlinks::         -H, -L, or -P, in some programs.
790 * Treating / specially::        --preserve-root and --no-preserve-root.
791 * Special built-in utilities::  @command{break}, @command{:}, @dots{}
792 * Standards conformance::       Conformance to the POSIX standard.
793 * Multi-call invocation::       Multi-call program invocation.
794 @end menu
797 @node Exit status
798 @section Exit status
800 @macro exitstatus
801 An exit status of zero indicates success,
802 and a nonzero value indicates failure.
803 @end macro
805 Nearly every command invocation yields an integral @dfn{exit status}
806 that can be used to change how other commands work.
807 For the vast majority of commands, an exit status of zero indicates
808 success.  Failure is indicated by a nonzero value---typically
809 @samp{1}, though it may differ on unusual platforms as POSIX
810 requires only that it be nonzero.
812 However, some of the programs documented here do produce
813 other exit status values and a few associate different
814 meanings with the values @samp{0} and @samp{1}.
815 Here are some of the exceptions:
816 @command{chroot}, @command{env}, @command{expr}, @command{nice},
817 @command{nohup}, @command{numfmt}, @command{printenv}, @command{sort},
818 @command{stdbuf}, @command{test}, @command{timeout}, @command{tty}.
821 @node Backup options
822 @section Backup options
824 @cindex backup options
826 Some GNU programs (at least @command{cp}, @command{install},
827 @command{ln}, and @command{mv}) optionally make backups of files
828 before writing new versions.
829 These options control the details of these backups.  The options are also
830 briefly mentioned in the descriptions of the particular programs.
832 @table @samp
834 @item -b
835 @itemx --backup[=@var{method}]
836 @opindex -b
837 @opindex --backup
838 @vindex VERSION_CONTROL
839 @cindex backups, making
840 Make a backup of each file that would otherwise be overwritten or removed.
841 Without this option, the original versions are destroyed.
842 Use @var{method} to determine the type of backups to make.
843 When this option is used but @var{method} is not specified,
844 then the value of the @env{VERSION_CONTROL}
845 environment variable is used.  And if @env{VERSION_CONTROL} is not set,
846 the default backup type is @samp{existing}.
848 Note that the short form of this option, @option{-b} does not accept any
849 argument.  Using @option{-b} is equivalent to using @option{--backup=existing}.
851 @vindex version-control @r{Emacs variable}
852 This option corresponds to the Emacs variable @samp{version-control};
853 the values for @var{method} are the same as those used in Emacs.
854 This option also accepts more descriptive names.
855 The valid @var{method}s are (unique abbreviations are accepted):
857 @table @samp
858 @item none
859 @itemx off
860 @opindex none @r{backup method}
861 Never make backups.
863 @item numbered
864 @itemx t
865 @opindex numbered @r{backup method}
866 Always make numbered backups.
868 @item existing
869 @itemx nil
870 @opindex existing @r{backup method}
871 Make numbered backups of files that already have them, simple backups
872 of the others.
874 @item simple
875 @itemx never
876 @opindex simple @r{backup method}
877 Always make simple backups.  Please note @samp{never} is not to be
878 confused with @samp{none}.
880 @end table
882 @item -S @var{suffix}
883 @itemx --suffix=@var{suffix}
884 @opindex -S
885 @opindex --suffix
886 @cindex backup suffix
887 @vindex SIMPLE_BACKUP_SUFFIX
888 Append @var{suffix} to each backup file made with @option{-b}.  If this
889 option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX}
890 environment variable is used.  And if @env{SIMPLE_BACKUP_SUFFIX} is not
891 set, the default is @samp{~}, just as in Emacs.
893 @end table
895 @node Block size
896 @section Block size
898 @cindex block size
900 Some GNU programs (at least @command{df}, @command{du}, and
901 @command{ls}) display sizes in ``blocks''.  You can adjust the block size
902 and method of display to make sizes easier to read.  The block size
903 used for display is independent of any file system block size.
904 Fractional block counts are rounded up to the nearest integer.
906 @opindex --block-size=@var{size}
907 @vindex BLOCKSIZE
908 @vindex BLOCK_SIZE
909 @vindex DF_BLOCK_SIZE
910 @vindex DU_BLOCK_SIZE
911 @vindex LS_BLOCK_SIZE
912 @vindex POSIXLY_CORRECT@r{, and block size}
914 The default block size is chosen by examining the following environment
915 variables in turn; the first one that is set determines the block size.
917 @table @code
919 @item DF_BLOCK_SIZE
920 This specifies the default block size for the @command{df} command.
921 Similarly, @env{DU_BLOCK_SIZE} specifies the default for @command{du} and
922 @env{LS_BLOCK_SIZE} for @command{ls}.
924 @item BLOCK_SIZE
925 This specifies the default block size for all three commands, if the
926 above command-specific environment variables are not set.
928 @item BLOCKSIZE
929 This specifies the default block size for all values that are normally
930 printed as blocks, if neither @env{BLOCK_SIZE} nor the above
931 command-specific environment variables are set.  Unlike the other
932 environment variables, @env{BLOCKSIZE} does not affect values that are
933 normally printed as byte counts, e.g., the file sizes contained in
934 @code{ls -l} output.
936 @item POSIXLY_CORRECT
937 If neither @env{@var{command}_BLOCK_SIZE}, nor @env{BLOCK_SIZE}, nor
938 @env{BLOCKSIZE} is set, but this variable is set, the block size
939 defaults to 512.
941 @end table
943 If none of the above environment variables are set, the block size
944 currently defaults to 1024 bytes in most contexts, but this number may
945 change in the future.  For @command{ls} file sizes, the block size
946 defaults to 1 byte.
948 @cindex human-readable output
949 @cindex SI output
951 A block size specification can be a positive integer specifying the number
952 of bytes per block, or it can be @code{human-readable} or @code{si} to
953 select a human-readable format.  Integers may be followed by suffixes
954 that are upward compatible with the
955 @uref{http://www.bipm.org/en/publications/si-brochure/chapter3.html,
956 SI prefixes}
957 for decimal multiples and with the
958 @uref{http://physics.nist.gov/cuu/Units/binary.html, ISO/IEC 80000-13
959 (formerly IEC 60027-2) prefixes} for binary multiples.
961 With human-readable formats, output sizes are followed by a size letter
962 such as @samp{M} for megabytes.  @code{BLOCK_SIZE=human-readable} uses
963 powers of 1024; @samp{M} stands for 1,048,576 bytes.
964 @code{BLOCK_SIZE=si} is similar, but uses powers of 1000 and appends
965 @samp{B}; @samp{MB} stands for 1,000,000 bytes.
967 @vindex LC_NUMERIC
968 A block size specification preceded by @samp{'} causes output sizes to
969 be displayed with thousands separators.  The @env{LC_NUMERIC} locale
970 specifies the thousands separator and grouping.  For example, in an
971 American English locale, @samp{--block-size="'1kB"} would cause a size
972 of 1234000 bytes to be displayed as @samp{1,234}.  In the default C
973 locale, there is no thousands separator so a leading @samp{'} has no
974 effect.
976 An integer block size can be followed by a suffix to specify a
977 multiple of that size.  A bare size letter,
978 or one followed by @samp{iB}, specifies
979 a multiple using powers of 1024.  A size letter followed by @samp{B}
980 specifies powers of 1000 instead.  For example, @samp{1M} and
981 @samp{1MiB} are equivalent to @samp{1048576}, whereas @samp{1MB} is
982 equivalent to @samp{1000000}.
984 A plain suffix without a preceding integer acts as if @samp{1} were
985 prepended, except that it causes a size indication to be appended to
986 the output.  For example, @samp{--block-size="kB"} displays 3000 as
987 @samp{3kB}.
989 The following suffixes are defined.  Large sizes like @code{1Y}
990 may be rejected by your computer due to limitations of its arithmetic.
992 @table @samp
993 @item kB
994 @cindex kilobyte, definition of
995 kilobyte: @math{10^3 = 1000}.
996 @item k
997 @itemx K
998 @itemx KiB
999 @cindex kibibyte, definition of
1000 kibibyte: @math{2^{10} = 1024}.  @samp{K} is special: the SI prefix is
1001 @samp{k} and the ISO/IEC 80000-13 prefix is @samp{Ki}, but tradition and
1002 POSIX use @samp{k} to mean @samp{KiB}.
1003 @item MB
1004 @cindex megabyte, definition of
1005 megabyte: @math{10^6 = 1,000,000}.
1006 @item M
1007 @itemx MiB
1008 @cindex mebibyte, definition of
1009 mebibyte: @math{2^{20} = 1,048,576}.
1010 @item GB
1011 @cindex gigabyte, definition of
1012 gigabyte: @math{10^9 = 1,000,000,000}.
1013 @item G
1014 @itemx GiB
1015 @cindex gibibyte, definition of
1016 gibibyte: @math{2^{30} = 1,073,741,824}.
1017 @item TB
1018 @cindex terabyte, definition of
1019 terabyte:  @math{10^{12} = 1,000,000,000,000}.
1020 @item T
1021 @itemx TiB
1022 @cindex tebibyte, definition of
1023 tebibyte: @math{2^{40} = 1,099,511,627,776}.
1024 @item PB
1025 @cindex petabyte, definition of
1026 petabyte: @math{10^{15} = 1,000,000,000,000,000}.
1027 @item P
1028 @itemx PiB
1029 @cindex pebibyte, definition of
1030 pebibyte: @math{2^{50} = 1,125,899,906,842,624}.
1031 @item EB
1032 @cindex exabyte, definition of
1033 exabyte: @math{10^{18} = 1,000,000,000,000,000,000}.
1034 @item E
1035 @itemx EiB
1036 @cindex exbibyte, definition of
1037 exbibyte: @math{2^{60} = 1,152,921,504,606,846,976}.
1038 @item ZB
1039 @cindex zettabyte, definition of
1040 zettabyte: @math{10^{21} = 1,000,000,000,000,000,000,000}
1041 @item Z
1042 @itemx ZiB
1043 @math{2^{70} = 1,180,591,620,717,411,303,424}.
1044 @item YB
1045 @cindex yottabyte, definition of
1046 yottabyte: @math{10^{24} = 1,000,000,000,000,000,000,000,000}.
1047 @item Y
1048 @itemx YiB
1049 @math{2^{80} = 1,208,925,819,614,629,174,706,176}.
1050 @end table
1052 @opindex -k
1053 @opindex -h
1054 @opindex --block-size
1055 @opindex --human-readable
1056 @opindex --si
1058 Block size defaults can be overridden by an explicit
1059 @option{--block-size=@var{size}} option.  The @option{-k}
1060 option is equivalent to @option{--block-size=1K}, which
1061 is the default unless the @env{POSIXLY_CORRECT} environment variable is
1062 set.  The @option{-h} or @option{--human-readable} option is equivalent to
1063 @option{--block-size=human-readable}.  The @option{--si} option is
1064 equivalent to @option{--block-size=si}.  Note for @command{ls}
1065 the @option{-k} option does not control the display of the
1066 apparent file sizes, whereas the @option{--block-size} option does.
1068 @node Floating point
1069 @section Floating point numbers
1070 @cindex floating point
1071 @cindex IEEE floating point
1073 Commands that accept or produce floating point numbers employ the
1074 floating point representation of the underlying system, and suffer
1075 from rounding error, overflow, and similar floating-point issues.
1076 Almost all modern systems use IEEE-754 floating point, and it is
1077 typically portable to assume IEEE-754 behavior these days.  IEEE-754
1078 has positive and negative infinity, distinguishes positive from
1079 negative zero, and uses special values called NaNs to represent
1080 invalid computations such as dividing zero by itself.  For more
1081 information, please see David Goldberg's paper
1082 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, What Every
1083 Computer Scientist Should Know About Floating-Point Arithmetic}.
1085 @vindex LC_NUMERIC
1086 Commands that accept floating point numbers as options, operands or
1087 input use the standard C functions @code{strtod} and @code{strtold} to
1088 convert from text to floating point numbers.  These floating point
1089 numbers therefore can use scientific notation like @code{1.0e-34} and
1090 @code{-10e100}.  Commands that parse floating point also understand
1091 case-insensitive @code{inf}, @code{infinity}, and @code{NaN}, although
1092 whether such values are useful depends on the command in question.
1093 Modern C implementations also accept hexadecimal floating point
1094 numbers such as @code{-0x.ep-3}, which stands for @minus{}14/16 times
1095 @math{2^-3}, which equals @minus{}0.109375.  The @env{LC_NUMERIC}
1096 locale determines the decimal-point character.  @xref{Parsing of
1097 Floats,,, libc, The GNU C Library Reference Manual}.
1099 @node Signal specifications
1100 @section Signal specifications
1101 @cindex signals, specifying
1103 A @var{signal} may be a signal name like @samp{HUP}, or a signal
1104 number like @samp{1}, or an exit status of a process terminated by the
1105 signal.  A signal name can be given in canonical form or prefixed by
1106 @samp{SIG}@.  The case of the letters is ignored.  The following signal names
1107 and numbers are supported on all POSIX compliant systems:
1109 @table @samp
1110 @item HUP
1111 1.  Hangup.
1112 @item INT
1113 2.  Terminal interrupt.
1114 @item QUIT
1115 3.  Terminal quit.
1116 @item ABRT
1117 6.  Process abort.
1118 @item KILL
1119 9.  Kill (cannot be caught or ignored).
1120 @item ALRM
1121 14.  Alarm Clock.
1122 @item TERM
1123 15.  Termination.
1124 @end table
1126 @noindent
1127 Other supported signal names have system-dependent corresponding
1128 numbers.  All systems conforming to POSIX 1003.1-2001 also
1129 support the following signals:
1131 @table @samp
1132 @item BUS
1133 Access to an undefined portion of a memory object.
1134 @item CHLD
1135 Child process terminated, stopped, or continued.
1136 @item CONT
1137 Continue executing, if stopped.
1138 @item FPE
1139 Erroneous arithmetic operation.
1140 @item ILL
1141 Illegal Instruction.
1142 @item PIPE
1143 Write on a pipe with no one to read it.
1144 @item SEGV
1145 Invalid memory reference.
1146 @item STOP
1147 Stop executing (cannot be caught or ignored).
1148 @item TSTP
1149 Terminal stop.
1150 @item TTIN
1151 Background process attempting read.
1152 @item TTOU
1153 Background process attempting write.
1154 @item URG
1155 High bandwidth data is available at a socket.
1156 @item USR1
1157 User-defined signal 1.
1158 @item USR2
1159 User-defined signal 2.
1160 @end table
1162 @noindent
1163 POSIX 1003.1-2001 systems that support the XSI extension
1164 also support the following signals:
1166 @table @samp
1167 @item POLL
1168 Pollable event.
1169 @item PROF
1170 Profiling timer expired.
1171 @item SYS
1172 Bad system call.
1173 @item TRAP
1174 Trace/breakpoint trap.
1175 @item VTALRM
1176 Virtual timer expired.
1177 @item XCPU
1178 CPU time limit exceeded.
1179 @item XFSZ
1180 File size limit exceeded.
1181 @end table
1183 @noindent
1184 POSIX 1003.1-2001 systems that support the XRT extension
1185 also support at least eight real-time signals called @samp{RTMIN},
1186 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX}.
1188 @node Disambiguating names and IDs
1189 @section chown, chgrp, chroot, id: Disambiguating user names and IDs
1190 @cindex user names, disambiguating
1191 @cindex user IDs, disambiguating
1192 @cindex group names, disambiguating
1193 @cindex group IDs, disambiguating
1194 @cindex disambiguating group names and IDs
1196 Since the @var{user} and @var{group} arguments to these commands
1197 may be specified as names or numeric IDs, there is an
1198 apparent ambiguity.
1199 What if a user or group @emph{name} is a string of digits?
1200 @footnote{Using a number as a user name is common in some environments.}
1201 Should the command interpret it as a user name or as an ID@?
1202 POSIX requires that these commands
1203 first attempt to resolve the specified string as a name, and
1204 only once that fails, then try to interpret it as an ID@.
1205 This is troublesome when you want to specify a numeric ID, say 42,
1206 and it must work even in a pathological situation where
1207 @samp{42} is a user name that maps to some other user ID, say 1000.
1208 Simply invoking @code{chown 42 F}, will set @file{F}s owner ID to
1209 1000---not what you intended.
1211 GNU @command{chown}, @command{chgrp}, @command{chroot}, and @command{id}
1212 provide a way to work around this, that at the same time may result in a
1213 significant performance improvement by eliminating a database look-up.
1214 Simply precede each numeric user ID and/or group ID with a @samp{+},
1215 in order to force its interpretation as an integer:
1217 @example
1218 chown +42 F
1219 chgrp +$numeric_group_id another-file
1220 chown +0:+0 /
1221 @end example
1223 The name look-up process is skipped for each @samp{+}-prefixed string,
1224 because a string containing @samp{+} is never a valid user or group name.
1225 This syntax is accepted on most common Unix systems, but not on Solaris 10.
1227 @node Random sources
1228 @section Sources of random data
1230 @cindex random sources
1232 The @command{shuf}, @command{shred}, and @command{sort} commands
1233 sometimes need random data to do their work.  For example, @samp{sort
1234 -R} must choose a hash function at random, and it needs random data to
1235 make this selection.
1237 By default these commands use an internal pseudo-random generator
1238 initialized by a small amount of entropy, but can be directed to use
1239 an external source with the @option{--random-source=@var{file}} option.
1240 An error is reported if @var{file} does not contain enough bytes.
1242 For example, the device file @file{/dev/urandom} could be used as the
1243 source of random data.  Typically, this device gathers environmental
1244 noise from device drivers and other sources into an entropy pool, and
1245 uses the pool to generate random bits.  If the pool is short of data,
1246 the device reuses the internal pool to produce more bits, using a
1247 cryptographically secure pseudo-random number generator.  But be aware
1248 that this device is not designed for bulk random data generation
1249 and is relatively slow.
1251 @file{/dev/urandom} suffices for most practical uses, but applications
1252 requiring high-value or long-term protection of private data may
1253 require an alternate data source like @file{/dev/random} or
1254 @file{/dev/arandom}.  The set of available sources depends on your
1255 operating system.
1257 To reproduce the results of an earlier invocation of a command, you
1258 can save some random data into a file and then use that file as the
1259 random source in earlier and later invocations of the command.
1260 @cindex random seed
1261 Rather than depending on a file, one can generate a reproducible
1262 arbitrary amount of pseudo-random data given a seed value, using
1263 for example:
1265 @example
1266 get_seeded_random()
1268   seed="$1"
1269   openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
1270     </dev/zero 2>/dev/null
1273 shuf -i1-100 --random-source=<(get_seeded_random 42)
1274 @end example
1276 @node Target directory
1277 @section Target directory
1279 @cindex target directory
1281 The @command{cp}, @command{install}, @command{ln}, and @command{mv}
1282 commands normally treat the last operand specially when it is a
1283 directory or a symbolic link to a directory.  For example, @samp{cp
1284 source dest} is equivalent to @samp{cp source dest/source} if
1285 @file{dest} is a directory.  Sometimes this behavior is not exactly
1286 what is wanted, so these commands support the following options to
1287 allow more fine-grained control:
1289 @table @samp
1291 @item -T
1292 @itemx --no-target-directory
1293 @opindex --no-target-directory
1294 @cindex target directory
1295 @cindex destination directory
1296 Do not treat the last operand specially when it is a directory or a
1297 symbolic link to a directory.  This can help avoid race conditions in
1298 programs that operate in a shared area.  For example, when the command
1299 @samp{mv /tmp/source /tmp/dest} succeeds, there is no guarantee that
1300 @file{/tmp/source} was renamed to @file{/tmp/dest}: it could have been
1301 renamed to @file{/tmp/dest/source} instead, if some other process
1302 created @file{/tmp/dest} as a directory.  However, if @file{mv
1303 -T /tmp/source /tmp/dest} succeeds, there is no
1304 question that @file{/tmp/source} was renamed to @file{/tmp/dest}.
1306 In the opposite situation, where you want the last operand to be
1307 treated as a directory and want a diagnostic otherwise, you can use
1308 the @option{--target-directory} (@option{-t}) option.
1310 @item -t @var{directory}
1311 @itemx --target-directory=@var{directory}
1312 @opindex --target-directory
1313 @cindex target directory
1314 @cindex destination directory
1315 Use @var{directory} as the directory component of each destination
1316 file name.
1318 The interface for most programs is that after processing options and a
1319 finite (possibly zero) number of fixed-position arguments, the remaining
1320 argument list is either expected to be empty, or is a list of items
1321 (usually files) that will all be handled identically.  The @command{xargs}
1322 program is designed to work well with this convention.
1324 The commands in the @command{mv}-family are unusual in that they take
1325 a variable number of arguments with a special case at the @emph{end}
1326 (namely, the target directory).  This makes it nontrivial to perform some
1327 operations, e.g., ``move all files from here to ../d/'', because
1328 @code{mv * ../d/} might exhaust the argument space, and @code{ls | xargs ...}
1329 doesn't have a clean way to specify an extra final argument for each
1330 invocation of the subject command.  (It can be done by going through a
1331 shell command, but that requires more human labor and brain power than
1332 it should.)
1334 The @option{--target-directory} (@option{-t}) option allows the @command{cp},
1335 @command{install}, @command{ln}, and @command{mv} programs to be used
1336 conveniently with @command{xargs}.  For example, you can move the files
1337 from the current directory to a sibling directory, @code{d} like this:
1339 @smallexample
1340 ls | xargs mv -t ../d --
1341 @end smallexample
1343 However, this doesn't move files whose names begin with @samp{.}.
1344 If you use the GNU @command{find} program, you can move those
1345 files too, with this command:
1347 @example
1348 find . -mindepth 1 -maxdepth 1 \
1349   | xargs mv -t ../d
1350 @end example
1352 But both of the above approaches fail if there are no files in the
1353 current directory, or if any file has a name containing a blank or
1354 some other special characters.
1355 The following example removes those limitations and requires both
1356 GNU @command{find} and GNU @command{xargs}:
1358 @example
1359 find . -mindepth 1 -maxdepth 1 -print0 \
1360   | xargs --null --no-run-if-empty \
1361       mv -t ../d
1362 @end example
1364 @end table
1366 @noindent
1367 The @option{--target-directory} (@option{-t}) and
1368 @option{--no-target-directory} (@option{-T})
1369 options cannot be combined.
1371 @node Trailing slashes
1372 @section Trailing slashes
1374 @cindex trailing slashes
1376 Some GNU programs (at least @command{cp} and @command{mv}) allow you to
1377 remove any trailing slashes from each @var{source} argument before
1378 operating on it.  The @option{--strip-trailing-slashes} option enables
1379 this behavior.
1381 This is useful when a @var{source} argument may have a trailing slash and
1382 @c FIXME: mv's behavior in this case is system-dependent
1383 specify a symbolic link to a directory.  This scenario is in fact rather
1384 common because some shells can automatically append a trailing slash when
1385 performing file name completion on such symbolic links.  Without this
1386 option, @command{mv}, for example, (via the system's rename function) must
1387 interpret a trailing slash as a request to dereference the symbolic link
1388 and so must rename the indirectly referenced @emph{directory} and not
1389 the symbolic link.  Although it may seem surprising that such behavior
1390 be the default, it is required by POSIX and is consistent with
1391 other parts of that standard.
1393 @node Traversing symlinks
1394 @section Traversing symlinks
1396 @cindex symbolic link to directory, controlling traversal of
1398 The following options modify how @command{chown} and @command{chgrp}
1399 @c FIXME: note that 'du' has these options, too, but they have slightly
1400 @c different meaning.
1401 traverse a hierarchy when the @option{--recursive} (@option{-R})
1402 option is also specified.
1403 If more than one of the following options is specified, only the final
1404 one takes effect.
1405 These options specify whether processing a symbolic link to a directory
1406 entails operating on just the symbolic link or on all files in the
1407 hierarchy rooted at that directory.
1409 These options are independent of @option{--dereference} and
1410 @option{--no-dereference} (@option{-h}), which control whether to modify
1411 a symlink or its referent.
1413 @table @samp
1415 @macro choptH
1416 @item -H
1417 @opindex -H
1418 @cindex symbolic link to directory, traverse if on the command line
1419 If @option{--recursive} (@option{-R}) is specified and
1420 a command line argument is a symbolic link to a directory, traverse it.
1421 @end macro
1422 @choptH
1424 @macro choptL
1425 @item -L
1426 @opindex -L
1427 @cindex symbolic link to directory, traverse each that is encountered
1428 In a recursive traversal, traverse every symbolic link to a directory
1429 that is encountered.
1430 @end macro
1431 @choptL
1433 @macro choptP
1434 @item -P
1435 @opindex -P
1436 @cindex symbolic link to directory, never traverse
1437 Do not traverse any symbolic links.
1438 This is the default if none of @option{-H}, @option{-L},
1439 or @option{-P} is specified.
1440 @end macro
1441 @choptP
1443 @end table
1446 @node Treating / specially
1447 @section Treating @file{/} specially
1449 Certain commands can operate destructively on entire hierarchies.
1450 For example, if a user with appropriate privileges mistakenly runs
1451 @samp{rm -rf / tmp/junk}, that may remove
1452 all files on the entire system.  Since there are so few
1453 legitimate uses for such a command,
1454 GNU @command{rm} normally declines to operate on any directory
1455 that resolves to @file{/}.  If you really want to try to remove all
1456 the files on your system, you can use the @option{--no-preserve-root}
1457 option, but the default behavior, specified by the
1458 @option{--preserve-root} option, is safer for most purposes.
1460 The commands @command{chgrp}, @command{chmod} and @command{chown}
1461 can also operate destructively on entire hierarchies, so they too
1462 support these options.  Although, unlike @command{rm}, they don't
1463 actually unlink files, these commands are arguably more dangerous
1464 when operating recursively on @file{/}, since they often work much
1465 more quickly, and hence damage more files before an alert user can
1466 interrupt them.  Tradition and POSIX require these commands
1467 to operate recursively on @file{/}, so they default to
1468 @option{--no-preserve-root}, but using the @option{--preserve-root}
1469 option makes them safer for most purposes.  For convenience you can
1470 specify @option{--preserve-root} in an alias or in a shell function.
1472 Note that the @option{--preserve-root} option also ensures
1473 that @command{chgrp} and @command{chown} do not modify @file{/}
1474 even when dereferencing a symlink pointing to @file{/}.
1476 @node Special built-in utilities
1477 @section Special built-in utilities
1479 Some programs like @command{nice} can invoke other programs; for
1480 example, the command @samp{nice cat file} invokes the program
1481 @command{cat} by executing the command @samp{cat file}.  However,
1482 @dfn{special built-in utilities} like @command{exit} cannot be invoked
1483 this way.  For example, the command @samp{nice exit} does not have a
1484 well-defined behavior: it may generate an error message instead of
1485 exiting.
1487 Here is a list of the special built-in utilities that are standardized
1488 by POSIX 1003.1-2004.
1490 @quotation
1491 @t{.@: : break continue eval exec exit export readonly
1492 return set shift times trap unset}
1493 @end quotation
1495 For example, because @samp{.}, @samp{:}, and @samp{exec} are special,
1496 the commands @samp{nice . foo.sh}, @samp{nice :}, and @samp{nice exec
1497 pwd} do not work as you might expect.
1499 Many shells extend this list.  For example, Bash has several extra
1500 special built-in utilities like @command{history}, and
1501 @command{suspend}, and with Bash the command @samp{nice suspend}
1502 generates an error message instead of suspending.
1504 @node Standards conformance
1505 @section Standards conformance
1507 @vindex POSIXLY_CORRECT
1508 In a few cases, the GNU utilities' default behavior is
1509 incompatible with the POSIX standard.  To suppress these
1510 incompatibilities, define the @env{POSIXLY_CORRECT} environment
1511 variable.  Unless you are checking for POSIX conformance, you
1512 probably do not need to define @env{POSIXLY_CORRECT}.
1514 Newer versions of POSIX are occasionally incompatible with older
1515 versions.  For example, older versions of POSIX required the
1516 command @samp{sort +1} to sort based on the second and succeeding
1517 fields in each input line, but in POSIX 1003.1-2001
1518 the same command is required to sort the file named @file{+1}, and you
1519 must instead use the command @samp{sort -k 2} to get the field-based
1520 sort.  To complicate things further, POSIX 1003.1-2008 allows an
1521 implementation to have either the old or the new behavior.
1523 @vindex _POSIX2_VERSION
1524 The GNU utilities normally conform to the version of POSIX
1525 that is standard for your system.  To cause them to conform to a
1526 different version of POSIX, define the @env{_POSIX2_VERSION}
1527 environment variable to a value of the form @var{yyyymm} specifying
1528 the year and month the standard was adopted.  Three values are currently
1529 supported for @env{_POSIX2_VERSION}: @samp{199209} stands for
1530 POSIX 1003.2-1992, @samp{200112} stands for POSIX
1531 1003.1-2001, and @samp{200809} stands for POSIX 1003.1-2008.
1532 For example, if you have a POSIX 1003.1-2001 system but are running software
1533 containing traditional usage like @samp{sort +1} or @samp{tail +10},
1534 you can work around the compatibility problems by setting
1535 @samp{_POSIX2_VERSION=200809} in your environment.
1537 @c This node is named "Multi-call invocation", not the usual
1538 @c "coreutils invocation", so that shell commands like
1539 @c 'info coreutils "touch invocation"' work as expected.
1540 @node Multi-call invocation
1541 @section @command{coreutils}: Multi-call program
1543 @pindex multicall
1544 @cindex combined
1545 @cindex calling combined multi-call program
1547 The @command{coreutils} command invokes an individual utility, either
1548 implicitly selected by the last component of the name used to invoke
1549 @command{coreutils}, or explicitly with the
1550 @option{--coreutils-prog} option.  Synopsis:
1552 @example
1553 coreutils @option{--coreutils-prog=PROGRAM} @dots{}
1554 @end example
1556 The @command{coreutils} command is not installed by default, so
1557 portable scripts should not rely on its existence.
1559 @node Output of entire files
1560 @chapter Output of entire files
1562 @cindex output of entire files
1563 @cindex entire files, output of
1565 These commands read and write entire files, possibly transforming them
1566 in some way.
1568 @menu
1569 * cat invocation::              Concatenate and write files.
1570 * tac invocation::              Concatenate and write files in reverse.
1571 * nl invocation::               Number lines and write files.
1572 * od invocation::               Write files in octal or other formats.
1573 * base32 invocation::           Transform data into printable data.
1574 * base64 invocation::           Transform data into printable data.
1575 @end menu
1577 @node cat invocation
1578 @section @command{cat}: Concatenate and write files
1580 @pindex cat
1581 @cindex concatenate and write files
1582 @cindex copying files
1584 @command{cat} copies each @var{file} (@samp{-} means standard input), or
1585 standard input if none are given, to standard output.  Synopsis:
1587 @example
1588 cat [@var{option}] [@var{file}]@dots{}
1589 @end example
1591 The program accepts the following options.  Also see @ref{Common options}.
1593 @table @samp
1595 @item -A
1596 @itemx --show-all
1597 @opindex -A
1598 @opindex --show-all
1599 Equivalent to @option{-vET}.
1601 @item -b
1602 @itemx --number-nonblank
1603 @opindex -b
1604 @opindex --number-nonblank
1605 Number all nonempty output lines, starting with 1.
1607 @item -e
1608 @opindex -e
1609 Equivalent to @option{-vE}.
1611 @item -E
1612 @itemx --show-ends
1613 @opindex -E
1614 @opindex --show-ends
1615 Display a @samp{$} after the end of each line.
1617 @item -n
1618 @itemx --number
1619 @opindex -n
1620 @opindex --number
1621 Number all output lines, starting with 1.  This option is ignored
1622 if @option{-b} is in effect.
1624 @item -s
1625 @itemx --squeeze-blank
1626 @opindex -s
1627 @opindex --squeeze-blank
1628 @cindex squeezing empty lines
1629 @cindex squeezing blank lines
1630 Suppress repeated adjacent blank lines; output just one empty line
1631 instead of several.
1633 @item -t
1634 @opindex -t
1635 Equivalent to @option{-vT}.
1637 @item -T
1638 @itemx --show-tabs
1639 @opindex -T
1640 @opindex --show-tabs
1641 Display TAB characters as @samp{^I}.
1643 @item -u
1644 @opindex -u
1645 Ignored; for POSIX compatibility.
1647 @item -v
1648 @itemx --show-nonprinting
1649 @opindex -v
1650 @opindex --show-nonprinting
1651 Display control characters except for LFD and TAB using
1652 @samp{^} notation and precede characters that have the high bit set with
1653 @samp{M-}.
1655 @end table
1657 On systems like MS-DOS that distinguish between text and binary files,
1658 @command{cat} normally reads and writes in binary mode.  However,
1659 @command{cat} reads in text mode if one of the options
1660 @option{-bensAE} is used or if @command{cat} is reading from standard
1661 input and standard input is a terminal.  Similarly, @command{cat}
1662 writes in text mode if one of the options @option{-bensAE} is used or
1663 if standard output is a terminal.
1665 @exitstatus
1667 Examples:
1669 @smallexample
1670 # Output f's contents, then standard input, then g's contents.
1671 cat f - g
1673 # Copy standard input to standard output.
1675 @end smallexample
1678 @node tac invocation
1679 @section @command{tac}: Concatenate and write files in reverse
1681 @pindex tac
1682 @cindex reversing files
1684 @command{tac} copies each @var{file} (@samp{-} means standard input), or
1685 standard input if none are given, to standard output, reversing the
1686 records (lines by default) in each separately.  Synopsis:
1688 @example
1689 tac [@var{option}]@dots{} [@var{file}]@dots{}
1690 @end example
1692 @dfn{Records} are separated by instances of a string (newline by
1693 default).  By default, this separator string is attached to the end of
1694 the record that it follows in the file.
1696 The program accepts the following options.  Also see @ref{Common options}.
1698 @table @samp
1700 @item -b
1701 @itemx --before
1702 @opindex -b
1703 @opindex --before
1704 The separator is attached to the beginning of the record that it
1705 precedes in the file.
1707 @item -r
1708 @itemx --regex
1709 @opindex -r
1710 @opindex --regex
1711 Treat the separator string as a regular expression.
1713 @item -s @var{separator}
1714 @itemx --separator=@var{separator}
1715 @opindex -s
1716 @opindex --separator
1717 Use @var{separator} as the record separator, instead of newline.
1718 Note an empty @var{separator} is treated as a zero byte.
1719 I.e., input and output items are delimited with ASCII NUL.
1721 @end table
1723 On systems like MS-DOS that distinguish between text and binary files,
1724 @command{tac} reads and writes in binary mode.
1726 @exitstatus
1728 Example:
1730 @example
1731 # Reverse a file character by character.
1732 tac -r -s 'x\|[^x]'
1733 @end example
1736 @node nl invocation
1737 @section @command{nl}: Number lines and write files
1739 @pindex nl
1740 @cindex numbering lines
1741 @cindex line numbering
1743 @command{nl} writes each @var{file} (@samp{-} means standard input), or
1744 standard input if none are given, to standard output, with line numbers
1745 added to some or all of the lines.  Synopsis:
1747 @example
1748 nl [@var{option}]@dots{} [@var{file}]@dots{}
1749 @end example
1751 @cindex logical pages, numbering on
1752 @command{nl} decomposes its input into (logical) page sections;
1753 by default, the line number is reset to 1 at each logical page section.
1754 @command{nl} treats all of the input files as a single document;
1755 it does not reset line numbers or logical pages between files.
1757 @cindex headers, numbering
1758 @cindex body, numbering
1759 @cindex footers, numbering
1760 A logical page consists of three sections: header, body, and footer.
1761 Any of the sections can be empty.  Each can be numbered in a different
1762 style from the others.
1764 The beginnings of the sections of logical pages are indicated in the
1765 input file by a line containing exactly one of these delimiter strings:
1767 @table @samp
1768 @item \:\:\:
1769 start of header;
1770 @item \:\:
1771 start of body;
1772 @item \:
1773 start of footer.
1774 @end table
1776 The two characters from which these strings are made can be changed from
1777 @samp{\} and @samp{:} via options (see below), but the pattern and
1778 length of each string cannot be changed.
1780 A section delimiter is replaced by an empty line on output.  Any text
1781 that comes before the first section delimiter string in the input file
1782 is considered to be part of a body section, so @command{nl} treats a
1783 file that contains no section delimiters as a single body section.
1785 The program accepts the following options.  Also see @ref{Common options}.
1787 @table @samp
1789 @item -b @var{style}
1790 @itemx --body-numbering=@var{style}
1791 @opindex -b
1792 @opindex --body-numbering
1793 Select the numbering style for lines in the body section of each
1794 logical page.  When a line is not numbered, the current line number
1795 is not incremented, but the line number separator character is still
1796 prepended to the line.  The styles are:
1798 @table @samp
1799 @item a
1800 number all lines,
1801 @item t
1802 number only nonempty lines (default for body),
1803 @item n
1804 do not number lines (default for header and footer),
1805 @item p@var{bre}
1806 number only lines that contain a match for the basic regular
1807 expression @var{bre}.
1808 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep Manual}.
1809 @end table
1811 @item -d @var{cd}
1812 @itemx --section-delimiter=@var{cd}
1813 @opindex -d
1814 @opindex --section-delimiter
1815 @cindex section delimiters of pages
1816 Set the section delimiter characters to @var{cd}; default is
1817 @samp{\:}.  If only @var{c} is given, the second remains @samp{:}.
1818 (Remember to protect @samp{\} or other metacharacters from shell
1819 expansion with quotes or extra backslashes.)
1821 @item -f @var{style}
1822 @itemx --footer-numbering=@var{style}
1823 @opindex -f
1824 @opindex --footer-numbering
1825 Analogous to @option{--body-numbering}.
1827 @item -h @var{style}
1828 @itemx --header-numbering=@var{style}
1829 @opindex -h
1830 @opindex --header-numbering
1831 Analogous to @option{--body-numbering}.
1833 @item -i @var{number}
1834 @itemx --line-increment=@var{number}
1835 @opindex -i
1836 @opindex --line-increment
1837 Increment line numbers by @var{number} (default 1).
1839 @item -l @var{number}
1840 @itemx --join-blank-lines=@var{number}
1841 @opindex -l
1842 @opindex --join-blank-lines
1843 @cindex empty lines, numbering
1844 @cindex blank lines, numbering
1845 Consider @var{number} (default 1) consecutive empty lines to be one
1846 logical line for numbering, and only number the last one.  Where fewer
1847 than @var{number} consecutive empty lines occur, do not number them.
1848 An empty line is one that contains no characters, not even spaces
1849 or tabs.
1851 @item -n @var{format}
1852 @itemx --number-format=@var{format}
1853 @opindex -n
1854 @opindex --number-format
1855 Select the line numbering format (default is @code{rn}):
1857 @table @samp
1858 @item ln
1859 @opindex ln @r{format for @command{nl}}
1860 left justified, no leading zeros;
1861 @item rn
1862 @opindex rn @r{format for @command{nl}}
1863 right justified, no leading zeros;
1864 @item rz
1865 @opindex rz @r{format for @command{nl}}
1866 right justified, leading zeros.
1867 @end table
1869 @item -p
1870 @itemx --no-renumber
1871 @opindex -p
1872 @opindex --no-renumber
1873 Do not reset the line number at the start of a logical page.
1875 @item -s @var{string}
1876 @itemx --number-separator=@var{string}
1877 @opindex -s
1878 @opindex --number-separator
1879 Separate the line number from the text line in the output with
1880 @var{string} (default is the TAB character).
1882 @item -v @var{number}
1883 @itemx --starting-line-number=@var{number}
1884 @opindex -v
1885 @opindex --starting-line-number
1886 Set the initial line number on each logical page to @var{number} (default 1).
1888 @item -w @var{number}
1889 @itemx --number-width=@var{number}
1890 @opindex -w
1891 @opindex --number-width
1892 Use @var{number} characters for line numbers (default 6).
1894 @end table
1896 @exitstatus
1899 @node od invocation
1900 @section @command{od}: Write files in octal or other formats
1902 @pindex od
1903 @cindex octal dump of files
1904 @cindex hex dump of files
1905 @cindex ASCII dump of files
1906 @cindex file contents, dumping unambiguously
1908 @command{od} writes an unambiguous representation of each @var{file}
1909 (@samp{-} means standard input), or standard input if none are given.
1910 Synopses:
1912 @smallexample
1913 od [@var{option}]@dots{} [@var{file}]@dots{}
1914 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1915 od [@var{option}]@dots{} --traditional [@var{file}]@c
1916  [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1917 @end smallexample
1919 Each line of output consists of the offset in the input, followed by
1920 groups of data from the file.  By default, @command{od} prints the offset in
1921 octal, and each group of file data is a C @code{short int}'s worth of input
1922 printed as a single octal number.
1924 If @var{offset} is given, it specifies how many input bytes to skip
1925 before formatting and writing.  By default, it is interpreted as an
1926 octal number, but the optional trailing decimal point causes it to be
1927 interpreted as decimal.  If no decimal is specified and the offset
1928 begins with @samp{0x} or @samp{0X} it is interpreted as a hexadecimal
1929 number.  If there is a trailing @samp{b}, the number of bytes skipped
1930 will be @var{offset} multiplied by 512.
1932 If a command is of both the first and second forms, the second form is
1933 assumed if the last operand begins with @samp{+} or (if there are two
1934 operands) a digit.  For example, in @samp{od foo 10} and @samp{od +10}
1935 the @samp{10} is an offset, whereas in @samp{od 10} the @samp{10} is a
1936 file name.
1938 The program accepts the following options.  Also see @ref{Common options}.
1940 @table @samp
1942 @item -A @var{radix}
1943 @itemx --address-radix=@var{radix}
1944 @opindex -A
1945 @opindex --address-radix
1946 @cindex radix for file offsets
1947 @cindex file offset radix
1948 Select the base in which file offsets are printed.  @var{radix} can
1949 be one of the following:
1951 @table @samp
1952 @item d
1953 decimal;
1954 @item o
1955 octal;
1956 @item x
1957 hexadecimal;
1958 @item n
1959 none (do not print offsets).
1960 @end table
1962 The default is octal.
1964 @item --endian=@var{order}
1965 @opindex --endian
1966 @cindex byte-swapping
1967 @cindex endianness
1968 Reorder input bytes, to handle inputs with differing byte orders,
1969 or to provide consistent output independent of the endian convention
1970 of the current system.  Swapping is performed according to the
1971 specified @option{--type} size and endian @var{order}, which can be
1972 @samp{little} or @samp{big}.
1974 @item -j @var{bytes}
1975 @itemx --skip-bytes=@var{bytes}
1976 @opindex -j
1977 @opindex --skip-bytes
1978 Skip @var{bytes} input bytes before formatting and writing.  If
1979 @var{bytes} begins with @samp{0x} or @samp{0X}, it is interpreted in
1980 hexadecimal; otherwise, if it begins with @samp{0}, in octal; otherwise,
1981 in decimal.
1982 @multiplierSuffixes{bytes}
1984 @item -N @var{bytes}
1985 @itemx --read-bytes=@var{bytes}
1986 @opindex -N
1987 @opindex --read-bytes
1988 Output at most @var{bytes} bytes of the input.  Prefixes and suffixes on
1989 @code{bytes} are interpreted as for the @option{-j} option.
1991 @item -S @var{bytes}
1992 @itemx --strings[=@var{bytes}]
1993 @opindex -S
1994 @opindex --strings
1995 @cindex string constants, outputting
1996 Instead of the normal output, output only @dfn{string constants}: at
1997 least @var{bytes} consecutive ASCII graphic characters,
1998 followed by a zero byte (ASCII NUL).
1999 Prefixes and suffixes on @var{bytes} are interpreted as for the
2000 @option{-j} option.
2002 If @var{bytes} is omitted with @option{--strings}, the default is 3.
2004 @item -t @var{type}
2005 @itemx --format=@var{type}
2006 @opindex -t
2007 @opindex --format
2008 Select the format in which to output the file data.  @var{type} is a
2009 string of one or more of the below type indicator characters.  If you
2010 include more than one type indicator character in a single @var{type}
2011 string, or use this option more than once, @command{od} writes one copy
2012 of each output line using each of the data types that you specified,
2013 in the order that you specified.
2015 Adding a trailing ``z'' to any type specification appends a display
2016 of the single byte character representation of the printable characters
2017 to the output line generated by the type specification.
2019 @table @samp
2020 @item a
2021 named character, ignoring high-order bit
2022 @item c
2023 printable single byte character, C backslash escape
2024 or a 3 digit octal sequence
2025 @item d
2026 signed decimal
2027 @item f
2028 floating point (@pxref{Floating point})
2029 @item o
2030 octal
2031 @item u
2032 unsigned decimal
2033 @item x
2034 hexadecimal
2035 @end table
2037 The type @code{a} outputs things like @samp{sp} for space, @samp{nl} for
2038 newline, and @samp{nul} for a zero byte.  Only the least significant
2039 seven bits of each byte is used; the high-order bit is ignored.
2040 Type @code{c} outputs
2041 @samp{ }, @samp{\n}, and @code{\0}, respectively.
2043 @cindex type size
2044 Except for types @samp{a} and @samp{c}, you can specify the number
2045 of bytes to use in interpreting each number in the given data type
2046 by following the type indicator character with a decimal integer.
2047 Alternately, you can specify the size of one of the C compiler's
2048 built-in data types by following the type indicator character with
2049 one of the following characters.  For integers (@samp{d}, @samp{o},
2050 @samp{u}, @samp{x}):
2052 @table @samp
2053 @item C
2054 char
2055 @item S
2056 short
2057 @item I
2059 @item L
2060 long
2061 @end table
2063 For floating point (@code{f}):
2065 @table @asis
2066 @item F
2067 float
2068 @item D
2069 double
2070 @item L
2071 long double
2072 @end table
2074 @item -v
2075 @itemx --output-duplicates
2076 @opindex -v
2077 @opindex --output-duplicates
2078 Output consecutive lines that are identical.  By default, when two or
2079 more consecutive output lines would be identical, @command{od} outputs only
2080 the first line, and puts just an asterisk on the following line to
2081 indicate the elision.
2083 @item -w[@var{n}]
2084 @itemx --width[=@var{n}]
2085 @opindex -w
2086 @opindex --width
2087 Dump @code{n} input bytes per output line.  This must be a multiple of
2088 the least common multiple of the sizes associated with the specified
2089 output types.
2091 If this option is not given at all, the default is 16.  If @var{n} is
2092 omitted, the default is 32.
2094 @end table
2096 The next several options are shorthands for format specifications.
2097 GNU @command{od} accepts any combination of shorthands and format
2098 specification options.  These options accumulate.
2100 @table @samp
2102 @item -a
2103 @opindex -a
2104 Output as named characters.  Equivalent to @samp{-t a}.
2106 @item -b
2107 @opindex -b
2108 Output as octal bytes.  Equivalent to @samp{-t o1}.
2110 @item -c
2111 @opindex -c
2112 Output as printable single byte characters, C backslash escapes
2113 or 3 digit octal sequences.  Equivalent to @samp{-t c}.
2115 @item -d
2116 @opindex -d
2117 Output as unsigned decimal two-byte units.  Equivalent to @samp{-t u2}.
2119 @item -f
2120 @opindex -f
2121 Output as floats.  Equivalent to @samp{-t fF}.
2123 @item -i
2124 @opindex -i
2125 Output as decimal ints.  Equivalent to @samp{-t dI}.
2127 @item -l
2128 @opindex -l
2129 Output as decimal long ints.  Equivalent to @samp{-t dL}.
2131 @item -o
2132 @opindex -o
2133 Output as octal two-byte units.  Equivalent to @option{-t o2}.
2135 @item -s
2136 @opindex -s
2137 Output as decimal two-byte units.  Equivalent to @option{-t d2}.
2139 @item -x
2140 @opindex -x
2141 Output as hexadecimal two-byte units.  Equivalent to @samp{-t x2}.
2143 @item --traditional
2144 @opindex --traditional
2145 Recognize the non-option label argument that traditional @command{od}
2146 accepted.  The following syntax:
2148 @smallexample
2149 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
2150 @end smallexample
2152 @noindent
2153 can be used to specify at most one file and optional arguments
2154 specifying an offset and a pseudo-start address, @var{label}.
2155 The @var{label} argument is interpreted
2156 just like @var{offset}, but it specifies an initial pseudo-address.  The
2157 pseudo-addresses are displayed in parentheses following any normal
2158 address.
2160 @end table
2162 @exitstatus
2165 @node base32 invocation
2166 @section @command{base32}: Transform data into printable data
2168 @pindex base32
2169 @cindex base32 encoding
2171 @command{base32} transforms data read from a file, or standard input,
2172 into (or from) base32 encoded form.  The base32 encoded form uses
2173 printable ASCII characters to represent binary data.
2174 The usage and options of this command are precisely the
2175 same as for @command{base64}.  @xref{base64 invocation}.
2178 @node base64 invocation
2179 @section @command{base64}: Transform data into printable data
2181 @pindex base64
2182 @cindex base64 encoding
2184 @command{base64} transforms data read from a file, or standard input,
2185 into (or from) base64 encoded form.  The base64 encoded form uses
2186 printable ASCII characters to represent binary data.
2187 Synopses:
2189 @smallexample
2190 base64 [@var{option}]@dots{} [@var{file}]
2191 base64 --decode [@var{option}]@dots{} [@var{file}]
2192 @end smallexample
2194 The base64 encoding expands data to roughly 133% of the original.
2195 The base32 encoding expands data to roughly 160% of the original.
2196 The format conforms to
2197 @uref{https://tools.ietf.org/search/rfc4648, RFC 4648}.
2199 The program accepts the following options.  Also see @ref{Common options}.
2201 @table @samp
2203 @item -w @var{cols}
2204 @itemx --wrap=@var{cols}
2205 @opindex -w
2206 @opindex --wrap
2207 @cindex wrap data
2208 @cindex column to wrap data after
2209 During encoding, wrap lines after @var{cols} characters.  This must be
2210 a positive number.
2212 The default is to wrap after 76 characters.  Use the value 0 to
2213 disable line wrapping altogether.
2215 @item -d
2216 @itemx --decode
2217 @opindex -d
2218 @opindex --decode
2219 @cindex Decode base64 data
2220 @cindex Base64 decoding
2221 Change the mode of operation, from the default of encoding data, to
2222 decoding data.  Input is expected to be base64 encoded data, and the
2223 output will be the original data.
2225 @item -i
2226 @itemx --ignore-garbage
2227 @opindex -i
2228 @opindex --ignore-garbage
2229 @cindex Ignore garbage in base64 stream
2230 When decoding, newlines are always accepted.
2231 During decoding, ignore unrecognized bytes,
2232 to permit distorted data to be decoded.
2234 @end table
2236 @exitstatus
2239 @node Formatting file contents
2240 @chapter Formatting file contents
2242 @cindex formatting file contents
2244 These commands reformat the contents of files.
2246 @menu
2247 * fmt invocation::              Reformat paragraph text.
2248 * pr invocation::               Paginate or columnate files for printing.
2249 * fold invocation::             Wrap input lines to fit in specified width.
2250 @end menu
2253 @node fmt invocation
2254 @section @command{fmt}: Reformat paragraph text
2256 @pindex fmt
2257 @cindex reformatting paragraph text
2258 @cindex paragraphs, reformatting
2259 @cindex text, reformatting
2261 @command{fmt} fills and joins lines to produce output lines of (at most)
2262 a given number of characters (75 by default).  Synopsis:
2264 @example
2265 fmt [@var{option}]@dots{} [@var{file}]@dots{}
2266 @end example
2268 @command{fmt} reads from the specified @var{file} arguments (or standard
2269 input if none are given), and writes to standard output.
2271 By default, blank lines, spaces between words, and indentation are
2272 preserved in the output; successive input lines with different
2273 indentation are not joined; tabs are expanded on input and introduced on
2274 output.
2276 @cindex line-breaking
2277 @cindex sentences and line-breaking
2278 @cindex Knuth, Donald E.
2279 @cindex Plass, Michael F.
2280 @command{fmt} prefers breaking lines at the end of a sentence, and tries to
2281 avoid line breaks after the first word of a sentence or before the last
2282 word of a sentence.  A @dfn{sentence break} is defined as either the end
2283 of a paragraph or a word ending in any of @samp{.?!}, followed by two
2284 spaces or end of line, ignoring any intervening parentheses or quotes.
2285 Like @TeX{}, @command{fmt} reads entire ``paragraphs'' before choosing line
2286 breaks; the algorithm is a variant of that given by Donald E. Knuth
2287 and Michael F. Plass in ``Breaking Paragraphs Into Lines'',
2288 @cite{Software---Practice & Experience} @b{11}, 11 (November 1981),
2289 1119--1184.
2291 The program accepts the following options.  Also see @ref{Common options}.
2293 @table @samp
2295 @item -c
2296 @itemx --crown-margin
2297 @opindex -c
2298 @opindex --crown-margin
2299 @cindex crown margin
2300 @dfn{Crown margin} mode: preserve the indentation of the first two
2301 lines within a paragraph, and align the left margin of each subsequent
2302 line with that of the second line.
2304 @item -t
2305 @itemx --tagged-paragraph
2306 @opindex -t
2307 @opindex --tagged-paragraph
2308 @cindex tagged paragraphs
2309 @dfn{Tagged paragraph} mode: like crown margin mode, except that if
2310 indentation of the first line of a paragraph is the same as the
2311 indentation of the second, the first line is treated as a one-line
2312 paragraph.
2314 @item -s
2315 @itemx --split-only
2316 @opindex -s
2317 @opindex --split-only
2318 Split lines only.  Do not join short lines to form longer ones.  This
2319 prevents sample lines of code, and other such ``formatted'' text from
2320 being unduly combined.
2322 @item -u
2323 @itemx --uniform-spacing
2324 @opindex -u
2325 @opindex --uniform-spacing
2326 Uniform spacing.  Reduce spacing between words to one space, and spacing
2327 between sentences to two spaces.
2329 @item -@var{width}
2330 @itemx -w @var{width}
2331 @itemx --width=@var{width}
2332 @opindex -@var{width}
2333 @opindex -w
2334 @opindex --width
2335 Fill output lines up to @var{width} characters (default 75 or @var{goal}
2336 plus 10, if @var{goal} is provided).
2338 @item -g @var{goal}
2339 @itemx --goal=@var{goal}
2340 @opindex -g
2341 @opindex --goal
2342 @command{fmt} initially tries to make lines @var{goal} characters wide.
2343 By default, this is 7% shorter than @var{width}.
2345 @item -p @var{prefix}
2346 @itemx --prefix=@var{prefix}
2347 Only lines beginning with @var{prefix} (possibly preceded by whitespace)
2348 are subject to formatting.  The prefix and any preceding whitespace are
2349 stripped for the formatting and then re-attached to each formatted output
2350 line.  One use is to format certain kinds of program comments, while
2351 leaving the code unchanged.
2353 @end table
2355 @exitstatus
2357 @node pr invocation
2358 @section @command{pr}: Paginate or columnate files for printing
2360 @pindex pr
2361 @cindex printing, preparing files for
2362 @cindex multicolumn output, generating
2363 @cindex merging files in parallel
2365 @command{pr} writes each @var{file} (@samp{-} means standard input), or
2366 standard input if none are given, to standard output, paginating and
2367 optionally outputting in multicolumn format; optionally merges all
2368 @var{file}s, printing all in parallel, one per column.  Synopsis:
2370 @example
2371 pr [@var{option}]@dots{} [@var{file}]@dots{}
2372 @end example
2374 @vindex LC_MESSAGES
2375 By default, a 5-line header is printed at each page: two blank lines;
2376 a line with the date, the file name, and the page count; and two more
2377 blank lines.  A footer of five blank lines is also printed.
2378 The default @var{page_length} is 66
2379 lines.  The default number of text lines is therefore 56.
2380 The text line of the header takes the form
2381 @samp{@var{date} @var{string} @var{page}}, with spaces inserted around
2382 @var{string} so that the line takes up the full @var{page_width}.  Here,
2383 @var{date} is the date (see the @option{-D} or @option{--date-format}
2384 option for details), @var{string} is the centered header string, and
2385 @var{page} identifies the page number.  The @env{LC_MESSAGES} locale
2386 category affects the spelling of @var{page}; in the default C locale, it
2387 is @samp{Page @var{number}} where @var{number} is the decimal page
2388 number.
2390 Form feeds in the input cause page breaks in the output.  Multiple form
2391 feeds produce empty pages.
2393 Columns are of equal width, separated by an optional string (default
2394 is @samp{space}).  For multicolumn output, lines will always be truncated to
2395 @var{page_width} (default 72), unless you use the @option{-J} option.
2396 For single
2397 column output no line truncation occurs by default.  Use @option{-W} option to
2398 truncate lines in that case.
2400 The program accepts the following options.  Also see @ref{Common options}.
2402 @table @samp
2404 @item +@var{first_page}[:@var{last_page}]
2405 @itemx --pages=@var{first_page}[:@var{last_page}]
2406 @c The two following @opindex lines evoke warnings because they contain ':'
2407 @c The 'info' spec does not permit that.  If we use those lines, we end
2408 @c up with truncated index entries that don't work.
2409 @c @opindex +@var{first_page}[:@var{last_page}]
2410 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2411 @opindex +@var{page_range}
2412 @opindex --pages=@var{page_range}
2413 Begin printing with page @var{first_page} and stop with @var{last_page}.
2414 Missing @samp{:@var{last_page}} implies end of file.  While estimating
2415 the number of skipped pages each form feed in the input file results
2416 in a new page.  Page counting with and without @samp{+@var{first_page}}
2417 is identical.  By default, counting starts with the first page of input
2418 file (not first page printed).  Line numbering may be altered by @option{-N}
2419 option.
2421 @item -@var{column}
2422 @itemx --columns=@var{column}
2423 @opindex -@var{column}
2424 @opindex --columns
2425 @cindex down columns
2426 With each single @var{file}, produce @var{column} columns of output
2427 (default is 1) and print columns down, unless @option{-a} is used.  The
2428 column width is automatically decreased as @var{column} increases; unless
2429 you use the @option{-W/-w} option to increase @var{page_width} as well.
2430 This option might well cause some lines to be truncated.  The number of
2431 lines in the columns on each page are balanced.  The options @option{-e}
2432 and @option{-i} are on for multiple text-column output.  Together with
2433 @option{-J} option column alignment and line truncation is turned off.
2434 Lines of full length are joined in a free field format and @option{-S}
2435 option may set field separators.  @option{-@var{column}} may not be used
2436 with @option{-m} option.
2438 @item -a
2439 @itemx --across
2440 @opindex -a
2441 @opindex --across
2442 @cindex across columns
2443 With each single @var{file}, print columns across rather than down.  The
2444 @option{-@var{column}} option must be given with @var{column} greater than one.
2445 If a line is too long to fit in a column, it is truncated.
2447 @item -c
2448 @itemx --show-control-chars
2449 @opindex -c
2450 @opindex --show-control-chars
2451 Print control characters using hat notation (e.g., @samp{^G}); print
2452 other nonprinting characters in octal backslash notation.  By default,
2453 nonprinting characters are not changed.
2455 @item -d
2456 @itemx --double-space
2457 @opindex -d
2458 @opindex --double-space
2459 @cindex double spacing
2460 Double space the output.
2462 @item -D @var{format}
2463 @itemx --date-format=@var{format}
2464 @cindex time formats
2465 @cindex formatting times
2466 Format header dates using @var{format}, using the same conventions as
2467 for the command @samp{date +@var{format}}.  @xref{date invocation}.
2468 Except for directives, which start with
2469 @samp{%}, characters in @var{format} are printed unchanged.  You can use
2470 this option to specify an arbitrary string in place of the header date,
2471 e.g., @option{--date-format="Monday morning"}.
2473 @vindex POSIXLY_CORRECT
2474 @vindex LC_TIME
2475 The default date format is @samp{%Y-%m-%d %H:%M} (for example,
2476 @samp{2001-12-04 23:59});
2477 but if the @env{POSIXLY_CORRECT} environment variable is set
2478 and the @env{LC_TIME} locale category specifies the POSIX
2479 locale, the default is @samp{%b %e %H:%M %Y} (for example,
2480 @samp{Dec@ @ 4 23:59 2001}.
2482 @vindex TZ
2483 Timestamps are listed according to the time zone rules specified by
2484 the @env{TZ} environment variable, or by the system default rules if
2485 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
2486 with @env{TZ}, libc, The GNU C Library Reference Manual}.
2488 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2489 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2490 @opindex -e
2491 @opindex --expand-tabs
2492 @cindex input tabs
2493 Expand @var{tab}s to spaces on input.  Optional argument @var{in-tabchar} is
2494 the input tab character (default is the TAB character).  Second optional
2495 argument @var{in-tabwidth} is the input tab character's width (default
2496 is 8).
2498 @item -f
2499 @itemx -F
2500 @itemx --form-feed
2501 @opindex -F
2502 @opindex -f
2503 @opindex --form-feed
2504 Use a form feed instead of newlines to separate output pages.  This does
2505 not alter the default page length of 66 lines.
2507 @item -h @var{header}
2508 @itemx --header=@var{header}
2509 @opindex -h
2510 @opindex --header
2511 Replace the file name in the header with the centered string @var{header}.
2512 When using the shell, @var{header} should be quoted and should be
2513 separated from @option{-h} by a space.
2515 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2516 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2517 @opindex -i
2518 @opindex --output-tabs
2519 @cindex output tabs
2520 Replace spaces with @var{tab}s on output.  Optional argument @var{out-tabchar}
2521 is the output tab character (default is the TAB character).  Second optional
2522 argument @var{out-tabwidth} is the output tab character's width (default
2523 is 8).
2525 @item -J
2526 @itemx --join-lines
2527 @opindex -J
2528 @opindex --join-lines
2529 Merge lines of full length.  Used together with the column options
2530 @option{-@var{column}}, @option{-a -@var{column}} or @option{-m}.  Turns off
2531 @option{-W/-w} line truncation;
2532 no column alignment used; may be used with
2533 @option{--sep-string[=@var{string}]}.  @option{-J} has been introduced
2534 (together with @option{-W} and @option{--sep-string})
2535 to disentangle the old (POSIX-compliant) options @option{-w} and
2536 @option{-s} along with the three column options.
2539 @item -l @var{page_length}
2540 @itemx --length=@var{page_length}
2541 @opindex -l
2542 @opindex --length
2543 Set the page length to @var{page_length} (default 66) lines, including
2544 the lines of the header [and the footer].  If @var{page_length} is less
2545 than or equal to 10, the header and footer are omitted, as if the
2546 @option{-t} option had been given.
2548 @item -m
2549 @itemx --merge
2550 @opindex -m
2551 @opindex --merge
2552 Merge and print all @var{file}s in parallel, one in each column.  If a
2553 line is too long to fit in a column, it is truncated, unless the @option{-J}
2554 option is used.  @option{--sep-string[=@var{string}]} may be used.
2555 Empty pages in
2556 some @var{file}s (form feeds set) produce empty columns, still marked
2557 by @var{string}.  The result is a continuous line numbering and column
2558 marking throughout the whole merged file.  Completely empty merged pages
2559 show no separators or line numbers.  The default header becomes
2560 @samp{@var{date} @var{page}} with spaces inserted in the middle; this
2561 may be used with the @option{-h} or @option{--header} option to fill up
2562 the middle blank part.
2564 @item -n[@var{number-separator}[@var{digits}]]
2565 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2566 @opindex -n
2567 @opindex --number-lines
2568 Provide @var{digits} digit line numbering (default for @var{digits} is
2569 5).  With multicolumn output the number occupies the first @var{digits}
2570 column positions of each text column or only each line of @option{-m}
2571 output.  With single column output the number precedes each line just as
2572 @option{-m} does.  Default counting of the line numbers starts with the
2573 first line of the input file (not the first line printed, compare the
2574 @option{--page} option and @option{-N} option).
2575 Optional argument @var{number-separator} is the character appended to
2576 the line number to separate it from the text followed.  The default
2577 separator is the TAB character.  In a strict sense a TAB is always
2578 printed with single column output only.  The TAB width varies
2579 with the TAB position, e.g., with the left @var{margin} specified
2580 by @option{-o} option.  With multicolumn output priority is given to
2581 @samp{equal width of output columns} (a POSIX specification).
2582 The TAB width is fixed to the value of the first column and does
2583 not change with different values of left @var{margin}.  That means a
2584 fixed number of spaces is always printed in the place of the
2585 @var{number-separator} TAB@.  The tabification depends upon the output
2586 position.
2588 @item -N @var{line_number}
2589 @itemx --first-line-number=@var{line_number}
2590 @opindex -N
2591 @opindex --first-line-number
2592 Start line counting with the number @var{line_number} at first line of
2593 first page printed (in most cases not the first line of the input file).
2595 @item -o @var{margin}
2596 @itemx --indent=@var{margin}
2597 @opindex -o
2598 @opindex --indent
2599 @cindex indenting lines
2600 @cindex left margin
2601 Indent each line with a margin @var{margin} spaces wide (default is zero).
2602 The total page width is the size of the margin plus the @var{page_width}
2603 set with the @option{-W/-w} option.  A limited overflow may occur with
2604 numbered single column output (compare @option{-n} option).
2606 @item -r
2607 @itemx --no-file-warnings
2608 @opindex -r
2609 @opindex --no-file-warnings
2610 Do not print a warning message when an argument @var{file} cannot be
2611 opened.  (The exit status will still be nonzero, however.)
2613 @item -s[@var{char}]
2614 @itemx --separator[=@var{char}]
2615 @opindex -s
2616 @opindex --separator
2617 Separate columns by a single character @var{char}.  The default for
2618 @var{char} is the TAB character without @option{-w} and @samp{no
2619 character} with @option{-w}.  Without @option{-s} the default separator
2620 @samp{space} is set.  @option{-s[char]} turns off line truncation of all
2621 three column options (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m}) unless
2622 @option{-w} is set.  This is a POSIX-compliant formulation.
2625 @item -S[@var{string}]
2626 @itemx --sep-string[=@var{string}]
2627 @opindex -S
2628 @opindex --sep-string
2629 Use @var{string} to separate output columns.  The @option{-S} option doesn't
2630 affect the @option{-W/-w} option, unlike the @option{-s} option which does.  It
2631 does not affect line truncation or column alignment.
2632 Without @option{-S}, and with @option{-J}, @command{pr} uses the default output
2633 separator, TAB@.
2634 Without @option{-S} or @option{-J}, @command{pr} uses a @samp{space}
2635 (same as @option{-S"@w{ }"}).
2636 If no @samp{@var{string}} argument is specified, @samp{""} is assumed.
2638 @item -t
2639 @itemx --omit-header
2640 @opindex -t
2641 @opindex --omit-header
2642 Do not print the usual header [and footer] on each page, and do not fill
2643 out the bottom of pages (with blank lines or a form feed).  No page
2644 structure is produced, but form feeds set in the input files are retained.
2645 The predefined pagination is not changed.  @option{-t} or @option{-T} may be
2646 useful together with other options; e.g.: @option{-t -e4}, expand TAB characters
2647 in the input file to 4 spaces but don't make any other changes.  Use of
2648 @option{-t} overrides @option{-h}.
2650 @item -T
2651 @itemx --omit-pagination
2652 @opindex -T
2653 @opindex --omit-pagination
2654 Do not print header [and footer].  In addition eliminate all form feeds
2655 set in the input files.
2657 @item -v
2658 @itemx --show-nonprinting
2659 @opindex -v
2660 @opindex --show-nonprinting
2661 Print nonprinting characters in octal backslash notation.
2663 @item -w @var{page_width}
2664 @itemx --width=@var{page_width}
2665 @opindex -w
2666 @opindex --width
2667 Set page width to @var{page_width} characters for multiple text-column
2668 output only (default for @var{page_width} is 72).  The specified
2669 @var{page_width} is rounded down so that columns have equal width.
2670 @option{-s[CHAR]} turns off the default page width and any line truncation
2671 and column alignment.
2672 Lines of full length are merged, regardless of the column options
2673 set.  No @var{page_width} setting is possible with single column output.
2674 A POSIX-compliant formulation.
2676 @item -W @var{page_width}
2677 @itemx --page_width=@var{page_width}
2678 @opindex -W
2679 @opindex --page_width
2680 Set the page width to @var{page_width} characters, honored with and
2681 without a column option.  With a column option, the specified @var{page_width}
2682 is rounded down so that columns have equal width.  Text lines are truncated,
2683 unless @option{-J} is used. Together with one of the three column options
2684 (@option{-@var{column}}, @option{-a -@var{column}} or @option{-m}) column
2685 alignment is always used.  The separator options @option{-S} or @option{-s}
2686 don't disable the @option{-W} option.  Default is 72 characters.  Without
2687 @option{-W @var{page_width}} and without any of the column options NO line
2688 truncation is used (defined to keep downward compatibility and to meet
2689 most frequent tasks).  That's equivalent to @option{-W 72 -J}@.  The header
2690 line is never truncated.
2692 @end table
2694 @exitstatus
2697 @node fold invocation
2698 @section @command{fold}: Wrap input lines to fit in specified width
2700 @pindex fold
2701 @cindex wrapping long input lines
2702 @cindex folding long input lines
2704 @command{fold} writes each @var{file} (@option{-} means standard input), or
2705 standard input if none are given, to standard output, breaking long
2706 lines.  Synopsis:
2708 @example
2709 fold [@var{option}]@dots{} [@var{file}]@dots{}
2710 @end example
2712 By default, @command{fold} breaks lines wider than 80 columns.  The output
2713 is split into as many lines as necessary.
2715 @cindex screen columns
2716 @command{fold} counts screen columns by default; thus, a tab may count more
2717 than one column, backspace decreases the column count, and carriage
2718 return sets the column to zero.
2720 The program accepts the following options.  Also see @ref{Common options}.
2722 @table @samp
2724 @item -b
2725 @itemx --bytes
2726 @opindex -b
2727 @opindex --bytes
2728 Count bytes rather than columns, so that tabs, backspaces, and carriage
2729 returns are each counted as taking up one column, just like other
2730 characters.
2732 @item -s
2733 @itemx --spaces
2734 @opindex -s
2735 @opindex --spaces
2736 Break at word boundaries: the line is broken after the last blank before
2737 the maximum line length.  If the line contains no such blanks, the line
2738 is broken at the maximum line length as usual.
2740 @item -w @var{width}
2741 @itemx --width=@var{width}
2742 @opindex -w
2743 @opindex --width
2744 Use a maximum line length of @var{width} columns instead of 80.
2746 For compatibility @command{fold} supports an obsolete option syntax
2747 @option{-@var{width}}.  New scripts should use @option{-w @var{width}}
2748 instead.
2750 @end table
2752 @exitstatus
2755 @node Output of parts of files
2756 @chapter Output of parts of files
2758 @cindex output of parts of files
2759 @cindex parts of files, output of
2761 These commands output pieces of the input.
2763 @menu
2764 * head invocation::             Output the first part of files.
2765 * tail invocation::             Output the last part of files.
2766 * split invocation::            Split a file into pieces.
2767 * csplit invocation::           Split a file into context-determined pieces.
2768 @end menu
2770 @node head invocation
2771 @section @command{head}: Output the first part of files
2773 @pindex head
2774 @cindex initial part of files, outputting
2775 @cindex first part of files, outputting
2777 @command{head} prints the first part (10 lines by default) of each
2778 @var{file}; it reads from standard input if no files are given or
2779 when given a @var{file} of @option{-}.  Synopsis:
2781 @example
2782 head [@var{option}]@dots{} [@var{file}]@dots{}
2783 @end example
2785 If more than one @var{file} is specified, @command{head} prints a
2786 one-line header consisting of:
2788 @example
2789 ==> @var{file name} <==
2790 @end example
2792 @noindent
2793 before the output for each @var{file}.
2795 The program accepts the following options.  Also see @ref{Common options}.
2797 @table @samp
2799 @item -c [-]@var{num}
2800 @itemx --bytes=[-]@var{num}
2801 @opindex -c
2802 @opindex --bytes
2803 Print the first @var{num} bytes, instead of initial lines.
2804 However, if @var{num} is prefixed with a @samp{-},
2805 print all but the last @var{num} bytes of each file.
2806 @multiplierSuffixes{num}
2808 @item -n [-]@var{num}
2809 @itemx --lines=[-]@var{num}
2810 @opindex -n
2811 @opindex --lines
2812 Output the first @var{num} lines.
2813 However, if @var{num} is prefixed with a @samp{-},
2814 print all but the last @var{num} lines of each file.
2815 Size multiplier suffixes are the same as with the @option{-c} option.
2817 @item -q
2818 @itemx --quiet
2819 @itemx --silent
2820 @opindex -q
2821 @opindex --quiet
2822 @opindex --silent
2823 Never print file name headers.
2825 @item -v
2826 @itemx --verbose
2827 @opindex -v
2828 @opindex --verbose
2829 Always print file name headers.
2831 @optZeroTerminated
2833 @end table
2835 For compatibility @command{head} also supports an obsolete option syntax
2836 @option{-[@var{num}][bkm][cqv]}, which is recognized only if it is
2837 specified first.  @var{num} is a decimal number optionally followed
2838 by a size letter (@samp{b}, @samp{k}, @samp{m}) as in @option{-c}, or
2839 @samp{l} to mean count by lines, or other option letters (@samp{cqv}).
2840 Scripts intended for standard hosts should use @option{-c @var{num}}
2841 or @option{-n @var{num}} instead.  If your script must also run on
2842 hosts that support only the obsolete syntax, it is usually simpler to
2843 avoid @command{head}, e.g., by using @samp{sed 5q} instead of
2844 @samp{head -5}.
2846 @exitstatus
2849 @node tail invocation
2850 @section @command{tail}: Output the last part of files
2852 @pindex tail
2853 @cindex last part of files, outputting
2855 @command{tail} prints the last part (10 lines by default) of each
2856 @var{file}; it reads from standard input if no files are given or
2857 when given a @var{file} of @samp{-}.  Synopsis:
2859 @example
2860 tail [@var{option}]@dots{} [@var{file}]@dots{}
2861 @end example
2863 If more than one @var{file} is specified, @command{tail} prints a
2864 one-line header before the output for each @var{file}, consisting of:
2866 @example
2867 ==> @var{file name} <==
2868 @end example
2870 For further processing of tail output, it can be useful to convert the
2871 file headers to line prefixes, which can be done like:
2873 @example
2874 tail @dots{} |
2875 awk '
2876   /^==> .* <==$/ @{prefix=substr($0,5,length-8)":"; next@}
2877   @{print prefix$0@}
2878 ' | @dots{}
2879 @end example
2881 @cindex BSD @command{tail}
2882 GNU @command{tail} can output any amount of data (some other versions of
2883 @command{tail} cannot).  It also has no @option{-r} option (print in
2884 reverse), since reversing a file is really a different job from printing
2885 the end of a file; BSD @command{tail} (which is the one with @option{-r}) can
2886 only reverse files that are at most as large as its buffer, which is
2887 typically 32 KiB@.  A more reliable and versatile way to reverse files is
2888 the GNU @command{tac} command.
2890 The program accepts the following options.  Also see @ref{Common options}.
2892 @table @samp
2894 @item -c [+]@var{num}
2895 @itemx --bytes=[+]@var{num}
2896 @opindex -c
2897 @opindex --bytes
2898 Output the last @var{num} bytes, instead of final lines.
2899 However, if @var{num} is prefixed with a @samp{+}, start printing with
2900 byte @var{num} from the start of each file, instead of from the end.
2901 @multiplierSuffixes{num}
2903 @item -f
2904 @itemx --follow[=@var{how}]
2905 @opindex -f
2906 @opindex --follow
2907 @cindex growing files
2908 @vindex name @r{follow option}
2909 @vindex descriptor @r{follow option}
2910 Loop forever trying to read more characters at the end of the file,
2911 presumably because the file is growing.
2912 If more than one file is given, @command{tail} prints a header whenever it
2913 gets output from a different file, to indicate which file that output is
2914 from.
2916 There are two ways to specify how you'd like to track files with this option,
2917 but that difference is noticeable only when a followed file is removed or
2918 renamed.
2919 If you'd like to continue to track the end of a growing file even after
2920 it has been unlinked, use @option{--follow=descriptor}.  This is the default
2921 behavior, but it is not useful if you're tracking a log file that may be
2922 rotated (removed or renamed, then reopened).  In that case, use
2923 @option{--follow=name} to track the named file, perhaps by reopening it
2924 periodically to see if it has been removed and recreated by some other program.
2925 Note that the inotify-based implementation handles this case without
2926 the need for any periodic reopening.
2928 No matter which method you use, if the tracked file is determined to have
2929 shrunk, @command{tail} prints a message saying the file has been truncated
2930 and resumes tracking the end of the file from the newly-determined endpoint.
2932 When a file is removed, @command{tail}'s behavior depends on whether it is
2933 following the name or the descriptor.  When following by name, tail can
2934 detect that a file has been removed and gives a message to that effect,
2935 and if @option{--retry} has been specified it will continue checking
2936 periodically to see if the file reappears.
2937 When following a descriptor, tail does not detect that the file has
2938 been unlinked or renamed and issues no message;  even though the file
2939 may no longer be accessible via its original name, it may still be
2940 growing.
2942 The option values @samp{descriptor} and @samp{name} may be specified only
2943 with the long form of the option, not with @option{-f}.
2945 The @option{-f} option is ignored if
2946 no @var{file} operand is specified and standard input is a FIFO or a pipe.
2947 Likewise, the @option{-f} option has no effect for any
2948 operand specified as @samp{-}, when standard input is a FIFO or a pipe.
2950 With kernel inotify support, output is triggered by file changes
2951 and is generally very prompt.
2952 Otherwise, @command{tail} sleeps for one second between checks---
2953 use @option{--sleep-interval=@var{n}} to change that default---which can
2954 make the output appear slightly less responsive or bursty.
2955 When using tail without inotify support, you can make it more responsive
2956 by using a sub-second sleep interval, e.g., via an alias like this:
2958 @example
2959 alias tail='tail -s.1'
2960 @end example
2962 @item -F
2963 @opindex -F
2964 This option is the same as @option{--follow=name --retry}.  That is, tail
2965 will attempt to reopen a file when it is removed.  Should this fail, tail
2966 will keep trying until it becomes accessible again.
2968 @item --max-unchanged-stats=@var{n}
2969 @opindex --max-unchanged-stats
2970 When tailing a file by name, if there have been @var{n} (default
2971 n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive
2972 iterations for which the file has not changed, then
2973 @code{open}/@code{fstat} the file to determine if that file name is
2974 still associated with the same device/inode-number pair as before.
2975 When following a log file that is rotated, this is approximately the
2976 number of seconds between when tail prints the last pre-rotation lines
2977 and when it prints the lines that have accumulated in the new log file.
2978 This option is meaningful only when polling (i.e., without inotify)
2979 and when following by name.
2981 @item -n [+]@var{num}
2982 @itemx --lines=[+]@var{}
2983 @opindex -n
2984 @opindex --lines
2985 Output the last @var{num} lines.
2986 However, if @var{num} is prefixed with a @samp{+}, start printing with
2987 line @var{num} from the start of each file, instead of from the end.
2988 Size multiplier suffixes are the same as with the @option{-c} option.
2990 @item --pid=@var{pid}
2991 @opindex --pid
2992 When following by name or by descriptor, you may specify the process ID,
2993 @var{pid}, of the sole writer of all @var{file} arguments.  Then, shortly
2994 after that process terminates, tail will also terminate.  This will
2995 work properly only if the writer and the tailing process are running on
2996 the same machine.  For example, to save the output of a build in a file
2997 and to watch the file grow, if you invoke @command{make} and @command{tail}
2998 like this then the tail process will stop when your build completes.
2999 Without this option, you would have had to kill the @code{tail -f}
3000 process yourself.
3002 @example
3003 $ make >& makerr & tail --pid=$! -f makerr
3004 @end example
3006 If you specify a @var{pid} that is not in use or that does not correspond
3007 to the process that is writing to the tailed files, then @command{tail}
3008 may terminate long before any @var{file}s stop growing or it may not
3009 terminate until long after the real writer has terminated.
3010 Note that @option{--pid} cannot be supported on some systems; @command{tail}
3011 will print a warning if this is the case.
3013 @item -q
3014 @itemx --quiet
3015 @itemx --silent
3016 @opindex -q
3017 @opindex --quiet
3018 @opindex --silent
3019 Never print file name headers.
3021 @item --retry
3022 @opindex --retry
3023 Indefinitely try to open the specified file.
3024 This option is useful mainly when following (and otherwise issues a warning).
3026 When following by file descriptor (i.e., with @option{--follow=descriptor}),
3027 this option only affects the initial open of the file, as after a successful
3028 open, @command{tail} will start following the file descriptor.
3030 When following by name (i.e., with @option{--follow=name}), @command{tail}
3031 infinitely retries to re-open the given files until killed.
3033 Without this option, when @command{tail} encounters a file that doesn't
3034 exist or is otherwise inaccessible, it reports that fact and
3035 never checks it again.
3037 @item -s @var{number}
3038 @itemx --sleep-interval=@var{number}
3039 @opindex -s
3040 @opindex --sleep-interval
3041 Change the number of seconds to wait between iterations (the default is 1.0).
3042 During one iteration, every specified file is checked to see if it has
3043 changed size.
3044 Historical implementations of @command{tail} have required that
3045 @var{number} be an integer.  However, GNU @command{tail} accepts
3046 an arbitrary floating point number.  @xref{Floating point}.
3047 When @command{tail} uses inotify, this polling-related option
3048 is usually ignored.  However, if you also specify @option{--pid=@var{p}},
3049 @command{tail} checks whether process @var{p} is alive at least
3050 every @var{number} seconds.
3052 @item -v
3053 @itemx --verbose
3054 @opindex -v
3055 @opindex --verbose
3056 Always print file name headers.
3058 @optZeroTerminated
3060 @end table
3062 For compatibility @command{tail} also supports an obsolete usage
3063 @samp{tail -[@var{num}][bcl][f] [@var{file}]}, which is recognized
3064 only if it does not conflict with the usage described
3065 above.  This obsolete form uses exactly one option and at most one
3066 file.  In the option, @var{num} is an optional decimal number optionally
3067 followed by a size letter (@samp{b}, @samp{c}, @samp{l}) to mean count
3068 by 512-byte blocks, bytes, or lines, optionally followed by @samp{f}
3069 which has the same meaning as @option{-f}.
3071 @vindex _POSIX2_VERSION
3072 On systems not conforming to POSIX 1003.1-2001, the leading @samp{-}
3073 can be replaced by @samp{+} in the traditional option syntax with the
3074 same meaning as in counts, and on obsolete systems predating POSIX
3075 1003.1-2001 traditional usage overrides normal usage when the two
3076 conflict.  This behavior can be controlled with the
3077 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
3078 conformance}).
3080 Scripts intended for use on standard hosts should avoid traditional
3081 syntax and should use @option{-c @var{num}[b]}, @option{-n
3082 @var{num}}, and/or @option{-f} instead.  If your script must also
3083 run on hosts that support only the traditional syntax, you can often
3084 rewrite it to avoid problematic usages, e.g., by using @samp{sed -n
3085 '$p'} rather than @samp{tail -1}.  If that's not possible, the script
3086 can use a test like @samp{if tail -c +1 </dev/null >/dev/null 2>&1;
3087 then @dots{}} to decide which syntax to use.
3089 Even if your script assumes the standard behavior, you should still
3090 beware usages whose behaviors differ depending on the POSIX
3091 version.  For example, avoid @samp{tail - main.c}, since it might be
3092 interpreted as either @samp{tail main.c} or as @samp{tail -- -
3093 main.c}; avoid @samp{tail -c 4}, since it might mean either @samp{tail
3094 -c4} or @samp{tail -c 10 4}; and avoid @samp{tail +4}, since it might
3095 mean either @samp{tail ./+4} or @samp{tail -n +4}.
3097 @exitstatus
3100 @node split invocation
3101 @section @command{split}: Split a file into pieces.
3103 @pindex split
3104 @cindex splitting a file into pieces
3105 @cindex pieces, splitting a file into
3107 @command{split} creates output files containing consecutive or interleaved
3108 sections of @var{input}  (standard input if none is given or @var{input}
3109 is @samp{-}).  Synopsis:
3111 @example
3112 split [@var{option}] [@var{input} [@var{prefix}]]
3113 @end example
3115 By default, @command{split} puts 1000 lines of @var{input} (or whatever is
3116 left over for the last section), into each output file.
3118 @cindex output file name prefix
3119 The output files' names consist of @var{prefix} (@samp{x} by default)
3120 followed by a group of characters (@samp{aa}, @samp{ab}, @dots{} by
3121 default), such that concatenating the output files in traditional
3122 sorted order by file name produces the original input file (except
3123 @option{-nr/@var{n}}).  By default split will initially create files
3124 with two generated suffix characters, and will increase this width by two
3125 when the next most significant position reaches the last character.
3126 (@samp{yz}, @samp{zaaa}, @samp{zaab}, @dots{}).  In this way an arbitrary
3127 number of output files are supported, which sort as described above,
3128 even in the presence of an @option{--additional-suffix} option.
3129 If the @option{-a} option is specified and the output file names are
3130 exhausted, @command{split} reports an error without deleting the
3131 output files that it did create.
3133 The program accepts the following options.  Also see @ref{Common options}.
3135 @table @samp
3137 @item -l @var{lines}
3138 @itemx --lines=@var{lines}
3139 @opindex -l
3140 @opindex --lines
3141 Put @var{lines} lines of @var{input} into each output file.
3142 If @option{--separator} is specified, then @var{lines} determines
3143 the number of records.
3145 For compatibility @command{split} also supports an obsolete
3146 option syntax @option{-@var{lines}}.  New scripts should use
3147 @option{-l @var{lines}} instead.
3149 @item -b @var{size}
3150 @itemx --bytes=@var{size}
3151 @opindex -b
3152 @opindex --bytes
3153 Put @var{size} bytes of @var{input} into each output file.
3154 @multiplierSuffixes{size}
3156 @item -C @var{size}
3157 @itemx --line-bytes=@var{size}
3158 @opindex -C
3159 @opindex --line-bytes
3160 Put into each output file as many complete lines of @var{input} as
3161 possible without exceeding @var{size} bytes.  Individual lines or records
3162 longer than @var{size} bytes are broken into multiple files.
3163 @var{size} has the same format as for the @option{--bytes} option.
3164 If @option{--separator} is specified, then @var{lines} determines
3165 the number of records.
3167 @item --filter=@var{command}
3168 @opindex --filter
3169 With this option, rather than simply writing to each output file,
3170 write through a pipe to the specified shell @var{command} for each output file.
3171 @var{command} should use the $FILE environment variable, which is set
3172 to a different output file name for each invocation of the command.
3173 For example, imagine that you have a 1TiB compressed file
3174 that, if uncompressed, would be too large to reside on disk,
3175 yet you must split it into individually-compressed pieces
3176 of a more manageable size.
3177 To do that, you might run this command:
3179 @example
3180 xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
3181 @end example
3183 Assuming a 10:1 compression ratio, that would create about fifty 20GiB files
3184 with names @file{big-aa.xz}, @file{big-ab.xz}, @file{big-ac.xz}, etc.
3186 @item -n @var{chunks}
3187 @itemx --number=@var{chunks}
3188 @opindex -n
3189 @opindex --number
3191 Split @var{input} to @var{chunks} output files where @var{chunks} may be:
3193 @example
3194 @var{n}      generate @var{n} files based on current size of @var{input}
3195 @var{k}/@var{n}    only output @var{k}th of @var{n} to stdout
3196 l/@var{n}    generate @var{n} files without splitting lines or records
3197 l/@var{k}/@var{n}  likewise but only output @var{k}th of @var{n} to stdout
3198 r/@var{n}    like @samp{l} but use round robin distribution
3199 r/@var{k}/@var{n}  likewise but only output @var{k}th of @var{n} to stdout
3200 @end example
3202 Any excess bytes remaining after dividing the @var{input}
3203 into @var{n} chunks, are assigned to the last chunk.
3204 Any excess bytes appearing after the initial calculation are discarded
3205 (except when using @samp{r} mode).
3207 All @var{n} files are created even if there are fewer than @var{n} lines,
3208 or the @var{input} is truncated.
3210 For @samp{l} mode, chunks are approximately @var{input} size / @var{n}.
3211 The @var{input} is partitioned into @var{n} equal sized portions, with
3212 the last assigned any excess.  If a line @emph{starts} within a partition
3213 it is written completely to the corresponding file.  Since lines or records
3214 are not split even if they overlap a partition, the files written
3215 can be larger or smaller than the partition size, and even empty
3216 if a line/record is so long as to completely overlap the partition.
3218 For @samp{r} mode, the size of @var{input} is irrelevant,
3219 and so can be a pipe for example.
3221 @item -a @var{length}
3222 @itemx --suffix-length=@var{length}
3223 @opindex -a
3224 @opindex --suffix-length
3225 Use suffixes of length @var{length}.  If a @var{length} of 0 is specified,
3226 this is the same as if (any previous) @option{-a} was not specified, and
3227 thus enables the default behavior, which starts the suffix length at 2,
3228 and unless @option{-n} or @option{--numeric-suffixes=@var{from}} is
3229 specified, will auto increase the length by 2 as required.
3231 @item -d
3232 @itemx --numeric-suffixes[=@var{from}]
3233 @opindex -d
3234 @opindex --numeric-suffixes
3235 Use digits in suffixes rather than lower-case letters.  The numerical
3236 suffix counts from @var{from} if specified, 0 otherwise.
3238 @var{from} is supported with the long form option, and is used to either set the
3239 initial suffix for a single run, or to set the suffix offset for independently
3240 split inputs, and consequently the auto suffix length expansion described above
3241 is disabled.  Therefore you may also want to use option @option{-a} to allow
3242 suffixes beyond @samp{99}.  Note if option @option{--number} is specified and
3243 the number of files is less than @var{from}, a single run is assumed and the
3244 minimum suffix length required is automatically determined.
3246 @item -x
3247 @itemx --hex-suffixes[=@var{from}]
3248 @opindex -x
3249 @opindex --hex-suffixes
3250 Like @option{--numeric-suffixes}, but use hexadecimal numbers (in lower case).
3252 @item --additional-suffix=@var{suffix}
3253 @opindex --additional-suffix
3254 Append an additional @var{suffix} to output file names.  @var{suffix}
3255 must not contain slash.
3257 @item -e
3258 @itemx --elide-empty-files
3259 @opindex -e
3260 @opindex --elide-empty-files
3261 Suppress the generation of zero-length output files.  This can happen
3262 with the @option{--number} option if a file is (truncated to be) shorter
3263 than the number requested, or if a line is so long as to completely
3264 span a chunk.  The output file sequence numbers, always run consecutively
3265 even when this option is specified.
3267 @item -t @var{separator}
3268 @itemx --separator=@var{separator}
3269 @opindex -t
3270 @opindex --separator
3271 @cindex line separator character
3272 @cindex record separator character
3273 Use character @var{separator} as the record separator instead of the default
3274 newline character (ASCII LF).
3275 To specify ASCII NUL as the separator, use the two-character string @samp{\0},
3276 e.g., @samp{split -t '\0'}.
3278 @item -u
3279 @itemx --unbuffered
3280 @opindex -u
3281 @opindex --unbuffered
3282 Immediately copy input to output in @option{--number r/@dots{}} mode,
3283 which is a much slower mode of operation.
3285 @item --verbose
3286 @opindex --verbose
3287 Write a diagnostic just before each output file is opened.
3289 @end table
3291 @exitstatus
3293 Here are a few examples to illustrate how the
3294 @option{--number} (@option{-n}) option works:
3296 Notice how, by default, one line may be split onto two or more:
3298 @example
3299 $ seq -w 6 10 > k; split -n3 k; head xa?
3300 ==> xaa <==
3303 ==> xab <==
3307 ==> xac <==
3310 @end example
3312 Use the "l/" modifier to suppress that:
3314 @example
3315 $ seq -w 6 10 > k; split -nl/3 k; head xa?
3316 ==> xaa <==
3320 ==> xab <==
3324 ==> xac <==
3326 @end example
3328 Use the "r/" modifier to distribute lines in a round-robin fashion:
3330 @example
3331 $ seq -w 6 10 > k; split -nr/3 k; head xa?
3332 ==> xaa <==
3336 ==> xab <==
3340 ==> xac <==
3342 @end example
3344 You can also extract just the Kth chunk.
3345 This extracts and prints just the 7th "chunk" of 33:
3347 @example
3348 $ seq 100 > k; split -nl/7/33 k
3352 @end example
3355 @node csplit invocation
3356 @section @command{csplit}: Split a file into context-determined pieces
3358 @pindex csplit
3359 @cindex context splitting
3360 @cindex splitting a file into pieces by context
3362 @command{csplit} creates zero or more output files containing sections of
3363 @var{input} (standard input if @var{input} is @samp{-}).  Synopsis:
3365 @example
3366 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
3367 @end example
3369 The contents of the output files are determined by the @var{pattern}
3370 arguments, as detailed below.  An error occurs if a @var{pattern}
3371 argument refers to a nonexistent line of the input file (e.g., if no
3372 remaining line matches a given regular expression).  After every
3373 @var{pattern} has been matched, any remaining input is copied into one
3374 last output file.
3376 By default, @command{csplit} prints the number of bytes written to each
3377 output file after it has been created.
3379 The types of pattern arguments are:
3381 @table @samp
3383 @item @var{n}
3384 Create an output file containing the input up to but not including line
3385 @var{n} (a positive integer).  If followed by a repeat count, also
3386 create an output file containing the next @var{n} lines of the input
3387 file once for each repeat.
3389 @item /@var{regexp}/[@var{offset}]
3390 Create an output file containing the current line up to (but not
3391 including) the next line of the input file that contains a match for
3392 @var{regexp}.  The optional @var{offset} is an integer.
3393 If it is given, the input up to (but not including) the
3394 matching line plus or minus @var{offset} is put into the output file,
3395 and the line after that begins the next section of input.
3397 @item %@var{regexp}%[@var{offset}]
3398 Like the previous type, except that it does not create an output
3399 file, so that section of the input file is effectively ignored.
3401 @item @{@var{repeat-count}@}
3402 Repeat the previous pattern @var{repeat-count} additional
3403 times.  The @var{repeat-count} can either be a positive integer or an
3404 asterisk, meaning repeat as many times as necessary until the input is
3405 exhausted.
3407 @end table
3409 The output files' names consist of a prefix (@samp{xx} by default)
3410 followed by a suffix.  By default, the suffix is an ascending sequence
3411 of two-digit decimal numbers from @samp{00} to @samp{99}.  In any case,
3412 concatenating the output files in sorted order by file name produces the
3413 original input file.
3415 By default, if @command{csplit} encounters an error or receives a hangup,
3416 interrupt, quit, or terminate signal, it removes any output files
3417 that it has created so far before it exits.
3419 The program accepts the following options.  Also see @ref{Common options}.
3421 @table @samp
3423 @item -f @var{prefix}
3424 @itemx --prefix=@var{prefix}
3425 @opindex -f
3426 @opindex --prefix
3427 @cindex output file name prefix
3428 Use @var{prefix} as the output file name prefix.
3430 @item -b @var{format}
3431 @itemx --suffix-format=@var{format}
3432 @opindex -b
3433 @opindex --suffix-format
3434 @cindex output file name suffix
3435 Use @var{format} as the output file name suffix.  When this option is
3436 specified, the suffix string must include exactly one
3437 @code{printf(3)}-style conversion specification, possibly including
3438 format specification flags, a field width, a precision specifications,
3439 or all of these kinds of modifiers.  The format letter must convert a
3440 binary unsigned integer argument to readable form.  The format letters
3441 @samp{d} and @samp{i} are aliases for @samp{u}, and the
3442 @samp{u}, @samp{o}, @samp{x}, and @samp{X} conversions are allowed.  The
3443 entire @var{format} is given (with the current output file number) to
3444 @code{sprintf(3)} to form the file name suffixes for each of the
3445 individual output files in turn.  If this option is used, the
3446 @option{--digits} option is ignored.
3448 @item -n @var{digits}
3449 @itemx --digits=@var{digits}
3450 @opindex -n
3451 @opindex --digits
3452 Use output file names containing numbers that are @var{digits} digits
3453 long instead of the default 2.
3455 @item -k
3456 @itemx --keep-files
3457 @opindex -k
3458 @opindex --keep-files
3459 Do not remove output files when errors are encountered.
3461 @item --suppress-matched
3462 @opindex --suppress-matched
3463 Do not output lines matching the specified @var{pattern}.
3464 I.e., suppress the boundary line from the start of the second
3465 and subsequent splits.
3467 @item -z
3468 @itemx --elide-empty-files
3469 @opindex -z
3470 @opindex --elide-empty-files
3471 Suppress the generation of zero-length output files.  (In cases where
3472 the section delimiters of the input file are supposed to mark the first
3473 lines of each of the sections, the first output file will generally be a
3474 zero-length file unless you use this option.)  The output file sequence
3475 numbers always run consecutively starting from 0, even when this option
3476 is specified.
3478 @item -s
3479 @itemx -q
3480 @itemx --silent
3481 @itemx --quiet
3482 @opindex -s
3483 @opindex -q
3484 @opindex --silent
3485 @opindex --quiet
3486 Do not print counts of output file sizes.
3488 @end table
3490 @exitstatus
3492 Here is an example of its usage.
3493 First, create an empty directory for the exercise,
3494 and cd into it:
3496 @example
3497 $ mkdir d && cd d
3498 @end example
3500 Now, split the sequence of 1..14 on lines that end with 0 or 5:
3502 @example
3503 $ seq 14 | csplit - '/[05]$/' '@{*@}'
3507 @end example
3509 Each number printed above is the size of an output
3510 file that csplit has just created.
3511 List the names of those output files:
3513 @example
3514 $ ls
3515 xx00  xx01  xx02
3516 @end example
3518 Use @command{head} to show their contents:
3520 @example
3521 $ head xx*
3522 ==> xx00 <==
3528 ==> xx01 <==
3535 ==> xx02 <==
3541 @end example
3543 Example of splitting input by empty lines:
3545 @example
3546 $ csplit --suppress-matched @var{input.txt} '/^$/' '@{*@}'
3547 @end example
3550 @c TODO: "uniq" already supports "--group".
3551 @c        when it gets the "--key" option, uncomment this example.
3553 @c Example of splitting input file, based on the value of column 2:
3555 @c @example
3556 @c $ cat @var{input.txt} |
3557 @c       sort -k2,2 |
3558 @c       uniq --group -k2,2 |
3559 @c       csplit -m '/^$/' '@{*@}'
3560 @c @end example
3562 @node Summarizing files
3563 @chapter Summarizing files
3565 @cindex summarizing files
3567 These commands generate just a few numbers representing entire
3568 contents of files.
3570 @menu
3571 * wc invocation::               Print newline, word, and byte counts.
3572 * sum invocation::              Print checksum and block counts.
3573 * cksum invocation::            Print CRC checksum and byte counts.
3574 * b2sum invocation::            Print or check BLAKE2 digests.
3575 * md5sum invocation::           Print or check MD5 digests.
3576 * sha1sum invocation::          Print or check SHA-1 digests.
3577 * sha2 utilities::              Print or check SHA-2 digests.
3578 @end menu
3581 @node wc invocation
3582 @section @command{wc}: Print newline, word, and byte counts
3584 @pindex wc
3585 @cindex byte count
3586 @cindex character count
3587 @cindex word count
3588 @cindex line count
3590 @command{wc} counts the number of bytes, characters, whitespace-separated
3591 words, and newlines in each given @var{file}, or standard input if none
3592 are given or for a @var{file} of @samp{-}.  Synopsis:
3594 @example
3595 wc [@var{option}]@dots{} [@var{file}]@dots{}
3596 @end example
3598 @cindex total counts
3599 @command{wc} prints one line of counts for each file, and if the file was
3600 given as an argument, it prints the file name following the counts.  If
3601 more than one @var{file} is given, @command{wc} prints a final line
3602 containing the cumulative counts, with the file name @file{total}.  The
3603 counts are printed in this order: newlines, words, characters, bytes,
3604 maximum line length.
3605 Each count is printed right-justified in a field with at least one
3606 space between fields so that the numbers and file names normally line
3607 up nicely in columns.  The width of the count fields varies depending
3608 on the inputs, so you should not depend on a particular field width.
3609 However, as a GNU extension, if only one count is printed,
3610 it is guaranteed to be printed without leading spaces.
3612 By default, @command{wc} prints three counts: the newline, words, and byte
3613 counts.  Options can specify that only certain counts be printed.
3614 Options do not undo others previously given, so
3616 @example
3617 wc --bytes --words
3618 @end example
3620 @noindent
3621 prints both the byte counts and the word counts.
3623 With the @option{--max-line-length} option, @command{wc} prints the length
3624 of the longest line per file, and if there is more than one file it
3625 prints the maximum (not the sum) of those lengths.  The line lengths here
3626 are measured in screen columns, according to the current locale and
3627 assuming tab positions in every 8th column.
3629 The program accepts the following options.  Also see @ref{Common options}.
3631 @table @samp
3633 @item -c
3634 @itemx --bytes
3635 @opindex -c
3636 @opindex --bytes
3637 Print only the byte counts.
3639 @item -m
3640 @itemx --chars
3641 @opindex -m
3642 @opindex --chars
3643 Print only the character counts.
3645 @item -w
3646 @itemx --words
3647 @opindex -w
3648 @opindex --words
3649 Print only the word counts.
3651 @item -l
3652 @itemx --lines
3653 @opindex -l
3654 @opindex --lines
3655 Print only the newline counts.
3657 @item -L
3658 @itemx --max-line-length
3659 @opindex -L
3660 @opindex --max-line-length
3661 Print only the maximum display widths.
3662 Tabs are set at every 8th column.
3663 Display widths of wide characters are considered.
3664 Non-printable characters are given 0 width.
3666 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
3667 @item --files0-from=@var{file}
3668 @opindex --files0-from=@var{file}
3669 @c This is commented out to avoid a texi2dvi failure.
3670 @c texi2dvi (GNU Texinfo 4.11) 1.104
3671 @c @cindex including files from @command{\cmd\}
3672 Disallow processing files named on the command line, and instead process
3673 those named in file @var{file}; each name being terminated by a zero byte
3674 (ASCII NUL).
3675 This is useful \withTotalOption\
3676 when the list of file names is so long that it may exceed a command line
3677 length limitation.
3678 In such cases, running @command{\cmd\} via @command{xargs} is undesirable
3679 because it splits the list into pieces and makes @command{\cmd\} print
3680 \subListOutput\ for each sublist rather than for the entire list.
3681 One way to produce a list of ASCII NUL terminated file
3682 names is with GNU
3683 @command{find}, using its @option{-print0} predicate.
3684 If @var{file} is @samp{-} then the ASCII NUL terminated
3685 file names are read from standard input.
3686 @end macro
3687 @filesZeroFromOption{wc,,a total}
3689 For example, to find the length of the longest line in any @file{.c} or
3690 @file{.h} file in the current hierarchy, do this:
3692 @example
3693 find . -name '*.[ch]' -print0 |
3694   wc -L --files0-from=- | tail -n1
3695 @end example
3697 @end table
3699 @exitstatus
3702 @node sum invocation
3703 @section @command{sum}: Print checksum and block counts
3705 @pindex sum
3706 @cindex 16-bit checksum
3707 @cindex checksum, 16-bit
3709 @command{sum} computes a 16-bit checksum for each given @var{file}, or
3710 standard input if none are given or for a @var{file} of @samp{-}.  Synopsis:
3712 @example
3713 sum [@var{option}]@dots{} [@var{file}]@dots{}
3714 @end example
3716 @command{sum} prints the checksum for each @var{file} followed by the
3717 number of blocks in the file (rounded up).  If more than one @var{file}
3718 is given, file names are also printed (by default).  (With the
3719 @option{--sysv} option, corresponding file names are printed when there is
3720 at least one file argument.)
3722 By default, GNU @command{sum} computes checksums using an algorithm
3723 compatible with BSD @command{sum} and prints file sizes in units of
3724 1024-byte blocks.
3726 The program accepts the following options.  Also see @ref{Common options}.
3728 @table @samp
3730 @item -r
3731 @opindex -r
3732 @cindex BSD @command{sum}
3733 Use the default (BSD compatible) algorithm.  This option is included for
3734 compatibility with the System V @command{sum}.  Unless @option{-s} was also
3735 given, it has no effect.
3737 @item -s
3738 @itemx --sysv
3739 @opindex -s
3740 @opindex --sysv
3741 @cindex System V @command{sum}
3742 Compute checksums using an algorithm compatible with System V
3743 @command{sum}'s default, and print file sizes in units of 512-byte blocks.
3745 @end table
3747 @command{sum} is provided for compatibility; the @command{cksum} program (see
3748 next section) is preferable in new applications.
3750 @exitstatus
3753 @node cksum invocation
3754 @section @command{cksum}: Print CRC checksum and byte counts
3756 @pindex cksum
3757 @cindex cyclic redundancy check
3758 @cindex CRC checksum
3760 @command{cksum} computes a cyclic redundancy check (CRC) checksum for each
3761 given @var{file}, or standard input if none are given or for a
3762 @var{file} of @samp{-}.  Synopsis:
3764 @example
3765 cksum [@var{option}]@dots{} [@var{file}]@dots{}
3766 @end example
3768 @command{cksum} prints the CRC checksum for each file along with the number
3769 of bytes in the file, and the file name unless no arguments were given.
3771 @command{cksum} is typically used to ensure that files
3772 transferred by unreliable means (e.g., netnews) have not been corrupted,
3773 by comparing the @command{cksum} output for the received files with the
3774 @command{cksum} output for the original files (typically given in the
3775 distribution).
3777 The CRC algorithm is specified by the POSIX standard.  It is not
3778 compatible with the BSD or System V @command{sum} algorithms (see the
3779 previous section); it is more robust.
3781 The only options are @option{--help} and @option{--version}.  @xref{Common
3782 options}.
3784 @exitstatus
3787 @node b2sum invocation
3788 @section @command{b2sum}: Print or check BLAKE2 digests
3790 @pindex b2sum
3791 @cindex BLAKE2
3792 @cindex 512-bit checksum
3793 @cindex checksum, 512-bit
3794 @cindex fingerprint, 512-bit
3795 @cindex message-digest, 512-bit
3797 @command{b2sum} computes a 512-bit checksum for each specified
3798 @var{file}.  The same usage and options as the @command{md5sum}
3799 command are supported.  @xref{md5sum invocation}.
3800 In addition @command{b2sum} supports the following options.
3802 @table @samp
3803 @item -l
3804 @itemx --length
3805 @opindex -l
3806 @opindex --length
3807 @cindex BLAKE2 hash length
3808 Change (shorten) the default digest length.
3809 This is specified in bits and thus must be a multiple of 8.
3810 This option is ignored when @option{--check} is specified,
3811 as the length is automatically determined when checking.
3812 @end table
3814 @node md5sum invocation
3815 @section @command{md5sum}: Print or check MD5 digests
3817 @pindex md5sum
3818 @cindex MD5
3819 @cindex 128-bit checksum
3820 @cindex checksum, 128-bit
3821 @cindex fingerprint, 128-bit
3822 @cindex message-digest, 128-bit
3824 @command{md5sum} computes a 128-bit checksum (or @dfn{fingerprint} or
3825 @dfn{message-digest}) for each specified @var{file}.
3827 @macro weakHash{hash}
3828 Note: The \hash\ digest is more reliable than a simple CRC (provided by
3829 the @command{cksum} command) for detecting accidental file corruption,
3830 as the chances of accidentally having two files with identical \hash\
3831 are vanishingly small.  However, it should not be considered secure
3832 against malicious tampering: although finding a file with a given \hash\
3833 fingerprint is considered infeasible at the moment, it is known how
3834 to modify certain files, including digital certificates, so that they
3835 appear valid when signed with an \hash\ digest.  For more secure hashes,
3836 consider using SHA-2, or the newer @command{b2sum} command.
3837 @xref{sha2 utilities}. @xref{b2sum invocation}.
3838 @end macro
3839 @weakHash{MD5}
3841 If a @var{file} is specified as @samp{-} or if no files are given
3842 @command{md5sum} computes the checksum for the standard input.
3843 @command{md5sum} can also determine whether a file and checksum are
3844 consistent.  Synopsis:
3846 @example
3847 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
3848 @end example
3850 For each @var{file}, @samp{md5sum} outputs by default, the MD5 checksum,
3851 a space, a flag indicating binary or text input mode, and the file name.
3852 Binary mode is indicated with @samp{*}, text mode with @samp{ } (space).
3853 Binary mode is the default on systems where it's significant,
3854 otherwise text mode is the default.
3855 If @var{file} contains a backslash or newline, the
3856 line is started with a backslash, and each problematic character in
3857 the file name is escaped with a backslash, making the output
3858 unambiguous even in the presence of arbitrary file names.
3859 If @var{file} is omitted or specified as @samp{-}, standard input is read.
3861 The program accepts the following options.  Also see @ref{Common options}.
3863 @table @samp
3865 @item -b
3866 @itemx --binary
3867 @opindex -b
3868 @opindex --binary
3869 @cindex binary input files
3870 Treat each input file as binary, by reading it in binary mode and
3871 outputting a @samp{*} flag.  This is the inverse of @option{--text}.
3872 On systems like GNU that do not distinguish between binary
3873 and text files, this option merely flags each input mode as binary:
3874 the MD5 checksum is unaffected.  This option is the default on systems
3875 like MS-DOS that distinguish between binary and text files, except
3876 for reading standard input when standard input is a terminal.
3878 @item -c
3879 @itemx --check
3880 Read file names and checksum information (not data) from each
3881 @var{file} (or from stdin if no @var{file} was specified) and report
3882 whether the checksums match the contents of the named files.
3883 The input to this mode of @command{md5sum} is usually the output of
3884 a prior, checksum-generating run of @samp{md5sum}.
3885 Three input formats are supported.  Either the default output
3886 format described above, the @option{--tag} output format,
3887 or the BSD reversed mode format which is similar to the default mode,
3888 but doesn't use a character to distinguish binary and text modes.
3889 @sp 1
3890 For each such line, @command{md5sum} reads the named file and computes its
3891 MD5 checksum.  Then, if the computed message digest does not match the
3892 one on the line with the file name, the file is noted as having
3893 failed the test.  Otherwise, the file passes the test.
3894 By default, for each valid line, one line is written to standard
3895 output indicating whether the named file passed the test.
3896 After all checks have been performed, if there were any failures,
3897 a warning is issued to standard error.
3898 Use the @option{--status} option to inhibit that output.
3899 If any listed file cannot be opened or read, if any valid line has
3900 an MD5 checksum inconsistent with the associated file, or if no valid
3901 line is found, @command{md5sum} exits with nonzero status.  Otherwise,
3902 it exits successfully.
3904 @item --ignore-missing
3905 @opindex --ignore-missing
3906 @cindex verifying MD5 checksums
3907 This option is useful only when verifying checksums.
3908 When verifying checksums, don't fail or report any status
3909 for missing files.  This is useful when verifying a subset
3910 of downloaded files given a larger list of checksums.
3912 @item --quiet
3913 @opindex --quiet
3914 @cindex verifying MD5 checksums
3915 This option is useful only when verifying checksums.
3916 When verifying checksums, don't generate an 'OK' message per successfully
3917 checked file.  Files that fail the verification are reported in the
3918 default one-line-per-file format.  If there is any checksum mismatch,
3919 print a warning summarizing the failures to standard error.
3921 @item --status
3922 @opindex --status
3923 @cindex verifying MD5 checksums
3924 This option is useful only when verifying checksums.
3925 When verifying checksums, don't generate the default one-line-per-file
3926 diagnostic and don't output the warning summarizing any failures.
3927 Failures to open or read a file still evoke individual diagnostics to
3928 standard error.
3929 If all listed files are readable and are consistent with the associated
3930 MD5 checksums, exit successfully.  Otherwise exit with a status code
3931 indicating there was a failure.
3933 @item --tag
3934 @opindex --tag
3935 @cindex BSD output
3936 Output BSD style checksums, which indicate the checksum algorithm used.
3937 As a GNU extension, file names with problematic characters
3938 are escaped as described above, with the same escaping indicator of @samp{\}
3939 at the start of the line, being used.
3940 The @option{--tag} option implies binary mode, and is disallowed with
3941 @option{--text} mode as supporting that would unnecessarily complicate
3942 the output format, while providing little benefit.
3944 @item -t
3945 @itemx --text
3946 @opindex -t
3947 @opindex --text
3948 @cindex text input files
3949 Treat each input file as text, by reading it in text mode and
3950 outputting a @samp{ } flag.  This is the inverse of @option{--binary}.
3951 This option is the default on systems like GNU that do not
3952 distinguish between binary and text files.  On other systems, it is
3953 the default for reading standard input when standard input is a
3954 terminal.  This mode is never defaulted to if @option{--tag} is used.
3956 @item -w
3957 @itemx --warn
3958 @opindex -w
3959 @opindex --warn
3960 @cindex verifying MD5 checksums
3961 When verifying checksums, warn about improperly formatted MD5 checksum lines.
3962 This option is useful only if all but a few lines in the checked input
3963 are valid.
3965 @item --strict
3966 @opindex --strict
3967 @cindex verifying MD5 checksums
3968 When verifying checksums,
3969 if one or more input line is invalid,
3970 exit nonzero after all warnings have been issued.
3972 @end table
3974 @exitstatus
3977 @node sha1sum invocation
3978 @section @command{sha1sum}: Print or check SHA-1 digests
3980 @pindex sha1sum
3981 @cindex SHA-1
3982 @cindex 160-bit checksum
3983 @cindex checksum, 160-bit
3984 @cindex fingerprint, 160-bit
3985 @cindex message-digest, 160-bit
3987 @command{sha1sum} computes a 160-bit checksum for each specified
3988 @var{file}.  The usage and options of this command are precisely the
3989 same as for @command{md5sum}.  @xref{md5sum invocation}.
3991 @weakHash{SHA-1}
3994 @node sha2 utilities
3995 @section sha2 utilities: Print or check SHA-2 digests
3997 @pindex sha224sum
3998 @pindex sha256sum
3999 @pindex sha384sum
4000 @pindex sha512sum
4001 @cindex SHA-2
4002 @cindex 224-bit checksum
4003 @cindex 256-bit checksum
4004 @cindex 384-bit checksum
4005 @cindex 512-bit checksum
4006 @cindex checksum, 224-bit
4007 @cindex checksum, 256-bit
4008 @cindex checksum, 384-bit
4009 @cindex checksum, 512-bit
4010 @cindex fingerprint, 224-bit
4011 @cindex fingerprint, 256-bit
4012 @cindex fingerprint, 384-bit
4013 @cindex fingerprint, 512-bit
4014 @cindex message-digest, 224-bit
4015 @cindex message-digest, 256-bit
4016 @cindex message-digest, 384-bit
4017 @cindex message-digest, 512-bit
4019 The commands @command{sha224sum}, @command{sha256sum},
4020 @command{sha384sum} and @command{sha512sum} compute checksums of
4021 various lengths (respectively 224, 256, 384 and 512 bits),
4022 collectively known as the SHA-2 hashes.  The usage and options of
4023 these commands are precisely the same as for @command{md5sum}
4024 and @command{sha1sum}.
4025 @xref{md5sum invocation}.
4028 @node Operating on sorted files
4029 @chapter Operating on sorted files
4031 @cindex operating on sorted files
4032 @cindex sorted files, operations on
4034 These commands work with (or produce) sorted files.
4036 @menu
4037 * sort invocation::             Sort text files.
4038 * shuf invocation::             Shuffle text files.
4039 * uniq invocation::             Uniquify files.
4040 * comm invocation::             Compare two sorted files line by line.
4041 * ptx invocation::              Produce a permuted index of file contents.
4042 * tsort invocation::            Topological sort.
4043 @end menu
4046 @node sort invocation
4047 @section @command{sort}: Sort text files
4049 @pindex sort
4050 @cindex sorting files
4052 @command{sort} sorts, merges, or compares all the lines from the given
4053 files, or standard input if none are given or for a @var{file} of
4054 @samp{-}.  By default, @command{sort} writes the results to standard
4055 output.  Synopsis:
4057 @example
4058 sort [@var{option}]@dots{} [@var{file}]@dots{}
4059 @end example
4061 @cindex sort stability
4062 @cindex sort's last-resort comparison
4063 Many options affect how @command{sort} compares lines; if the results
4064 are unexpected, try the @option{--debug} option to see what happened.
4065 A pair of lines is compared as follows:
4066 @command{sort} compares each pair of fields (see @option{--key}), in the
4067 order specified on the command line, according to the associated
4068 ordering options, until a difference is found or no fields are left.
4069 If no key fields are specified, @command{sort} uses a default key of
4070 the entire line.  Finally, as a last resort when all keys compare
4071 equal, @command{sort} compares entire lines as if no ordering options
4072 other than @option{--reverse} (@option{-r}) were specified.  The
4073 @option{--stable} (@option{-s}) option disables this @dfn{last-resort
4074 comparison} so that lines in which all fields compare equal are left
4075 in their original relative order.  The @option{--unique}
4076 (@option{-u}) option also disables the last-resort comparison.
4077 @vindex LC_ALL
4078 @vindex LC_COLLATE
4080 Unless otherwise specified, all comparisons use the character collating
4081 sequence specified by the @env{LC_COLLATE} locale.@footnote{If you
4082 use a non-POSIX locale (e.g., by setting @env{LC_ALL}
4083 to @samp{en_US}), then @command{sort} may produce output that is sorted
4084 differently than you're accustomed to.  In that case, set the @env{LC_ALL}
4085 environment variable to @samp{C}@.  Note that setting only @env{LC_COLLATE}
4086 has two problems.  First, it is ineffective if @env{LC_ALL} is also set.
4087 Second, it has undefined behavior if @env{LC_CTYPE} (or @env{LANG}, if
4088 @env{LC_CTYPE} is unset) is set to an incompatible value.  For example,
4089 you get undefined behavior if @env{LC_CTYPE} is @code{ja_JP.PCK} but
4090 @env{LC_COLLATE} is @code{en_US.UTF-8}.}
4091 A line's trailing newline is not part of the line for comparison
4092 purposes.  If the final byte of an input file is not a newline, GNU
4093 @command{sort} silently supplies one.  GNU @command{sort} (as
4094 specified for all GNU utilities) has no limit on input line length or
4095 restrictions on bytes allowed within lines.
4097 @command{sort} has three modes of operation: sort (the default), merge,
4098 and check for sortedness.  The following options change the operation
4099 mode:
4101 @table @samp
4103 @item -c
4104 @itemx --check
4105 @itemx --check=diagnose-first
4106 @opindex -c
4107 @opindex --check
4108 @cindex checking for sortedness
4109 Check whether the given file is already sorted: if it is not all
4110 sorted, print a diagnostic containing the first out-of-order line and
4111 exit with a status of 1.
4112 Otherwise, exit successfully.
4113 At most one input file can be given.
4115 @item -C
4116 @itemx --check=quiet
4117 @itemx --check=silent
4118 @opindex -c
4119 @opindex --check
4120 @cindex checking for sortedness
4121 Exit successfully if the given file is already sorted, and
4122 exit with status 1 otherwise.
4123 At most one input file can be given.
4124 This is like @option{-c}, except it does not print a diagnostic.
4126 @item -m
4127 @itemx --merge
4128 @opindex -m
4129 @opindex --merge
4130 @cindex merging sorted files
4131 Merge the given files by sorting them as a group.  Each input file must
4132 always be individually sorted.  It always works to sort instead of
4133 merge; merging is provided because it is faster, in the case where it
4134 works.
4136 @end table
4138 @cindex exit status of @command{sort}
4139 Exit status:
4141 @display
4142 0 if no error occurred
4143 1 if invoked with @option{-c} or @option{-C} and the input is not sorted
4144 2 if an error occurred
4145 @end display
4147 @vindex TMPDIR
4148 If the environment variable @env{TMPDIR} is set, @command{sort} uses its
4149 value as the directory for temporary files instead of @file{/tmp}.  The
4150 @option{--temporary-directory} (@option{-T}) option in turn overrides
4151 the environment variable.
4153 The following options affect the ordering of output lines.  They may be
4154 specified globally or as part of a specific key field.  If no key
4155 fields are specified, global options apply to comparison of entire
4156 lines; otherwise the global options are inherited by key fields that do
4157 not specify any special options of their own.  In pre-POSIX
4158 versions of @command{sort}, global options affect only later key fields,
4159 so portable shell scripts should specify global options first.
4161 @table @samp
4163 @item -b
4164 @itemx --ignore-leading-blanks
4165 @opindex -b
4166 @opindex --ignore-leading-blanks
4167 @cindex blanks, ignoring leading
4168 @vindex LC_CTYPE
4169 Ignore leading blanks when finding sort keys in each line.
4170 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4171 can change this.  Note blanks may be ignored by your locale's collating
4172 rules, but without this option they will be significant for character
4173 positions specified in keys with the @option{-k} option.
4175 @item -d
4176 @itemx --dictionary-order
4177 @opindex -d
4178 @opindex --dictionary-order
4179 @cindex dictionary order
4180 @cindex phone directory order
4181 @cindex telephone directory order
4182 @vindex LC_CTYPE
4183 Sort in @dfn{phone directory} order: ignore all characters except
4184 letters, digits and blanks when sorting.
4185 By default letters and digits are those of ASCII and a blank
4186 is a space or a tab, but the @env{LC_CTYPE} locale can change this.
4188 @item -f
4189 @itemx --ignore-case
4190 @opindex -f
4191 @opindex --ignore-case
4192 @cindex ignoring case
4193 @cindex case folding
4194 @vindex LC_CTYPE
4195 Fold lowercase characters into the equivalent uppercase characters when
4196 comparing so that, for example, @samp{b} and @samp{B} sort as equal.
4197 The @env{LC_CTYPE} locale determines character types.
4198 When used with @option{--unique} those lower case equivalent lines are
4199 thrown away.  (There is currently no way to throw away the upper case
4200 equivalent instead.  (Any @option{--reverse} given would only affect
4201 the final result, after the throwing away.))
4203 @item -g
4204 @itemx --general-numeric-sort
4205 @itemx --sort=general-numeric
4206 @opindex -g
4207 @opindex --general-numeric-sort
4208 @opindex --sort
4209 @cindex general numeric sort
4210 @vindex LC_NUMERIC
4211 Sort numerically, converting a prefix of each line to a long
4212 double-precision floating point number.  @xref{Floating point}.
4213 Do not report overflow, underflow, or conversion errors.
4214 Use the following collating sequence:
4216 @itemize @bullet
4217 @item
4218 Lines that do not start with numbers (all considered to be equal).
4219 @item
4220 NaNs (``Not a Number'' values, in IEEE floating point arithmetic)
4221 in a consistent but machine-dependent order.
4222 @item
4223 Minus infinity.
4224 @item
4225 Finite numbers in ascending numeric order (with @math{-0} and @math{+0} equal).
4226 @item
4227 Plus infinity.
4228 @end itemize
4230 Use this option only if there is no alternative; it is much slower than
4231 @option{--numeric-sort} (@option{-n}) and it can lose information when
4232 converting to floating point.
4234 @item -h
4235 @itemx --human-numeric-sort
4236 @itemx --sort=human-numeric
4237 @opindex -h
4238 @opindex --human-numeric-sort
4239 @opindex --sort
4240 @cindex human numeric sort
4241 @vindex LC_NUMERIC
4242 Sort numerically, first by numeric sign (negative, zero, or positive);
4243 then by SI suffix (either empty, or @samp{k} or @samp{K}, or
4244 one of @samp{MGTPEZY}, in that order; @pxref{Block size}); and finally
4245 by numeric value.  For example, @samp{1023M} sorts before @samp{1G}
4246 because @samp{M} (mega) precedes @samp{G} (giga) as an SI
4247 suffix.  This option sorts values that are consistently scaled to the
4248 nearest suffix, regardless of whether suffixes denote powers of 1000
4249 or 1024, and it therefore sorts the output of any single invocation of
4250 the @command{df}, @command{du}, or @command{ls} commands that are
4251 invoked with their @option{--human-readable} or @option{--si} options.
4252 The syntax for numbers is the same as for the @option{--numeric-sort}
4253 option; the SI suffix must immediately follow the number.
4254 Note also the @command{numfmt} command, which can be used to reformat
4255 numbers to human format @emph{after} the sort, thus often allowing
4256 sort to operate on more accurate numbers.
4258 @item -i
4259 @itemx --ignore-nonprinting
4260 @opindex -i
4261 @opindex --ignore-nonprinting
4262 @cindex nonprinting characters, ignoring
4263 @cindex unprintable characters, ignoring
4264 @vindex LC_CTYPE
4265 Ignore nonprinting characters.
4266 The @env{LC_CTYPE} locale determines character types.
4267 This option has no effect if the stronger @option{--dictionary-order}
4268 (@option{-d}) option is also given.
4270 @item -M
4271 @itemx --month-sort
4272 @itemx --sort=month
4273 @opindex -M
4274 @opindex --month-sort
4275 @opindex --sort
4276 @cindex months, sorting by
4277 @vindex LC_TIME
4278 An initial string, consisting of any amount of blanks, followed
4279 by a month name abbreviation, is folded to UPPER case and
4280 compared in the order @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}@.
4281 Invalid names compare low to valid names.  The @env{LC_TIME} locale
4282 category determines the month spellings.
4283 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4284 can change this.
4286 @item -n
4287 @itemx --numeric-sort
4288 @itemx --sort=numeric
4289 @opindex -n
4290 @opindex --numeric-sort
4291 @opindex --sort
4292 @cindex numeric sort
4293 @vindex LC_NUMERIC
4294 Sort numerically.  The number begins each line and consists
4295 of optional blanks, an optional @samp{-} sign, and zero or more
4296 digits possibly separated by thousands separators, optionally followed
4297 by a decimal-point character and zero or more digits.  An empty
4298 number is treated as @samp{0}.  The @env{LC_NUMERIC}
4299 locale specifies the decimal-point character and thousands separator.
4300 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4301 can change this.
4303 Comparison is exact; there is no rounding error.
4305 Neither a leading @samp{+} nor exponential notation is recognized.
4306 To compare such strings numerically, use the
4307 @option{--general-numeric-sort} (@option{-g}) option.
4309 @item -V
4310 @itemx --version-sort
4311 @opindex -V
4312 @opindex --version-sort
4313 @cindex version number sort
4314 Sort by version name and number.  It behaves like a standard sort,
4315 except that each sequence of decimal digits is treated numerically
4316 as an index/version number.  (@xref{Details about version sort}.)
4318 @item -r
4319 @itemx --reverse
4320 @opindex -r
4321 @opindex --reverse
4322 @cindex reverse sorting
4323 Reverse the result of comparison, so that lines with greater key values
4324 appear earlier in the output instead of later.
4326 @item -R
4327 @itemx --random-sort
4328 @itemx --sort=random
4329 @opindex -R
4330 @opindex --random-sort
4331 @opindex --sort
4332 @cindex random sort
4333 Sort by hashing the input keys and then sorting the hash values.
4334 Choose the hash function at random, ensuring that it is free of
4335 collisions so that differing keys have differing hash values.  This is
4336 like a random permutation of the inputs (@pxref{shuf invocation}),
4337 except that keys with the same value sort together.
4339 If multiple random sort fields are specified, the same random hash
4340 function is used for all fields.  To use different random hash
4341 functions for different fields, you can invoke @command{sort} more
4342 than once.
4344 The choice of hash function is affected by the
4345 @option{--random-source} option.
4347 @end table
4349 Other options are:
4351 @table @samp
4353 @item --compress-program=@var{prog}
4354 Compress any temporary files with the program @var{prog}.
4356 With no arguments, @var{prog} must compress standard input to standard
4357 output, and when given the @option{-d} option it must decompress
4358 standard input to standard output.
4360 Terminate with an error if @var{prog} exits with nonzero status.
4362 White space and the backslash character should not appear in
4363 @var{prog}; they are reserved for future use.
4365 @filesZeroFromOption{sort,,sorted output}
4367 @item -k @var{pos1}[,@var{pos2}]
4368 @itemx --key=@var{pos1}[,@var{pos2}]
4369 @opindex -k
4370 @opindex --key
4371 @cindex sort field
4372 Specify a sort field that consists of the part of the line between
4373 @var{pos1} and @var{pos2} (or the end of the line, if @var{pos2} is
4374 omitted), @emph{inclusive}.
4376 In its simplest form @var{pos} specifies a field number (starting with 1),
4377 with fields being separated by runs of blank characters, and by default
4378 those blanks being included in the comparison at the start of each field.
4379 To adjust the handling of blank characters see the @option{-b} and
4380 @option{-t} options.
4382 More generally,
4383 each @var{pos} has the form @samp{@var{f}[.@var{c}][@var{opts}]},
4384 where @var{f} is the number of the field to use, and @var{c} is the number
4385 of the first character from the beginning of the field.  Fields and character
4386 positions are numbered starting with 1; a character position of zero in
4387 @var{pos2} indicates the field's last character.  If @samp{.@var{c}} is
4388 omitted from @var{pos1}, it defaults to 1 (the beginning of the field);
4389 if omitted from @var{pos2}, it defaults to 0 (the end of the field).
4390 @var{opts} are ordering options, allowing individual keys to be sorted
4391 according to different rules; see below for details.  Keys can span
4392 multiple fields.
4394 Example:  To sort on the second field, use @option{--key=2,2}
4395 (@option{-k 2,2}).  See below for more notes on keys and more examples.
4396 See also the @option{--debug} option to help determine the part
4397 of the line being used in the sort.
4399 @item --debug
4400 Highlight the portion of each line used for sorting.
4401 Also issue warnings about questionable usage to stderr.
4403 @item --batch-size=@var{nmerge}
4404 @opindex --batch-size
4405 @cindex number of inputs to merge, nmerge
4406 Merge at most @var{nmerge} inputs at once.
4408 When @command{sort} has to merge more than @var{nmerge} inputs,
4409 it merges them in groups of @var{nmerge}, saving the result in
4410 a temporary file, which is then used as an input in a subsequent merge.
4412 A large value of @var{nmerge} may improve merge performance and decrease
4413 temporary storage utilization at the expense of increased memory usage
4414 and I/O@.  Conversely a small value of @var{nmerge} may reduce memory
4415 requirements and I/O at the expense of temporary storage consumption and
4416 merge performance.
4418 The value of @var{nmerge} must be at least 2.  The default value is
4419 currently 16, but this is implementation-dependent and may change in
4420 the future.
4422 The value of @var{nmerge} may be bounded by a resource limit for open
4423 file descriptors.  The commands @samp{ulimit -n} or @samp{getconf
4424 OPEN_MAX} may display limits for your systems; these limits may be
4425 modified further if your program already has some files open, or if
4426 the operating system has other limits on the number of open files.  If
4427 the value of @var{nmerge} exceeds the resource limit, @command{sort}
4428 silently uses a smaller value.
4430 @item -o @var{output-file}
4431 @itemx --output=@var{output-file}
4432 @opindex -o
4433 @opindex --output
4434 @cindex overwriting of input, allowed
4435 Write output to @var{output-file} instead of standard output.
4436 Normally, @command{sort} reads all input before opening
4437 @var{output-file}, so you can sort a file in place by using
4438 commands like @code{sort -o F F} and @code{cat F | sort -o F}@.
4439 However, it is often safer to output to an otherwise-unused file, as
4440 data may be lost if the system crashes or @command{sort} encounters
4441 an I/O or other serious error while a file is being sorted in place.
4442 Also, @command{sort} with @option{--merge} (@option{-m}) can open
4443 the output file before reading all input, so a command like @code{cat
4444 F | sort -m -o F - G} is not safe as @command{sort} might start
4445 writing @file{F} before @command{cat} is done reading it.
4447 @vindex POSIXLY_CORRECT
4448 On newer systems, @option{-o} cannot appear after an input file if
4449 @env{POSIXLY_CORRECT} is set, e.g., @samp{sort F -o F}@.  Portable
4450 scripts should specify @option{-o @var{output-file}} before any input
4451 files.
4453 @item --random-source=@var{file}
4454 @opindex --random-source
4455 @cindex random source for sorting
4456 Use @var{file} as a source of random data used to determine which
4457 random hash function to use with the @option{-R} option.  @xref{Random
4458 sources}.
4460 @item -s
4461 @itemx --stable
4462 @opindex -s
4463 @opindex --stable
4464 @cindex sort stability
4465 @cindex sort's last-resort comparison
4467 Make @command{sort} stable by disabling its last-resort comparison.
4468 This option has no effect if no fields or global ordering options
4469 other than @option{--reverse} (@option{-r}) are specified.
4471 @item -S @var{size}
4472 @itemx --buffer-size=@var{size}
4473 @opindex -S
4474 @opindex --buffer-size
4475 @cindex size for main memory sorting
4476 Use a main-memory sort buffer of the given @var{size}.  By default,
4477 @var{size} is in units of 1024 bytes.  Appending @samp{%} causes
4478 @var{size} to be interpreted as a percentage of physical memory.
4479 Appending @samp{K} multiplies @var{size} by 1024 (the default),
4480 @samp{M} by 1,048,576, @samp{G} by 1,073,741,824, and so on for
4481 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}@.  Appending
4482 @samp{b} causes @var{size} to be interpreted as a byte count, with no
4483 multiplication.
4485 This option can improve the performance of @command{sort} by causing it
4486 to start with a larger or smaller sort buffer than the default.
4487 However, this option affects only the initial buffer size.  The buffer
4488 grows beyond @var{size} if @command{sort} encounters input lines larger
4489 than @var{size}.
4491 @item -t @var{separator}
4492 @itemx --field-separator=@var{separator}
4493 @opindex -t
4494 @opindex --field-separator
4495 @cindex field separator character
4496 Use character @var{separator} as the field separator when finding the
4497 sort keys in each line.  By default, fields are separated by the empty
4498 string between a non-blank character and a blank character.
4499 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
4500 can change this.
4502 That is, given the input line @w{@samp{ foo bar}}, @command{sort} breaks it
4503 into fields @w{@samp{ foo}} and @w{@samp{ bar}}.  The field separator is
4504 not considered to be part of either the field preceding or the field
4505 following, so with @samp{sort @w{-t " "}} the same input line has
4506 three fields: an empty field, @samp{foo}, and @samp{bar}.
4507 However, fields that extend to the end of the line,
4508 as @option{-k 2}, or fields consisting of a range, as @option{-k 2,3},
4509 retain the field separators present between the endpoints of the range.
4511 To specify ASCII NUL as the field separator,
4512 use the two-character string @samp{\0}, e.g., @samp{sort -t '\0'}.
4514 @item -T @var{tempdir}
4515 @itemx --temporary-directory=@var{tempdir}
4516 @opindex -T
4517 @opindex --temporary-directory
4518 @cindex temporary directory
4519 @vindex TMPDIR
4520 Use directory @var{tempdir} to store temporary files, overriding the
4521 @env{TMPDIR} environment variable.  If this option is given more than
4522 once, temporary files are stored in all the directories given.  If you
4523 have a large sort or merge that is I/O-bound, you can often improve
4524 performance by using this option to specify directories on different
4525 disks and controllers.
4527 @item --parallel=@var{n}
4528 @opindex --parallel
4529 @cindex multithreaded sort
4530 Set the number of sorts run in parallel to @var{n}. By default,
4531 @var{n} is set to the number of available processors, but limited
4532 to 8, as there are diminishing performance gains after that.
4533 Note also that using @var{n} threads increases the memory usage by
4534 a factor of log @var{n}.  Also see @ref{nproc invocation}.
4536 @item -u
4537 @itemx --unique
4538 @opindex -u
4539 @opindex --unique
4540 @cindex uniquifying output
4542 Normally, output only the first of a sequence of lines that compare
4543 equal.  For the @option{--check} (@option{-c} or @option{-C}) option,
4544 check that no pair of consecutive lines compares equal.
4546 This option also disables the default last-resort comparison.
4548 The commands @code{sort -u} and @code{sort | uniq} are equivalent, but
4549 this equivalence does not extend to arbitrary @command{sort} options.
4550 For example, @code{sort -n -u} inspects only the value of the initial
4551 numeric string when checking for uniqueness, whereas @code{sort -n |
4552 uniq} inspects the entire line.  @xref{uniq invocation}.
4554 @optZeroTerminated
4555 @macro newlineFieldSeparator
4556 Note with @option{-z} the newline character is treated as a field separator.
4557 @end macro
4559 @end table
4561 Historical (BSD and System V) implementations of @command{sort} have
4562 differed in their interpretation of some options, particularly
4563 @option{-b}, @option{-f}, and @option{-n}.
4564 GNU sort follows the POSIX
4565 behavior, which is usually (but not always!) like the System V behavior.
4566 According to POSIX, @option{-n} no longer implies @option{-b}.  For
4567 consistency, @option{-M} has been changed in the same way.  This may
4568 affect the meaning of character positions in field specifications in
4569 obscure cases.  The only fix is to add an explicit @option{-b}.
4571 A position in a sort field specified with @option{-k} may have any
4572 of the option letters @samp{MbdfghinRrV} appended to it, in which case no
4573 global ordering options are inherited by that particular field.  The
4574 @option{-b} option may be independently attached to either or both of
4575 the start and end positions of a field specification, and if it is
4576 inherited from the global options it will be attached to both.
4577 If input lines can contain leading or adjacent blanks and @option{-t}
4578 is not used, then @option{-k} is typically combined with @option{-b} or
4579 an option that implicitly ignores leading blanks (@samp{Mghn}) as otherwise
4580 the varying numbers of leading blanks in fields can cause confusing results.
4582 If the start position in a sort field specifier falls after the end of
4583 the line or after the end field, the field is empty.  If the @option{-b}
4584 option was specified, the @samp{.@var{c}} part of a field specification
4585 is counted from the first nonblank character of the field.
4587 @vindex _POSIX2_VERSION
4588 @vindex POSIXLY_CORRECT
4589 On systems not conforming to POSIX 1003.1-2001,
4590 @command{sort} supports a traditional origin-zero
4591 syntax @samp{+@var{pos1} [-@var{pos2}]} for specifying sort keys.
4592 The traditional command @samp{sort +@var{a}.@var{x} -@var{b}.@var{y}}
4593 is equivalent to @samp{sort -k @var{a+1}.@var{x+1},@var{b}} if @var{y}
4594 is @samp{0} or absent, otherwise it is equivalent to @samp{sort -k
4595 @var{a+1}.@var{x+1},@var{b+1}.@var{y}}.
4597 This traditional behavior can be controlled with the
4598 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
4599 conformance}); it can also be enabled when @env{POSIXLY_CORRECT} is
4600 not set by using the traditional syntax with @samp{-@var{pos2}} present.
4602 Scripts intended for use on standard hosts should avoid traditional
4603 syntax and should use @option{-k} instead.  For example, avoid
4604 @samp{sort +2}, since it might be interpreted as either @samp{sort
4605 ./+2} or @samp{sort -k 3}.  If your script must also run on hosts that
4606 support only the traditional syntax, it can use a test like @samp{if sort
4607 -k 1 </dev/null >/dev/null 2>&1; then @dots{}} to decide which syntax
4608 to use.
4610 Here are some examples to illustrate various combinations of options.
4612 @itemize @bullet
4614 @item
4615 Sort in descending (reverse) numeric order.
4617 @example
4618 sort -n -r
4619 @end example
4621 @item
4622 Run no more than 4 sorts concurrently, using a buffer size of 10M.
4624 @example
4625 sort --parallel=4 -S 10M
4626 @end example
4628 @item
4629 Sort alphabetically, omitting the first and second fields
4630 and the blanks at the start of the third field.
4631 This uses a single key composed of the characters beginning
4632 at the start of the first nonblank character in field three
4633 and extending to the end of each line.
4635 @example
4636 sort -k 3b
4637 @end example
4639 @item
4640 Sort numerically on the second field and resolve ties by sorting
4641 alphabetically on the third and fourth characters of field five.
4642 Use @samp{:} as the field delimiter.
4644 @example
4645 sort -t : -k 2,2n -k 5.3,5.4
4646 @end example
4648 Note that if you had written @option{-k 2n} instead of @option{-k 2,2n}
4649 @command{sort} would have used all characters beginning in the second field
4650 and extending to the end of the line as the primary @emph{numeric}
4651 key.  For the large majority of applications, treating keys spanning
4652 more than one field as numeric will not do what you expect.
4654 Also note that the @samp{n} modifier was applied to the field-end
4655 specifier for the first key.  It would have been equivalent to
4656 specify @option{-k 2n,2} or @option{-k 2n,2n}.  All modifiers except
4657 @samp{b} apply to the associated @emph{field}, regardless of whether
4658 the modifier character is attached to the field-start and/or the
4659 field-end part of the key specifier.
4661 @item
4662 Sort the password file on the fifth field and ignore any
4663 leading blanks.  Sort lines with equal values in field five
4664 on the numeric user ID in field three.  Fields are separated
4665 by @samp{:}.
4667 @example
4668 sort -t : -k 5b,5 -k 3,3n /etc/passwd
4669 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
4670 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
4671 @end example
4673 These three commands have equivalent effect.  The first specifies that
4674 the first key's start position ignores leading blanks and the second
4675 key is sorted numerically.  The other two commands rely on global
4676 options being inherited by sort keys that lack modifiers.  The inheritance
4677 works in this case because @option{-k 5b,5b} and @option{-k 5b,5} are
4678 equivalent, as the location of a field-end lacking a @samp{.@var{c}}
4679 character position is not affected by whether initial blanks are
4680 skipped.
4682 @item
4683 Sort a set of log files, primarily by IPv4 address and secondarily by
4684 timestamp.  If two lines' primary and secondary keys are identical,
4685 output the lines in the same order that they were input.  The log
4686 files contain lines that look like this:
4688 @example
4689 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
4690 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
4691 @end example
4693 Fields are separated by exactly one space.  Sort IPv4 addresses
4694 lexicographically, e.g., 212.61.52.2 sorts before 212.129.233.201
4695 because 61 is less than 129.
4697 @example
4698 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
4699 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
4700 @end example
4702 This example cannot be done with a single @command{sort} invocation,
4703 since IPv4 address components are separated by @samp{.} while dates
4704 come just after a space.  So it is broken down into two invocations of
4705 @command{sort}: the first sorts by timestamp and the second by IPv4
4706 address.  The timestamp is sorted by year, then month, then day, and
4707 finally by hour-minute-second field, using @option{-k} to isolate each
4708 field.  Except for hour-minute-second there's no need to specify the
4709 end of each key field, since the @samp{n} and @samp{M} modifiers sort
4710 based on leading prefixes that cannot cross field boundaries.  The
4711 IPv4 addresses are sorted lexicographically.  The second sort uses
4712 @samp{-s} so that ties in the primary key are broken by the secondary
4713 key; the first sort uses @samp{-s} so that the combination of the two
4714 sorts is stable.
4716 @item
4717 Generate a tags file in case-insensitive sorted order.
4719 @smallexample
4720 find src -type f -print0 | sort -z -f | xargs -0 etags --append
4721 @end smallexample
4723 The use of @option{-print0}, @option{-z}, and @option{-0} in this case means
4724 that file names that contain blanks or other special characters are
4725 not broken up
4726 by the sort operation.
4728 @c This example is a bit contrived and needs more explanation.
4729 @c @item
4730 @c Sort records separated by an arbitrary string by using a pipe to convert
4731 @c each record delimiter string to @samp{\0}, then using sort's -z option,
4732 @c and converting each @samp{\0} back to the original record delimiter.
4734 @c @example
4735 @c printf 'c\n\nb\n\na\n' |
4736 @c perl -0pe 's/\n\n/\n\0/g' |
4737 @c sort -z |
4738 @c perl -0pe 's/\0/\n/g'
4739 @c @end example
4741 @item
4742 Use the common DSU, Decorate Sort Undecorate idiom to
4743 sort lines according to their length.
4745 @example
4746 awk '@{print length, $0@}' /etc/passwd | sort -n | cut -f2- -d' '
4747 @end example
4749 In general this technique can be used to sort data that the @command{sort}
4750 command does not support, or is inefficient at, sorting directly.
4752 @item
4753 Shuffle a list of directories, but preserve the order of files within
4754 each directory.  For instance, one could use this to generate a music
4755 playlist in which albums are shuffled but the songs of each album are
4756 played in order.
4758 @example
4759 ls */* | sort -t / -k 1,1R -k 2,2
4760 @end example
4762 @end itemize
4765 @node shuf invocation
4766 @section @command{shuf}: Shuffling text
4768 @pindex shuf
4769 @cindex shuffling files
4771 @command{shuf} shuffles its input by outputting a random permutation
4772 of its input lines.  Each output permutation is equally likely.
4773 Synopses:
4775 @example
4776 shuf [@var{option}]@dots{} [@var{file}]
4777 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
4778 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
4779 @end example
4781 @command{shuf} has three modes of operation that affect where it
4782 obtains its input lines.  By default, it reads lines from standard
4783 input.  The following options change the operation mode:
4785 @table @samp
4787 @item -e
4788 @itemx --echo
4789 @opindex -c
4790 @opindex --echo
4791 @cindex command-line operands to shuffle
4792 Treat each command-line operand as an input line.
4794 @item -i @var{lo}-@var{hi}
4795 @itemx --input-range=@var{lo}-@var{hi}
4796 @opindex -i
4797 @opindex --input-range
4798 @cindex input range to shuffle
4799 Act as if input came from a file containing the range of unsigned
4800 decimal integers @var{lo}@dots{}@var{hi}, one per line.
4802 @end table
4804 @command{shuf}'s other options can affect its behavior in all
4805 operation modes:
4807 @table @samp
4809 @item -n @var{count}
4810 @itemx --head-count=@var{count}
4811 @opindex -n
4812 @opindex --head-count
4813 @cindex head of output
4814 Output at most @var{count} lines.  By default, all input lines are
4815 output.
4817 @item -o @var{output-file}
4818 @itemx --output=@var{output-file}
4819 @opindex -o
4820 @opindex --output
4821 @cindex overwriting of input, allowed
4822 Write output to @var{output-file} instead of standard output.
4823 @command{shuf} reads all input before opening
4824 @var{output-file}, so you can safely shuffle a file in place by using
4825 commands like @code{shuf -o F <F} and @code{cat F | shuf -o F}.
4827 @item --random-source=@var{file}
4828 @opindex --random-source
4829 @cindex random source for shuffling
4830 Use @var{file} as a source of random data used to determine which
4831 permutation to generate.  @xref{Random sources}.
4833 @item -r
4834 @itemx --repeat
4835 @opindex -r
4836 @opindex --repeat
4837 @cindex repeat output values
4838 Repeat output values, that is, select with replacement.  With this
4839 option the output is not a permutation of the input; instead, each
4840 output line is randomly chosen from all the inputs.  This option is
4841 typically combined with @option{--head-count}; if
4842 @option{--head-count} is not given, @command{shuf} repeats
4843 indefinitely.
4845 @optZeroTerminated
4847 @end table
4849 For example:
4851 @example
4852 shuf <<EOF
4853 A man,
4854 a plan,
4855 a canal:
4856 Panama!
4858 @end example
4860 @noindent
4861 might produce the output
4863 @example
4864 Panama!
4865 A man,
4866 a canal:
4867 a plan,
4868 @end example
4870 @noindent
4871 Similarly, the command:
4873 @example
4874 shuf -e clubs hearts diamonds spades
4875 @end example
4877 @noindent
4878 might output:
4880 @example
4881 clubs
4882 diamonds
4883 spades
4884 hearts
4885 @end example
4887 @noindent
4888 and the command @samp{shuf -i 1-4} might output:
4890 @example
4895 @end example
4897 @noindent
4898 The above examples all have four input lines, so @command{shuf} might
4899 produce any of the twenty-four possible permutations of the input.  In
4900 general, if there are @var{n} input lines, there are @var{n}! (i.e.,
4901 @var{n} factorial, or @var{n} * (@var{n} - 1) * @dots{} * 1) possible
4902 output permutations.
4904 @noindent
4905 To output 50 random numbers each in the range 0 through 9, use:
4907 @example
4908 shuf -r -n 50 -i 0-9
4909 @end example
4911 @noindent
4912 To simulate 100 coin flips, use:
4914 @example
4915 shuf -r -n 100 -e Head Tail
4916 @end example
4918 @exitstatus
4921 @node uniq invocation
4922 @section @command{uniq}: Uniquify files
4924 @pindex uniq
4925 @cindex uniquify files
4927 @command{uniq} writes the unique lines in the given @file{input}, or
4928 standard input if nothing is given or for an @var{input} name of
4929 @samp{-}.  Synopsis:
4931 @example
4932 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
4933 @end example
4935 By default, @command{uniq} prints its input lines, except that
4936 it discards all but the first of adjacent repeated lines, so that
4937 no output lines are repeated.  Optionally, it can instead discard
4938 lines that are not repeated, or all repeated lines.
4940 The input need not be sorted, but repeated input lines are detected
4941 only if they are adjacent.  If you want to discard non-adjacent
4942 duplicate lines, perhaps you want to use @code{sort -u}.
4943 @xref{sort invocation}.
4945 @vindex LC_COLLATE
4946 Comparisons honor the rules specified by the @env{LC_COLLATE}
4947 locale category.
4949 If no @var{output} file is specified, @command{uniq} writes to standard
4950 output.
4952 The program accepts the following options.  Also see @ref{Common options}.
4954 @table @samp
4956 @item -f @var{n}
4957 @itemx --skip-fields=@var{n}
4958 @opindex -f
4959 @opindex --skip-fields
4960 Skip @var{n} fields on each line before checking for uniqueness.  Use
4961 a null string for comparison if a line has fewer than @var{n} fields.  Fields
4962 are sequences of non-space non-tab characters that are separated from
4963 each other by at least one space or tab.
4965 For compatibility @command{uniq} supports a traditional option syntax
4966 @option{-@var{n}}.  New scripts should use @option{-f @var{n}} instead.
4968 @item -s @var{n}
4969 @itemx --skip-chars=@var{n}
4970 @opindex -s
4971 @opindex --skip-chars
4972 Skip @var{n} characters before checking for uniqueness.  Use a null string
4973 for comparison if a line has fewer than @var{n} characters.  If you use both
4974 the field and character skipping options, fields are skipped over first.
4976 @vindex _POSIX2_VERSION
4977 On systems not conforming to POSIX 1003.1-2001,
4978 @command{uniq} supports a traditional option syntax
4979 @option{+@var{n}}.
4980 Although this traditional behavior can be controlled with the
4981 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
4982 conformance}), portable scripts should avoid commands whose
4983 behavior depends on this variable.
4984 For example, use @samp{uniq ./+10} or @samp{uniq -s 10} rather than
4985 the ambiguous @samp{uniq +10}.
4987 @item -c
4988 @itemx --count
4989 @opindex -c
4990 @opindex --count
4991 Print the number of times each line occurred along with the line.
4993 @item -i
4994 @itemx --ignore-case
4995 @opindex -i
4996 @opindex --ignore-case
4997 Ignore differences in case when comparing lines.
4999 @item -d
5000 @itemx --repeated
5001 @opindex -d
5002 @opindex --repeated
5003 @cindex repeated lines, outputting
5004 Discard lines that are not repeated.  When used by itself, this option
5005 causes @command{uniq} to print the first copy of each repeated line,
5006 and nothing else.
5008 @item -D
5009 @itemx --all-repeated[=@var{delimit-method}]
5010 @opindex -D
5011 @opindex --all-repeated
5012 @cindex all repeated lines, outputting
5013 Do not discard the second and subsequent repeated input lines,
5014 but discard lines that are not repeated.
5015 This option is useful mainly in conjunction with other options e.g.,
5016 to ignore case or to compare only selected fields.
5017 The optional @var{delimit-method}, supported with the long form option,
5018 specifies how to delimit groups of repeated lines, and must be one of the
5019 following:
5021 @table @samp
5023 @item none
5024 Do not delimit groups of repeated lines.
5025 This is equivalent to @option{--all-repeated} (@option{-D}).
5027 @item prepend
5028 Output a newline before each group of repeated lines.
5029 @macro nulOutputNote
5030 With @option{--zero-terminated} (@option{-z}), use a zero
5031 byte (ASCII NUL) instead of a newline as the delimiter.
5032 @end macro
5033 @nulOutputNote
5035 @item separate
5036 Separate groups of repeated lines with a single newline.
5037 This is the same as using @samp{prepend}, except that
5038 no delimiter is inserted before the first group, and hence
5039 may be better suited for output direct to users.
5040 @nulOutputNote
5041 @end table
5043 @macro ambiguousGroupNote
5044 Note that when groups are delimited and the input stream contains
5045 blank lines, then the output is ambiguous.
5046 To avoid that, filter the input through @samp{tr -s '\\n'} to
5047 remove blank lines.
5048 @end macro
5049 @ambiguousGroupNote
5051 This is a GNU extension.
5052 @c FIXME: give an example showing *how* it's useful
5054 @item --group[=@var{delimit-method}]
5055 @opindex --group
5056 @cindex all lines, grouping
5057 Output all lines, and delimit each unique group.
5058 @nulOutputNote
5059 The optional @var{delimit-method} specifies how to delimit
5060 groups, and must be one of the following:
5062 @table @samp
5064 @item separate
5065 Separate unique groups with a single delimiter.
5066 This is the default delimiting method if none is specified,
5067 and better suited for output direct to users.
5069 @item prepend
5070 Output a delimiter before each group of unique items.
5072 @item append
5073 Output a delimiter after each group of unique items.
5075 @item both
5076 Output a delimiter around each group of unique items.
5077 @end table
5079 @ambiguousGroupNote
5081 This is a GNU extension.
5083 @item -u
5084 @itemx --unique
5085 @opindex -u
5086 @opindex --unique
5087 @cindex unique lines, outputting
5088 Discard the last line that would be output for a repeated input group.
5089 When used by itself, this option causes @command{uniq} to print unique
5090 lines, and nothing else.
5092 @item -w @var{n}
5093 @itemx --check-chars=@var{n}
5094 @opindex -w
5095 @opindex --check-chars
5096 Compare at most @var{n} characters on each line (after skipping any specified
5097 fields and characters).  By default the entire rest of the lines are
5098 compared.
5100 @optZeroTerminated
5101 @newlineFieldSeparator
5103 @end table
5105 @exitstatus
5108 @node comm invocation
5109 @section @command{comm}: Compare two sorted files line by line
5111 @pindex comm
5112 @cindex line-by-line comparison
5113 @cindex comparing sorted files
5115 @command{comm} writes to standard output lines that are common, and lines
5116 that are unique, to two input files; a file name of @samp{-} means
5117 standard input.  Synopsis:
5119 @example
5120 comm [@var{option}]@dots{} @var{file1} @var{file2}
5121 @end example
5123 @vindex LC_COLLATE
5124 Before @command{comm} can be used, the input files must be sorted using the
5125 collating sequence specified by the @env{LC_COLLATE} locale.
5126 If an input file ends in a non-newline
5127 character, a newline is silently appended.  The @command{sort} command with
5128 no options always outputs a file that is suitable input to @command{comm}.
5130 @cindex differing lines
5131 @cindex common lines
5132 With no options, @command{comm} produces three-column output.  Column one
5133 contains lines unique to @var{file1}, column two contains lines unique
5134 to @var{file2}, and column three contains lines common to both files.
5135 Columns are separated by a single TAB character.
5136 @c FIXME: when there's an option to supply an alternative separator
5137 @c string, append "by default" to the above sentence.
5139 @opindex -1
5140 @opindex -2
5141 @opindex -3
5142 The options @option{-1}, @option{-2}, and @option{-3} suppress printing of
5143 the corresponding columns (and separators).  Also see @ref{Common options}.
5145 Unlike some other comparison utilities, @command{comm} has an exit
5146 status that does not depend on the result of the comparison.
5147 Upon normal completion @command{comm} produces an exit code of zero.
5148 If there is an error it exits with nonzero status.
5150 @macro checkOrderOption{cmd}
5151 If the @option{--check-order} option is given, unsorted inputs will
5152 cause a fatal error message.  If the option @option{--nocheck-order}
5153 is given, unsorted inputs will never cause an error message.  If neither
5154 of these options is given, wrongly sorted inputs are diagnosed
5155 only if an input file is found to contain unpairable
5156 @ifset JOIN_COMMAND
5157 lines, and when both input files are non empty.
5158 @end ifset
5159 @ifclear JOIN_COMMAND
5160 lines.
5161 @end ifclear
5162 If an input file is diagnosed as being unsorted, the @command{\cmd\}
5163 command will exit with a nonzero status (and the output should not be used).
5165 Forcing @command{\cmd\} to process wrongly sorted input files
5166 containing unpairable lines by specifying @option{--nocheck-order} is
5167 not guaranteed to produce any particular output.  The output will
5168 probably not correspond with whatever you hoped it would be.
5169 @end macro
5170 @checkOrderOption{comm}
5172 @table @samp
5174 @item --check-order
5175 Fail with an error message if either input file is wrongly ordered.
5177 @item --nocheck-order
5178 Do not check that both input files are in sorted order.
5180 Other options are:
5182 @item --output-delimiter=@var{str}
5183 Print @var{str} between adjacent output columns,
5184 rather than the default of a single TAB character.
5186 The delimiter @var{str} may not be empty.
5188 @item --total
5189 Output a summary at the end.
5191 Similar to the regular output,
5192 column one contains the total number of lines unique to @var{file1},
5193 column two contains the total number of lines unique to @var{file2}, and
5194 column three contains the total number of lines common to both files,
5195 followed by the word @samp{total} in the additional column four.
5197 In the following example, @command{comm} omits the regular output
5198 (@option{-123}), thus just printing the summary:
5200 @example
5201 $ printf '%s\n' a b c d e     > file1
5202 $ printf '%s\n'   b c d e f g > file2
5203 $ comm --total -123 file1 file2
5204 1       2       4       total
5205 @end example
5207 This option is a GNU extension.  Portable scripts should use @command{wc} to
5208 get the totals, e.g. for the above example files:
5210 @example
5211 $ comm -23 file1 file2 | wc -l    # number of lines only in file1
5213 $ comm -13 file1 file2 | wc -l    # number of lines only in file2
5215 $ comm -12 file1 file2 | wc -l    # number of lines common to both files
5217 @end example
5219 @optZeroTerminated
5221 @end table
5223 @node ptx invocation
5224 @section @command{ptx}: Produce permuted indexes
5226 @pindex ptx
5228 @command{ptx} reads a text file and essentially produces a permuted index, with
5229 each keyword in its context.  The calling sketch is either one of:
5231 @example
5232 ptx [@var{option} @dots{}] [@var{file} @dots{}]
5233 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
5234 @end example
5236 The @option{-G} (or its equivalent: @option{--traditional}) option disables
5237 all GNU extensions and reverts to traditional mode, thus introducing some
5238 limitations and changing several of the program's default option values.
5239 When @option{-G} is not specified, GNU extensions are always enabled.
5240 GNU extensions to @command{ptx} are documented wherever appropriate in this
5241 document.  @xref{Compatibility in ptx}, for the full list.
5243 Individual options are explained in the following sections.
5245 When GNU extensions are enabled, there may be zero, one or several
5246 @var{file}s after the options.  If there is no @var{file}, the program
5247 reads the standard input.  If there is one or several @var{file}s, they
5248 give the name of input files which are all read in turn, as if all the
5249 input files were concatenated.  However, there is a full contextual
5250 break between each file and, when automatic referencing is requested,
5251 file names and line numbers refer to individual text input files.  In
5252 all cases, the program outputs the permuted index to the standard
5253 output.
5255 When GNU extensions are @emph{not} enabled, that is, when the program
5256 operates in traditional mode, there may be zero, one or two parameters
5257 besides the options.  If there are no parameters, the program reads the
5258 standard input and outputs the permuted index to the standard output.
5259 If there is only one parameter, it names the text @var{input} to be read
5260 instead of the standard input.  If two parameters are given, they give
5261 respectively the name of the @var{input} file to read and the name of
5262 the @var{output} file to produce.  @emph{Be very careful} to note that,
5263 in this case, the contents of file given by the second parameter is
5264 destroyed.  This behavior is dictated by System V @command{ptx}
5265 compatibility; GNU Standards normally discourage output parameters not
5266 introduced by an option.
5268 Note that for @emph{any} file named as the value of an option or as an
5269 input text file, a single dash @samp{-} may be used, in which case
5270 standard input is assumed.  However, it would not make sense to use this
5271 convention more than once per program invocation.
5273 @menu
5274 * General options in ptx::      Options which affect general program behavior.
5275 * Charset selection in ptx::    Underlying character set considerations.
5276 * Input processing in ptx::     Input fields, contexts, and keyword selection.
5277 * Output formatting in ptx::    Types of output format, and sizing the fields.
5278 * Compatibility in ptx::
5279 @end menu
5282 @node General options in ptx
5283 @subsection General options
5285 @table @samp
5287 @item -G
5288 @itemx --traditional
5289 As already explained, this option disables all GNU extensions to
5290 @command{ptx} and switches to traditional mode.
5292 @item --help
5293 Print a short help on standard output, then exit without further
5294 processing.
5296 @item --version
5297 Print the program version on standard output, then exit without further
5298 processing.
5300 @end table
5302 @exitstatus
5305 @node Charset selection in ptx
5306 @subsection Charset selection
5308 @c FIXME:  People don't necessarily know what an IBM-PC was these days.
5309 As it is set up now, the program assumes that the input file is coded
5310 using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
5311 @emph{unless} it is compiled for MS-DOS, in which case it uses the
5312 character set of the IBM-PC@.  (GNU @command{ptx} is not known to work on
5313 smaller MS-DOS machines anymore.)  Compared to 7-bit ASCII, the set
5314 of characters which are letters is different; this alters the behavior
5315 of regular expression matching.  Thus, the default regular expression
5316 for a keyword allows foreign or diacriticized letters.  Keyword sorting,
5317 however, is still crude; it obeys the underlying character set ordering
5318 quite blindly.
5320 @table @samp
5322 @item -f
5323 @itemx --ignore-case
5324 @opindex -f
5325 @opindex --ignore-case
5326 Fold lower case letters to upper case for sorting.
5328 @end table
5331 @node Input processing in ptx
5332 @subsection Word selection and input processing
5334 @table @samp
5336 @item -b @var{file}
5337 @itemx --break-file=@var{file}
5338 @opindex -b
5339 @opindex --break-file
5341 This option provides an alternative (to @option{-W}) method of describing
5342 which characters make up words.  It introduces the name of a
5343 file which contains a list of characters which can@emph{not} be part of
5344 one word; this file is called the @dfn{Break file}.  Any character which
5345 is not part of the Break file is a word constituent.  If both options
5346 @option{-b} and @option{-W} are specified, then @option{-W} has precedence and
5347 @option{-b} is ignored.
5349 When GNU extensions are enabled, the only way to avoid newline as a
5350 break character is to write all the break characters in the file with no
5351 newline at all, not even at the end of the file.  When GNU extensions
5352 are disabled, spaces, tabs and newlines are always considered as break
5353 characters even if not included in the Break file.
5355 @item -i @var{file}
5356 @itemx --ignore-file=@var{file}
5357 @opindex -i
5358 @opindex --ignore-file
5360 The file associated with this option contains a list of words which will
5361 never be taken as keywords in concordance output.  It is called the
5362 @dfn{Ignore file}.  The file contains exactly one word in each line; the
5363 end of line separation of words is not subject to the value of the
5364 @option{-S} option.
5366 @item -o @var{file}
5367 @itemx --only-file=@var{file}
5368 @opindex -o
5369 @opindex --only-file
5371 The file associated with this option contains a list of words which will
5372 be retained in concordance output; any word not mentioned in this file
5373 is ignored.  The file is called the @dfn{Only file}.  The file contains
5374 exactly one word in each line; the end of line separation of words is
5375 not subject to the value of the @option{-S} option.
5377 There is no default for the Only file.  When both an Only file and an
5378 Ignore file are specified, a word is considered a keyword only
5379 if it is listed in the Only file and not in the Ignore file.
5381 @item -r
5382 @itemx --references
5383 @opindex -r
5384 @opindex --references
5386 On each input line, the leading sequence of non-white space characters will be
5387 taken to be a reference that has the purpose of identifying this input
5388 line in the resulting permuted index.
5389 @xref{Output formatting in ptx},
5390 for more information about reference production.
5391 Using this option changes the default value for option @option{-S}.
5393 Using this option, the program does not try very hard to remove
5394 references from contexts in output, but it succeeds in doing so
5395 @emph{when} the context ends exactly at the newline.  If option
5396 @option{-r} is used with @option{-S} default value, or when GNU extensions
5397 are disabled, this condition is always met and references are completely
5398 excluded from the output contexts.
5400 @item -S @var{regexp}
5401 @itemx --sentence-regexp=@var{regexp}
5402 @opindex -S
5403 @opindex --sentence-regexp
5405 This option selects which regular expression will describe the end of a
5406 line or the end of a sentence.  In fact, this regular expression is not
5407 the only distinction between end of lines or end of sentences, and input
5408 line boundaries have no special significance outside this option.  By
5409 default, when GNU extensions are enabled and if @option{-r} option is not
5410 used, end of sentences are used.  In this case, this @var{regex} is
5411 imported from GNU Emacs:
5413 @example
5414 [.?!][]\"')@}]*\\($\\|\t\\|  \\)[ \t\n]*
5415 @end example
5417 Whenever GNU extensions are disabled or if @option{-r} option is used, end
5418 of lines are used; in this case, the default @var{regexp} is just:
5420 @example
5422 @end example
5424 Using an empty @var{regexp} is equivalent to completely disabling end of
5425 line or end of sentence recognition.  In this case, the whole file is
5426 considered to be a single big line or sentence.  The user might want to
5427 disallow all truncation flag generation as well, through option @option{-F
5428 ""}.  @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5429 Manual}.
5431 When the keywords happen to be near the beginning of the input line or
5432 sentence, this often creates an unused area at the beginning of the
5433 output context line; when the keywords happen to be near the end of the
5434 input line or sentence, this often creates an unused area at the end of
5435 the output context line.  The program tries to fill those unused areas
5436 by wrapping around context in them; the tail of the input line or
5437 sentence is used to fill the unused area on the left of the output line;
5438 the head of the input line or sentence is used to fill the unused area
5439 on the right of the output line.
5441 As a matter of convenience to the user, many usual backslashed escape
5442 sequences from the C language are recognized and converted to the
5443 corresponding characters by @command{ptx} itself.
5445 @item -W @var{regexp}
5446 @itemx --word-regexp=@var{regexp}
5447 @opindex -W
5448 @opindex --word-regexp
5450 This option selects which regular expression will describe each keyword.
5451 By default, if GNU extensions are enabled, a word is a sequence of
5452 letters; the @var{regexp} used is @samp{\w+}.  When GNU extensions are
5453 disabled, a word is by default anything which ends with a space, a tab
5454 or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
5456 An empty @var{regexp} is equivalent to not using this option.
5457 @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5458 Manual}.
5460 As a matter of convenience to the user, many usual backslashed escape
5461 sequences, as found in the C language, are recognized and converted to
5462 the corresponding characters by @command{ptx} itself.
5464 @end table
5467 @node Output formatting in ptx
5468 @subsection Output formatting
5470 Output format is mainly controlled by the @option{-O} and @option{-T} options
5471 described in the table below.  When neither @option{-O} nor @option{-T} are
5472 selected, and if GNU extensions are enabled, the program chooses an
5473 output format suitable for a dumb terminal.  Each keyword occurrence is
5474 output to the center of one line, surrounded by its left and right
5475 contexts.  Each field is properly justified, so the concordance output
5476 can be readily observed.  As a special feature, if automatic
5477 references are selected by option @option{-A} and are output before the
5478 left context, that is, if option @option{-R} is @emph{not} selected, then
5479 a colon is added after the reference; this nicely interfaces with GNU
5480 Emacs @code{next-error} processing.  In this default output format, each
5481 white space character, like newline and tab, is merely changed to
5482 exactly one space, with no special attempt to compress consecutive
5483 spaces.  This might change in the future.  Except for those white space
5484 characters, every other character of the underlying set of 256
5485 characters is transmitted verbatim.
5487 Output format is further controlled by the following options.
5489 @table @samp
5491 @item -g @var{number}
5492 @itemx --gap-size=@var{number}
5493 @opindex -g
5494 @opindex --gap-size
5496 Select the size of the minimum white space gap between the fields on the
5497 output line.
5499 @item -w @var{number}
5500 @itemx --width=@var{number}
5501 @opindex -w
5502 @opindex --width
5504 Select the maximum output width of each final line.  If references are
5505 used, they are included or excluded from the maximum output width
5506 depending on the value of option @option{-R}@.  If this option is not
5507 selected, that is, when references are output before the left context,
5508 the maximum output width takes into account the maximum length of all
5509 references.  If this option is selected, that is, when references are
5510 output after the right context, the maximum output width does not take
5511 into account the space taken by references, nor the gap that precedes
5512 them.
5514 @item -A
5515 @itemx --auto-reference
5516 @opindex -A
5517 @opindex --auto-reference
5519 Select automatic references.  Each input line will have an automatic
5520 reference made up of the file name and the line ordinal, with a single
5521 colon between them.  However, the file name will be empty when standard
5522 input is being read.  If both @option{-A} and @option{-r} are selected, then
5523 the input reference is still read and skipped, but the automatic
5524 reference is used at output time, overriding the input reference.
5526 @item -R
5527 @itemx --right-side-refs
5528 @opindex -R
5529 @opindex --right-side-refs
5531 In the default output format, when option @option{-R} is not used, any
5532 references produced by the effect of options @option{-r} or @option{-A} are
5533 placed to the far right of output lines, after the right context.  With
5534 default output format, when the @option{-R} option is specified, references
5535 are rather placed at the beginning of each output line, before the left
5536 context.  For any other output format, option @option{-R} is
5537 ignored, with one exception:  with @option{-R} the width of references
5538 is @emph{not} taken into account in total output width given by @option{-w}.
5540 This option is automatically selected whenever GNU extensions are
5541 disabled.
5543 @item -F @var{string}
5544 @itemx --flag-truncation=@var{string}
5545 @opindex -F
5546 @opindex --flag-truncation
5548 This option will request that any truncation in the output be reported
5549 using the string @var{string}.  Most output fields theoretically extend
5550 towards the beginning or the end of the current line, or current
5551 sentence, as selected with option @option{-S}@.  But there is a maximum
5552 allowed output line width, changeable through option @option{-w}, which is
5553 further divided into space for various output fields.  When a field has
5554 to be truncated because it cannot extend beyond the beginning or the end of
5555 the current line to fit in, then a truncation occurs.  By default,
5556 the string used is a single slash, as in @option{-F /}.
5558 @var{string} may have more than one character, as in @option{-F @dots{}}.
5559 Also, in the particular case when @var{string} is empty (@option{-F ""}),
5560 truncation flagging is disabled, and no truncation marks are appended in
5561 this case.
5563 As a matter of convenience to the user, many usual backslashed escape
5564 sequences, as found in the C language, are recognized and converted to
5565 the corresponding characters by @command{ptx} itself.
5567 @item -M @var{string}
5568 @itemx --macro-name=@var{string}
5569 @opindex -M
5570 @opindex --macro-name
5572 Select another @var{string} to be used instead of @samp{xx}, while
5573 generating output suitable for @command{nroff}, @command{troff} or @TeX{}.
5575 @item -O
5576 @itemx --format=roff
5577 @opindex -O
5578 @opindex --format=roff
5580 Choose an output format suitable for @command{nroff} or @command{troff}
5581 processing.  Each output line will look like:
5583 @smallexample
5584 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}"@c
5585  "@var{head}" "@var{ref}"
5586 @end smallexample
5588 so it will be possible to write a @samp{.xx} roff macro to take care of
5589 the output typesetting.  This is the default output format when GNU
5590 extensions are disabled.  Option @option{-M} can be used to change
5591 @samp{xx} to another macro name.
5593 In this output format, each non-graphical character, like newline and
5594 tab, is merely changed to exactly one space, with no special attempt to
5595 compress consecutive spaces.  Each quote character @samp{"} is doubled
5596 so it will be correctly processed by @command{nroff} or @command{troff}.
5598 @item -T
5599 @itemx --format=tex
5600 @opindex -T
5601 @opindex --format=tex
5603 Choose an output format suitable for @TeX{} processing.  Each output
5604 line will look like:
5606 @smallexample
5607 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@c
5608 @{@var{after}@}@{@var{head}@}@{@var{ref}@}
5609 @end smallexample
5611 @noindent
5612 so it will be possible to write a @code{\xx} definition to take care of
5613 the output typesetting.  Note that when references are not being
5614 produced, that is, neither option @option{-A} nor option @option{-r} is
5615 selected, the last parameter of each @code{\xx} call is inhibited.
5616 Option @option{-M} can be used to change @samp{xx} to another macro
5617 name.
5619 In this output format, some special characters, like @samp{$}, @samp{%},
5620 @samp{&}, @samp{#} and @samp{_} are automatically protected with a
5621 backslash.  Curly brackets @samp{@{}, @samp{@}} are protected with a
5622 backslash and a pair of dollar signs (to force mathematical mode).  The
5623 backslash itself produces the sequence @code{\backslash@{@}}.
5624 Circumflex and tilde diacritical marks produce the sequence @code{^\@{ @}} and
5625 @code{~\@{ @}} respectively.  Other diacriticized characters of the
5626 underlying character set produce an appropriate @TeX{} sequence as far
5627 as possible.  The other non-graphical characters, like newline and tab,
5628 and all other characters which are not part of ASCII, are merely
5629 changed to exactly one space, with no special attempt to compress
5630 consecutive spaces.  Let me know how to improve this special character
5631 processing for @TeX{}.
5633 @end table
5636 @node Compatibility in ptx
5637 @subsection The GNU extensions to @command{ptx}
5639 This version of @command{ptx} contains a few features which do not exist in
5640 System V @command{ptx}.  These extra features are suppressed by using the
5641 @option{-G} command line option, unless overridden by other command line
5642 options.  Some GNU extensions cannot be recovered by overriding, so the
5643 simple rule is to avoid @option{-G} if you care about GNU extensions.
5644 Here are the differences between this program and System V @command{ptx}.
5646 @itemize @bullet
5648 @item
5649 This program can read many input files at once, it always writes the
5650 resulting concordance on standard output.  On the other hand, System V
5651 @command{ptx} reads only one file and sends the result to standard output
5652 or, if a second @var{file} parameter is given on the command, to that
5653 @var{file}.
5655 Having output parameters not introduced by options is a dangerous
5656 practice which GNU avoids as far as possible.  So, for using @command{ptx}
5657 portably between GNU and System V, you should always use it with a
5658 single input file, and always expect the result on standard output.  You
5659 might also want to automatically configure in a @option{-G} option to
5660 @command{ptx} calls in products using @command{ptx}, if the configurator finds
5661 that the installed @command{ptx} accepts @option{-G}.
5663 @item
5664 The only options available in System V @command{ptx} are options @option{-b},
5665 @option{-f}, @option{-g}, @option{-i}, @option{-o}, @option{-r}, @option{-t} and
5666 @option{-w}.  All other options are GNU extensions and are not repeated in
5667 this enumeration.  Moreover, some options have a slightly different
5668 meaning when GNU extensions are enabled, as explained below.
5670 @item
5671 By default, concordance output is not formatted for @command{troff} or
5672 @command{nroff}.  It is rather formatted for a dumb terminal.  @command{troff}
5673 or @command{nroff} output may still be selected through option @option{-O}.
5675 @item
5676 Unless @option{-R} option is used, the maximum reference width is
5677 subtracted from the total output line width.  With GNU extensions
5678 disabled, width of references is not taken into account in the output
5679 line width computations.
5681 @item
5682 All 256 bytes, even ASCII NUL bytes, are always read and
5683 processed from input file with no adverse effect, even if GNU extensions
5684 are disabled.  However, System V @command{ptx} does not accept 8-bit
5685 characters, a few control characters are rejected, and the tilde
5686 @samp{~} is also rejected.
5688 @item
5689 Input line length is only limited by available memory, even if GNU
5690 extensions are disabled.  However, System V @command{ptx} processes only
5691 the first 200 characters in each line.
5693 @item
5694 The break (non-word) characters default to be every character except all
5695 letters of the underlying character set, diacriticized or not.  When GNU
5696 extensions are disabled, the break characters default to space, tab and
5697 newline only.
5699 @item
5700 The program makes better use of output line width.  If GNU extensions
5701 are disabled, the program rather tries to imitate System V @command{ptx},
5702 but still, there are some slight disposition glitches this program does
5703 not completely reproduce.
5705 @item
5706 The user can specify both an Ignore file and an Only file.  This is not
5707 allowed with System V @command{ptx}.
5709 @end itemize
5712 @node tsort invocation
5713 @section @command{tsort}: Topological sort
5715 @pindex tsort
5716 @cindex topological sort
5718 @command{tsort} performs a topological sort on the given @var{file}, or
5719 standard input if no input file is given or for a @var{file} of
5720 @samp{-}.  For more details and some history, see @ref{tsort background}.
5721 Synopsis:
5723 @example
5724 tsort [@var{option}] [@var{file}]
5725 @end example
5727 @command{tsort} reads its input as pairs of strings, separated by blanks,
5728 indicating a partial ordering.  The output is a total ordering that
5729 corresponds to the given partial ordering.
5731 For example
5733 @example
5734 tsort <<EOF
5735 a b c
5737 e f
5738 b c d e
5740 @end example
5742 @noindent
5743 will produce the output
5745 @example
5752 @end example
5754 Consider a more realistic example.
5755 You have a large set of functions all in one file, and they may all be
5756 declared static except one.  Currently that one (say @code{main}) is the
5757 first function defined in the file, and the ones it calls directly follow
5758 it, followed by those they call, etc.  Let's say that you are determined
5759 to take advantage of prototypes, so you have to choose between declaring
5760 all of those functions (which means duplicating a lot of information from
5761 the definitions) and rearranging the functions so that as many as possible
5762 are defined before they are used.  One way to automate the latter process
5763 is to get a list for each function of the functions it calls directly.
5764 Many programs can generate such lists.  They describe a call graph.
5765 Consider the following list, in which a given line indicates that the
5766 function on the left calls the one on the right directly.
5768 @example
5769 main parse_options
5770 main tail_file
5771 main tail_forever
5772 tail_file pretty_name
5773 tail_file write_header
5774 tail_file tail
5775 tail_forever recheck
5776 tail_forever pretty_name
5777 tail_forever write_header
5778 tail_forever dump_remainder
5779 tail tail_lines
5780 tail tail_bytes
5781 tail_lines start_lines
5782 tail_lines dump_remainder
5783 tail_lines file_lines
5784 tail_lines pipe_lines
5785 tail_bytes xlseek
5786 tail_bytes start_bytes
5787 tail_bytes dump_remainder
5788 tail_bytes pipe_bytes
5789 file_lines dump_remainder
5790 recheck pretty_name
5791 @end example
5793 then you can use @command{tsort} to produce an ordering of those
5794 functions that satisfies your requirement.
5796 @example
5797 example$ tsort call-graph | tac
5798 dump_remainder
5799 start_lines
5800 file_lines
5801 pipe_lines
5802 xlseek
5803 start_bytes
5804 pipe_bytes
5805 tail_lines
5806 tail_bytes
5807 pretty_name
5808 write_header
5809 tail
5810 recheck
5811 parse_options
5812 tail_file
5813 tail_forever
5814 main
5815 @end example
5817 @command{tsort} detects any cycles in the input and writes the first cycle
5818 encountered to standard error.
5820 Note that for a given partial ordering, generally there is no unique
5821 total ordering.  In the context of the call graph above, the function
5822 @code{parse_options} may be placed anywhere in the list as long as it
5823 precedes @code{main}.
5825 The only options are @option{--help} and @option{--version}.  @xref{Common
5826 options}.
5828 @exitstatus
5830 @menu
5831 * tsort background::            Where tsort came from.
5832 @end menu
5834 @node tsort background
5835 @subsection @command{tsort}: Background
5837 @command{tsort} exists because very early versions of the Unix linker processed
5838 an archive file exactly once, and in order.  As @command{ld} read each object
5839 in the archive, it decided whether it was needed in the program based on
5840 whether it defined any symbols which were undefined at that point in
5841 the link.
5843 This meant that dependencies within the archive had to be handled
5844 specially.  For example, @code{scanf} probably calls @code{read}.  That means
5845 that in a single pass through an archive, it was important for @code{scanf.o}
5846 to appear before read.o, because otherwise a program which calls
5847 @code{scanf} but not @code{read} might end up with an unexpected unresolved
5848 reference to @code{read}.
5850 The way to address this problem was to first generate a set of
5851 dependencies of one object file on another.  This was done by a shell
5852 script called @command{lorder}.  The GNU tools don't provide a version of
5853 lorder, as far as I know, but you can still find it in BSD
5854 distributions.
5856 Then you ran @command{tsort} over the @command{lorder} output, and you used the
5857 resulting sort to define the order in which you added objects to the archive.
5859 This whole procedure has been obsolete since about 1980, because
5860 Unix archives now contain a symbol table (traditionally built by
5861 @command{ranlib}, now generally built by @command{ar} itself), and the Unix
5862 linker uses the symbol table to effectively make multiple passes over
5863 an archive file.
5865 Anyhow, that's where tsort came from.  To solve an old problem with
5866 the way the linker handled archive files, which has since been solved
5867 in different ways.
5870 @node Operating on fields
5871 @chapter Operating on fields
5873 @menu
5874 * cut invocation::              Print selected parts of lines.
5875 * paste invocation::            Merge lines of files.
5876 * join invocation::             Join lines on a common field.
5877 @end menu
5880 @node cut invocation
5881 @section @command{cut}: Print selected parts of lines
5883 @pindex cut
5884 @command{cut} writes to standard output selected parts of each line of each
5885 input file, or standard input if no files are given or for a file name of
5886 @samp{-}.  Synopsis:
5888 @example
5889 cut @var{option}@dots{} [@var{file}]@dots{}
5890 @end example
5892 In the table which follows, the @var{byte-list}, @var{character-list},
5893 and @var{field-list} are one or more numbers or ranges (two numbers
5894 separated by a dash) separated by commas.  Bytes, characters, and
5895 fields are numbered starting at 1.  Incomplete ranges may be
5896 given: @option{-@var{m}} means @samp{1-@var{m}}; @samp{@var{n}-} means
5897 @samp{@var{n}} through end of line or last field.  The list elements
5898 can be repeated, can overlap, and can be specified in any order; but
5899 the selected input is written in the same order that it is read, and
5900 is written exactly once.
5902 The program accepts the following options.  Also see @ref{Common
5903 options}.
5905 @table @samp
5907 @item -b @var{byte-list}
5908 @itemx --bytes=@var{byte-list}
5909 @opindex -b
5910 @opindex --bytes
5911 Select for printing only the bytes in positions listed in
5912 @var{byte-list}.  Tabs and backspaces are treated like any other
5913 character; they take up 1 byte.  If an output delimiter is specified,
5914 (see the description of @option{--output-delimiter}), then output that
5915 string between ranges of selected bytes.
5917 @item -c @var{character-list}
5918 @itemx --characters=@var{character-list}
5919 @opindex -c
5920 @opindex --characters
5921 Select for printing only the characters in positions listed in
5922 @var{character-list}.  The same as @option{-b} for now, but
5923 internationalization will change that.  Tabs and backspaces are
5924 treated like any other character; they take up 1 character.  If an
5925 output delimiter is specified, (see the description of
5926 @option{--output-delimiter}), then output that string between ranges
5927 of selected bytes.
5929 @item -f @var{field-list}
5930 @itemx --fields=@var{field-list}
5931 @opindex -f
5932 @opindex --fields
5933 Select for printing only the fields listed in @var{field-list}.
5934 Fields are separated by a TAB character by default.  Also print any
5935 line that contains no delimiter character, unless the
5936 @option{--only-delimited} (@option{-s}) option is specified.
5938 Note @command{awk} supports more sophisticated field processing,
5939 like reordering fields, and handling fields aligned with blank characters.
5940 By default @command{awk} uses (and discards) runs of blank characters
5941 to separate fields, and ignores leading and trailing blanks.
5942 @example
5943 @verbatim
5944 awk '{print $2}'      # print the second field
5945 awk '{print $(NF-1)}' # print the penultimate field
5946 awk '{print $2,$1}'   # reorder the first two fields
5947 @end verbatim
5948 @end example
5949 Note while @command{cut} accepts field specifications in
5950 arbitrary order, output is always in the order encountered in the file.
5952 In the unlikely event that @command{awk} is unavailable,
5953 one can use the @command{join} command, to process blank
5954 characters as @command{awk} does above.
5955 @example
5956 @verbatim
5957 join -a1 -o 1.2     - /dev/null # print the second field
5958 join -a1 -o 1.2,1.1 - /dev/null # reorder the first two fields
5959 @end verbatim
5960 @end example
5962 @item -d @var{input_delim_byte}
5963 @itemx --delimiter=@var{input_delim_byte}
5964 @opindex -d
5965 @opindex --delimiter
5966 With @option{-f}, use the first byte of @var{input_delim_byte} as
5967 the input fields separator (default is TAB).
5969 @item -n
5970 @opindex -n
5971 Do not split multi-byte characters (no-op for now).
5973 @item -s
5974 @itemx --only-delimited
5975 @opindex -s
5976 @opindex --only-delimited
5977 For @option{-f}, do not print lines that do not contain the field separator
5978 character.  Normally, any line without a field separator is printed verbatim.
5980 @item --output-delimiter=@var{output_delim_string}
5981 @opindex --output-delimiter
5982 With @option{-f}, output fields are separated by @var{output_delim_string}.
5983 The default with @option{-f} is to use the input delimiter.
5984 When using @option{-b} or @option{-c} to select ranges of byte or
5985 character offsets (as opposed to ranges of fields),
5986 output @var{output_delim_string} between non-overlapping
5987 ranges of selected bytes.
5989 @item --complement
5990 @opindex --complement
5991 This option is a GNU extension.
5992 Select for printing the complement of the bytes, characters or fields
5993 selected with the @option{-b}, @option{-c} or @option{-f} options.
5994 In other words, do @emph{not} print the bytes, characters or fields
5995 specified via those options.  This option is useful when you have
5996 many fields and want to print all but a few of them.
5998 @optZeroTerminated
6000 @end table
6002 @exitstatus
6005 @node paste invocation
6006 @section @command{paste}: Merge lines of files
6008 @pindex paste
6009 @cindex merging files
6011 @command{paste} writes to standard output lines consisting of sequentially
6012 corresponding lines of each given file, separated by a TAB character.
6013 Standard input is used for a file name of @samp{-} or if no input files
6014 are given.
6016 Synopsis:
6018 @example
6019 paste [@var{option}]@dots{} [@var{file}]@dots{}
6020 @end example
6022 For example, with:
6023 @example
6024 $ cat num2
6027 $ cat let3
6031 @end example
6033 Take lines sequentially from each file:
6034 @example
6035 $ paste num2 let3
6036 1       a
6037 2       b
6038        @ c
6039 @end example
6041 Duplicate lines from a file:
6042 @example
6043 $ paste num2 let3 num2
6044 1       a      1
6045 2       b      2
6046        @ c
6047 @end example
6049 Intermix lines from stdin:
6050 @example
6051 $ paste - let3 - < num2
6052 1       a      2
6053        @ b
6054        @ c
6055 @end example
6057 Join consecutive lines with a space:
6058 @example
6059 $ seq 4 | paste -d ' ' - -
6060 1 2
6061 3 4
6062 @end example
6064 The program accepts the following options.  Also see @ref{Common options}.
6066 @table @samp
6068 @item -s
6069 @itemx --serial
6070 @opindex -s
6071 @opindex --serial
6072 Paste the lines of one file at a time rather than one line from each
6073 file.  Using the above example data:
6075 @example
6076 $ paste -s num2 let3
6077 1       2
6078 a       b       c
6079 @end example
6081 @item -d @var{delim-list}
6082 @itemx --delimiters=@var{delim-list}
6083 @opindex -d
6084 @opindex --delimiters
6085 Consecutively use the characters in @var{delim-list} instead of
6086 TAB to separate merged lines.  When @var{delim-list} is
6087 exhausted, start again at its beginning.  Using the above example data:
6089 @example
6090 $ paste -d '%_' num2 let3 num2
6091 1%a_1
6092 2%b_2
6094 @end example
6096 @optZeroTerminated
6098 @end table
6100 @exitstatus
6103 @node join invocation
6104 @section @command{join}: Join lines on a common field
6106 @pindex join
6107 @cindex common field, joining on
6109 @command{join} writes to standard output a line for each pair of input
6110 lines that have identical join fields.  Synopsis:
6112 @example
6113 join [@var{option}]@dots{} @var{file1} @var{file2}
6114 @end example
6116 Either @var{file1} or @var{file2} (but not both) can be @samp{-},
6117 meaning standard input.  @var{file1} and @var{file2} should be
6118 sorted on the join fields.
6120 @example
6121 @group
6122 $ cat file1
6123 a 1
6124 b 2
6125 e 5
6127 $ cat file2
6128 a X
6129 e Y
6130 f Z
6132 $ join file1 file2
6133 a 1 X
6134 e 5 Y
6135 @end group
6136 @end example
6139 @noindent
6140 @command{join}'s default behavior (when no options are given):
6141 @itemize
6142 @item the join field is the first field in each line;
6143 @item fields in the input are separated by one or more blanks, with leading
6144 blanks on the line ignored;
6145 @item fields in the output are separated by a space;
6146 @item each output line consists of the join field, the remaining
6147 fields from @var{file1}, then the remaining fields from @var{file2}.
6148 @end itemize
6151 @menu
6152 * General options in join::      Options which affect general program behavior.
6153 * Sorting files for join::       Using @command{sort} before @command{join}.
6154 * Working with fields::          Joining on different fields.
6155 * Paired and unpaired lines::    Controlling @command{join}'s field matching.
6156 * Header lines::                 Working with header lines in files.
6157 * Set operations::               Union, Intersection and Difference of files.
6158 @end menu
6160 @node General options in join
6161 @subsection General options
6162 The program accepts the following options.  Also see @ref{Common options}.
6164 @table @samp
6166 @item -a @var{file-number}
6167 @opindex -a
6168 Print a line for each unpairable line in file @var{file-number} (either
6169 @samp{1} or @samp{2}), in addition to the normal output.
6171 @item --check-order
6172 Fail with an error message if either input file is wrongly ordered.
6174 @item --nocheck-order
6175 Do not check that both input files are in sorted order.  This is the default.
6177 @item -e @var{string}
6178 @opindex -e
6179 Replace those output fields that are missing in the input with @var{string}.
6180 I.e., missing fields specified with the @option{-12jo} options.
6182 @item --header
6183 @opindex --header
6184 Treat the first line of each input file as a header line.  The header lines
6185 will be joined and printed as the first output line.  If @option{-o} is used to
6186 specify output format, the header line will be printed according to the
6187 specified format.  The header lines will not be checked for ordering even if
6188 @option{--check-order} is specified.  Also if the header lines from each file
6189 do not match, the heading fields from the first file will be used.
6191 @item -i
6192 @itemx --ignore-case
6193 @opindex -i
6194 @opindex --ignore-case
6195 Ignore differences in case when comparing keys.
6196 With this option, the lines of the input files must be ordered in the same way.
6197 Use @samp{sort -f} to produce this ordering.
6199 @item -1 @var{field}
6200 @opindex -1
6201 Join on field @var{field} (a positive integer) of file 1.
6203 @item -2 @var{field}
6204 @opindex -2
6205 Join on field @var{field} (a positive integer) of file 2.
6207 @item -j @var{field}
6208 Equivalent to @option{-1 @var{field} -2 @var{field}}.
6210 @item -o @var{field-list}
6211 @itemx -o auto
6212 If the keyword @samp{auto} is specified, infer the output format from
6213 the first line in each file.  This is the same as the default output format
6214 but also ensures the same number of fields are output for each line.
6215 Missing fields are replaced with the @option{-e} option and extra fields
6216 are discarded.
6218 Otherwise, construct each output line according to the format in
6219 @var{field-list}.  Each element in @var{field-list} is either the single
6220 character @samp{0} or has the form @var{m.n} where the file number, @var{m},
6221 is @samp{1} or @samp{2} and @var{n} is a positive field number.
6223 A field specification of @samp{0} denotes the join field.
6224 In most cases, the functionality of the @samp{0} field spec
6225 may be reproduced using the explicit @var{m.n} that corresponds
6226 to the join field.  However, when printing unpairable lines
6227 (using either of the @option{-a} or @option{-v} options), there is no way
6228 to specify the join field using @var{m.n} in @var{field-list}
6229 if there are unpairable lines in both files.
6230 To give @command{join} that functionality, POSIX invented the @samp{0}
6231 field specification notation.
6233 The elements in @var{field-list}
6234 are separated by commas or blanks.
6235 Blank separators typically need to be quoted for the shell.  For
6236 example, the commands @samp{join -o 1.2,2.2} and @samp{join -o '1.2
6237 2.2'} are equivalent.
6239 All output lines---including those printed because of any -a or -v
6240 option---are subject to the specified @var{field-list}.
6242 @item -t @var{char}
6243 Use character @var{char} as the input and output field separator.
6244 Treat as significant each occurrence of @var{char} in the input file.
6245 Use @samp{sort -t @var{char}}, without the @option{-b} option of
6246 @samp{sort}, to produce this ordering.  If @samp{join -t ''} is specified,
6247 the whole line is considered, matching the default operation of sort.
6248 If @samp{-t '\0'} is specified then the ASCII NUL
6249 character is used to delimit the fields.
6251 @item -v @var{file-number}
6252 Print a line for each unpairable line in file @var{file-number}
6253 (either @samp{1} or @samp{2}), instead of the normal output.
6255 @optZeroTerminated
6256 @newlineFieldSeparator
6258 @end table
6260 @exitstatus
6262 @set JOIN_COMMAND
6263 @checkOrderOption{join}
6264 @clear JOIN_COMMAND
6268 @node Sorting files for join
6269 @subsection Pre-sorting
6271 @command{join} requires sorted input files. Each input file should be
6272 sorted according to the key (=field/column number) used in
6273 @command{join}. The recommended sorting option is @samp{sort -k 1b,1}
6274 (assuming the desired key is in the first column).
6276 @noindent Typical usage:
6277 @example
6278 @group
6279 $ sort -k 1b,1 file1 > file1.sorted
6280 $ sort -k 1b,1 file2 > file2.sorted
6281 $ join file1.sorted file2.sorted > file3
6282 @end group
6283 @end example
6285 @vindex LC_COLLATE
6286 Normally, the sort order is that of the
6287 collating sequence specified by the @env{LC_COLLATE} locale.  Unless
6288 the @option{-t} option is given, the sort comparison ignores blanks at
6289 the start of the join field, as in @code{sort -b}.  If the
6290 @option{--ignore-case} option is given, the sort comparison ignores
6291 the case of characters in the join field, as in @code{sort -f}:
6293 @example
6294 @group
6295 $ sort -k 1bf,1 file1 > file1.sorted
6296 $ sort -k 1bf,1 file2 > file2.sorted
6297 $ join --ignore-case file1.sorted file2.sorted > file3
6298 @end group
6299 @end example
6301 The @command{sort} and @command{join} commands should use consistent
6302 locales and options if the output of @command{sort} is fed to
6303 @command{join}.  You can use a command like @samp{sort -k 1b,1} to
6304 sort a file on its default join field, but if you select a non-default
6305 locale, join field, separator, or comparison options, then you should
6306 do so consistently between @command{join} and @command{sort}.
6308 @noindent To avoid any locale-related issues, it is recommended to use the
6309 @samp{C} locale for both commands:
6311 @example
6312 @group
6313 $ LC_ALL=C sort -k 1b,1 file1 > file1.sorted
6314 $ LC_ALL=C sort -k 1b,1 file2 > file2.sorted
6315 $ LC_ALL=C join file1.sorted file2.sorted > file3
6316 @end group
6317 @end example
6320 @node Working with fields
6321 @subsection Working with fields
6323 Use @option{-1},@option{-2} to set the key fields for each of the input files.
6324 Ensure the preceding @command{sort} commands operated on the same fields.
6326 @noindent
6327 The following example joins two files, using the values from seventh field
6328 of the first file and the third field of the second file:
6330 @example
6331 @group
6332 $ sort -k 7b,7 file1 > file1.sorted
6333 $ sort -k 3b,3 file2 > file2.sorted
6334 $ join -1 7 -2 3 file1.sorted file2.sorted > file3
6335 @end group
6336 @end example
6338 @noindent
6339 If the field number is the same for both files, use @option{-j}:
6341 @example
6342 @group
6343 $ sort -k4b,4 file1 > file1.sorted
6344 $ sort -k4b,4 file2 > file2.sorted
6345 $ join -j4    file1.sorted file2.sorted > file3
6346 @end group
6347 @end example
6349 @noindent
6350 Both @command{sort} and @command{join} operate of whitespace-delimited
6351 fields. To specify a different delimiter, use @option{-t} in @emph{both}:
6353 @example
6354 @group
6355 $ sort -t, -k3b,3 file1 > file1.sorted
6356 $ sort -t, -k3b,3 file2 > file2.sorted
6357 $ join -t, -j3    file1.sorted file2.sorted > file3
6358 @end group
6359 @end example
6361 @noindent
6362 To specify a tab (@sc{ascii} 0x09) character instead of whitespace, use
6363 @footnote{the @code{$'\t'} is supported in most modern shells.
6364 For older shells, use a literal tab}:
6366 @example
6367 @group
6368 $ sort -t$'\t' -k3b,3 file1 > file1.sorted
6369 $ sort -t$'\t' -k3b,3 file2 > file2.sorted
6370 $ join -t$'\t' -j3    file1.sorted file2.sorted > file3
6371 @end group
6372 @end example
6375 @noindent
6376 If @samp{join -t ''} is specified then the whole line is considered which
6377 matches the default operation of sort:
6379 @example
6380 @group
6381 $ sort file1 > file1.sorted
6382 $ sort file2 > file2.sorted
6383 $ join -t'' file1.sorted file2.sorted > file3
6384 @end group
6385 @end example
6388 @node Paired and unpaired lines
6389 @subsection Controlling @command{join}'s field matching
6391 In this section the @command{sort} commands are omitted for brevity.
6392 Sorting the files before joining is still required.
6394 @command{join}'s default behavior is to print only lines common to
6395 both input files. Use @option{-a} and @option{-v} to print unpairable lines
6396 from one or both files.
6398 @noindent
6399 All examples below use the following two (pre-sorted) input files:
6401 @multitable @columnfractions .5 .5
6402 @item
6403 @example
6404 $ cat file1
6405 a 1
6406 b 2
6407 @end example
6409 @tab
6410 @example
6411 $ cat file2
6412 a A
6413 c C
6414 @end example
6415 @end multitable
6418 @c TODO: Find better column widths that work for both HTML and PDF
6419 @c       and disable indentation of @example.
6420 @multitable @columnfractions 0.5 0.5
6422 @headitem Command @tab Outcome
6425 @item
6426 @example
6427 $ join file1 file2
6428 a 1 A
6429 @end example
6430 @tab
6431 common lines
6432 (@emph{intersection})
6436 @item
6437 @example
6438 $ join -a 1 file1 file2
6439 a 1 A
6440 b 2
6441 @end example
6442 @tab
6443 common lines @emph{and} unpaired
6444 lines from the first file
6447 @item
6448 @example
6449 $ join -a 2 file1 file2
6450 a 1 A
6451 c C
6452 @end example
6453 @tab
6454 common lines @emph{and} unpaired lines from the second file
6457 @item
6458 @example
6459 $ join -a 1 -a 2 file1 file2
6460 a 1 A
6461 b 2
6462 c C
6463 @end example
6464 @tab
6465 all lines (paired and unpaired) from both files
6466 (@emph{union}).
6468 see note below regarding @code{-o auto}.
6471 @item
6472 @example
6473 $ join -v 1 file1 file2
6474 b 1
6475 @end example
6476 @tab
6477 unpaired lines from the first file
6478 (@emph{difference})
6481 @item
6482 @example
6483 $ join -v 2 file1 file2
6484 c C
6485 @end example
6486 @tab
6487 unpaired lines from the second file
6488 (@emph{difference})
6491 @item
6492 @example
6493 $ join -v 1 -v 2 file1 file2
6494 b 2
6495 c C
6496 @end example
6497 @tab
6498 unpaired lines from both files, omitting common lines
6499 (@emph{symmetric difference}).
6502 @end multitable
6504 @noindent
6505 The @option{-o auto -e X} options are useful when dealing with unpaired lines.
6506 The following example prints all lines (common and unpaired) from both files.
6507 Without @option{-o auto} it is not easy to discern which fields originate from
6508 which file:
6510 @example
6511 $ join -a 1 -a 2 file1 file2
6512 a 1 A
6513 b 2
6514 c C
6516 $ join -o auto -e X -a 1 -a 2 file1 file2
6517 a 1 A
6518 b 2 X
6519 c X C
6520 @end example
6523 If the input has no unpairable lines, a GNU extension is
6524 available; the sort order can be any order that considers two fields
6525 to be equal if and only if the sort comparison described above
6526 considers them to be equal.  For example:
6528 @example
6529 @group
6530 $ cat file1
6531 a a1
6532 c c1
6533 b b1
6535 $ cat file2
6536 a a2
6537 c c2
6538 b b2
6539 $ join file1 file2
6540 a a1 a2
6541 c c1 c2
6542 b b1 b2
6543 @end group
6544 @end example
6547 @node Header lines
6548 @subsection Header lines
6550 The @option{--header} option can be used when the files to join
6551 have a header line which is not sorted:
6553 @example
6554 @group
6555 $ cat file1
6556 Name     Age
6557 Alice    25
6558 Charlie  34
6560 $ cat file2
6561 Name   Country
6562 Alice  France
6563 Bob    Spain
6565 $ join --header -o auto -e NA -a1 -a2 file1 file2
6566 Name     Age   Country
6567 Alice    25    France
6568 Bob      NA    Spain
6569 Charlie  34    NA
6570 @end group
6571 @end example
6574 To sort a file with a header line, use GNU @command{sed -u}.
6575 The following example sort the files but keeps the first line of each
6576 file in place:
6578 @example
6579 @group
6580 $ ( sed -u 1q ; sort -k2b,2 ) < file1 > file1.sorted
6581 $ ( sed -u 1q ; sort -k2b,2 ) < file2 > file2.sorted
6582 $ join --header -o auto -e NA -a1 -a2 file1.sorted file2.sorted > file3
6583 @end group
6584 @end example
6586 @node Set operations
6587 @subsection Union, Intersection and Difference of files
6589 Combine @command{sort}, @command{uniq} and @command{join} to
6590 perform the equivalent of set operations on files:
6592 @c From https://www.pixelbeat.org/cmdline.html#sets
6593 @multitable @columnfractions 0.5 0.5
6594 @headitem Command @tab outcome
6595 @item @code{sort -u file1 file2}
6596 @tab Union of unsorted files
6598 @item @code{sort file1 file2 | uniq -d}
6599 @tab Intersection of unsorted files
6601 @item @code{sort file1 file1 file2 | uniq}
6602 @tab Difference of unsorted files
6604 @item @code{sort file1 file2 | uniq -u}
6605 @tab Symmetric Difference of unsorted files
6607 @item @code{join -t'' -a1 -a2 file1 file2}
6608 @tab Union of sorted files
6610 @item @code{join -t'' file1 file2}
6611 @tab Intersection of sorted files
6613 @item @code{join -t'' -v2 file1 file2}
6614 @tab Difference of sorted files
6616 @item @code{join -t'' -v1 -v2 file1 file2}
6617 @tab Symmetric Difference of sorted files
6619 @end multitable
6621 All examples above operate on entire lines and not on specific fields:
6622 @command{sort} without @option{-k} and @command{join -t''} both consider
6623 entire lines as the key.
6626 @node Operating on characters
6627 @chapter Operating on characters
6629 @cindex operating on characters
6631 These commands operate on individual characters.
6633 @menu
6634 * tr invocation::               Translate, squeeze, and/or delete characters.
6635 * expand invocation::           Convert tabs to spaces.
6636 * unexpand invocation::         Convert spaces to tabs.
6637 @end menu
6640 @node tr invocation
6641 @section @command{tr}: Translate, squeeze, and/or delete characters
6643 @pindex tr
6645 Synopsis:
6647 @example
6648 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
6649 @end example
6651 @command{tr} copies standard input to standard output, performing
6652 one of the following operations:
6654 @itemize @bullet
6655 @item
6656 translate, and optionally squeeze repeated characters in the result,
6657 @item
6658 squeeze repeated characters,
6659 @item
6660 delete characters,
6661 @item
6662 delete characters, then squeeze repeated characters from the result.
6663 @end itemize
6665 The @var{set1} and (if given) @var{set2} arguments define ordered
6666 sets of characters, referred to below as @var{set1} and @var{set2}.  These
6667 sets are the characters of the input that @command{tr} operates on.
6668 The @option{--complement} (@option{-c}, @option{-C}) option replaces
6669 @var{set1} with its
6670 complement (all of the characters that are not in @var{set1}).
6672 Currently @command{tr} fully supports only single-byte characters.
6673 Eventually it will support multibyte characters; when it does, the
6674 @option{-C} option will cause it to complement the set of characters,
6675 whereas @option{-c} will cause it to complement the set of values.
6676 This distinction will matter only when some values are not characters,
6677 and this is possible only in locales using multibyte encodings when
6678 the input contains encoding errors.
6680 The program accepts the @option{--help} and @option{--version}
6681 options.  @xref{Common options}.  Options must precede operands.
6683 @exitstatus
6685 @menu
6686 * Character sets::              Specifying sets of characters.
6687 * Translating::                 Changing one set of characters to another.
6688 * Squeezing and deleting::      Removing characters.
6689 @end menu
6692 @node Character sets
6693 @subsection Specifying sets of characters
6695 @cindex specifying sets of characters
6697 The format of the @var{set1} and @var{set2} arguments resembles
6698 the format of regular expressions; however, they are not regular
6699 expressions, only lists of characters.  Most characters simply
6700 represent themselves in these strings, but the strings can contain
6701 the shorthands listed below, for convenience.  Some of them can be
6702 used only in @var{set1} or @var{set2}, as noted below.
6704 @table @asis
6706 @item Backslash escapes
6707 @cindex backslash escapes
6709 The following backslash escape sequences are recognized:
6711 @table @samp
6712 @item \a
6713 Control-G.
6714 @item \b
6715 Control-H.
6716 @item \f
6717 Control-L.
6718 @item \n
6719 Control-J.
6720 @item \r
6721 Control-M.
6722 @item \t
6723 Control-I.
6724 @item \v
6725 Control-K.
6726 @item \@var{ooo}
6727 The 8-bit character with the value given by @var{ooo}, which is 1 to 3
6728 octal digits.  Note that @samp{\400} is interpreted as the two-byte
6729 sequence, @samp{\040} @samp{0}.
6730 @item \\
6731 A backslash.
6732 @end table
6734 While a backslash followed by a character not listed above is
6735 interpreted as that character, the backslash also effectively
6736 removes any special significance, so it is useful to escape
6737 @samp{[}, @samp{]}, @samp{*}, and @samp{-}.
6739 @item Ranges
6740 @cindex ranges
6742 The notation @samp{@var{m}-@var{n}} expands to all of the characters
6743 from @var{m} through @var{n}, in ascending order.  @var{m} should
6744 collate before @var{n}; if it doesn't, an error results.  As an example,
6745 @samp{0-9} is the same as @samp{0123456789}.
6747 GNU @command{tr} does not support the System V syntax that uses square
6748 brackets to enclose ranges.  Translations specified in that format
6749 sometimes work as expected, since the brackets are often transliterated
6750 to themselves.  However, they should be avoided because they sometimes
6751 behave unexpectedly.  For example, @samp{tr -d '[0-9]'} deletes brackets
6752 as well as digits.
6754 Many historically common and even accepted uses of ranges are not
6755 portable.  For example, on EBCDIC hosts using the @samp{A-Z}
6756 range will not do what most would expect because @samp{A} through @samp{Z}
6757 are not contiguous as they are in ASCII@.
6758 If you can rely on a POSIX compliant version of @command{tr}, then
6759 the best way to work around this is to use character classes (see below).
6760 Otherwise, it is most portable (and most ugly) to enumerate the members
6761 of the ranges.
6763 @item Repeated characters
6764 @cindex repeated characters
6766 The notation @samp{[@var{c}*@var{n}]} in @var{set2} expands to @var{n}
6767 copies of character @var{c}.  Thus, @samp{[y*6]} is the same as
6768 @samp{yyyyyy}.  The notation @samp{[@var{c}*]} in @var{string2} expands
6769 to as many copies of @var{c} as are needed to make @var{set2} as long as
6770 @var{set1}.  If @var{n} begins with @samp{0}, it is interpreted in
6771 octal, otherwise in decimal.
6773 @item Character classes
6774 @cindex character classes
6776 The notation @samp{[:@var{class}:]} expands to all of the characters in
6777 the (predefined) class @var{class}.  The characters expand in no
6778 particular order, except for the @code{upper} and @code{lower} classes,
6779 which expand in ascending order.  When the @option{--delete} (@option{-d})
6780 and @option{--squeeze-repeats} (@option{-s}) options are both given, any
6781 character class can be used in @var{set2}.  Otherwise, only the
6782 character classes @code{lower} and @code{upper} are accepted in
6783 @var{set2}, and then only if the corresponding character class
6784 (@code{upper} and @code{lower}, respectively) is specified in the same
6785 relative position in @var{set1}.  Doing this specifies case conversion.
6786 The class names are given below; an error results when an invalid class
6787 name is given.
6789 @table @code
6790 @item alnum
6791 @opindex alnum
6792 Letters and digits.
6793 @item alpha
6794 @opindex alpha
6795 Letters.
6796 @item blank
6797 @opindex blank
6798 Horizontal whitespace.
6799 @item cntrl
6800 @opindex cntrl
6801 Control characters.
6802 @item digit
6803 @opindex digit
6804 Digits.
6805 @item graph
6806 @opindex graph
6807 Printable characters, not including space.
6808 @item lower
6809 @opindex lower
6810 Lowercase letters.
6811 @item print
6812 @opindex print
6813 Printable characters, including space.
6814 @item punct
6815 @opindex punct
6816 Punctuation characters.
6817 @item space
6818 @opindex space
6819 Horizontal or vertical whitespace.
6820 @item upper
6821 @opindex upper
6822 Uppercase letters.
6823 @item xdigit
6824 @opindex xdigit
6825 Hexadecimal digits.
6826 @end table
6828 @item Equivalence classes
6829 @cindex equivalence classes
6831 The syntax @samp{[=@var{c}=]} expands to all of the characters that are
6832 equivalent to @var{c}, in no particular order.  Equivalence classes are
6833 a relatively recent invention intended to support non-English alphabets.
6834 But there seems to be no standard way to define them or determine their
6835 contents.  Therefore, they are not fully implemented in GNU @command{tr};
6836 each character's equivalence class consists only of that character,
6837 which is of no particular use.
6839 @end table
6842 @node Translating
6843 @subsection Translating
6845 @cindex translating characters
6847 @command{tr} performs translation when @var{set1} and @var{set2} are
6848 both given and the @option{--delete} (@option{-d}) option is not given.
6849 @command{tr} translates each character of its input that is in @var{set1}
6850 to the corresponding character in @var{set2}.  Characters not in
6851 @var{set1} are passed through unchanged.  When a character appears more
6852 than once in @var{set1} and the corresponding characters in @var{set2}
6853 are not all the same, only the final one is used.  For example, these
6854 two commands are equivalent:
6856 @example
6857 tr aaa xyz
6858 tr a z
6859 @end example
6861 A common use of @command{tr} is to convert lowercase characters to
6862 uppercase.  This can be done in many ways.  Here are three of them:
6864 @example
6865 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
6866 tr a-z A-Z
6867 tr '[:lower:]' '[:upper:]'
6868 @end example
6870 @noindent
6871 But note that using ranges like @code{a-z} above is not portable.
6873 When @command{tr} is performing translation, @var{set1} and @var{set2}
6874 typically have the same length.  If @var{set1} is shorter than
6875 @var{set2}, the extra characters at the end of @var{set2} are ignored.
6877 On the other hand, making @var{set1} longer than @var{set2} is not
6878 portable; POSIX says that the result is undefined.  In this situation,
6879 BSD @command{tr} pads @var{set2} to the length of @var{set1} by repeating
6880 the last character of @var{set2} as many times as necessary.  System V
6881 @command{tr} truncates @var{set1} to the length of @var{set2}.
6883 By default, GNU @command{tr} handles this case like BSD @command{tr}.
6884 When the @option{--truncate-set1} (@option{-t}) option is given,
6885 GNU @command{tr} handles this case like the System V @command{tr}
6886 instead.  This option is ignored for operations other than translation.
6888 Acting like System V @command{tr} in this case breaks the relatively common
6889 BSD idiom:
6891 @example
6892 tr -cs A-Za-z0-9 '\012'
6893 @end example
6895 @noindent
6896 because it converts only zero bytes (the first element in the
6897 complement of @var{set1}), rather than all non-alphanumerics, to
6898 newlines.
6900 @noindent
6901 By the way, the above idiom is not portable because it uses ranges, and
6902 it assumes that the octal code for newline is 012.
6903 Assuming a POSIX compliant @command{tr}, here is a better
6904 way to write it:
6906 @example
6907 tr -cs '[:alnum:]' '[\n*]'
6908 @end example
6911 @node Squeezing and deleting
6912 @subsection Squeezing repeats and deleting
6914 @cindex squeezing repeat characters
6915 @cindex deleting characters
6916 @cindex removing characters
6918 When given just the @option{--delete} (@option{-d}) option, @command{tr}
6919 removes any input characters that are in @var{set1}.
6921 When given just the @option{--squeeze-repeats} (@option{-s}) option
6922 and not translating, @command{tr} replaces each input sequence of a
6923 repeated character that is in @var{set1} with a single occurrence of
6924 that character.
6926 When given both @option{--delete} and @option{--squeeze-repeats}, @command{tr}
6927 first performs any deletions using @var{set1}, then squeezes repeats
6928 from any remaining characters using @var{set2}.
6930 The @option{--squeeze-repeats} option may also be used when translating,
6931 in which case @command{tr} first performs translation, then squeezes
6932 repeats from any remaining characters using @var{set2}.
6934 Here are some examples to illustrate various combinations of options:
6936 @itemize @bullet
6938 @item
6939 Remove all zero bytes:
6941 @example
6942 tr -d '\0'
6943 @end example
6945 @item
6946 Put all words on lines by themselves.  This converts all
6947 non-alphanumeric characters to newlines, then squeezes each string
6948 of repeated newlines into a single newline:
6950 @example
6951 tr -cs '[:alnum:]' '[\n*]'
6952 @end example
6954 @item
6955 Convert each sequence of repeated newlines to a single newline.
6956 I.e., delete blank lines:
6958 @example
6959 tr -s '\n'
6960 @end example
6962 @item
6963 Find doubled occurrences of words in a document.
6964 @c Separate the following two "the"s, so typo checkers don't complain.
6965 For example, people often write ``the @w{}the'' with the repeated words
6966 separated by a newline.  The Bourne shell script below works first
6967 by converting each sequence of punctuation and blank characters to a
6968 single newline.  That puts each ``word'' on a line by itself.
6969 Next it maps all uppercase characters to lower case, and finally it
6970 runs @command{uniq} with the @option{-d} option to print out only the words
6971 that were repeated.
6973 @example
6974 #!/bin/sh
6975 cat -- "$@@" \
6976   | tr -s '[:punct:][:blank:]' '[\n*]' \
6977   | tr '[:upper:]' '[:lower:]' \
6978   | uniq -d
6979 @end example
6981 @item
6982 Deleting a small set of characters is usually straightforward.  For example,
6983 to remove all @samp{a}s, @samp{x}s, and @samp{M}s you would do this:
6985 @example
6986 tr -d axM
6987 @end example
6989 However, when @samp{-} is one of those characters, it can be tricky because
6990 @samp{-} has special meanings.  Performing the same task as above but also
6991 removing all @samp{-} characters, we might try @code{tr -d -axM}, but
6992 that would fail because @command{tr} would try to interpret @option{-a} as
6993 a command-line option.  Alternatively, we could try putting the hyphen
6994 inside the string, @code{tr -d a-xM}, but that wouldn't work either because
6995 it would make @command{tr} interpret @code{a-x} as the range of characters
6996 @samp{a}@dots{}@samp{x} rather than the three.
6997 One way to solve the problem is to put the hyphen at the end of the list
6998 of characters:
7000 @example
7001 tr -d axM-
7002 @end example
7004 Or you can use @samp{--} to terminate option processing:
7006 @example
7007 tr -d -- -axM
7008 @end example
7010 More generally, use the character class notation @code{[=c=]}
7011 with @samp{-} (or any other character) in place of the @samp{c}:
7013 @example
7014 tr -d '[=-=]axM'
7015 @end example
7017 Note how single quotes are used in the above example to protect the
7018 square brackets from interpretation by a shell.
7020 @end itemize
7023 @node expand invocation
7024 @section @command{expand}: Convert tabs to spaces
7026 @pindex expand
7027 @cindex tabs to spaces, converting
7028 @cindex converting tabs to spaces
7030 @command{expand} writes the contents of each given @var{file}, or standard
7031 input if none are given or for a @var{file} of @samp{-}, to standard
7032 output, with tab characters converted to the appropriate number of
7033 spaces.  Synopsis:
7035 @example
7036 expand [@var{option}]@dots{} [@var{file}]@dots{}
7037 @end example
7039 By default, @command{expand} converts all tabs to spaces.  It preserves
7040 backspace characters in the output; they decrement the column count for
7041 tab calculations.  The default action is equivalent to @option{-t 8} (set
7042 tabs every 8 columns).
7044 The program accepts the following options.  Also see @ref{Common options}.
7046 @table @samp
7048 @item -t @var{tab1}[,@var{tab2}]@dots{}
7049 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7050 @opindex -t
7051 @opindex --tabs
7052 @cindex tab stops, setting
7053 If only one tab stop is given, set the tabs @var{tab1} spaces apart
7054 (default is 8).  Otherwise, set the tabs at columns @var{tab1},
7055 @var{tab2}, @dots{} (numbered from 0), and replace any tabs beyond the
7056 last tab stop given with single spaces.
7057 @macro gnuExpandTabs
7058 Tab stops can be separated by blanks as well as by commas.
7060 As a GNU extension the last @var{tab} specified can be prefixed
7061 with a @samp{/} to indicate a tab size to use for remaining positions.
7062 For example, @option{--tabs=2,4,/8} will set tab stops at position 2 and 4,
7063 and every multiple of 8 after that.
7065 Also the last @var{tab} specified can be prefixed with a @samp{+} to indicate
7066 a tab size to use for remaining positions, offset from the final explicitly
7067 specified tab stop.
7068 For example, to ignore the 1 character gutter present in diff output,
7069 one can specify a 1 character offset using @option{--tabs=1,+8},
7070 which will set tab stops at positions 1,9,17,@dots{}
7071 @end macro
7072 @gnuExpandTabs
7075 For compatibility, GNU @command{expand} also accepts the obsolete
7076 option syntax, @option{-@var{t1}[,@var{t2}]@dots{}}.  New scripts
7077 should use @option{-t @var{t1}[,@var{t2}]@dots{}} instead.
7079 @item -i
7080 @itemx --initial
7081 @opindex -i
7082 @opindex --initial
7083 @cindex initial tabs, converting
7084 Only convert initial tabs (those that precede all non-space or non-tab
7085 characters) on each line to spaces.
7087 @end table
7089 @exitstatus
7092 @node unexpand invocation
7093 @section @command{unexpand}: Convert spaces to tabs
7095 @pindex unexpand
7097 @command{unexpand} writes the contents of each given @var{file}, or
7098 standard input if none are given or for a @var{file} of @samp{-}, to
7099 standard output, converting blanks at the beginning of each line into
7100 as many tab characters as needed.  In the default POSIX
7101 locale, a @dfn{blank} is a space or a tab; other locales may specify
7102 additional blank characters.  Synopsis:
7104 @example
7105 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
7106 @end example
7108 By default, @command{unexpand} converts only initial blanks (those
7109 that precede all non-blank characters) on each line.  It
7110 preserves backspace characters in the output; they decrement the column
7111 count for tab calculations.  By default, tabs are set at every 8th
7112 column.
7114 The program accepts the following options.  Also see @ref{Common options}.
7116 @table @samp
7118 @item -t @var{tab1}[,@var{tab2}]@dots{}
7119 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7120 @opindex -t
7121 @opindex --tabs
7122 If only one tab stop is given, set the tabs @var{tab1} columns apart
7123 instead of the default 8.  Otherwise, set the tabs at columns
7124 @var{tab1}, @var{tab2}, @dots{} (numbered from 0), and leave blanks
7125 beyond the tab stops given unchanged.
7126 @gnuExpandTabs
7128 This option implies the @option{-a} option.
7130 For compatibility, GNU @command{unexpand} supports the obsolete option syntax,
7131 @option{-@var{tab1}[,@var{tab2}]@dots{}}, where tab stops must be
7132 separated by commas.  (Unlike @option{-t}, this obsolete option does
7133 not imply @option{-a}.)  New scripts should use @option{--first-only -t
7134 @var{tab1}[,@var{tab2}]@dots{}} instead.
7136 @item -a
7137 @itemx --all
7138 @opindex -a
7139 @opindex --all
7140 Also convert all sequences of two or more blanks just before a tab stop,
7141 even if they occur after non-blank characters in a line.
7143 @end table
7145 @exitstatus
7148 @node Directory listing
7149 @chapter Directory listing
7151 This chapter describes the @command{ls} command and its variants @command{dir}
7152 and @command{vdir}, which list information about files.
7154 @menu
7155 * ls invocation::               List directory contents.
7156 * dir invocation::              Briefly ls.
7157 * vdir invocation::             Verbosely ls.
7158 * dircolors invocation::        Color setup for ls, etc.
7159 @end menu
7162 @node ls invocation
7163 @section @command{ls}: List directory contents
7165 @pindex ls
7166 @cindex directory listing
7168 The @command{ls} program lists information about files (of any type,
7169 including directories).  Options and file arguments can be intermixed
7170 arbitrarily, as usual.
7172 For non-option command-line arguments that are directories, by default
7173 @command{ls} lists the contents of directories, not recursively, and
7174 omitting files with names beginning with @samp{.}.  For other non-option
7175 arguments, by default @command{ls} lists just the file name.  If no
7176 non-option argument is specified, @command{ls} operates on the current
7177 directory, acting as if it had been invoked with a single argument of @samp{.}.
7179 @vindex LC_ALL
7180 By default, the output is sorted alphabetically, according to the locale
7181 settings in effect.@footnote{If you use a non-POSIX
7182 locale (e.g., by setting @env{LC_ALL} to @samp{en_US}), then @command{ls} may
7183 produce output that is sorted differently than you're accustomed to.
7184 In that case, set the @env{LC_ALL} environment variable to @samp{C}.}
7185 If standard output is
7186 a terminal, the output is in columns (sorted vertically) and control
7187 characters are output as question marks; otherwise, the output is listed
7188 one per line and control characters are output as-is.
7190 Because @command{ls} is such a fundamental program, it has accumulated many
7191 options over the years.  They are described in the subsections below;
7192 within each section, options are listed alphabetically (ignoring case).
7193 The division of options into the subsections is not absolute, since some
7194 options affect more than one aspect of @command{ls}'s operation.
7196 @cindex exit status of @command{ls}
7197 Exit status:
7199 @display
7200 0 success
7201 1 minor problems  (e.g., failure to access a file or directory not
7202   specified as a command line argument.  This happens when listing a
7203   directory in which entries are actively being removed or renamed.)
7204 2 serious trouble (e.g., memory exhausted, invalid option, failure
7205   to access a file or directory specified as a command line argument
7206   or a directory loop)
7207 @end display
7209 Also see @ref{Common options}.
7211 @menu
7212 * Which files are listed::
7213 * What information is listed::
7214 * Sorting the output::
7215 * Details about version sort::
7216 * General output formatting::
7217 * Formatting file timestamps::
7218 * Formatting the file names::
7219 @end menu
7222 @node Which files are listed
7223 @subsection Which files are listed
7225 These options determine which files @command{ls} lists information for.
7226 By default, @command{ls} lists files and the contents of any
7227 directories on the command line, except that in directories it ignores
7228 files whose names start with @samp{.}.
7230 @table @samp
7232 @item -a
7233 @itemx --all
7234 @opindex -a
7235 @opindex --all
7236 In directories, do not ignore file names that start with @samp{.}.
7238 @item -A
7239 @itemx --almost-all
7240 @opindex -A
7241 @opindex --almost-all
7242 In directories, do not ignore all file names that start with @samp{.};
7243 ignore only @file{.} and @file{..}.  The @option{--all} (@option{-a})
7244 option overrides this option.
7246 @item -B
7247 @itemx --ignore-backups
7248 @opindex -B
7249 @opindex --ignore-backups
7250 @cindex backup files, ignoring
7251 In directories, ignore files that end with @samp{~}.  This option is
7252 equivalent to @samp{--ignore='*~' --ignore='.*~'}.
7254 @item -d
7255 @itemx --directory
7256 @opindex -d
7257 @opindex --directory
7258 List just the names of directories, as with other types of files, rather
7259 than listing their contents.
7260 @c The following sentence is the same as the one for -F.
7261 Do not follow symbolic links listed on the
7262 command line unless the @option{--dereference-command-line} (@option{-H}),
7263 @option{--dereference} (@option{-L}), or
7264 @option{--dereference-command-line-symlink-to-dir} options are specified.
7266 @item -H
7267 @itemx --dereference-command-line
7268 @opindex -H
7269 @opindex --dereference-command-line
7270 @cindex symbolic links, dereferencing
7271 If a command line argument specifies a symbolic link, show information
7272 for the file the link references rather than for the link itself.
7274 @item --dereference-command-line-symlink-to-dir
7275 @opindex --dereference-command-line-symlink-to-dir
7276 @cindex symbolic links, dereferencing
7277 Do not dereference symbolic links, with one exception:
7278 if a command line argument specifies a symbolic link that refers to
7279 a directory, show information for that directory rather than for the
7280 link itself.
7281 This is the default behavior when no other dereferencing-related
7282 option has been specified (@option{--classify} (@option{-F}),
7283 @option{--directory} (@option{-d}),
7284 (@option{-l}),
7285 @option{--dereference} (@option{-L}), or
7286 @option{--dereference-command-line} (@option{-H})).
7288 @item --group-directories-first
7289 @opindex --group-directories-first
7290 Group all the directories before the files and then sort the
7291 directories and the files separately using the selected sort key
7292 (see --sort option).
7293 That is, this option specifies a primary sort key,
7294 and the --sort option specifies a secondary key.
7295 However, any use of @option{--sort=none}
7296 (@option{-U}) disables this option altogether.
7298 @item --hide=PATTERN
7299 @opindex --hide=@var{pattern}
7300 In directories, ignore files whose names match the shell pattern
7301 @var{pattern}, unless the @option{--all} (@option{-a}) or
7302 @option{--almost-all} (@option{-A}) is also given.  This
7303 option acts like @option{--ignore=@var{pattern}} except that it has no
7304 effect if @option{--all} (@option{-a}) or @option{--almost-all}
7305 (@option{-A}) is also given.
7307 This option can be useful in shell aliases.  For example, if
7308 @command{lx} is an alias for @samp{ls --hide='*~'} and @command{ly} is
7309 an alias for @samp{ls --ignore='*~'}, then the command @samp{lx -A}
7310 lists the file @file{README~} even though @samp{ly -A} would not.
7312 @item -I @var{pattern}
7313 @itemx --ignore=@var{pattern}
7314 @opindex -I
7315 @opindex --ignore=@var{pattern}
7316 In directories, ignore files whose names match the shell pattern
7317 (not regular expression) @var{pattern}.  As
7318 in the shell, an initial @samp{.} in a file name does not match a
7319 wildcard at the start of @var{pattern}.  Sometimes it is useful
7320 to give this option several times.  For example,
7322 @smallexample
7323 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
7324 @end smallexample
7326 The first option ignores names of length 3 or more that start with @samp{.},
7327 the second ignores all two-character names that start with @samp{.}
7328 except @samp{..}, and the third ignores names that start with @samp{#}.
7330 @item -L
7331 @itemx --dereference
7332 @opindex -L
7333 @opindex --dereference
7334 @cindex symbolic links, dereferencing
7335 When showing file information for a symbolic link, show information
7336 for the file the link references rather than the link itself.
7337 However, even with this option, @command{ls} still prints the name
7338 of the link itself, not the name of the file that the link points to.
7340 @item -R
7341 @itemx --recursive
7342 @opindex -R
7343 @opindex --recursive
7344 @cindex recursive directory listing
7345 @cindex directory listing, recursive
7346 List the contents of all directories recursively.
7348 @end table
7351 @node What information is listed
7352 @subsection What information is listed
7354 These options affect the information that @command{ls} displays.  By
7355 default, only file names are shown.
7357 @table @samp
7359 @item --author
7360 @opindex --author
7361 @cindex hurd, author, printing
7362 List each file's author when producing long format directory listings.
7363 In GNU/Hurd, file authors can differ from their owners, but in other
7364 operating systems the two are the same.
7366 @item -D
7367 @itemx --dired
7368 @opindex -D
7369 @opindex --dired
7370 @cindex dired Emacs mode support
7371 With the long listing (@option{-l}) format, print an additional line after
7372 the main output:
7374 @example
7375 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
7376 @end example
7378 @noindent
7379 The @var{begn} and @var{endn} are unsigned integers that record the
7380 byte position of the beginning and end of each file name in the output.
7381 This makes it easy for Emacs to find the names, even when they contain
7382 unusual characters such as space or newline, without fancy searching.
7384 If directories are being listed recursively (@option{-R}), output a similar
7385 line with offsets for each subdirectory name:
7387 @example
7388 //SUBDIRED// @var{beg1} @var{end1} @dots{}
7389 @end example
7391 Finally, output a line of the form:
7393 @example
7394 //DIRED-OPTIONS// --quoting-style=@var{word}
7395 @end example
7397 @noindent
7398 where @var{word} is the quoting style (@pxref{Formatting the file names}).
7400 Here is an actual example:
7402 @example
7403 $ mkdir -p a/sub/deeper a/sub2
7404 $ touch a/f1 a/f2
7405 $ touch a/sub/deeper/file
7406 $ ls -gloRF --dired a
7407   a:
7408   total 8
7409   -rw-r--r-- 1    0 Jun 10 12:27 f1
7410   -rw-r--r-- 1    0 Jun 10 12:27 f2
7411   drwxr-xr-x 3 4096 Jun 10 12:27 sub/
7412   drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
7414   a/sub:
7415   total 4
7416   drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
7418   a/sub/deeper:
7419   total 0
7420   -rw-r--r-- 1 0 Jun 10 12:27 file
7422   a/sub2:
7423   total 0
7424 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
7425 //SUBDIRED// 2 3 167 172 228 240 290 296
7426 //DIRED-OPTIONS// --quoting-style=literal
7427 @end example
7429 Note that the pairs of offsets on the @samp{//DIRED//} line above delimit
7430 these names: @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper},
7431 @file{file}.
7432 The offsets on the @samp{//SUBDIRED//} line delimit the following
7433 directory names: @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}.
7435 Here is an example of how to extract the fifth entry name, @samp{deeper},
7436 corresponding to the pair of offsets, 222 and 228:
7438 @example
7439 $ ls -gloRF --dired a > out
7440 $ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo
7441 deeper
7442 @end example
7444 Note that although the listing above includes a trailing slash
7445 for the @samp{deeper} entry, the offsets select the name without
7446 the trailing slash.  However, if you invoke @command{ls} with @option{--dired}
7447 along with an option like @option{--escape} (aka @option{-b}) and operate
7448 on a file whose name contains special characters, notice that the backslash
7449 @emph{is} included:
7451 @example
7452 $ touch 'a b'
7453 $ ls -blog --dired 'a b'
7454   -rw-r--r-- 1 0 Jun 10 12:28 a\ b
7455 //DIRED// 30 34
7456 //DIRED-OPTIONS// --quoting-style=escape
7457 @end example
7459 If you use a quoting style that adds quote marks
7460 (e.g., @option{--quoting-style=c}), then the offsets include the quote marks.
7461 So beware that the user may select the quoting style via the environment
7462 variable @env{QUOTING_STYLE}@.  Hence, applications using @option{--dired}
7463 should either specify an explicit @option{--quoting-style=literal} option
7464 (aka @option{-N} or @option{--literal}) on the command line, or else be
7465 prepared to parse the escaped names.
7467 @item --full-time
7468 @opindex --full-time
7469 Produce long format directory listings, and list times in full.  It is
7470 equivalent to using @option{--format=long} with
7471 @option{--time-style=full-iso} (@pxref{Formatting file timestamps}).
7473 @item -g
7474 @opindex -g
7475 Produce long format directory listings, but don't display owner information.
7477 @item -G
7478 @itemx --no-group
7479 @opindex -G
7480 @opindex --no-group
7481 Inhibit display of group information in a long format directory listing.
7482 (This is the default in some non-GNU versions of @command{ls}, so we
7483 provide this option for compatibility.)
7485 @optHumanReadable
7487 @item -i
7488 @itemx --inode
7489 @opindex -i
7490 @opindex --inode
7491 @cindex inode number, printing
7492 Print the inode number (also called the file serial number and index
7493 number) of each file to the left of the file name.  (This number
7494 uniquely identifies each file within a particular file system.)
7496 @item -l
7497 @itemx --format=long
7498 @itemx --format=verbose
7499 @opindex -l
7500 @opindex --format
7501 @opindex long ls @r{format}
7502 @opindex verbose ls @r{format}
7503 In addition to the name of each file, print the file type, file mode bits,
7504 number of hard links, owner name, group name, size, and
7505 timestamp (@pxref{Formatting file timestamps}), normally
7506 the modification timestamp (the mtime, @pxref{File timestamps}).
7507 Print question marks for information that
7508 cannot be determined.
7510 Normally the size is printed as a byte count without punctuation, but
7511 this can be overridden (@pxref{Block size}).  For example, @option{-h}
7512 prints an abbreviated, human-readable count, and
7513 @samp{--block-size="'1"} prints a byte count with the thousands
7514 separator of the current locale.
7516 For each directory that is listed, preface the files with a line
7517 @samp{total @var{blocks}}, where @var{blocks} is the total disk allocation
7518 for all files in that directory.  The block size currently defaults to 1024
7519 bytes, but this can be overridden (@pxref{Block size}).
7520 The @var{blocks} computed counts each hard link separately;
7521 this is arguably a deficiency.
7523 The file type is one of the following characters:
7525 @c The commented-out entries are ones we're not sure about.
7527 @table @samp
7528 @item -
7529 regular file
7530 @item b
7531 block special file
7532 @item c
7533 character special file
7534 @item C
7535 high performance (``contiguous data'') file
7536 @item d
7537 directory
7538 @item D
7539 door (Solaris 2.5 and up)
7540 @c @item F
7541 @c semaphore, if this is a distinct file type
7542 @item l
7543 symbolic link
7544 @c @item m
7545 @c multiplexed file (7th edition Unix; obsolete)
7546 @item M
7547 off-line (``migrated'') file (Cray DMF)
7548 @item n
7549 network special file (HP-UX)
7550 @item p
7551 FIFO (named pipe)
7552 @item P
7553 port (Solaris 10 and up)
7554 @c @item Q
7555 @c message queue, if this is a distinct file type
7556 @item s
7557 socket
7558 @c @item S
7559 @c shared memory object, if this is a distinct file type
7560 @c @item T
7561 @c typed memory object, if this is a distinct file type
7562 @c @item w
7563 @c whiteout (4.4BSD; not implemented)
7564 @item ?
7565 some other file type
7566 @end table
7568 @cindex permissions, output by @command{ls}
7569 The file mode bits listed are similar to symbolic mode specifications
7570 (@pxref{Symbolic Modes}).  But @command{ls} combines multiple bits into the
7571 third character of each set of permissions as follows:
7573 @table @samp
7574 @item s
7575 If the set-user-ID or set-group-ID bit and the corresponding executable bit
7576 are both set.
7578 @item S
7579 If the set-user-ID or set-group-ID bit is set but the corresponding
7580 executable bit is not set.
7582 @item t
7583 If the restricted deletion flag or sticky bit, and the
7584 other-executable bit, are both set.  The restricted deletion flag is
7585 another name for the sticky bit.  @xref{Mode Structure}.
7587 @item T
7588 If the restricted deletion flag or sticky bit is set but the
7589 other-executable bit is not set.
7591 @item x
7592 If the executable bit is set and none of the above apply.
7594 @item -
7595 Otherwise.
7596 @end table
7598 Following the file mode bits is a single character that specifies
7599 whether an alternate access method such as an access control list
7600 applies to the file.  When the character following the file mode bits is a
7601 space, there is no alternate access method.  When it is a printing
7602 character, then there is such a method.
7604 GNU @command{ls} uses a @samp{.} character to indicate a file
7605 with a security context, but no other alternate access method.
7607 A file with any other combination of alternate access methods
7608 is marked with a @samp{+} character.
7610 @item -n
7611 @itemx --numeric-uid-gid
7612 @opindex -n
7613 @opindex --numeric-uid-gid
7614 @cindex numeric uid and gid
7615 @cindex numeric user and group IDs
7616 Produce long format directory listings, but
7617 display numeric user and group IDs instead of the owner and group names.
7619 @item -o
7620 @opindex -o
7621 Produce long format directory listings, but don't display group information.
7622 It is equivalent to using @option{--format=long} with @option{--no-group} .
7624 @item -s
7625 @itemx --size
7626 @opindex -s
7627 @opindex --size
7628 @cindex disk allocation
7629 @cindex size of files, reporting
7630 Print the disk allocation of each file to the left of the file name.
7631 This is the amount of disk space used by the file, which is usually a
7632 bit more than the file's size, but it can be less if the file has holes.
7634 Normally the disk allocation is printed in units of
7635 1024 bytes, but this can be overridden (@pxref{Block size}).
7637 @cindex NFS mounts from BSD to HP-UX
7638 For files that are NFS-mounted from an HP-UX system to a BSD system,
7639 this option reports sizes that are half the correct values.  On HP-UX
7640 systems, it reports sizes that are twice the correct values for files
7641 that are NFS-mounted from BSD systems.  This is due to a flaw in HP-UX;
7642 it also affects the HP-UX @command{ls} program.
7644 @optSi
7646 @item -Z
7647 @itemx --context
7648 @opindex -Z
7649 @opindex --context
7650 @cindex SELinux
7651 @cindex security context
7652 Display the SELinux security context or @samp{?} if none is found.
7653 When used with the @option{-l} option, print the security context
7654 to the left of the size column.
7656 @end table
7659 @node Sorting the output
7660 @subsection Sorting the output
7662 @cindex sorting @command{ls} output
7663 These options change the order in which @command{ls} sorts the information
7664 it outputs.  By default, sorting is done by character code
7665 (e.g., ASCII order).
7667 @table @samp
7669 @item -c
7670 @itemx --time=ctime
7671 @itemx --time=status
7672 @opindex -c
7673 @opindex --time
7674 @opindex ctime@r{, printing or sorting by}
7675 @opindex status time@r{, printing or sorting by}
7676 @opindex use time@r{, printing or sorting files by}
7677 If the long listing format (e.g., @option{-l}, @option{-o}) is being used,
7678 print the status change timestamp (the ctime) instead of the mtime.
7679 When explicitly sorting by time (@option{--sort=time} or @option{-t})
7680 or when not using a long listing format,
7681 sort according to the ctime.  @xref{File timestamps}.
7683 @item -f
7684 @opindex -f
7685 @cindex unsorted directory listing
7686 @cindex directory order, listing by
7687 Primarily, like @option{-U}---do not sort; list the files in whatever
7688 order they are stored in the directory.  But also enable @option{-a} (list
7689 all files) and disable @option{-l}, @option{--color}, and @option{-s} (if they
7690 were specified before the @option{-f}).
7692 @item -r
7693 @itemx --reverse
7694 @opindex -r
7695 @opindex --reverse
7696 @cindex reverse sorting
7697 Reverse whatever the sorting method is---e.g., list files in reverse
7698 alphabetical order, youngest first, smallest first, or whatever.
7700 @item -S
7701 @itemx --sort=size
7702 @opindex -S
7703 @opindex --sort
7704 @opindex size of files@r{, sorting files by}
7705 Sort by file size, largest first.
7707 @item -t
7708 @itemx --sort=time
7709 @opindex -t
7710 @opindex --sort
7711 @opindex modification timestamp@r{, sorting files by}
7712 Sort by modification timestamp (mtime), newest first.
7713 @xref{File timestamps}.
7715 @item -u
7716 @itemx --time=atime
7717 @itemx --time=access
7718 @itemx --time=use
7719 @opindex -u
7720 @opindex --time
7721 @opindex use time@r{, printing or sorting files by}
7722 @opindex atime@r{, printing or sorting files by}
7723 @opindex access timestamp@r{, printing or sorting files by}
7724 If the long listing format (e.g., @option{--format=long}) is being used,
7725 print the last access timestamp (the atime).
7726 When explicitly sorting by time (@option{--sort=time} or @option{-t})
7727 or when not using a long listing format, sort according to the atime.
7728 @xref{File timestamps}.
7730 @item -U
7731 @itemx --sort=none
7732 @opindex -U
7733 @opindex --sort
7734 @opindex none@r{, sorting option for @command{ls}}
7735 Do not sort; list the files in whatever order they are
7736 stored in the directory.  (Do not do any of the other unrelated things
7737 that @option{-f} does.)  This is especially useful when listing very large
7738 directories, since not doing any sorting can be noticeably faster.
7740 @item -v
7741 @itemx --sort=version
7742 @opindex -v
7743 @opindex --sort
7744 @opindex version@r{, sorting option for @command{ls}}
7745 Sort by version name and number, lowest first.  It behaves like a default
7746 sort, except that each sequence of decimal digits is treated numerically
7747 as an index/version number.  (@xref{Details about version sort}.)
7749 @item -X
7750 @itemx --sort=extension
7751 @opindex -X
7752 @opindex --sort
7753 @opindex extension@r{, sorting files by}
7754 Sort directory contents alphabetically by file extension (characters
7755 after the last @samp{.}); files with no extension are sorted first.
7757 @end table
7760 @node Details about version sort
7761 @subsection Details about version sort
7763 Version sorting handles the fact that file names frequently include indices or
7764 version numbers.  Standard sorting usually does not produce the order that one
7765 expects because comparisons are made on a character-by-character basis.
7766 Version sorting is especially useful when browsing directories that contain
7767 many files with indices/version numbers in their names:
7769 @example
7770 $ ls -1            $ ls -1v
7771 abc.zml-1.gz       abc.zml-1.gz
7772 abc.zml-12.gz      abc.zml-2.gz
7773 abc.zml-2.gz       abc.zml-12.gz
7774 @end example
7776 Version-sorted strings are compared such that if @var{ver1} and @var{ver2}
7777 are version numbers and @var{prefix} and @var{suffix} (@var{suffix} matching
7778 the regular expression @samp{(\.[A-Za-z~][A-Za-z0-9~]*)*}) are strings then
7779 @var{ver1} < @var{ver2} implies that the name composed of
7780 ``@var{prefix} @var{ver1} @var{suffix}'' sorts before
7781 ``@var{prefix} @var{ver2} @var{suffix}''.
7783 Note also that leading zeros of numeric parts are ignored:
7785 @example
7786 $ ls -1            $ ls -1v
7787 abc-1.007.tgz      abc-1.01a.tgz
7788 abc-1.012b.tgz     abc-1.007.tgz
7789 abc-1.01a.tgz      abc-1.012b.tgz
7790 @end example
7792 This functionality is implemented using gnulib's @code{filevercmp} function,
7793 which has some caveats worth noting.
7795 @itemize @bullet
7796 @item @env{LC_COLLATE} is ignored, which means @samp{ls -v} and @samp{sort -V}
7797 will sort non-numeric prefixes as if the @env{LC_COLLATE} locale category
7798 was set to @samp{C}@.
7799 @item Some suffixes will not be matched by the regular
7800 expression mentioned above.  Consequently these examples may
7801 not sort as you expect:
7803 @example
7804 abc-1.2.3.4.7z
7805 abc-1.2.3.7z
7806 @end example
7808 @example
7809 abc-1.2.3.4.x86_64.rpm
7810 abc-1.2.3.x86_64.rpm
7811 @end example
7812 @end itemize
7814 @node General output formatting
7815 @subsection General output formatting
7817 These options affect the appearance of the overall output.
7819 @table @samp
7821 @item -1
7822 @itemx --format=single-column
7823 @opindex -1
7824 @opindex --format
7825 @opindex single-column @r{output of files}
7826 List one file per line.  This is the default for @command{ls} when standard
7827 output is not a terminal.  See also the @option{-b} and @option{-q} options
7828 to suppress direct output of newline characters within a file name.
7830 @item -C
7831 @itemx --format=vertical
7832 @opindex -C
7833 @opindex --format
7834 @opindex vertical @r{sorted files in columns}
7835 List files in columns, sorted vertically.  This is the default for
7836 @command{ls} if standard output is a terminal.  It is always the default
7837 for the @command{dir} program.
7838 GNU @command{ls} uses variable width columns to display as many files as
7839 possible in the fewest lines.
7841 @item --color [=@var{when}]
7842 @opindex --color
7843 @cindex color, distinguishing file types with
7844 Specify whether to use color for distinguishing file types.  @var{when}
7845 may be omitted, or one of:
7846 @itemize @bullet
7847 @item none
7848 @vindex none @r{color option}
7849 - Do not use color at all.  This is the default.
7850 @item auto
7851 @vindex auto @r{color option}
7852 @cindex terminal, using color iff
7853 - Only use color if standard output is a terminal.
7854 @item always
7855 @vindex always @r{color option}
7856 - Always use color.
7857 @end itemize
7858 Specifying @option{--color} and no @var{when} is equivalent to
7859 @option{--color=always}.
7860 Piping a colorized listing through a pager like @command{more} or
7861 @command{less} usually produces unreadable results.  However, using
7862 @code{more -f} does seem to work.
7864 @vindex LS_COLORS
7865 @vindex SHELL @r{environment variable, and color}
7866 Note that using the @option{--color} option may incur a noticeable
7867 performance penalty when run in a directory with very many entries,
7868 because the default settings require that @command{ls} @code{stat} every
7869 single file it lists.
7870 However, if you would like most of the file-type coloring
7871 but can live without the other coloring options (e.g.,
7872 executable, orphan, sticky, other-writable, capability), use
7873 @command{dircolors} to set the @env{LS_COLORS} environment variable like this,
7874 @example
7875 eval $(dircolors -p | perl -pe \
7876   's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
7877 @end example
7878 and on a @code{dirent.d_type}-capable file system, @command{ls}
7879 will perform only one @code{stat} call per command line argument.
7881 @item -F
7882 @itemx --classify
7883 @itemx --indicator-style=classify
7884 @opindex -F
7885 @opindex --classify
7886 @opindex --indicator-style
7887 @cindex file type and executables, marking
7888 @cindex executables and file type, marking
7889 Append a character to each file name indicating the file type.  Also,
7890 for regular files that are executable, append @samp{*}.  The file type
7891 indicators are @samp{/} for directories, @samp{@@} for symbolic links,
7892 @samp{|} for FIFOs, @samp{=} for sockets, @samp{>} for doors,
7893 and nothing for regular files.
7894 @c The following sentence is the same as the one for -d.
7895 Do not follow symbolic links listed on the
7896 command line unless the @option{--dereference-command-line} (@option{-H}),
7897 @option{--dereference} (@option{-L}), or
7898 @option{--dereference-command-line-symlink-to-dir} options are specified.
7900 @item --file-type
7901 @itemx --indicator-style=file-type
7902 @opindex --file-type
7903 @opindex --indicator-style
7904 @cindex file type, marking
7905 Append a character to each file name indicating the file type.  This is
7906 like @option{-F}, except that executables are not marked.
7908 @item --indicator-style=@var{word}
7909 @opindex --indicator-style
7910 Append a character indicator with style @var{word} to entry names,
7911 as follows:
7913 @table @samp
7914 @item none
7915 Do not append any character indicator; this is the default.
7916 @item slash
7917 Append @samp{/} for directories.  This is the same as the @option{-p}
7918 option.
7919 @item file-type
7920 Append @samp{/} for directories, @samp{@@} for symbolic links, @samp{|}
7921 for FIFOs, @samp{=} for sockets, and nothing for regular files.  This is
7922 the same as the @option{--file-type} option.
7923 @item classify
7924 Append @samp{*} for executable regular files, otherwise behave as for
7925 @samp{file-type}.  This is the same as the @option{-F} or
7926 @option{--classify} option.
7927 @end table
7929 @item -k
7930 @itemx --kibibytes
7931 @opindex -k
7932 @opindex --kibibytes
7933 Set the default block size to its normal value of 1024 bytes,
7934 overriding any contrary specification in environment variables
7935 (@pxref{Block size}).  This option is in turn overridden by the
7936 @option{--block-size}, @option{-h} or @option{--human-readable}, and
7937 @option{--si} options.
7939 The @option{-k} or @option{--kibibytes} option affects the
7940 per-directory block count written by the @option{-l} and similar
7941 options, and the size written by the @option{-s} or @option{--size}
7942 option.  It does not affect the file size written by @option{-l}.
7944 @item -m
7945 @itemx --format=commas
7946 @opindex -m
7947 @opindex --format
7948 @opindex commas@r{, outputting between files}
7949 List files horizontally, with as many as will fit on each line,
7950 separated by @samp{, } (a comma and a space).
7952 @item -p
7953 @itemx --indicator-style=slash
7954 @opindex -p
7955 @opindex --indicator-style
7956 @cindex file type, marking
7957 Append a @samp{/} to directory names.
7959 @item -x
7960 @itemx --format=across
7961 @itemx --format=horizontal
7962 @opindex -x
7963 @opindex --format
7964 @opindex across@r{, listing files}
7965 @opindex horizontal@r{, listing files}
7966 List the files in columns, sorted horizontally.
7968 @item -T @var{cols}
7969 @itemx --tabsize=@var{cols}
7970 @opindex -T
7971 @opindex --tabsize
7972 Assume that each tab stop is @var{cols} columns wide.  The default is 8.
7973 @command{ls} uses tabs where possible in the output, for efficiency.  If
7974 @var{cols} is zero, do not use tabs at all.
7976 Some terminal emulators might not properly align columns to the right of a
7977 TAB following a non-ASCII byte.  You can avoid that issue by using the
7978 @option{-T0} option or put @code{TABSIZE=0} in your environment, to tell
7979 @command{ls} to align using spaces, not tabs.
7981 @item -w @var{cols}
7982 @itemx --width=@var{cols}
7983 @opindex -w
7984 @opindex --width
7985 @vindex COLUMNS
7986 Assume the screen is @var{cols} columns wide.  The default is taken
7987 from the terminal settings if possible; otherwise the environment
7988 variable @env{COLUMNS} is used if it is set; otherwise the default
7989 is 80.  With a @var{cols} value of @samp{0}, there is no limit on
7990 the length of the output line, and that single output line will
7991 be delimited with spaces, not tabs.
7993 @end table
7996 @node Formatting file timestamps
7997 @subsection Formatting file timestamps
7999 By default, file timestamps are listed in abbreviated form, using
8000 a date like @samp{Mar 30@ @ 2002} for non-recent timestamps, and a
8001 date-without-year and time like @samp{Mar 30 23:45} for recent timestamps.
8002 This format can change depending on the current locale as detailed below.
8004 @cindex clock skew
8005 A timestamp is considered to be @dfn{recent} if it is less than six
8006 months old, and is not dated in the future.  If a timestamp dated
8007 today is not listed in recent form, the timestamp is in the future,
8008 which means you probably have clock skew problems which may break
8009 programs like @command{make} that rely on file timestamps.
8010 @xref{File timestamps}.
8012 @vindex TZ
8013 Timestamps are listed according to the time zone rules specified by
8014 the @env{TZ} environment variable, or by the system default rules if
8015 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
8016 with @env{TZ}, libc, The GNU C Library Reference Manual}.
8018 The following option changes how file timestamps are printed.
8020 @table @samp
8021 @item --time-style=@var{style}
8022 @opindex --time-style
8023 @cindex time style
8024 List timestamps in style @var{style}.  The @var{style} should
8025 be one of the following:
8027 @table @samp
8028 @item +@var{format}
8029 @vindex LC_TIME
8030 List timestamps using @var{format}, where @var{format} is interpreted
8031 like the format argument of @command{date} (@pxref{date invocation}).
8032 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
8033 @command{ls} to list timestamps like @samp{2002-03-30 23:45:56}.  As
8034 with @command{date}, @var{format}'s interpretation is affected by the
8035 @env{LC_TIME} locale category.
8037 If @var{format} contains two format strings separated by a newline,
8038 the former is used for non-recent files and the latter for recent
8039 files; if you want output columns to line up, you may need to insert
8040 spaces in one of the two formats.
8042 @item full-iso
8043 List timestamps in full using ISO 8601-like date, time, and time zone
8044 components with nanosecond precision, e.g., @samp{2002-03-30
8045 23:45:56.477817180 -0700}.  This style is equivalent to
8046 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
8048 This is useful because the time output includes all the information that
8049 is available from the operating system.  For example, this can help
8050 explain @command{make}'s behavior, since GNU @command{make}
8051 uses the full timestamp to determine whether a file is out of date.
8053 @item long-iso
8054 List ISO 8601 date and time components with minute precision, e.g.,
8055 @samp{2002-03-30 23:45}.  These timestamps are shorter than
8056 @samp{full-iso} timestamps, and are usually good enough for everyday
8057 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
8059 @item iso
8060 List ISO 8601 dates for non-recent timestamps (e.g.,
8061 @samp{2002-03-30@ }), and ISO 8601-like month, day, hour, and
8062 minute for recent timestamps (e.g., @samp{03-30 23:45}).  These
8063 timestamps are uglier than @samp{long-iso} timestamps, but they carry
8064 nearly the same information in a smaller space and their brevity helps
8065 @command{ls} output fit within traditional 80-column output lines.
8066 The following two @command{ls} invocations are equivalent:
8068 @example
8069 newline='
8071 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
8072 ls -l --time-style="iso"
8073 @end example
8075 @item locale
8076 @vindex LC_TIME
8077 List timestamps in a locale-dependent form.  For example, a Finnish
8078 locale might list non-recent timestamps like @samp{maalis 30@ @ 2002}
8079 and recent timestamps like @samp{maalis 30 23:45}.  Locale-dependent
8080 timestamps typically consume more space than @samp{iso} timestamps and
8081 are harder for programs to parse because locale conventions vary so
8082 widely, but they are easier for many people to read.
8084 The @env{LC_TIME} locale category specifies the timestamp format.  The
8085 default POSIX locale uses timestamps like @samp{Mar 30@
8086 @ 2002} and @samp{Mar 30 23:45}; in this locale, the following two
8087 @command{ls} invocations are equivalent:
8089 @example
8090 newline='
8092 ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
8093 ls -l --time-style="locale"
8094 @end example
8096 Other locales behave differently.  For example, in a German locale,
8097 @option{--time-style="locale"} might be equivalent to
8098 @option{--time-style="+%e. %b %Y $newline%e. %b %H:%M"}
8099 and might generate timestamps like @samp{30. M@"ar 2002@ } and
8100 @samp{30. M@"ar 23:45}.
8102 @item posix-@var{style}
8103 @vindex LC_TIME
8104 List POSIX-locale timestamps if the @env{LC_TIME} locale
8105 category is POSIX, @var{style} timestamps otherwise.  For
8106 example, the @samp{posix-long-iso} style lists
8107 timestamps like @samp{Mar 30@ @ 2002} and @samp{Mar 30 23:45} when in
8108 the POSIX locale, and like @samp{2002-03-30 23:45} otherwise.
8109 @end table
8110 @end table
8112 @vindex TIME_STYLE
8113 You can specify the default value of the @option{--time-style} option
8114 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
8115 the default style is @samp{locale}.  GNU Emacs 21.3 and
8116 later use the @option{--dired} option and therefore can parse any date
8117 format, but if you are using Emacs 21.1 or 21.2 and specify a
8118 non-POSIX locale you may need to set
8119 @samp{TIME_STYLE="posix-long-iso"}.
8121 To avoid certain denial-of-service attacks, timestamps that would be
8122 longer than 1000 bytes may be treated as errors.
8125 @node Formatting the file names
8126 @subsection Formatting the file names
8128 These options change how file names themselves are printed.
8130 @table @samp
8132 @item -b
8133 @itemx --escape
8134 @itemx --quoting-style=escape
8135 @opindex -b
8136 @opindex --escape
8137 @opindex --quoting-style
8138 @cindex backslash sequences for file names
8139 Quote nongraphic characters in file names using alphabetic and octal
8140 backslash sequences like those used in C.
8142 @item -N
8143 @itemx --literal
8144 @itemx --quoting-style=literal
8145 @opindex -N
8146 @opindex --literal
8147 @opindex --quoting-style
8148 Do not quote file names.  However, with @command{ls} nongraphic
8149 characters are still printed as question marks if the output is a
8150 terminal and you do not specify the @option{--show-control-chars}
8151 option.
8153 @item -q
8154 @itemx --hide-control-chars
8155 @opindex -q
8156 @opindex --hide-control-chars
8157 Print question marks instead of nongraphic characters in file names.
8158 This is the default if the output is a terminal and the program is
8159 @command{ls}.
8161 @item -Q
8162 @itemx --quote-name
8163 @itemx --quoting-style=c
8164 @opindex -Q
8165 @opindex --quote-name
8166 @opindex --quoting-style
8167 Enclose file names in double quotes and quote nongraphic characters as
8168 in C.
8170 @item --quoting-style=@var{word}
8171 @opindex --quoting-style
8172 @cindex quoting style
8173 Use style @var{word} to quote file names and other strings that may
8174 contain arbitrary characters.  The @var{word} should
8175 be one of the following:
8177 @macro quotingStyles
8178 @table @samp
8179 @item literal
8180 Output strings as-is; this is the same as the @option{-N} or
8181 @option{--literal} option.
8182 @item shell
8183 Quote strings for the shell if they contain shell metacharacters or would
8184 cause ambiguous output.
8185 The quoting is suitable for POSIX-compatible shells like
8186 @command{bash}, but it does not always work for incompatible shells
8187 like @command{csh}.
8188 @item shell-always
8189 Quote strings for the shell, even if they would normally not require quoting.
8190 @item shell-escape
8191 Like @samp{shell}, but also quoting non-printable characters using the POSIX
8192 proposed @samp{$''} syntax suitable for most shells.
8193 @item shell-escape-always
8194 Like @samp{shell-escape}, but quote strings even if they would
8195 normally not require quoting.
8196 @item c
8197 Quote strings as for C character string literals, including the
8198 surrounding double-quote characters; this is the same as the
8199 @option{-Q} or @option{--quote-name} option.
8200 @item escape
8201 Quote strings as for C character string literals, except omit the
8202 surrounding double-quote
8203 characters; this is the same as the @option{-b} or @option{--escape} option.
8204 @item clocale
8205 Quote strings as for C character string literals, except use
8206 surrounding quotation marks appropriate for the
8207 locale.
8208 @item locale
8209 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
8210 Quote strings as for C character string literals, except use
8211 surrounding quotation marks appropriate for the locale, and quote
8212 @t{'like this'} instead of @t{"like
8213 this"} in the default C locale.  This looks nicer on many displays.
8214 @end table
8215 @end macro
8216 @quotingStyles
8218 You can specify the default value of the @option{--quoting-style} option
8219 with the environment variable @env{QUOTING_STYLE}@.  If that environment
8220 variable is not set, the default value is @samp{shell-escape} when the
8221 output is a terminal, and @samp{literal} otherwise.
8223 @item --show-control-chars
8224 @opindex --show-control-chars
8225 Print nongraphic characters as-is in file names.
8226 This is the default unless the output is a terminal and the program is
8227 @command{ls}.
8229 @end table
8232 @node dir invocation
8233 @section @command{dir}: Briefly list directory contents
8235 @pindex dir
8236 @cindex directory listing, brief
8238 @command{dir} is equivalent to @code{ls -C
8239 -b}; that is, by default files are listed in columns, sorted vertically,
8240 and special characters are represented by backslash escape sequences.
8242 @xref{ls invocation, @command{ls}}.
8245 @node vdir invocation
8246 @section @command{vdir}: Verbosely list directory contents
8248 @pindex vdir
8249 @cindex directory listing, verbose
8251 @command{vdir} is equivalent to @code{ls -l
8252 -b}; that is, by default files are listed in long format and special
8253 characters are represented by backslash escape sequences.
8255 @xref{ls invocation, @command{ls}}.
8257 @node dircolors invocation
8258 @section @command{dircolors}: Color setup for @command{ls}
8260 @pindex dircolors
8261 @cindex color setup
8262 @cindex setup for color
8264 @command{dircolors} outputs a sequence of shell commands to set up the
8265 terminal for color output from @command{ls} (and @command{dir}, etc.).
8266 Typical usage:
8268 @example
8269 eval "$(dircolors [@var{option}]@dots{} [@var{file}])"
8270 @end example
8272 If @var{file} is specified, @command{dircolors} reads it to determine which
8273 colors to use for which file types and extensions.  Otherwise, a
8274 precompiled database is used.  For details on the format of these files,
8275 run @samp{dircolors --print-database}.
8277 To make @command{dircolors} read a @file{~/.dircolors} file if it
8278 exists, you can put the following lines in your @file{~/.bashrc} (or
8279 adapt them to your favorite shell):
8281 @example
8282 d=.dircolors
8283 test -r $d && eval "$(dircolors $d)"
8284 @end example
8286 @vindex LS_COLORS
8287 @vindex SHELL @r{environment variable, and color}
8288 The output is a shell command to set the @env{LS_COLORS} environment
8289 variable.  You can specify the shell syntax to use on the command line,
8290 or @command{dircolors} will guess it from the value of the @env{SHELL}
8291 environment variable.
8293 The program accepts the following options.  Also see @ref{Common options}.
8295 @table @samp
8296 @item -b
8297 @itemx --sh
8298 @itemx --bourne-shell
8299 @opindex -b
8300 @opindex --sh
8301 @opindex --bourne-shell
8302 @cindex Bourne shell syntax for color setup
8303 @cindex @command{sh} syntax for color setup
8304 Output Bourne shell commands.  This is the default if the @env{SHELL}
8305 environment variable is set and does not end with @samp{csh} or
8306 @samp{tcsh}.
8308 @item -c
8309 @itemx --csh
8310 @itemx --c-shell
8311 @opindex -c
8312 @opindex --csh
8313 @opindex --c-shell
8314 @cindex C shell syntax for color setup
8315 @cindex @command{csh} syntax for color setup
8316 Output C shell commands.  This is the default if @code{SHELL} ends with
8317 @command{csh} or @command{tcsh}.
8319 @item -p
8320 @itemx --print-database
8321 @opindex -p
8322 @opindex --print-database
8323 @cindex color database, printing
8324 @cindex database for color setup, printing
8325 @cindex printing color database
8326 Print the (compiled-in) default color configuration database.  This
8327 output is itself a valid configuration file, and is fairly descriptive
8328 of the possibilities.
8330 @end table
8332 @exitstatus
8335 @node Basic operations
8336 @chapter Basic operations
8338 @cindex manipulating files
8340 This chapter describes the commands for basic file manipulation:
8341 copying, moving (renaming), and deleting (removing).
8343 @menu
8344 * cp invocation::               Copy files.
8345 * dd invocation::               Convert and copy a file.
8346 * install invocation::          Copy files and set attributes.
8347 * mv invocation::               Move (rename) files.
8348 * rm invocation::               Remove files or directories.
8349 * shred invocation::            Remove files more securely.
8350 @end menu
8353 @node cp invocation
8354 @section @command{cp}: Copy files and directories
8356 @pindex cp
8357 @cindex copying files and directories
8358 @cindex files, copying
8359 @cindex directories, copying
8361 @command{cp} copies files (or, optionally, directories).  The copy is
8362 completely independent of the original.  You can either copy one file to
8363 another, or copy arbitrarily many files to a destination directory.
8364 Synopses:
8366 @example
8367 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
8368 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
8369 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
8370 @end example
8372 @itemize @bullet
8373 @item
8374 If two file names are given, @command{cp} copies the first file to the
8375 second.
8377 @item
8378 If the @option{--target-directory} (@option{-t}) option is given, or
8379 failing that if the last file is a directory and the
8380 @option{--no-target-directory} (@option{-T}) option is not given,
8381 @command{cp} copies each @var{source} file to the specified directory,
8382 using the @var{source}s' names.
8383 @end itemize
8385 Generally, files are written just as they are read.  For exceptions,
8386 see the @option{--sparse} option below.
8388 By default, @command{cp} does not copy directories.  However, the
8389 @option{-R}, @option{-a}, and @option{-r} options cause @command{cp} to
8390 copy recursively by descending into source directories and copying files
8391 to corresponding destination directories.
8393 When copying from a symbolic link, @command{cp} normally follows the
8394 link only when not copying recursively or when @option{--link}
8395 (@option{-l}) is used.  This default can be overridden with the
8396 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
8397 (@option{-L}), @option{--no-dereference} (@option{-P}), and
8398 @option{-H} options.  If more than one of these options is specified,
8399 the last one silently overrides the others.
8401 When copying to a symbolic link, @command{cp} follows the
8402 link only when it refers to an existing regular file.
8403 However, when copying to a dangling symbolic link, @command{cp}
8404 refuses by default, and fails with a diagnostic, since the operation
8405 is inherently dangerous.  This behavior is contrary to historical
8406 practice and to POSIX@.
8407 Set @env{POSIXLY_CORRECT} to make @command{cp} attempt to create
8408 the target of a dangling destination symlink, in spite of the possible risk.
8409 Also, when an option like
8410 @option{--backup} or @option{--link} acts to rename or remove the
8411 destination before copying, @command{cp} renames or removes the
8412 symbolic link rather than the file it points to.
8414 By default, @command{cp} copies the contents of special files only
8415 when not copying recursively.  This default can be overridden with the
8416 @option{--copy-contents} option.
8418 @cindex self-backups
8419 @cindex backups, making only
8420 @command{cp} generally refuses to copy a file onto itself, with the
8421 following exception: if @option{--force --backup} is specified with
8422 @var{source} and @var{dest} identical, and referring to a regular file,
8423 @command{cp} will make a backup file, either regular or numbered, as
8424 specified in the usual ways (@pxref{Backup options}).  This is useful when
8425 you simply want to make a backup of an existing file before changing it.
8427 The program accepts the following options.  Also see @ref{Common options}.
8429 @table @samp
8430 @item -a
8431 @itemx --archive
8432 @opindex -a
8433 @opindex --archive
8434 Preserve as much as possible of the structure and attributes of the
8435 original files in the copy (but do not attempt to preserve internal
8436 directory structure; i.e., @samp{ls -U} may list the entries in a copied
8437 directory in a different order).
8438 Try to preserve SELinux security context and extended attributes (xattr),
8439 but ignore any failure to do that and print no corresponding diagnostic.
8440 Equivalent to @option{-dR --preserve=all} with the reduced diagnostics.
8442 @item --attributes-only
8443 @opindex --attributes-only
8444 Copy only the specified attributes of the source file to the destination.
8445 If the destination already exists, do not alter its contents.
8446 See the @option{--preserve} option for controlling which attributes to copy.
8448 @item -b
8449 @itemx --backup[=@var{method}]
8450 @opindex -b
8451 @opindex --backup
8452 @vindex VERSION_CONTROL
8453 @cindex backups, making
8454 @xref{Backup options}.
8455 Make a backup of each file that would otherwise be overwritten or removed.
8456 As a special case, @command{cp} makes a backup of @var{source} when the force
8457 and backup options are given and @var{source} and @var{dest} are the same
8458 name for an existing, regular file.  One useful application of this
8459 combination of options is this tiny Bourne shell script:
8461 @example
8462 #!/bin/sh
8463 # Usage: backup FILE...
8464 # Create a GNU-style backup of each listed FILE.
8465 fail=0
8466 for i; do
8467   cp --backup --force --preserve=all -- "$i" "$i" || fail=1
8468 done
8469 exit $fail
8470 @end example
8472 @item --copy-contents
8473 @cindex directories, copying recursively
8474 @cindex copying directories recursively
8475 @cindex recursively copying directories
8476 @cindex non-directories, copying as special files
8477 If copying recursively, copy the contents of any special files (e.g.,
8478 FIFOs and device files) as if they were regular files.  This means
8479 trying to read the data in each source file and writing it to the
8480 destination.  It is usually a mistake to use this option, as it
8481 normally has undesirable effects on special files like FIFOs and the
8482 ones typically found in the @file{/dev} directory.  In most cases,
8483 @code{cp -R --copy-contents} will hang indefinitely trying to read
8484 from FIFOs and special files like @file{/dev/console}, and it will
8485 fill up your destination disk if you use it to copy @file{/dev/zero}.
8486 This option has no effect unless copying recursively, and it does not
8487 affect the copying of symbolic links.
8489 @item -d
8490 @opindex -d
8491 @cindex symbolic links, copying
8492 @cindex hard links, preserving
8493 Copy symbolic links as symbolic links rather than copying the files that
8494 they point to, and preserve hard links between source files in the copies.
8495 Equivalent to @option{--no-dereference --preserve=links}.
8497 @item -f
8498 @itemx --force
8499 @opindex -f
8500 @opindex --force
8501 When copying without this option and an existing destination file cannot
8502 be opened for writing, the copy fails.  However, with @option{--force},
8503 when a destination file cannot be opened, @command{cp} then removes it and
8504 tries to open it again.  When this option is combined with
8505 @option{--link} (@option{-l}) or @option{--symbolic-link}
8506 (@option{-s}), the destination link is replaced, and unless
8507 @option{--backup} (@option{-b}) is also given there is no brief
8508 moment when the destination does not exist.  Also see the
8509 description of @option{--remove-destination}.
8511 This option is independent of the @option{--interactive} or
8512 @option{-i} option: neither cancels the effect of the other.
8514 This option is ignored when the @option{--no-clobber} or @option{-n} option
8515 is also used.
8517 @item -H
8518 @opindex -H
8519 If a command line argument specifies a symbolic link, then copy the
8520 file it points to rather than the symbolic link itself.  However,
8521 copy (preserving its nature) any symbolic link that is encountered
8522 via recursive traversal.
8524 @item -i
8525 @itemx --interactive
8526 @opindex -i
8527 @opindex --interactive
8528 When copying a file other than a directory, prompt whether to
8529 overwrite an existing destination file.  The @option{-i} option overrides
8530 a previous @option{-n} option.
8532 @item -l
8533 @itemx --link
8534 @opindex -l
8535 @opindex --link
8536 Make hard links instead of copies of non-directories.
8538 @item -L
8539 @itemx --dereference
8540 @opindex -L
8541 @opindex --dereference
8542 Follow symbolic links when copying from them.
8543 With this option, @command{cp} cannot create a symbolic link.
8544 For example, a symlink (to regular file) in the source tree will be copied to
8545 a regular file in the destination tree.
8547 @item -n
8548 @itemx --no-clobber
8549 @opindex -n
8550 @opindex --no-clobber
8551 Do not overwrite an existing file.  The @option{-n} option overrides a previous
8552 @option{-i} option.  This option is mutually exclusive with @option{-b} or
8553 @option{--backup} option.
8555 @item -P
8556 @itemx --no-dereference
8557 @opindex -P
8558 @opindex --no-dereference
8559 @cindex symbolic links, copying
8560 Copy symbolic links as symbolic links rather than copying the files that
8561 they point to.  This option affects only symbolic links in the source;
8562 symbolic links in the destination are always followed if possible.
8564 @item -p
8565 @itemx --preserve[=@var{attribute_list}]
8566 @opindex -p
8567 @opindex --preserve
8568 @cindex file information, preserving, extended attributes, xattr
8569 Preserve the specified attributes of the original files.
8570 If specified, the @var{attribute_list} must be a comma-separated list
8571 of one or more of the following strings:
8573 @table @samp
8574 @item mode
8575 Preserve the file mode bits and access control lists.
8576 @item ownership
8577 Preserve the owner and group.  On most modern systems,
8578 only users with appropriate privileges may change the owner of a file,
8579 and ordinary users
8580 may preserve the group ownership of a file only if they happen to be
8581 a member of the desired group.
8582 @item timestamps
8583 Preserve the times of last access and last modification, when possible.
8584 On older systems, it is not possible to preserve these attributes
8585 when the affected file is a symbolic link.
8586 However, many systems now provide the @code{utimensat} function,
8587 which makes it possible even for symbolic links.
8588 @item links
8589 Preserve in the destination files
8590 any links between corresponding source files.
8591 Note that with @option{-L} or @option{-H}, this option can convert
8592 symbolic links to hard links.  For example,
8593 @example
8594 $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
8595 74161745 a
8596 74161745 b
8597 @end example
8598 @noindent
8599 Note the inputs: @file{b} is a symlink to regular file @file{a},
8600 yet the files in destination directory, @file{c/}, are hard-linked.
8601 Since @option{-a} implies @option{--no-dereference} it would copy the symlink,
8602 but the later @option{-H} tells @command{cp} to dereference the command line
8603 arguments where it then sees two files with the same inode number.
8604 Then the @option{--preserve=links} option also implied by @option{-a}
8605 will preserve the perceived hard link.
8607 Here is a similar example that exercises @command{cp}'s @option{-L} option:
8608 @smallexample
8609 $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
8610 74163295 a
8611 74163295 b
8612 @end smallexample
8614 @item context
8615 Preserve SELinux security context of the file, or fail with full diagnostics.
8616 @item xattr
8617 Preserve extended attributes of the file, or fail with full diagnostics.
8618 If @command{cp} is built without xattr support, ignore this option.
8619 If SELinux context, ACLs or Capabilities are implemented using xattrs,
8620 they are preserved implicitly by this option as well, i.e., even without
8621 specifying @option{--preserve=mode} or @option{--preserve=context}.
8622 @item all
8623 Preserve all file attributes.
8624 Equivalent to specifying all of the above, but with the difference
8625 that failure to preserve SELinux security context or extended attributes
8626 does not change @command{cp}'s exit status.  In contrast to @option{-a},
8627 all but @samp{Operation not supported} warnings are output.
8628 @end table
8630 Using @option{--preserve} with no @var{attribute_list} is equivalent
8631 to @option{--preserve=mode,ownership,timestamps}.
8633 In the absence of this option, the permissions of existing destination
8634 files are unchanged.  Each new file is created with the mode of the
8635 corresponding source file minus the set-user-ID, set-group-ID, and
8636 sticky bits as the create mode; the operating system then applies either
8637 the umask or a default ACL, possibly resulting in a more restrictive
8638 file mode.
8639 @xref{File permissions}.
8641 @item --no-preserve=@var{attribute_list}
8642 @cindex file information, preserving
8643 Do not preserve the specified attributes.  The @var{attribute_list}
8644 has the same form as for @option{--preserve}.
8646 @item --parents
8647 @opindex --parents
8648 @cindex parent directories and @command{cp}
8649 Form the name of each destination file by appending to the target
8650 directory a slash and the specified name of the source file.  The last
8651 argument given to @command{cp} must be the name of an existing directory.
8652 For example, the command:
8654 @example
8655 cp --parents a/b/c existing_dir
8656 @end example
8658 @noindent
8659 copies the file @file{a/b/c} to @file{existing_dir/a/b/c}, creating
8660 any missing intermediate directories.
8662 @item -R
8663 @itemx -r
8664 @itemx --recursive
8665 @opindex -R
8666 @opindex -r
8667 @opindex --recursive
8668 @cindex directories, copying recursively
8669 @cindex copying directories recursively
8670 @cindex recursively copying directories
8671 @cindex non-directories, copying as special files
8672 Copy directories recursively.  By default, do not follow symbolic
8673 links in the source unless used together with the @option{--link}
8674 (@option{-l}) option; see the @option{--archive} (@option{-a}), @option{-d},
8675 @option{--dereference} (@option{-L}), @option{--no-dereference}
8676 (@option{-P}), and @option{-H} options.  Special files are copied by
8677 creating a destination file of the same type as the source; see the
8678 @option{--copy-contents} option.  It is not portable to use
8679 @option{-r} to copy symbolic links or special files.  On some
8680 non-GNU systems, @option{-r} implies the equivalent of
8681 @option{-L} and @option{--copy-contents} for historical reasons.
8682 Also, it is not portable to use @option{-R} to copy symbolic links
8683 unless you also specify @option{-P}, as POSIX allows
8684 implementations that dereference symbolic links by default.
8686 @item --reflink[=@var{when}]
8687 @opindex --reflink[=@var{when}]
8688 @cindex COW
8689 @cindex clone
8690 @cindex copy on write
8691 Perform a lightweight, copy-on-write (COW) copy, if supported by the
8692 file system.  Once it has succeeded, beware that the source and destination
8693 files share the same disk data blocks as long as they remain unmodified.
8694 Thus, if a disk I/O error affects data blocks of one of the files,
8695 the other suffers the same fate.
8697 The @var{when} value can be one of the following:
8699 @table @samp
8700 @item always
8701 The default behavior: if the copy-on-write operation is not supported
8702 then report the failure for each file and exit with a failure status.
8704 @item auto
8705 If the copy-on-write operation is not supported then fall back
8706 to the standard copy behavior.
8707 @end table
8709 This option is overridden by the @option{--link}, @option{--symbolic-link}
8710 and @option{--attributes-only} options, thus allowing it to be used
8711 to configure the default data copying behavior for @command{cp}.
8712 For example, with the following alias, @command{cp} will use the
8713 minimum amount of space supported by the file system.
8715 @example
8716 alias cp='cp --reflink=auto --sparse=always'
8717 @end example
8719 @item --remove-destination
8720 @opindex --remove-destination
8721 Remove each existing destination file before attempting to open it
8722 (contrast with @option{-f} above).
8724 @item --sparse=@var{when}
8725 @opindex --sparse=@var{when}
8726 @cindex sparse files, copying
8727 @cindex holes, copying files with
8728 @findex read @r{system call, and holes}
8729 A @dfn{sparse file} contains @dfn{holes}---a sequence of zero bytes that
8730 does not occupy any physical disk blocks; the @samp{read} system call
8731 reads these as zeros.  This can both save considerable disk space and
8732 increase speed, since many binary files contain lots of consecutive zero
8733 bytes.  By default, @command{cp} detects holes in input source files via a crude
8734 heuristic and makes the corresponding output file sparse as well.
8735 Only regular files may be sparse.
8737 The @var{when} value can be one of the following:
8739 @table @samp
8740 @item auto
8741 The default behavior: if the input file is sparse, attempt to make
8742 the output file sparse, too.  However, if an output file exists but
8743 refers to a non-regular file, then do not attempt to make it sparse.
8745 @item always
8746 For each sufficiently long sequence of zero bytes in the input file,
8747 attempt to create a corresponding hole in the output file, even if the
8748 input file does not appear to be sparse.
8749 This is useful when the input file resides on a file system
8750 that does not support sparse files
8751 (for example,  @samp{efs} file systems in SGI IRIX 5.3 and earlier),
8752 but the output file is on a type of file system that does support them.
8753 Holes may be created only in regular files, so if the destination file
8754 is of some other type, @command{cp} does not even try to make it sparse.
8756 @item never
8757 Never make the output file sparse.
8758 This is useful in creating a file for use with the @command{mkswap} command,
8759 since such a file must not have any holes.
8760 @end table
8762 @optStripTrailingSlashes
8764 @item -s
8765 @itemx --symbolic-link
8766 @opindex -s
8767 @opindex --symbolic-link
8768 @cindex symbolic links, copying with
8769 Make symbolic links instead of copies of non-directories.  All source
8770 file names must be absolute (starting with @samp{/}) unless the
8771 destination files are in the current directory.  This option merely
8772 results in an error message on systems that do not support symbolic links.
8774 @optBackupSuffix
8776 @optTargetDirectory
8778 @optNoTargetDirectory
8780 @item -u
8781 @itemx --update
8782 @opindex -u
8783 @opindex --update
8784 @cindex newer files, copying only
8785 Do not copy a non-directory that has an existing destination with the
8786 same or newer modification timestamp.  If timestamps are being preserved,
8787 the comparison is to the source timestamp truncated to the
8788 resolutions of the destination file system and of the system calls
8789 used to update timestamps; this avoids duplicate work if several
8790 @samp{cp -pu} commands are executed with the same source and destination.
8791 If @option{--preserve=links} is also specified (like with @samp{cp -au}
8792 for example), that will take precedence.  Consequently, depending on the
8793 order that files are processed from the source, newer files in the destination
8794 may be replaced, to mirror hard links in the source.
8796 @item -v
8797 @itemx --verbose
8798 @opindex -v
8799 @opindex --verbose
8800 Print the name of each file before copying it.
8802 @item -x
8803 @itemx --one-file-system
8804 @opindex -x
8805 @opindex --one-file-system
8806 @cindex file systems, omitting copying to different
8807 Skip subdirectories that are on different file systems from the one that
8808 the copy started on.
8809 However, mount point directories @emph{are} copied.
8811 @macro optContext
8812 @item -Z
8813 @itemx --context[=@var{context}]
8814 @opindex -Z
8815 @opindex --context
8816 @cindex SELinux, setting/restoring security context
8817 @cindex security context
8818 Without a specified @var{context}, adjust the SELinux security context according
8819 to the system default type for destination files, similarly to the
8820 @command{restorecon} command.
8821 The long form of this option with a specific context specified,
8822 will set the context for newly created files only.
8823 With a specified context, if both SELinux and SMACK are disabled, a warning is
8824 issued.
8825 @end macro
8826 @optContext
8827 This option is mutually exclusive with the @option{--preserve=context}
8828 option, and overrides the @option{--preserve=all} and @option{-a} options.
8830 @end table
8832 @exitstatus
8835 @node dd invocation
8836 @section @command{dd}: Convert and copy a file
8838 @pindex dd
8839 @cindex converting while copying a file
8841 @command{dd} copies a file (from standard input to standard output, by
8842 default) with a changeable I/O block size, while optionally performing
8843 conversions on it.  Synopses:
8845 @example
8846 dd [@var{operand}]@dots{}
8847 dd @var{option}
8848 @end example
8850 The only options are @option{--help} and @option{--version}.
8851 @xref{Common options}.  @command{dd} accepts the following operands,
8852 whose syntax was inspired by the DD (data definition) statement of
8853 OS/360 JCL.
8855 @table @samp
8857 @item if=@var{file}
8858 @opindex if
8859 Read from @var{file} instead of standard input.
8861 @item of=@var{file}
8862 @opindex of
8863 Write to @var{file} instead of standard output.  Unless
8864 @samp{conv=notrunc} is given, @command{dd} truncates @var{file} to zero
8865 bytes (or the size specified with @samp{seek=}).
8867 @item ibs=@var{bytes}
8868 @opindex ibs
8869 @cindex block size of input
8870 @cindex input block size
8871 Set the input block size to @var{bytes}.
8872 This makes @command{dd} read @var{bytes} per block.
8873 The default is 512 bytes.
8875 @item obs=@var{bytes}
8876 @opindex obs
8877 @cindex block size of output
8878 @cindex output block size
8879 Set the output block size to @var{bytes}.
8880 This makes @command{dd} write @var{bytes} per block.
8881 The default is 512 bytes.
8883 @item bs=@var{bytes}
8884 @opindex bs
8885 @cindex block size
8886 Set both input and output block sizes to @var{bytes}.
8887 This makes @command{dd} read and write @var{bytes} per block,
8888 overriding any @samp{ibs} and @samp{obs} settings.
8889 In addition, if no data-transforming @option{conv} option is specified,
8890 input is copied to the output as soon as it's read,
8891 even if it is smaller than the block size.
8893 @item cbs=@var{bytes}
8894 @opindex cbs
8895 @cindex block size of conversion
8896 @cindex conversion block size
8897 @cindex fixed-length records, converting to variable-length
8898 @cindex variable-length records, converting to fixed-length
8899 Set the conversion block size to @var{bytes}.
8900 When converting variable-length records to fixed-length ones
8901 (@option{conv=block}) or the reverse (@option{conv=unblock}),
8902 use @var{bytes} as the fixed record length.
8904 @item skip=@var{n}
8905 @opindex skip
8906 Skip @var{n} @samp{ibs}-byte blocks in the input file before copying.
8907 If @samp{iflag=skip_bytes} is specified, @var{n} is interpreted
8908 as a byte count rather than a block count.
8910 @item seek=@var{n}
8911 @opindex seek
8912 Skip @var{n} @samp{obs}-byte blocks in the output file before copying.
8913 if @samp{oflag=seek_bytes} is specified, @var{n} is interpreted
8914 as a byte count rather than a block count.
8916 @item count=@var{n}
8917 @opindex count
8918 Copy @var{n} @samp{ibs}-byte blocks from the input file, instead
8919 of everything until the end of the file.
8920 if @samp{iflag=count_bytes} is specified, @var{n} is interpreted
8921 as a byte count rather than a block count.
8922 Note if the input may return short reads as could be the case
8923 when reading from a pipe for example, @samp{iflag=fullblock}
8924 will ensure that @samp{count=} corresponds to complete input blocks
8925 rather than the traditional POSIX specified behavior of counting
8926 input read operations.
8928 @item status=@var{level}
8929 @opindex status
8930 Transfer information is normally output to stderr upon
8931 receipt of the @samp{INFO} signal or when @command{dd} exits.
8932 Specifying @var{level} will adjust the amount of information printed,
8933 with the last @var{level} specified taking precedence.
8935 @table @samp
8937 @item none
8938 @opindex none @r{dd status=}
8939 Do not print any informational or warning messages to stderr.
8940 Error messages are output as normal.
8942 @item noxfer
8943 @opindex noxfer @r{dd status=}
8944 Do not print the final transfer rate and volume statistics
8945 that normally make up the last status line.
8947 @item progress
8948 @opindex progress @r{dd status=}
8949 Print the transfer rate and volume statistics on stderr,
8950 when processing each input block.  Statistics are output
8951 on a single line at most once every second, but updates
8952 can be delayed when waiting on I/O.
8954 @end table
8956 @item conv=@var{conversion}[,@var{conversion}]@dots{}
8957 @opindex conv
8958 Convert the file as specified by the @var{conversion} argument(s).
8959 (No spaces around any comma(s).)
8961 Conversions:
8963 @table @samp
8965 @item ascii
8966 @opindex ascii@r{, converting to}
8967 Convert EBCDIC to ASCII,
8968 using the conversion table specified by POSIX@.
8969 This provides a 1:1 translation for all 256 bytes.
8970 This option implies @samp{conv=unblock}; input is converted to
8971 ASCII before trailing spaces are deleted.
8973 @item ebcdic
8974 @opindex ebcdic@r{, converting to}
8975 Convert ASCII to EBCDIC@.
8976 This is the inverse of the @samp{ascii} conversion.
8977 This option implies @samp{conv=block}; trailing spaces are added
8978 before being converted to EBCDIC@.
8980 @item ibm
8981 @opindex alternate ebcdic@r{, converting to}
8982 This acts like @samp{conv=ebcdic}, except it
8983 uses the alternate conversion table specified by POSIX@.
8984 This is not a 1:1 translation, but reflects common historical practice
8985 for @samp{~}, @samp{[}, and @samp{]}.
8987 The @samp{ascii}, @samp{ebcdic}, and @samp{ibm} conversions are
8988 mutually exclusive.  If you use any of these options, you should also
8989 use the @samp{cbs=} option.
8991 @item block
8992 @opindex block @r{(space-padding)}
8993 For each line in the input, output @samp{cbs} bytes, replacing the
8994 input newline with a space and padding with spaces as necessary.
8996 @item unblock
8997 @opindex unblock
8998 Remove any trailing spaces in each @samp{cbs}-sized input block,
8999 and append a newline.
9001 The @samp{block} and @samp{unblock} conversions are mutually exclusive.
9003 @item lcase
9004 @opindex lcase@r{, converting to}
9005 Change uppercase letters to lowercase.
9007 @item ucase
9008 @opindex ucase@r{, converting to}
9009 Change lowercase letters to uppercase.
9011 The @samp{lcase} and @samp{ucase} conversions are mutually exclusive.
9013 @item sparse
9014 @opindex sparse
9015 Try to seek rather than write NUL output blocks.
9016 On a file system that supports sparse files, this will create
9017 sparse output when extending the output file.
9018 Be careful when using this option in conjunction with
9019 @samp{conv=notrunc} or @samp{oflag=append}.
9020 With @samp{conv=notrunc}, existing data in the output file
9021 corresponding to NUL blocks from the input, will be untouched.
9022 With @samp{oflag=append} the seeks performed will be ineffective.
9023 Similarly, when the output is a device rather than a file,
9024 NUL input blocks are not copied, and therefore this option
9025 is most useful with virtual or pre zeroed devices.
9027 @item swab
9028 @opindex swab @r{(byte-swapping)}
9029 @cindex byte-swapping
9030 Swap every pair of input bytes.  GNU @command{dd}, unlike others, works
9031 when an odd number of bytes are read---the last byte is simply copied
9032 (since there is nothing to swap it with).
9034 @item sync
9035 @opindex sync @r{(padding with ASCII NULs)}
9036 Pad every input block to size of @samp{ibs} with trailing zero bytes.
9037 When used with @samp{block} or @samp{unblock}, pad with spaces instead of
9038 zero bytes.
9040 @end table
9042 The following ``conversions'' are really file flags
9043 and don't affect internal processing:
9045 @table @samp
9046 @item excl
9047 @opindex excl
9048 @cindex creating output file, requiring
9049 Fail if the output file already exists; @command{dd} must create the
9050 output file itself.
9052 @item nocreat
9053 @opindex nocreat
9054 @cindex creating output file, avoiding
9055 Do not create the output file; the output file must already exist.
9057 The @samp{excl} and @samp{nocreat} conversions are mutually exclusive.
9059 @item notrunc
9060 @opindex notrunc
9061 @cindex truncating output file, avoiding
9062 Do not truncate the output file.
9064 @item noerror
9065 @opindex noerror
9066 @cindex read errors, ignoring
9067 Continue after read errors.
9069 @item fdatasync
9070 @opindex fdatasync
9071 @cindex synchronized data writes, before finishing
9072 Synchronize output data just before finishing.  This forces a physical
9073 write of output data.
9075 @item fsync
9076 @opindex fsync
9077 @cindex synchronized data and metadata writes, before finishing
9078 Synchronize output data and metadata just before finishing.  This
9079 forces a physical write of output data and metadata.
9081 @end table
9083 @item iflag=@var{flag}[,@var{flag}]@dots{}
9084 @opindex iflag
9085 Access the input file using the flags specified by the @var{flag}
9086 argument(s).  (No spaces around any comma(s).)
9088 @item oflag=@var{flag}[,@var{flag}]@dots{}
9089 @opindex oflag
9090 Access the output file using the flags specified by the @var{flag}
9091 argument(s).  (No spaces around any comma(s).)
9093 Here are the flags.  Not every flag is supported on every operating
9094 system.
9096 @table @samp
9098 @item append
9099 @opindex append
9100 @cindex appending to the output file
9101 Write in append mode, so that even if some other process is writing to
9102 this file, every @command{dd} write will append to the current
9103 contents of the file.  This flag makes sense only for output.
9104 If you combine this flag with the @samp{of=@var{file}} operand,
9105 you should also specify @samp{conv=notrunc} unless you want the
9106 output file to be truncated before being appended to.
9108 @item cio
9109 @opindex cio
9110 @cindex concurrent I/O
9111 Use concurrent I/O mode for data.  This mode performs direct I/O
9112 and drops the POSIX requirement to serialize all I/O to the same file.
9113 A file cannot be opened in CIO mode and with a standard open at the
9114 same time.
9116 @item direct
9117 @opindex direct
9118 @cindex direct I/O
9119 Use direct I/O for data, avoiding the buffer cache.
9120 Note that the kernel may impose restrictions on read or write buffer sizes.
9121 For example, with an ext4 destination file system and a Linux-based kernel,
9122 using @samp{oflag=direct} will cause writes to fail with @code{EINVAL} if the
9123 output buffer size is not a multiple of 512.
9125 @item directory
9126 @opindex directory
9127 @cindex directory I/O
9129 Fail unless the file is a directory.  Most operating systems do not
9130 allow I/O to a directory, so this flag has limited utility.
9132 @item dsync
9133 @opindex dsync
9134 @cindex synchronized data reads
9135 Use synchronized I/O for data.  For the output file, this forces a
9136 physical write of output data on each write.  For the input file,
9137 this flag can matter when reading from a remote file that has been
9138 written to synchronously by some other process.  Metadata (e.g.,
9139 last-access and last-modified time) is not necessarily synchronized.
9141 @item sync
9142 @opindex sync
9143 @cindex synchronized data and metadata I/O
9144 Use synchronized I/O for both data and metadata.
9146 @item nocache
9147 @opindex nocache
9148 @cindex discarding file cache
9149 Request to discard the system data cache for a file.
9150 When count=0 all cached data for the file is specified,
9151 otherwise the cache is dropped for the processed
9152 portion of the file.  Also when count=0,
9153 failure to discard the cache is diagnosed
9154 and reflected in the exit status.
9156 Note data that is not already persisted to storage will not
9157 be discarded from cache, so note the use of the ``sync'' options
9158 in the examples below, which are used to maximize the
9159 effectiveness of the @samp{nocache} flag.
9161 Here are some usage examples:
9163 @example
9164 # Advise to drop cache for whole file
9165 dd if=ifile iflag=nocache count=0
9167 # Ensure drop cache for the whole file
9168 dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
9170 # Drop cache for part of file
9171 dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
9173 # Stream data using just the read-ahead cache.
9174 # See also the @samp{direct} flag.
9175 dd if=ifile of=ofile iflag=nocache oflag=nocache,sync
9176 @end example
9178 @item nonblock
9179 @opindex nonblock
9180 @cindex nonblocking I/O
9181 Use non-blocking I/O.
9183 @item noatime
9184 @opindex noatime
9185 @cindex access timestamp
9186 Do not update the file's access timestamp.
9187 @xref{File timestamps}.
9188 Some older file systems silently ignore this flag, so it is a good
9189 idea to test it on your files before relying on it.
9191 @item noctty
9192 @opindex noctty
9193 @cindex controlling terminal
9194 Do not assign the file to be a controlling terminal for @command{dd}.
9195 This has no effect when the file is not a terminal.
9196 On many hosts (e.g., GNU/Linux hosts), this option has no effect
9197 at all.
9199 @item nofollow
9200 @opindex nofollow
9201 @cindex symbolic links, following
9202 Do not follow symbolic links.
9204 @item nolinks
9205 @opindex nolinks
9206 @cindex hard links
9207 Fail if the file has multiple hard links.
9209 @item binary
9210 @opindex binary
9211 @cindex binary I/O
9212 Use binary I/O@.  This option has an effect only on nonstandard
9213 platforms that distinguish binary from text I/O.
9215 @item text
9216 @opindex text
9217 @cindex text I/O
9218 Use text I/O@.  Like @samp{binary}, this option has no effect on
9219 standard platforms.
9221 @item fullblock
9222 @opindex fullblock
9223 Accumulate full blocks from input.  The @code{read} system call
9224 may return early if a full block is not available.
9225 When that happens, continue calling @code{read} to fill the remainder
9226 of the block.
9227 This flag can be used only with @code{iflag}.
9228 This flag is useful with pipes for example
9229 as they may return short reads. In that case,
9230 this flag is needed to ensure that a @samp{count=} argument is
9231 interpreted as a block count rather than a count of read operations.
9233 @item count_bytes
9234 @opindex count_bytes
9235 Interpret the @samp{count=} operand as a byte count,
9236 rather than a block count, which allows specifying
9237 a length that is not a multiple of the I/O block size.
9238 This flag can be used only with @code{iflag}.
9240 @item skip_bytes
9241 @opindex skip_bytes
9242 Interpret the @samp{skip=} operand as a byte count,
9243 rather than a block count, which allows specifying
9244 an offset that is not a multiple of the I/O block size.
9245 This flag can be used only with @code{iflag}.
9247 @item seek_bytes
9248 @opindex seek_bytes
9249 Interpret the @samp{seek=} operand as a byte count,
9250 rather than a block count, which allows specifying
9251 an offset that is not a multiple of the I/O block size.
9252 This flag can be used only with @code{oflag}.
9254 @end table
9256 These flags are not supported on all systems, and @samp{dd} rejects
9257 attempts to use them when they are not supported.  When reading from
9258 standard input or writing to standard output, the @samp{nofollow} and
9259 @samp{noctty} flags should not be specified, and the other flags
9260 (e.g., @samp{nonblock}) can affect how other processes behave with the
9261 affected file descriptors, even after @command{dd} exits.
9263 @end table
9265 @cindex multipliers after numbers
9266 The numeric-valued strings above (@var{n} and @var{bytes})
9267 can be followed by a multiplier: @samp{b}=512, @samp{c}=1,
9268 @samp{w}=2, @samp{x@var{m}}=@var{m}, or any of the
9269 standard block size suffixes like @samp{k}=1024 (@pxref{Block size}).
9271 Any block size you specify via @samp{bs=}, @samp{ibs=}, @samp{obs=}, @samp{cbs=}
9272 should not be too large---values larger than a few megabytes
9273 are generally wasteful or (as in the gigabyte..exabyte case) downright
9274 counterproductive or error-inducing.
9276 To process data that is at an offset or size that is not a
9277 multiple of the I/O@ block size, you can use the @samp{skip_bytes},
9278 @samp{seek_bytes} and @samp{count_bytes} flags.  Alternatively
9279 the traditional method of separate @command{dd} invocations can be used.
9280 For example, the following shell commands copy data
9281 in 512 KiB blocks between a disk and a tape, but do not save
9282 or restore a 4 KiB label at the start of the disk:
9284 @example
9285 disk=/dev/rdsk/c0t1d0s2
9286 tape=/dev/rmt/0
9288 # Copy all but the label from disk to tape.
9289 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
9291 # Copy from tape back to disk, but leave the disk label alone.
9292 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
9293 @end example
9295 @cindex ddrescue
9296 @cindex disks, failing
9297 For failing disks, other tools come with a great variety of extra
9298 functionality to ease the saving of as much data as possible before the
9299 disk finally dies, e.g.
9300 @uref{https://www.gnu.org/software/ddrescue/, GNU @command{ddrescue}}.
9301 However, in some cases such a tool is not available or the administrator
9302 feels more comfortable with the handling of @command{dd}.
9303 As a simple rescue method, call @command{dd} as shown in the following
9304 example: the options @samp{conv=noerror,sync} are used to continue
9305 after read errors and to pad out bad reads with NULs, while
9306 @samp{iflag=fullblock} caters for short reads (which traditionally never
9307 occur on disk based devices):
9309 @example
9310 # Rescue data from an (unmounted!) partition of a failing disk.
9311 dd conv=noerror,sync iflag=fullblock </dev/sda1 > /mnt/rescue.img
9312 @end example
9314 Sending an @samp{INFO} signal (or @samp{USR1} signal where that is unavailable)
9315 to a running @command{dd} process makes it print I/O statistics to
9316 standard error and then resume copying.   In the example below,
9317 @command{dd} is run in the background to copy 5GB of data.
9318 The @command{kill} command makes it output intermediate I/O statistics,
9319 and when @command{dd} completes normally or is killed by the
9320 @code{SIGINT} signal, it outputs the final statistics.
9322 @example
9323 # Ignore the signal so we never inadvertently terminate the dd child.
9324 # Note this is not needed when SIGINFO is available.
9325 trap '' USR1
9327 # Run dd with the fullblock iflag to avoid short reads
9328 # which can be triggered by reception of signals.
9329 dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$!
9331 # Output stats every second.
9332 while kill -s USR1 $pid 2>/dev/null; do sleep 1; done
9333 @end example
9335 The above script will output in the following format:
9337 @example
9338 3441325+0 records in
9339 3441325+0 records out
9340 3441325000 bytes (3.4 GB, 3.2 GiB) copied, 1.00036 s, 3.4 GB/s
9341 5000000+0 records in
9342 5000000+0 records out
9343 5000000000 bytes (5.0 GB, 4.7 GiB) copied, 1.44433 s, 3.5 GB/s
9344 @end example
9346 The @samp{status=progress} option periodically updates the last line
9347 of the transfer statistics above.
9349 @vindex POSIXLY_CORRECT
9350 On systems lacking the @samp{INFO} signal @command{dd} responds to the
9351 @samp{USR1} signal instead, unless the @env{POSIXLY_CORRECT}
9352 environment variable is set.
9354 @exitstatus
9357 @node install invocation
9358 @section @command{install}: Copy files and set attributes
9360 @pindex install
9361 @cindex copying files and setting attributes
9363 @command{install} copies files while setting their file mode bits and, if
9364 possible, their owner and group.  Synopses:
9366 @example
9367 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
9368 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9369 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9370 install [@var{option}]@dots{} -d @var{directory}@dots{}
9371 @end example
9373 @itemize @bullet
9374 @item
9375 If two file names are given, @command{install} copies the first file to the
9376 second.
9378 @item
9379 If the @option{--target-directory} (@option{-t}) option is given, or
9380 failing that if the last file is a directory and the
9381 @option{--no-target-directory} (@option{-T}) option is not given,
9382 @command{install} copies each @var{source} file to the specified
9383 directory, using the @var{source}s' names.
9385 @item
9386 If the @option{--directory} (@option{-d}) option is given,
9387 @command{install} creates each @var{directory} and any missing parent
9388 directories.  Parent directories are created with mode
9389 @samp{u=rwx,go=rx} (755), regardless of the @option{-m} option or the
9390 current umask.  @xref{Directory Setuid and Setgid}, for how the
9391 set-user-ID and set-group-ID bits of parent directories are inherited.
9392 @end itemize
9394 @cindex Makefiles, installing programs in
9395 @command{install} is similar to @command{cp}, but allows you to control the
9396 attributes of destination files.  It is typically used in Makefiles to
9397 copy programs into their destination directories.  It refuses to copy
9398 files onto themselves.
9400 @cindex extended attributes, xattr
9401 @command{install} never preserves extended attributes (xattr).
9403 The program accepts the following options.  Also see @ref{Common options}.
9405 @table @samp
9407 @optBackup
9409 @item -C
9410 @itemx --compare
9411 @opindex -C
9412 @opindex --compare
9413 Compare each pair of source and destination files, and if the destination has
9414 identical content and any specified owner, group, permissions, and possibly
9415 SELinux context, then do not modify the destination at all.
9416 Note this option is best used in conjunction with @option{--user},
9417 @option{--group} and @option{--mode} options, lest @command{install}
9418 incorrectly determines the default attributes that installed files would have
9419 (as it doesn't consider setgid directories and POSIX default ACLs for example).
9420 This could result in redundant copies or attributes that are not reset to the
9421 correct defaults.
9423 @item -c
9424 @opindex -c
9425 Ignored; for compatibility with old Unix versions of @command{install}.
9427 @item -D
9428 @opindex -D
9429 Create any missing parent directories of @var{dest},
9430 then copy @var{source} to @var{dest}.
9431 Explicitly specifying the @option{--target-directory=@var{dir}} will similarly
9432 ensure the presence of that hierarchy before copying @var{source} arguments.
9434 @item -d
9435 @itemx --directory
9436 @opindex -d
9437 @opindex --directory
9438 @cindex directories, creating with given attributes
9439 @cindex parent directories, creating missing
9440 @cindex leading directories, creating missing
9441 Create any missing parent directories, giving them the default
9442 attributes.  Then create each given directory, setting their owner,
9443 group and mode as given on the command line or to the defaults.
9445 @item -g @var{group}
9446 @itemx --group=@var{group}
9447 @opindex -g
9448 @opindex --group
9449 @cindex group ownership of installed files, setting
9450 Set the group ownership of installed files or directories to
9451 @var{group}.  The default is the process's current group.  @var{group}
9452 may be either a group name or a numeric group ID.
9454 @item -m @var{mode}
9455 @itemx --mode=@var{mode}
9456 @opindex -m
9457 @opindex --mode
9458 @cindex permissions of installed files, setting
9459 Set the file mode bits for the installed file or directory to @var{mode},
9460 which can be either an octal number, or a symbolic mode as in
9461 @command{chmod}, with @samp{a=} (no access allowed to anyone) as the
9462 point of departure (@pxref{File permissions}).
9463 The default mode is @samp{u=rwx,go=rx,a-s}---read, write, and
9464 execute for the owner, read and execute for group and other, and with
9465 set-user-ID and set-group-ID disabled.
9466 This default is not quite the same as @samp{755}, since it disables
9467 instead of preserving set-user-ID and set-group-ID on directories.
9468 @xref{Directory Setuid and Setgid}.
9470 @item -o @var{owner}
9471 @itemx --owner=@var{owner}
9472 @opindex -o
9473 @opindex --owner
9474 @cindex ownership of installed files, setting
9475 @cindex appropriate privileges
9476 @vindex root @r{as default owner}
9477 If @command{install} has appropriate privileges (is run as root), set the
9478 ownership of installed files or directories to @var{owner}.  The default
9479 is @code{root}.  @var{owner} may be either a user name or a numeric user
9482 @item --preserve-context
9483 @opindex --preserve-context
9484 @cindex SELinux
9485 @cindex security context
9486 Preserve the SELinux security context of files and directories.
9487 Failure to preserve the context in all of the files or directories
9488 will result in an exit status of 1.  If SELinux is disabled then
9489 print a warning and ignore the option.
9491 @item -p
9492 @itemx --preserve-timestamps
9493 @opindex -p
9494 @opindex --preserve-timestamps
9495 @cindex timestamps of installed files, preserving
9496 Set the time of last access and the time of last modification of each
9497 installed file to match those of each corresponding original file.
9498 When a file is installed without this option, its last access and
9499 last modification timestamps are both set to the time of installation.
9500 This option is useful if you want to use the last modification timestamps
9501 of installed files to keep track of when they were last built as opposed
9502 to when they were last installed.
9504 @item -s
9505 @itemx --strip
9506 @opindex -s
9507 @opindex --strip
9508 @cindex symbol table information, stripping
9509 @cindex stripping symbol table information
9510 Strip the symbol tables from installed binary executables.
9512 @item --strip-program=@var{program}
9513 @opindex --strip-program
9514 @cindex symbol table information, stripping, program
9515 Program used to strip binaries.
9517 @optBackupSuffix
9519 @optTargetDirectory
9520 Also specifying the @option{-D} option will ensure the directory is present.
9522 @optNoTargetDirectory
9524 @item -v
9525 @itemx --verbose
9526 @opindex -v
9527 @opindex --verbose
9528 Print the name of each file before copying it.
9530 @optContext
9531 This option is mutually exclusive with the @option{--preserve-context} option.
9534 @end table
9536 @exitstatus
9539 @node mv invocation
9540 @section @command{mv}: Move (rename) files
9542 @pindex mv
9544 @command{mv} moves or renames files (or directories).  Synopses:
9546 @example
9547 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
9548 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9549 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9550 @end example
9552 @itemize @bullet
9553 @item
9554 If two file names are given, @command{mv} moves the first file to the
9555 second.
9557 @item
9558 If the @option{--target-directory} (@option{-t}) option is given, or
9559 failing that if the last file is a directory and the
9560 @option{--no-target-directory} (@option{-T}) option is not given,
9561 @command{mv} moves each @var{source} file to the specified
9562 directory, using the @var{source}s' names.
9563 @end itemize
9565 @command{mv} can move any type of file from one file system to another.
9566 Prior to version @code{4.0} of the fileutils,
9567 @command{mv} could move only regular files between file systems.
9568 For example, now @command{mv} can move an entire directory hierarchy
9569 including special device files from one partition to another.  It first
9570 uses some of the same code that's used by @code{cp -a} to copy the
9571 requested directories and files, then (assuming the copy succeeded)
9572 it removes the originals.  If the copy fails, then the part that was
9573 copied to the destination partition is removed.  If you were to copy
9574 three directories from one partition to another and the copy of the first
9575 directory succeeded, but the second didn't, the first would be left on
9576 the destination partition and the second and third would be left on the
9577 original partition.
9579 @cindex extended attributes, xattr
9580 @command{mv} always tries to copy extended attributes (xattr), which may
9581 include SELinux context, ACLs or Capabilities.
9582 Upon failure all but @samp{Operation not supported} warnings are output.
9584 @cindex prompting, and @command{mv}
9585 If a destination file exists but is normally unwritable, standard input
9586 is a terminal, and the @option{-f} or @option{--force} option is not given,
9587 @command{mv} prompts the user for whether to replace the file.  (You might
9588 own the file, or have write permission on its directory.)  If the
9589 response is not affirmative, the file is skipped.
9591 @emph{Warning}: Avoid specifying a source name with a trailing slash,
9592 when it might be a symlink to a directory.
9593 Otherwise, @command{mv} may do something very surprising, since
9594 its behavior depends on the underlying rename system call.
9595 On a system with a modern Linux-based kernel, it fails with
9596 @code{errno=ENOTDIR}@.
9597 However, on other systems (at least FreeBSD 6.1 and Solaris 10) it silently
9598 renames not the symlink but rather the directory referenced by the symlink.
9599 @xref{Trailing slashes}.
9601 @emph{Note}: @command{mv} will only replace empty directories in the
9602 destination.  Conflicting populated directories are skipped with a diagnostic.
9604 The program accepts the following options.  Also see @ref{Common options}.
9606 @table @samp
9608 @optBackup
9610 @item -f
9611 @itemx --force
9612 @opindex -f
9613 @opindex --force
9614 @cindex prompts, omitting
9615 Do not prompt the user before removing a destination file.
9616 @macro mvOptsIfn
9617 If you specify more than one of the @option{-i}, @option{-f}, @option{-n}
9618 options, only the final one takes effect.
9619 @end macro
9620 @mvOptsIfn
9622 @item -i
9623 @itemx --interactive
9624 @opindex -i
9625 @opindex --interactive
9626 @cindex prompts, forcing
9627 Prompt whether to overwrite each existing destination file, regardless
9628 of its permissions.
9629 If the response is not affirmative, the file is skipped.
9630 @mvOptsIfn
9632 @item -n
9633 @itemx --no-clobber
9634 @opindex -n
9635 @opindex --no-clobber
9636 @cindex prompts, omitting
9637 Do not overwrite an existing file.
9638 @mvOptsIfn
9639 This option is mutually exclusive with @option{-b} or @option{--backup} option.
9641 @item -u
9642 @itemx --update
9643 @opindex -u
9644 @opindex --update
9645 @cindex newer files, moving only
9646 Do not move a non-directory that has an existing destination with the
9647 same or newer modification timestamp.
9648 If the move is across file system boundaries, the comparison is to the
9649 source timestamp truncated to the resolutions of the destination file
9650 system and of the system calls used to update timestamps; this avoids
9651 duplicate work if several @samp{mv -u} commands are executed with the
9652 same source and destination.
9654 @item -v
9655 @itemx --verbose
9656 @opindex -v
9657 @opindex --verbose
9658 Print the name of each file before moving it.
9660 @optStripTrailingSlashes
9662 @optBackupSuffix
9664 @optTargetDirectory
9666 @optNoTargetDirectory
9668 @item -Z
9669 @itemx --context
9670 @opindex -Z
9671 @opindex --context
9672 @cindex SELinux, restoring security context
9673 @cindex security context
9674 This option functions similarly to the @command{restorecon} command,
9675 by adjusting the SELinux security context according
9676 to the system default type for destination files and each created directory.
9678 @end table
9680 @exitstatus
9683 @node rm invocation
9684 @section @command{rm}: Remove files or directories
9686 @pindex rm
9687 @cindex removing files or directories
9689 @command{rm} removes each given @var{file}.  By default, it does not remove
9690 directories.  Synopsis:
9692 @example
9693 rm [@var{option}]@dots{} [@var{file}]@dots{}
9694 @end example
9696 @cindex prompting, and @command{rm}
9697 If the @option{-I} or @option{--interactive=once} option is given,
9698 and there are more than three files or the @option{-r}, @option{-R},
9699 or @option{--recursive} are given, then @command{rm} prompts the user
9700 for whether to proceed with the entire operation.  If the response is
9701 not affirmative, the entire command is aborted.
9703 Otherwise, if a file is unwritable, standard input is a terminal, and
9704 the @option{-f} or @option{--force} option is not given, or the
9705 @option{-i} or @option{--interactive=always} option @emph{is} given,
9706 @command{rm} prompts the user for whether to remove the file.
9707 If the response is not affirmative, the file is skipped.
9709 Any attempt to remove a file whose last file name component is
9710 @file{.} or @file{..} is rejected without any prompting, as mandated
9711 by POSIX.
9713 @emph{Warning}: If you use @command{rm} to remove a file, it is usually
9714 possible to recover the contents of that file.  If you want more assurance
9715 that the contents are truly unrecoverable, consider using @command{shred}.
9717 The program accepts the following options.  Also see @ref{Common options}.
9719 @table @samp
9721 @item -d
9722 @itemx --dir
9723 @opindex -d
9724 @opindex --dir
9725 @cindex directories, removing
9726 Remove the listed directories if they are empty.
9728 @item -f
9729 @itemx --force
9730 @opindex -f
9731 @opindex --force
9732 Ignore nonexistent files and missing operands, and never prompt the user.
9733 Ignore any previous @option{--interactive} (@option{-i}) option.
9735 @item -i
9736 @opindex -i
9737 Prompt whether to remove each file.
9738 If the response is not affirmative, the file is skipped.
9739 Ignore any previous @option{--force} (@option{-f}) option.
9740 Equivalent to @option{--interactive=always}.
9742 @item -I
9743 @opindex -I
9744 Prompt once whether to proceed with the command, if more than three
9745 files are named or if a recursive removal is requested.  Ignore any
9746 previous @option{--force} (@option{-f}) option.  Equivalent to
9747 @option{--interactive=once}.
9749 @item --interactive [=@var{when}]
9750 @opindex --interactive
9751 Specify when to issue an interactive prompt.  @var{when} may be
9752 omitted, or one of:
9753 @itemize @bullet
9754 @item never
9755 @vindex never @r{interactive option}
9756 - Do not prompt at all.
9757 @item once
9758 @vindex once @r{interactive option}
9759 - Prompt once if more than three files are named or if a recursive
9760 removal is requested.  Equivalent to @option{-I}.
9761 @item always
9762 @vindex always @r{interactive option}
9763 - Prompt for every file being removed.  Equivalent to @option{-i}.
9764 @end itemize
9765 @option{--interactive} with no @var{when} is equivalent to
9766 @option{--interactive=always}.
9768 @item --one-file-system
9769 @opindex --one-file-system
9770 @cindex one file system, restricting @command{rm} to
9771 When removing a hierarchy recursively, skip any directory that is on a
9772 file system different from that of the corresponding command line argument.
9774 @cindex bind mount
9775 This option is useful when removing a build ``chroot'' hierarchy,
9776 which normally contains no valuable data.  However, it is not uncommon
9777 to bind-mount @file{/home} into such a hierarchy, to make it easier to
9778 use one's start-up file.  The catch is that it's easy to forget to
9779 unmount @file{/home}.  Then, when you use @command{rm -rf} to remove
9780 your normally throw-away chroot, that command will remove everything
9781 under @file{/home}, too.
9782 Use the @option{--one-file-system} option, and it will
9783 warn about and skip directories on other file systems.
9784 Of course, this will not save your @file{/home} if it and your
9785 chroot happen to be on the same file system.
9787 @item --preserve-root
9788 @opindex --preserve-root
9789 @cindex root directory, disallow recursive destruction
9790 Fail upon any attempt to remove the root directory, @file{/},
9791 when used with the @option{--recursive} option.
9792 This is the default behavior.
9793 @xref{Treating / specially}.
9795 @item --no-preserve-root
9796 @opindex --no-preserve-root
9797 @cindex root directory, allow recursive destruction
9798 Do not treat @file{/} specially when removing recursively.
9799 This option is not recommended unless you really want to
9800 remove all the files on your computer.
9801 @xref{Treating / specially}.
9803 @item -r
9804 @itemx -R
9805 @itemx --recursive
9806 @opindex -r
9807 @opindex -R
9808 @opindex --recursive
9809 @cindex directories, removing (recursively)
9810 Remove the listed directories and their contents recursively.
9812 @item -v
9813 @itemx --verbose
9814 @opindex -v
9815 @opindex --verbose
9816 Print the name of each file before removing it.
9818 @end table
9820 @cindex files beginning with @samp{-}, removing
9821 @cindex @samp{-}, removing files beginning with
9822 One common question is how to remove files whose names begin with a
9823 @samp{-}.  GNU @command{rm}, like every program that uses the @code{getopt}
9824 function to parse its arguments, lets you use the @samp{--} option to
9825 indicate that all following arguments are non-options.  To remove a file
9826 called @file{-f} in the current directory, you could type either:
9828 @example
9829 rm -- -f
9830 @end example
9832 @noindent
9835 @example
9836 rm ./-f
9837 @end example
9839 @opindex - @r{and Unix @command{rm}}
9840 The Unix @command{rm} program's use of a single @samp{-} for this purpose
9841 predates the development of the @code{getopt} standard syntax.
9843 @exitstatus
9846 @node shred invocation
9847 @section @command{shred}: Remove files more securely
9849 @pindex shred
9850 @cindex data, erasing
9851 @cindex erasing data
9853 @command{shred} overwrites devices or files, to help prevent even
9854 very expensive hardware from recovering the data.
9856 Ordinarily when you remove a file (@pxref{rm invocation}), the data is
9857 not actually destroyed.  Only the index listing where the file is
9858 stored is destroyed, and the storage is made available for reuse.
9859 There are undelete utilities that will attempt to reconstruct the index
9860 and can bring the file back if the parts were not reused.
9862 On a busy system with a nearly-full drive, space can get reused in a few
9863 seconds.  But there is no way to know for sure.  If you have sensitive
9864 data, you may want to be sure that recovery is not possible by actually
9865 overwriting the file with non-sensitive data.
9867 However, even after doing that, it is possible to take the disk back
9868 to a laboratory and use a lot of sensitive (and expensive) equipment
9869 to look for the faint ``echoes'' of the original data underneath the
9870 overwritten data.  If the data has only been overwritten once, it's not
9871 even that hard.
9873 The best way to remove something irretrievably is to destroy the media
9874 it's on with acid, melt it down, or the like.  For cheap removable media
9875 like floppy disks, this is the preferred method.  However, hard drives
9876 are expensive and hard to melt, so the @command{shred} utility tries
9877 to achieve a similar effect non-destructively.
9879 This uses many overwrite passes, with the data patterns chosen to
9880 maximize the damage they do to the old data.  While this will work on
9881 floppies, the patterns are designed for best effect on hard drives.
9882 For more details, see the source code and Peter Gutmann's paper
9883 @uref{https://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
9884 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}},
9885 from the proceedings of the Sixth USENIX Security Symposium (San Jose,
9886 California, July 22--25, 1996).
9888 @strong{Please note} that @command{shred} relies on a very important assumption:
9889 that the file system overwrites data in place.  This is the traditional
9890 way to do things, but many modern file system designs do not satisfy this
9891 assumption.  Exceptions include:
9893 @itemize @bullet
9895 @item
9896 Log-structured or journaled file systems, such as those supplied with
9897 AIX and Solaris, and JFS, ReiserFS, XFS, Ext3 (in @code{data=journal} mode),
9898 BFS, NTFS, etc., when they are configured to journal @emph{data}.
9900 @item
9901 File systems that write redundant data and carry on even if some writes
9902 fail, such as RAID-based file systems.
9904 @item
9905 File systems that make snapshots, such as Network Appliance's NFS server.
9907 @item
9908 File systems that cache in temporary locations, such as NFS version 3
9909 clients.
9911 @item
9912 Compressed file systems.
9913 @end itemize
9915 In the particular case of ext3 file systems, the above disclaimer applies (and
9916 @command{shred} is thus of limited effectiveness) only in @code{data=journal}
9917 mode, which journals file data in addition to just metadata.  In both
9918 the @code{data=ordered} (default) and @code{data=writeback} modes,
9919 @command{shred} works as usual.  Ext3 journaling modes can be changed
9920 by adding the @code{data=something} option to the mount options for a
9921 particular file system in the @file{/etc/fstab} file, as documented in
9922 the mount man page (man mount).
9924 If you are not sure how your file system operates, then you should assume
9925 that it does not overwrite data in place, which means that shred cannot
9926 reliably operate on regular files in your file system.
9928 Generally speaking, it is more reliable to shred a device than a file,
9929 since this bypasses the problem of file system design mentioned above.
9930 However, even shredding devices is not always completely reliable.  For
9931 example, most disks map out bad sectors invisibly to the application; if
9932 the bad sectors contain sensitive data, @command{shred} won't be able to
9933 destroy it.
9935 @command{shred} makes no attempt to detect or report this problem, just as
9936 it makes no attempt to do anything about backups.  However, since it is
9937 more reliable to shred devices than files, @command{shred} by default does
9938 not truncate or remove the output file.  This default is more suitable
9939 for devices, which typically cannot be truncated and should not be
9940 removed.
9942 Finally, consider the risk of backups and mirrors.
9943 File system backups and remote mirrors may contain copies of the
9944 file that cannot be removed, and that will allow a shredded file
9945 to be recovered later.  So if you keep any data you may later want
9946 to destroy using @command{shred}, be sure that it is not backed up or mirrored.
9948 @example
9949 shred [@var{option}]@dots{} @var{file}[@dots{}]
9950 @end example
9952 The program accepts the following options.  Also see @ref{Common options}.
9954 @table @samp
9956 @item -f
9957 @itemx --force
9958 @opindex -f
9959 @opindex --force
9960 @cindex force deletion
9961 Override file permissions if necessary to allow overwriting.
9963 @item -n @var{number}
9964 @itemx --iterations=@var{number}
9965 @opindex -n @var{number}
9966 @opindex --iterations=@var{number}
9967 @cindex iterations, selecting the number of
9968 By default, @command{shred} uses @value{SHRED_DEFAULT_PASSES} passes of
9969 overwrite.  You can reduce this to save time, or increase it if you think it's
9970 appropriate.  After 25 passes all of the internal overwrite patterns will have
9971 been used at least once.
9973 @item --random-source=@var{file}
9974 @opindex --random-source
9975 @cindex random source for shredding
9976 Use @var{file} as a source of random data used to overwrite and to
9977 choose pass ordering.  @xref{Random sources}.
9979 @item -s @var{bytes}
9980 @itemx --size=@var{bytes}
9981 @opindex -s @var{bytes}
9982 @opindex --size=@var{bytes}
9983 @cindex size of file to shred
9984 Shred the first @var{bytes} bytes of the file.  The default is to shred
9985 the whole file.  @var{bytes} can be followed by a size specification like
9986 @samp{K}, @samp{M}, or @samp{G} to specify a multiple.  @xref{Block size}.
9988 @item -u
9989 @itemx --remove[=@var{how}]
9990 @opindex -u
9991 @opindex --remove
9992 @opindex --remove=unlink
9993 @opindex --remove=wipe
9994 @opindex --remove=wipesync
9995 @cindex removing files after shredding
9996 After shredding a file, truncate it (if possible) and then remove it.
9997 If a file has multiple links, only the named links will be removed.
9998 Often the file name is less sensitive than the file data, in which case
9999 the optional @var{how} parameter, supported with the long form option,
10000 gives control of how to more efficiently remove each directory entry.
10001 The @samp{unlink} parameter will just use a standard unlink call,
10002 @samp{wipe} will also first obfuscate bytes in the name, and
10003 @samp{wipesync} will also sync each obfuscated byte in the name to disk.
10004 Note @samp{wipesync} is the default method, but can be expensive,
10005 requiring a sync for every character in every file.  This can become
10006 significant with many files, or is redundant if your file system provides
10007 synchronous metadata updates.
10009 @item -v
10010 @itemx --verbose
10011 @opindex -v
10012 @opindex --verbose
10013 Display to standard error all status updates as sterilization proceeds.
10015 @item -x
10016 @itemx --exact
10017 @opindex -x
10018 @opindex --exact
10019 By default, @command{shred} rounds the size of a regular file up to the next
10020 multiple of the file system block size to fully erase the slack space in
10021 the last block of the file.  This space may contain portions of the current
10022 system memory on some systems for example.
10023 Use @option{--exact} to suppress that behavior.
10024 Thus, by default if you shred a 10-byte regular file on a system with 512-byte
10025 blocks, the resulting file will be 512 bytes long.  With this option,
10026 shred does not increase the apparent size of the file.
10028 @item -z
10029 @itemx --zero
10030 @opindex -z
10031 @opindex --zero
10032 Normally, the last pass that @command{shred} writes is made up of
10033 random data.  If this would be conspicuous on your hard drive (for
10034 example, because it looks like encrypted data), or you just think
10035 it's tidier, the @option{--zero} option adds an additional overwrite pass with
10036 all zero bits.  This is in addition to the number of passes specified
10037 by the @option{--iterations} option.
10039 @end table
10041 You might use the following command to erase all trace of the
10042 file system you'd created on the floppy disk in your first drive.
10043 That command takes about 20 minutes to erase a ``1.44MB'' (actually
10044 1440 KiB) floppy.
10046 @example
10047 shred --verbose /dev/fd0
10048 @end example
10050 Similarly, to erase all data on a selected partition of
10051 your hard disk, you could give a command like this:
10053 @example
10054 shred --verbose /dev/sda5
10055 @end example
10057 On modern disks, a single pass should be adequate,
10058 and it will take one third the time of the default three-pass approach.
10060 @example
10061 # 1 pass, write pseudo-random data; 3x faster than the default
10062 shred --verbose -n1 /dev/sda5
10063 @end example
10065 To be on the safe side, use at least one pass that overwrites using
10066 pseudo-random data.  I.e., don't be tempted to use @samp{-n0 --zero},
10067 in case some disk controller optimizes the process of writing blocks
10068 of all zeros, and thereby does not clear all bytes in a block.
10069 Some SSDs may do just that.
10071 A @var{file} of @samp{-} denotes standard output.
10072 The intended use of this is to shred a removed temporary file.
10073 For example:
10075 @example
10076 i=$(mktemp)
10077 exec 3<>"$i"
10078 rm -- "$i"
10079 echo "Hello, world" >&3
10080 shred - >&3
10081 exec 3>-
10082 @end example
10084 However, the command @samp{shred - >file} does not shred the contents
10085 of @var{file}, since the shell truncates @var{file} before invoking
10086 @command{shred}.  Use the command @samp{shred file} or (if using a
10087 Bourne-compatible shell) the command @samp{shred - 1<>file} instead.
10089 @exitstatus
10092 @node Special file types
10093 @chapter Special file types
10095 @cindex special file types
10096 @cindex file types, special
10098 This chapter describes commands which create special types of files (and
10099 @command{rmdir}, which removes directories, one special file type).
10101 @cindex special file types
10102 @cindex file types
10103 Although Unix-like operating systems have markedly fewer special file
10104 types than others, not @emph{everything} can be treated only as the
10105 undifferentiated byte stream of @dfn{normal files}.  For example, when a
10106 file is created or removed, the system must record this information,
10107 which it does in a @dfn{directory}---a special type of file.  Although
10108 you can read directories as normal files, if you're curious, in order
10109 for the system to do its job it must impose a structure, a certain
10110 order, on the bytes of the file.  Thus it is a ``special'' type of file.
10112 Besides directories, other special file types include named pipes
10113 (FIFOs), symbolic links, sockets, and so-called @dfn{special files}.
10115 @menu
10116 * link invocation::             Make a hard link via the link syscall
10117 * ln invocation::               Make links between files.
10118 * mkdir invocation::            Make directories.
10119 * mkfifo invocation::           Make FIFOs (named pipes).
10120 * mknod invocation::            Make block or character special files.
10121 * readlink invocation::         Print value of a symlink or canonical file name.
10122 * rmdir invocation::            Remove empty directories.
10123 * unlink invocation::           Remove files via the unlink syscall
10124 @end menu
10127 @node link invocation
10128 @section @command{link}: Make a hard link via the link syscall
10130 @pindex link
10131 @cindex links, creating
10132 @cindex hard links, creating
10133 @cindex creating links (hard only)
10135 @command{link} creates a single hard link at a time.
10136 It is a minimalist interface to the system-provided
10137 @code{link} function.  @xref{Hard Links, , , libc,
10138 The GNU C Library Reference Manual}.
10139 It avoids the bells and whistles of the more commonly-used
10140 @command{ln} command (@pxref{ln invocation}).
10141 Synopsis:
10143 @example
10144 link @var{filename} @var{linkname}
10145 @end example
10147 @var{filename} must specify an existing file, and @var{linkname}
10148 must specify a nonexistent entry in an existing directory.
10149 @command{link} simply calls @code{link (@var{filename}, @var{linkname})}
10150 to create the link.
10152 On a GNU system, this command acts like @samp{ln --directory
10153 --no-target-directory @var{filename} @var{linkname}}.  However, the
10154 @option{--directory} and @option{--no-target-directory} options are
10155 not specified by POSIX, and the @command{link} command is
10156 more portable in practice.
10158 If @var{filename} is a symbolic link, it is unspecified whether
10159 @var{linkname} will be a hard link to the symbolic link or to the
10160 target of the symbolic link.  Use @command{ln -P} or @command{ln -L}
10161 to specify which behavior is desired.
10163 @exitstatus
10166 @node ln invocation
10167 @section @command{ln}: Make links between files
10169 @pindex ln
10170 @cindex links, creating
10171 @cindex hard links, creating
10172 @cindex symbolic (soft) links, creating
10173 @cindex creating links (hard or soft)
10175 @cindex file systems and hard links
10176 @command{ln} makes links between files.  By default, it makes hard links;
10177 with the @option{-s} option, it makes symbolic (or @dfn{soft}) links.
10178 Synopses:
10180 @example
10181 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
10182 ln [@var{option}]@dots{} @var{target}
10183 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
10184 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
10185 @end example
10187 @itemize @bullet
10189 @item
10190 If two file names are given, @command{ln} creates a link to the first
10191 file from the second.
10193 @item
10194 If one @var{target} is given, @command{ln} creates a link to that file
10195 in the current directory.
10197 @item
10198 If the @option{--target-directory} (@option{-t}) option is given, or
10199 failing that if the last file is a directory and the
10200 @option{--no-target-directory} (@option{-T}) option is not given,
10201 @command{ln} creates a link to each @var{target} file in the specified
10202 directory, using the @var{target}s' names.
10204 @end itemize
10206 Normally @command{ln} does not replace existing files.  Use the
10207 @option{--force} (@option{-f}) option to replace them unconditionally,
10208 the @option{--interactive} (@option{-i}) option to replace them
10209 conditionally, and the @option{--backup} (@option{-b}) option to
10210 rename them.  Unless the @option{--backup} (@option{-b}) option is
10211 used there is no brief moment when the destination does not exist;
10212 this is an extension to POSIX.
10214 @cindex hard link, defined
10215 @cindex inode, and hard links
10216 A @dfn{hard link} is another name for an existing file; the link and the
10217 original are indistinguishable.  Technically speaking, they share the
10218 same inode, and the inode contains all the information about a
10219 file---indeed, it is not incorrect to say that the inode @emph{is} the
10220 file.  Most systems prohibit making a hard link to
10221 a directory; on those where it is allowed, only the super-user can do
10222 so (and with caution, since creating a cycle will cause problems to many
10223 other utilities).  Hard links cannot cross file system boundaries.  (These
10224 restrictions are not mandated by POSIX, however.)
10226 @cindex dereferencing symbolic links
10227 @cindex symbolic link, defined
10228 @dfn{Symbolic links} (@dfn{symlinks} for short), on the other hand, are
10229 a special file type (which not all kernels support: System V release 3
10230 (and older) systems lack symlinks) in which the link file actually
10231 refers to a different file, by name.  When most operations (opening,
10232 reading, writing, and so on) are passed the symbolic link file, the
10233 kernel automatically @dfn{dereferences} the link and operates on the
10234 target of the link.  But some operations (e.g., removing) work on the
10235 link file itself, rather than on its target.  The owner and group of a
10236 symlink are not significant to file access performed through
10237 the link, but do have implications on deleting a symbolic link from a
10238 directory with the restricted deletion bit set.  On the GNU system,
10239 the mode of a symlink has no significance and cannot be changed, but
10240 on some BSD systems, the mode can be changed and will affect whether
10241 the symlink will be traversed in file name resolution.  @xref{Symbolic Links,,,
10242 libc, The GNU C Library Reference Manual}.
10244 Symbolic links can contain arbitrary strings; a @dfn{dangling symlink}
10245 occurs when the string in the symlink does not resolve to a file.
10246 There are no restrictions against creating dangling symbolic links.
10247 There are trade-offs to using absolute or relative symlinks.  An
10248 absolute symlink always points to the same file, even if the directory
10249 containing the link is moved.  However, if the symlink is visible from
10250 more than one machine (such as on a networked file system), the file
10251 pointed to might not always be the same.  A relative symbolic link is
10252 resolved in relation to the directory that contains the link, and is
10253 often useful in referring to files on the same device without regards
10254 to what name that device is mounted on when accessed via networked
10255 machines.
10257 When creating a relative symlink in a different location than the
10258 current directory, the resolution of the symlink will be different
10259 than the resolution of the same string from the current directory.
10260 Therefore, many users prefer to first change directories to the
10261 location where the relative symlink will be created, so that
10262 tab-completion or other file resolution will find the same target as
10263 what will be placed in the symlink.
10265 The program accepts the following options.  Also see @ref{Common options}.
10267 @table @samp
10269 @optBackup
10271 @item -d
10272 @itemx -F
10273 @itemx --directory
10274 @opindex -d
10275 @opindex -F
10276 @opindex --directory
10277 @cindex hard links to directories
10278 Allow users with appropriate privileges to attempt to make hard links
10279 to directories.
10280 However, note that this will probably fail due to
10281 system restrictions, even for the super-user.
10283 @item -f
10284 @itemx --force
10285 @opindex -f
10286 @opindex --force
10287 Remove existing destination files.
10289 @item -i
10290 @itemx --interactive
10291 @opindex -i
10292 @opindex --interactive
10293 @cindex prompting, and @command{ln}
10294 Prompt whether to remove existing destination files.
10296 @item -L
10297 @itemx --logical
10298 @opindex -L
10299 @opindex --logical
10300 If @option{-s} is not in effect, and the source file is a symbolic
10301 link, create the hard link to the file referred to by the symbolic
10302 link, rather than the symbolic link itself.
10304 @item -n
10305 @itemx --no-dereference
10306 @opindex -n
10307 @opindex --no-dereference
10308 Do not treat the last operand specially when it is a symbolic link to
10309 a directory.  Instead, treat it as if it were a normal file.
10311 When the destination is an actual directory (not a symlink to one),
10312 there is no ambiguity.  The link is created in that directory.
10313 But when the specified destination is a symlink to a directory,
10314 there are two ways to treat the user's request.  @command{ln} can
10315 treat the destination just as it would a normal directory and create
10316 the link in it.  On the other hand, the destination can be viewed as a
10317 non-directory---as the symlink itself.  In that case, @command{ln}
10318 must delete or backup that symlink before creating the new link.
10319 The default is to treat a destination that is a symlink to a directory
10320 just like a directory.
10322 This option is weaker than the @option{--no-target-directory}
10323 (@option{-T}) option, so it has no effect if both options are given.
10325 @item -P
10326 @itemx --physical
10327 @opindex -P
10328 @opindex --physical
10329 If @option{-s} is not in effect, and the source file is a symbolic
10330 link, create the hard link to the symbolic link itself.  On platforms
10331 where this is not supported by the kernel, this option creates a
10332 symbolic link with identical contents; since symbolic link contents
10333 cannot be edited, any file name resolution performed through either
10334 link will be the same as if a hard link had been created.
10336 @item -r
10337 @itemx --relative
10338 @opindex -r
10339 @opindex --relative
10340 Make symbolic links relative to the link location.
10342 Example:
10344 @smallexample
10345 ln -srv /a/file /tmp
10346 '/tmp/file' -> '../a/file'
10347 @end smallexample
10349 Relative symbolic links are generated based on their canonicalized
10350 containing directory, and canonicalized targets.  I.e., all symbolic
10351 links in these file names will be resolved.
10352 @xref{realpath invocation}, which gives greater control
10353 over relative file name generation, as demonstrated in the following example:
10355 @example
10356 @verbatim
10357 ln--relative() {
10358   test "$1" = --no-symlinks && { nosym=$1; shift; }
10359   target="$1";
10360   test -d "$2" && link="$2/." || link="$2"
10361   rtarget="$(realpath $nosym -m "$target" \
10362               --relative-to "$(dirname "$link")")"
10363   ln -s -v "$rtarget" "$link"
10365 @end verbatim
10366 @end example
10368 @item -s
10369 @itemx --symbolic
10370 @opindex -s
10371 @opindex --symbolic
10372 Make symbolic links instead of hard links.  This option merely produces
10373 an error message on systems that do not support symbolic links.
10375 @optBackupSuffix
10377 @optTargetDirectory
10379 @optNoTargetDirectory
10381 @item -v
10382 @itemx --verbose
10383 @opindex -v
10384 @opindex --verbose
10385 Print the name of each file after linking it successfully.
10387 @end table
10389 @cindex hard links to symbolic links
10390 @cindex symbolic links and @command{ln}
10391 If @option{-L} and @option{-P} are both given, the last one takes
10392 precedence.  If @option{-s} is also given, @option{-L} and @option{-P}
10393 are silently ignored.  If neither option is given, then this
10394 implementation defaults to @option{-P} if the system @code{link} supports
10395 hard links to symbolic links (such as the GNU system), and @option{-L}
10396 if @code{link} follows symbolic links (such as on BSD).
10398 @exitstatus
10400 Examples:
10402 @smallexample
10403 Bad Example:
10405 # Create link ../a pointing to a in that directory.
10406 # Not really useful because it points to itself.
10407 ln -s a ..
10409 Better Example:
10411 # Change to the target before creating symlinks to avoid being confused.
10412 cd ..
10413 ln -s adir/a .
10415 Bad Example:
10417 # Hard coded file names don't move well.
10418 ln -s $(pwd)/a /some/dir/
10420 Better Example:
10422 # Relative file names survive directory moves and also
10423 # work across networked file systems.
10424 ln -s afile anotherfile
10425 ln -s ../adir/afile yetanotherfile
10426 @end smallexample
10429 @node mkdir invocation
10430 @section @command{mkdir}: Make directories
10432 @pindex mkdir
10433 @cindex directories, creating
10434 @cindex creating directories
10436 @command{mkdir} creates directories with the specified names.  Synopsis:
10438 @example
10439 mkdir [@var{option}]@dots{} @var{name}@dots{}
10440 @end example
10442 @command{mkdir} creates each directory @var{name} in the order given.
10443 It reports an error if @var{name} already exists, unless the
10444 @option{-p} option is given and @var{name} is a directory.
10446 The program accepts the following options.  Also see @ref{Common options}.
10448 @table @samp
10450 @item -m @var{mode}
10451 @itemx --mode=@var{mode}
10452 @opindex -m
10453 @opindex --mode
10454 @cindex modes of created directories, setting
10455 Set the file permission bits of created directories to @var{mode},
10456 which uses the same syntax as
10457 in @command{chmod} and uses @samp{a=rwx} (read, write and execute allowed for
10458 everyone) for the point of the departure.  @xref{File permissions}.
10460 Normally the directory has the desired file mode bits at the moment it
10461 is created.  As a GNU extension, @var{mode} may also mention
10462 special mode bits, but in this case there may be a temporary window
10463 during which the directory exists but its special mode bits are
10464 incorrect.  @xref{Directory Setuid and Setgid}, for how the
10465 set-user-ID and set-group-ID bits of directories are inherited unless
10466 overridden in this way.
10468 @item -p
10469 @itemx --parents
10470 @opindex -p
10471 @opindex --parents
10472 @cindex parent directories, creating
10473 Make any missing parent directories for each argument, setting their
10474 file permission bits to the umask modified by @samp{u+wx}.  Ignore
10475 existing parent directories, and do not change their file permission
10476 bits.
10478 To set the file permission bits of any newly-created parent
10479 directories to a value that includes @samp{u+wx}, you can set the
10480 umask before invoking @command{mkdir}.  For example, if the shell
10481 command @samp{(umask u=rwx,go=rx; mkdir -p P/Q)} creates the parent
10482 @file{P} it sets the parent's permission bits to @samp{u=rwx,go=rx}.
10483 To set a parent's special mode bits as well, you can invoke
10484 @command{chmod} after @command{mkdir}.  @xref{Directory Setuid and
10485 Setgid}, for how the set-user-ID and set-group-ID bits of
10486 newly-created parent directories are inherited.
10488 @item -v
10489 @itemx --verbose
10490 @opindex -v
10491 @opindex --verbose
10492 Print a message for each created directory.  This is most useful with
10493 @option{--parents}.
10495 @optContext
10497 @end table
10499 @exitstatus
10502 @node mkfifo invocation
10503 @section @command{mkfifo}: Make FIFOs (named pipes)
10505 @pindex mkfifo
10506 @cindex FIFOs, creating
10507 @cindex named pipes, creating
10508 @cindex creating FIFOs (named pipes)
10510 @command{mkfifo} creates FIFOs (also called @dfn{named pipes}) with the
10511 specified names.  Synopsis:
10513 @example
10514 mkfifo [@var{option}] @var{name}@dots{}
10515 @end example
10517 A @dfn{FIFO} is a special file type that permits independent processes
10518 to communicate.  One process opens the FIFO file for writing, and
10519 another for reading, after which data can flow as with the usual
10520 anonymous pipe in shells or elsewhere.
10522 The program accepts the following options.  Also see @ref{Common options}.
10524 @table @samp
10526 @item -m @var{mode}
10527 @itemx --mode=@var{mode}
10528 @opindex -m
10529 @opindex --mode
10530 @cindex modes of created FIFOs, setting
10531 Set the mode of created FIFOs to @var{mode}, which is symbolic as in
10532 @command{chmod} and uses @samp{a=rw} (read and write allowed for everyone)
10533 for the point of departure.  @var{mode} should specify only file
10534 permission bits.  @xref{File permissions}.
10536 @optContext
10538 @end table
10540 @exitstatus
10543 @node mknod invocation
10544 @section @command{mknod}: Make block or character special files
10546 @pindex mknod
10547 @cindex block special files, creating
10548 @cindex character special files, creating
10550 @command{mknod} creates a FIFO, character special file, or block special
10551 file with the specified name.  Synopsis:
10553 @example
10554 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
10555 @end example
10557 @cindex special files
10558 @cindex block special files
10559 @cindex character special files
10560 Unlike the phrase ``special file type'' above, the term @dfn{special
10561 file} has a technical meaning on Unix: something that can generate or
10562 receive data.  Usually this corresponds to a physical piece of hardware,
10563 e.g., a printer or a disk.  (These files are typically created at
10564 system-configuration time.)  The @command{mknod} command is what creates
10565 files of this type.  Such devices can be read either a character at a
10566 time or a ``block'' (many characters) at a time, hence we say there are
10567 @dfn{block special} files and @dfn{character special} files.
10569 @c mknod is a shell built-in at least with OpenBSD's /bin/sh
10570 @mayConflictWithShellBuiltIn{mknod}
10572 The arguments after @var{name} specify the type of file to make:
10574 @table @samp
10576 @item p
10577 @opindex p @r{for FIFO file}
10578 for a FIFO
10580 @item b
10581 @opindex b @r{for block special file}
10582 for a block special file
10584 @item c
10585 @c Don't document the 'u' option -- it's just a synonym for 'c'.
10586 @c Do *any* versions of mknod still use it?
10587 @c @itemx u
10588 @opindex c @r{for character special file}
10589 @c @opindex u @r{for character special file}
10590 for a character special file
10592 @end table
10594 When making a block or character special file, the major and minor
10595 device numbers must be given after the file type.
10596 If a major or minor device number begins with @samp{0x} or @samp{0X},
10597 it is interpreted as hexadecimal; otherwise, if it begins with @samp{0},
10598 as octal; otherwise, as decimal.
10600 The program accepts the following options.  Also see @ref{Common options}.
10602 @table @samp
10604 @item -m @var{mode}
10605 @itemx --mode=@var{mode}
10606 @opindex -m
10607 @opindex --mode
10608 Set the mode of created files to @var{mode}, which is symbolic as in
10609 @command{chmod} and uses @samp{a=rw} as the point of departure.
10610 @var{mode} should specify only file permission bits.
10611 @xref{File permissions}.
10613 @optContext
10615 @end table
10617 @exitstatus
10620 @node readlink invocation
10621 @section @command{readlink}: Print value of a symlink or canonical file name
10623 @pindex readlink
10624 @cindex displaying value of a symbolic link
10625 @cindex canonical file name
10626 @cindex canonicalize a file name
10627 @cindex realpath
10629 @command{readlink} may work in one of two supported modes:
10631 @table @samp
10633 @item Readlink mode
10635 @command{readlink} outputs the value of the given symbolic links.
10636 If @command{readlink} is invoked with an argument other than the name
10637 of a symbolic link, it produces no output and exits with a nonzero exit code.
10639 @item Canonicalize mode
10641 @command{readlink} outputs the absolute name of the given files which contain
10642 no @file{.}, @file{..} components nor any repeated separators
10643 (@file{/}) or symbolic links.  Note the @command{realpath} command is the
10644 preferred command to use for canonicalization.  @xref{realpath invocation}.
10646 @end table
10648 @example
10649 readlink [@var{option}]@dots{} @var{file}@dots{}
10650 @end example
10652 By default, @command{readlink} operates in readlink mode.
10654 The program accepts the following options.  Also see @ref{Common options}.
10656 @table @samp
10658 @item -f
10659 @itemx --canonicalize
10660 @opindex -f
10661 @opindex --canonicalize
10662 Activate canonicalize mode.
10663 If any component of the file name except the last one is missing or unavailable,
10664 @command{readlink} produces no output and exits with a nonzero exit
10665 code.  A trailing slash is ignored.
10667 @item -e
10668 @itemx --canonicalize-existing
10669 @opindex -e
10670 @opindex --canonicalize-existing
10671 Activate canonicalize mode.
10672 If any component is missing or unavailable, @command{readlink} produces
10673 no output and exits with a nonzero exit code.  A trailing slash
10674 requires that the name resolve to a directory.
10676 @item -m
10677 @itemx --canonicalize-missing
10678 @opindex -m
10679 @opindex --canonicalize-missing
10680 Activate canonicalize mode.
10681 If any component is missing or unavailable, @command{readlink} treats it
10682 as a directory.
10684 @item -n
10685 @itemx --no-newline
10686 @opindex -n
10687 @opindex --no-newline
10688 Do not print the output delimiter, when a single @var{file} is specified.
10689 Print a warning if specified along with multiple @var{file}s.
10691 @item -s
10692 @itemx -q
10693 @itemx --silent
10694 @itemx --quiet
10695 @opindex -s
10696 @opindex -q
10697 @opindex --silent
10698 @opindex --quiet
10699 Suppress most error messages.  On by default.
10701 @item -v
10702 @itemx --verbose
10703 @opindex -v
10704 @opindex --verbose
10705 Report error messages.
10707 @optZero
10709 @end table
10711 The @command{readlink} utility first appeared in OpenBSD 2.1.
10713 The @command{realpath} command without options, operates like
10714 @command{readlink} in canonicalize mode.
10716 @exitstatus
10719 @node rmdir invocation
10720 @section @command{rmdir}: Remove empty directories
10722 @pindex rmdir
10723 @cindex removing empty directories
10724 @cindex directories, removing empty
10726 @command{rmdir} removes empty directories.  Synopsis:
10728 @example
10729 rmdir [@var{option}]@dots{} @var{directory}@dots{}
10730 @end example
10732 If any @var{directory} argument does not refer to an existing empty
10733 directory, it is an error.
10735 The program accepts the following options.  Also see @ref{Common options}.
10737 @table @samp
10739 @item --ignore-fail-on-non-empty
10740 @opindex --ignore-fail-on-non-empty
10741 @cindex directory deletion, ignoring failures
10742 Ignore each failure to remove a directory that is solely because
10743 the directory is non-empty.
10745 @item -p
10746 @itemx --parents
10747 @opindex -p
10748 @opindex --parents
10749 @cindex parent directories, removing
10750 Remove @var{directory}, then try to remove each component of @var{directory}.
10751 So, for example, @samp{rmdir -p a/b/c} is similar to @samp{rmdir a/b/c a/b a}.
10752 As such, it fails if any of those directories turns out not to be empty.
10753 Use the @option{--ignore-fail-on-non-empty} option to make it so such
10754 a failure does not evoke a diagnostic and does not cause @command{rmdir} to
10755 exit unsuccessfully.
10757 @item -v
10758 @itemx --verbose
10759 @opindex -v
10760 @opindex --verbose
10761 @cindex directory deletion, reporting
10762 Give a diagnostic for each successful removal.
10763 @var{directory} is removed.
10765 @end table
10767 @xref{rm invocation}, for how to remove non-empty directories (recursively).
10769 @exitstatus
10772 @node unlink invocation
10773 @section @command{unlink}: Remove files via the unlink syscall
10775 @pindex unlink
10776 @cindex removing files or directories (via the unlink syscall)
10778 @command{unlink} deletes a single specified file name.
10779 It is a minimalist interface to the system-provided
10780 @code{unlink} function.  @xref{Deleting Files, , , libc,
10781 The GNU C Library Reference Manual}.  Synopsis:
10782 It avoids the bells and whistles of the more commonly-used
10783 @command{rm} command (@pxref{rm invocation}).
10785 @example
10786 unlink @var{filename}
10787 @end example
10789 On some systems @code{unlink} can be used to delete the name of a
10790 directory.  On others, it can be used that way only by a privileged user.
10791 In the GNU system @code{unlink} can never delete the name of a directory.
10793 The @command{unlink} command honors the @option{--help} and
10794 @option{--version} options.  To remove a file whose name begins with
10795 @samp{-}, prefix the name with @samp{./}, e.g., @samp{unlink ./--help}.
10797 @exitstatus
10800 @node Changing file attributes
10801 @chapter Changing file attributes
10803 @cindex changing file attributes
10804 @cindex file attributes, changing
10805 @cindex attributes, file
10807 A file is not merely its contents, a name, and a file type
10808 (@pxref{Special file types}).  A file also has an owner (a user ID), a
10809 group (a group ID), permissions (what the owner can do with the file,
10810 what people in the group can do, and what everyone else can do), various
10811 timestamps, and other information.  Collectively, we call these a file's
10812 @dfn{attributes}.
10814 These commands change file attributes.
10816 @menu
10817 * chown invocation::            Change file owners and groups.
10818 * chgrp invocation::            Change file groups.
10819 * chmod invocation::            Change access permissions.
10820 * touch invocation::            Change file timestamps.
10821 @end menu
10824 @node chown invocation
10825 @section @command{chown}: Change file owner and group
10827 @pindex chown
10828 @cindex file ownership, changing
10829 @cindex group ownership, changing
10830 @cindex changing file ownership
10831 @cindex changing group ownership
10833 @command{chown} changes the user and/or group ownership of each given @var{file}
10834 to @var{new-owner} or to the user and group of an existing reference file.
10835 Synopsis:
10837 @example
10838 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@}@c
10839  @var{file}@dots{}
10840 @end example
10842 If used, @var{new-owner} specifies the new owner and/or group as follows
10843 (with no embedded white space):
10845 @example
10846 [@var{owner}] [ : [@var{group}] ]
10847 @end example
10849 Specifically:
10851 @table @var
10852 @item owner
10853 If only an @var{owner} (a user name or numeric user ID) is given, that
10854 user is made the owner of each given file, and the files' group is not
10855 changed.
10857 @item owner@samp{:}group
10858 If the @var{owner} is followed by a colon and a @var{group} (a
10859 group name or numeric group ID), with no spaces between them, the group
10860 ownership of the files is changed as well (to @var{group}).
10862 @item owner@samp{:}
10863 If a colon but no group name follows @var{owner}, that user is
10864 made the owner of the files and the group of the files is changed to
10865 @var{owner}'s login group.
10867 @item @samp{:}group
10868 If the colon and following @var{group} are given, but the owner
10869 is omitted, only the group of the files is changed; in this case,
10870 @command{chown} performs the same function as @command{chgrp}.
10872 @item @samp{:}
10873 If only a colon is given, or if @var{new-owner} is empty, neither the
10874 owner nor the group is changed.
10876 @end table
10878 If @var{owner} or @var{group} is intended to represent a numeric user
10879 or group ID, then you may specify it with a leading @samp{+}.
10880 @xref{Disambiguating names and IDs}.
10882 Some older scripts may still use @samp{.} in place of the @samp{:} separator.
10883 POSIX 1003.1-2001 (@pxref{Standards conformance}) does not
10884 require support for that, but for backward compatibility GNU
10885 @command{chown} supports @samp{.} so long as no ambiguity results.
10886 New scripts should avoid the use of @samp{.} because it is not
10887 portable, and because it has undesirable results if the entire
10888 @var{owner@samp{.}group} happens to identify a user whose name
10889 contains @samp{.}.
10891 @macro chownGroupRestrictions
10892 It is system dependent whether a user can change the group to an arbitrary one,
10893 or the more portable behavior of being restricted to setting a group of
10894 which the user is a member.
10895 @end macro
10896 @chownGroupRestrictions
10898 The @command{chown} command sometimes clears the set-user-ID or
10899 set-group-ID permission bits.  This behavior depends on the policy and
10900 functionality of the underlying @code{chown} system call, which may
10901 make system-dependent file mode modifications outside the control of
10902 the @command{chown} command.  For example, the @command{chown} command
10903 might not affect those bits when invoked by a user with appropriate
10904 privileges, or when the
10905 bits signify some function other than executable permission (e.g.,
10906 mandatory locking).
10907 When in doubt, check the underlying system behavior.
10909 The program accepts the following options.  Also see @ref{Common options}.
10911 @table @samp
10913 @item -c
10914 @itemx --changes
10915 @opindex -c
10916 @opindex --changes
10917 @cindex changed owners, verbosely describing
10918 Verbosely describe the action for each @var{file} whose ownership
10919 actually changes.
10921 @item -f
10922 @itemx --silent
10923 @itemx --quiet
10924 @opindex -f
10925 @opindex --silent
10926 @opindex --quiet
10927 @cindex error messages, omitting
10928 Do not print error messages about files whose ownership cannot be
10929 changed.
10931 @item --from=@var{old-owner}
10932 @opindex --from
10933 @cindex symbolic links, changing owner
10934 Change a @var{file}'s ownership only if it has current attributes specified
10935 by @var{old-owner}.  @var{old-owner} has the same form as @var{new-owner}
10936 described above.
10937 This option is useful primarily from a security standpoint in that
10938 it narrows considerably the window of potential abuse.
10939 For example, to reflect a user ID numbering change for one user's files
10940 without an option like this, @code{root} might run
10942 @smallexample
10943 find / -owner OLDUSER -print0 | xargs -0 chown -h NEWUSER
10944 @end smallexample
10946 But that is dangerous because the interval between when the @command{find}
10947 tests the existing file's owner and when the @command{chown} is actually run
10948 may be quite large.
10949 One way to narrow the gap would be to invoke chown for each file
10950 as it is found:
10952 @example
10953 find / -owner OLDUSER -exec chown -h NEWUSER @{@} \;
10954 @end example
10956 But that is very slow if there are many affected files.
10957 With this option, it is safer (the gap is narrower still)
10958 though still not perfect:
10960 @example
10961 chown -h -R --from=OLDUSER NEWUSER /
10962 @end example
10964 @item --dereference
10965 @opindex --dereference
10966 @cindex symbolic links, changing owner
10967 @findex lchown
10968 Do not act on symbolic links themselves but rather on what they point to.
10969 This is the default.
10971 @item -h
10972 @itemx --no-dereference
10973 @opindex -h
10974 @opindex --no-dereference
10975 @cindex symbolic links, changing owner
10976 @findex lchown
10977 Act on symbolic links themselves instead of what they point to.
10978 This mode relies on the @code{lchown} system call.
10979 On systems that do not provide the @code{lchown} system call,
10980 @command{chown} fails when a file specified on the command line
10981 is a symbolic link.
10982 By default, no diagnostic is issued for symbolic links encountered
10983 during a recursive traversal, but see @option{--verbose}.
10985 @item --preserve-root
10986 @opindex --preserve-root
10987 @cindex root directory, disallow recursive modification
10988 Fail upon any attempt to recursively change the root directory, @file{/}.
10989 Without @option{--recursive}, this option has no effect.
10990 @xref{Treating / specially}.
10992 @item --no-preserve-root
10993 @opindex --no-preserve-root
10994 @cindex root directory, allow recursive modification
10995 Cancel the effect of any preceding @option{--preserve-root} option.
10996 @xref{Treating / specially}.
10998 @item --reference=@var{ref_file}
10999 @opindex --reference
11000 Change the user and group of each @var{file} to be the same as those of
11001 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
11002 user and group of the symbolic link, but rather those of the file it
11003 refers to.
11005 @item -v
11006 @itemx --verbose
11007 @opindex -v
11008 @opindex --verbose
11009 Output a diagnostic for every file processed.
11010 If a symbolic link is encountered during a recursive traversal
11011 on a system without the @code{lchown} system call, and @option{--no-dereference}
11012 is in effect, then issue a diagnostic saying neither the symbolic link nor
11013 its referent is being changed.
11015 @item -R
11016 @itemx --recursive
11017 @opindex -R
11018 @opindex --recursive
11019 @cindex recursively changing file ownership
11020 Recursively change ownership of directories and their contents.
11022 @choptH
11023 @xref{Traversing symlinks}.
11025 @choptL
11026 @xref{Traversing symlinks}.
11028 @choptP
11029 @xref{Traversing symlinks}.
11031 @end table
11033 @exitstatus
11035 Examples:
11037 @smallexample
11038 # Change the owner of /u to "root".
11039 chown root /u
11041 # Likewise, but also change its group to "staff".
11042 chown root:staff /u
11044 # Change the owner of /u and subfiles to "root".
11045 chown -hR root /u
11046 @end smallexample
11049 @node chgrp invocation
11050 @section @command{chgrp}: Change group ownership
11052 @pindex chgrp
11053 @cindex group ownership, changing
11054 @cindex changing group ownership
11056 @command{chgrp} changes the group ownership of each given @var{file}
11057 to @var{group} (which can be either a group name or a numeric group ID)
11058 or to the group of an existing reference file.  @xref{chown invocation}.
11059 Synopsis:
11061 @example
11062 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@}@c
11063  @var{file}@dots{}
11064 @end example
11066 If @var{group} is intended to represent a
11067 numeric group ID, then you may specify it with a leading @samp{+}.
11068 @xref{Disambiguating names and IDs}.
11070 @chownGroupRestrictions
11072 The program accepts the following options.  Also see @ref{Common options}.
11074 @table @samp
11076 @item -c
11077 @itemx --changes
11078 @opindex -c
11079 @opindex --changes
11080 @cindex changed files, verbosely describing
11081 Verbosely describe the action for each @var{file} whose group actually
11082 changes.
11084 @item -f
11085 @itemx --silent
11086 @itemx --quiet
11087 @opindex -f
11088 @opindex --silent
11089 @opindex --quiet
11090 @cindex error messages, omitting
11091 Do not print error messages about files whose group cannot be
11092 changed.
11094 @item --dereference
11095 @opindex --dereference
11096 @cindex symbolic links, changing owner
11097 @findex lchown
11098 Do not act on symbolic links themselves but rather on what they point to.
11099 This is the default.
11101 @item -h
11102 @itemx --no-dereference
11103 @opindex -h
11104 @opindex --no-dereference
11105 @cindex symbolic links, changing group
11106 @findex lchown
11107 Act on symbolic links themselves instead of what they point to.
11108 This mode relies on the @code{lchown} system call.
11109 On systems that do not provide the @code{lchown} system call,
11110 @command{chgrp} fails when a file specified on the command line
11111 is a symbolic link.
11112 By default, no diagnostic is issued for symbolic links encountered
11113 during a recursive traversal, but see @option{--verbose}.
11115 @item --preserve-root
11116 @opindex --preserve-root
11117 @cindex root directory, disallow recursive modification
11118 Fail upon any attempt to recursively change the root directory, @file{/}.
11119 Without @option{--recursive}, this option has no effect.
11120 @xref{Treating / specially}.
11122 @item --no-preserve-root
11123 @opindex --no-preserve-root
11124 @cindex root directory, allow recursive modification
11125 Cancel the effect of any preceding @option{--preserve-root} option.
11126 @xref{Treating / specially}.
11128 @item --reference=@var{ref_file}
11129 @opindex --reference
11130 Change the group of each @var{file} to be the same as that of
11131 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
11132 group of the symbolic link, but rather that of the file it refers to.
11134 @item -v
11135 @itemx --verbose
11136 @opindex -v
11137 @opindex --verbose
11138 Output a diagnostic for every file processed.
11139 If a symbolic link is encountered during a recursive traversal
11140 on a system without the @code{lchown} system call, and @option{--no-dereference}
11141 is in effect, then issue a diagnostic saying neither the symbolic link nor
11142 its referent is being changed.
11144 @item -R
11145 @itemx --recursive
11146 @opindex -R
11147 @opindex --recursive
11148 @cindex recursively changing group ownership
11149 Recursively change the group ownership of directories and their contents.
11151 @choptH
11152 @xref{Traversing symlinks}.
11154 @choptL
11155 @xref{Traversing symlinks}.
11157 @choptP
11158 @xref{Traversing symlinks}.
11160 @end table
11162 @exitstatus
11164 Examples:
11166 @smallexample
11167 # Change the group of /u to "staff".
11168 chgrp staff /u
11170 # Change the group of /u and subfiles to "staff".
11171 chgrp -hR staff /u
11172 @end smallexample
11175 @node chmod invocation
11176 @section @command{chmod}: Change access permissions
11178 @pindex chmod
11179 @cindex changing access permissions
11180 @cindex access permissions, changing
11181 @cindex permissions, changing access
11183 @command{chmod} changes the access permissions of the named files.  Synopsis:
11185 @example
11186 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@}@c
11187  @var{file}@dots{}
11188 @end example
11190 @cindex symbolic links, permissions of
11191 @command{chmod} never changes the permissions of symbolic links, since
11192 the @command{chmod} system call cannot change their permissions.
11193 This is not a problem since the permissions of symbolic links are
11194 never used.  However, for each symbolic link listed on the command
11195 line, @command{chmod} changes the permissions of the pointed-to file.
11196 In contrast, @command{chmod} ignores symbolic links encountered during
11197 recursive directory traversals.
11199 A successful use of @command{chmod} clears the set-group-ID bit of a
11200 regular file if the file's group ID does not match the user's
11201 effective group ID or one of the user's supplementary group IDs,
11202 unless the user has appropriate privileges.  Additional restrictions
11203 may cause the set-user-ID and set-group-ID bits of @var{mode} or
11204 @var{ref_file} to be ignored.  This behavior depends on the policy and
11205 functionality of the underlying @code{chmod} system call.  When in
11206 doubt, check the underlying system behavior.
11208 If used, @var{mode} specifies the new file mode bits.
11209 For details, see the section on @ref{File permissions}.
11210 If you really want @var{mode} to have a leading @samp{-}, you should
11211 use @option{--} first, e.g., @samp{chmod -- -w file}.  Typically,
11212 though, @samp{chmod a-w file} is preferable, and @command{chmod -w
11213 file} (without the @option{--}) complains if it behaves differently
11214 from what @samp{chmod a-w file} would do.
11216 The program accepts the following options.  Also see @ref{Common options}.
11218 @table @samp
11220 @item -c
11221 @itemx --changes
11222 @opindex -c
11223 @opindex --changes
11224 Verbosely describe the action for each @var{file} whose permissions
11225 actually changes.
11227 @item -f
11228 @itemx --silent
11229 @itemx --quiet
11230 @opindex -f
11231 @opindex --silent
11232 @opindex --quiet
11233 @cindex error messages, omitting
11234 Do not print error messages about files whose permissions cannot be
11235 changed.
11237 @item --preserve-root
11238 @opindex --preserve-root
11239 @cindex root directory, disallow recursive modification
11240 Fail upon any attempt to recursively change the root directory, @file{/}.
11241 Without @option{--recursive}, this option has no effect.
11242 @xref{Treating / specially}.
11244 @item --no-preserve-root
11245 @opindex --no-preserve-root
11246 @cindex root directory, allow recursive modification
11247 Cancel the effect of any preceding @option{--preserve-root} option.
11248 @xref{Treating / specially}.
11250 @item -v
11251 @itemx --verbose
11252 @opindex -v
11253 @opindex --verbose
11254 Verbosely describe the action or non-action taken for every @var{file}.
11256 @item --reference=@var{ref_file}
11257 @opindex --reference
11258 Change the mode of each @var{file} to be the same as that of @var{ref_file}.
11259 @xref{File permissions}.
11260 If @var{ref_file} is a symbolic link, do not use the mode
11261 of the symbolic link, but rather that of the file it refers to.
11263 @item -R
11264 @itemx --recursive
11265 @opindex -R
11266 @opindex --recursive
11267 @cindex recursively changing access permissions
11268 Recursively change permissions of directories and their contents.
11270 @end table
11272 @exitstatus
11275 @node touch invocation
11276 @section @command{touch}: Change file timestamps
11278 @pindex touch
11279 @cindex changing file timestamps
11280 @cindex file timestamps, changing
11281 @cindex timestamps, changing file
11283 @command{touch} changes the access and/or modification timestamps of the
11284 specified files.  Synopsis:
11286 @example
11287 touch [@var{option}]@dots{} @var{file}@dots{}
11288 @end example
11290 @cindex empty files, creating
11291 Any @var{file} argument that does not exist is created empty, unless
11292 option @option{--no-create} (@option{-c}) or @option{--no-dereference}
11293 (@option{-h}) was in effect.
11295 A @var{file} argument string of @samp{-} is handled specially and
11296 causes @command{touch} to change the times of the file associated with
11297 standard output.
11299 By default, @command{touch} sets file timestamps to the current time.
11300 Because @command{touch} acts on its operands left to right, the
11301 resulting timestamps of earlier and later operands may disagree.
11303 @cindex permissions, for changing file timestamps
11304 When setting file timestamps to the current time, @command{touch} can
11305 change the timestamps for files that the user does not own but has
11306 write permission for.  Otherwise, the user must own the files.  Some
11307 older systems have a further restriction: the user must own the files
11308 unless both the access and modification timestamps are being set to the
11309 current time.
11311 The @command{touch} command cannot set a file's status change timestamp to
11312 a user-specified value, and cannot change the file's birth time (if
11313 supported) at all.  Also, @command{touch} has issues similar to those
11314 affecting all programs that update file timestamps.  For example,
11315 @command{touch} may set a file's timestamp to a value that differs
11316 slightly from the requested time.  @xref{File timestamps}.
11318 @vindex TZ
11319 Timestamps assume the time zone rules specified by the @env{TZ}
11320 environment variable, or by the system default rules if @env{TZ} is
11321 not set.  @xref{TZ Variable,, Specifying the Time Zone with @env{TZ},
11322 libc, The GNU C Library Reference Manual}.
11323 You can avoid ambiguities during
11324 daylight saving transitions by using UTC timestamps.
11326 The program accepts the following options.  Also see @ref{Common options}.
11328 @table @samp
11330 @item -a
11331 @itemx --time=atime
11332 @itemx --time=access
11333 @itemx --time=use
11334 @opindex -a
11335 @opindex --time
11336 @opindex atime@r{, changing}
11337 @opindex access @r{time, changing}
11338 @opindex use @r{time, changing}
11339 Change the access timestamp only.  @xref{File timestamps}.
11341 @item -c
11342 @itemx --no-create
11343 @opindex -c
11344 @opindex --no-create
11345 Do not warn about or create files that do not exist.
11347 @item -d @var{time}
11348 @itemx --date=@var{time}
11349 @opindex -d
11350 @opindex --date
11351 @opindex time
11352 Use @var{time} instead of the current time.  It can contain month names,
11353 time zones, @samp{am} and @samp{pm}, @samp{yesterday}, etc.  For
11354 example, @option{--date="2004-02-27 14:19:13.489392193 +0530"}
11355 specifies the instant of time that is 489,392,193 nanoseconds after
11356 February 27, 2004 at 2:19:13 PM in a time zone that is 5 hours and 30
11357 minutes east of UTC@.  @xref{Date input formats}.
11358 File systems that do not support high-resolution timestamps
11359 silently ignore any excess precision here.
11361 @item -f
11362 @opindex -f
11363 @cindex BSD @command{touch} compatibility
11364 Ignored; for compatibility with BSD versions of @command{touch}.
11366 @item -h
11367 @itemx --no-dereference
11368 @opindex -h
11369 @opindex --no-dereference
11370 @cindex symbolic links, changing time
11371 @findex lutimes
11372 Attempt to change the timestamps of a symbolic link, rather than what
11373 the link refers to.  When using this option, empty files are not
11374 created, but option @option{-c} must also be used to avoid warning
11375 about files that do not exist.  Not all systems support changing the
11376 timestamps of symlinks, since underlying system support for this
11377 action was not required until POSIX 2008.  Also, on some
11378 systems, the mere act of examining a symbolic link changes the access
11379 timestamp, such that only changes to the modification timestamp will persist
11380 long enough to be observable.  When coupled with option @option{-r}, a
11381 reference timestamp is taken from a symbolic link rather than the file
11382 it refers to.
11384 @item -m
11385 @itemx --time=mtime
11386 @itemx --time=modify
11387 @opindex -m
11388 @opindex --time
11389 @opindex mtime@r{, changing}
11390 @opindex modify @r{time, changing}
11391 Change the modification timestamp only.
11393 @item -r @var{file}
11394 @itemx --reference=@var{file}
11395 @opindex -r
11396 @opindex --reference
11397 Use the times of the reference @var{file} instead of the current time.
11398 If this option is combined with the @option{--date=@var{time}}
11399 (@option{-d @var{time}}) option, the reference @var{file}'s time is
11400 the origin for any relative @var{time}s given, but is otherwise ignored.
11401 For example, @samp{-r foo -d '-5 seconds'} specifies a timestamp
11402 equal to five seconds before the corresponding timestamp for @file{foo}.
11403 If @var{file} is a symbolic link, the reference timestamp is taken
11404 from the target of the symlink, unless @option{-h} was also in effect.
11406 @item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
11407 @cindex leap seconds
11408 Use the argument (optional four-digit or two-digit years, months,
11409 days, hours, minutes, optional seconds) instead of the current time.
11410 If the year is specified with only two digits, then @var{cc}
11411 is 20 for years in the range 0 @dots{} 68, and 19 for years in
11412 69 @dots{} 99.  If no digits of the year are specified,
11413 the argument is interpreted as a date in the current year.
11414 On the atypical systems that support leap seconds, @var{ss} may be
11415 @samp{60}.
11417 @end table
11419 @vindex _POSIX2_VERSION
11420 On systems predating POSIX 1003.1-2001,
11421 @command{touch} supports an obsolete syntax, as follows.
11422 If no timestamp is given with any of the @option{-d}, @option{-r}, or
11423 @option{-t} options, and if there are two or more @var{file}s and the
11424 first @var{file} is of the form @samp{@var{mmddhhmm}[@var{yy}]} and this
11425 would be a valid argument to the @option{-t} option (if the @var{yy}, if
11426 any, were moved to the front), and if the represented year
11427 is in the range 1969--1999, that argument is interpreted as the time
11428 for the other files instead of as a file name.
11429 Although this obsolete behavior can be controlled with the
11430 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
11431 conformance}), portable scripts should avoid commands whose
11432 behavior depends on this variable.
11433 For example, use @samp{touch ./12312359 main.c} or @samp{touch -t
11434 12312359 main.c} rather than the ambiguous @samp{touch 12312359 main.c}.
11436 @exitstatus
11439 @node Disk usage
11440 @chapter Disk usage
11442 @cindex disk usage
11444 No disk can hold an infinite amount of data.  These commands report
11445 how much disk storage is in use or available, report other file and
11446 file status information, and write buffers to disk.
11448 @menu
11449 * df invocation::               Report file system disk space usage.
11450 * du invocation::               Estimate file space usage.
11451 * stat invocation::             Report file or file system status.
11452 * sync invocation::             Synchronize cached writes to persistent storage.
11453 * truncate invocation::         Shrink or extend the size of a file.
11454 @end menu
11457 @node df invocation
11458 @section @command{df}: Report file system disk space usage
11460 @pindex df
11461 @cindex file system disk usage
11462 @cindex disk usage by file system
11464 @command{df} reports the amount of disk space used and available on
11465 file systems.  Synopsis:
11467 @example
11468 df [@var{option}]@dots{} [@var{file}]@dots{}
11469 @end example
11471 With no arguments, @command{df} reports the space used and available on all
11472 currently mounted file systems (of all types).  Otherwise, @command{df}
11473 reports on the file system containing each argument @var{file}.
11475 Normally the disk space is printed in units of
11476 1024 bytes, but this can be overridden (@pxref{Block size}).
11477 Non-integer quantities are rounded up to the next higher unit.
11479 For bind mounts and without arguments, @command{df} only outputs the statistics
11480 for that device with the shortest mount point name in the list of file systems
11481 (@var{mtab}), i.e., it hides duplicate entries, unless the @option{-a} option is
11482 specified.
11484 With the same logic, @command{df} elides a mount entry of a dummy pseudo device
11485 if there is another mount entry of a real block device for that mount point with
11486 the same device number, e.g. the early-boot pseudo file system @samp{rootfs} is
11487 not shown per default when already the real root device has been mounted.
11489 @cindex disk device file
11490 @cindex device file, disk
11491 If an argument @var{file} resolves to a special file containing
11492 a mounted file system, @command{df} shows the space available on that
11493 file system rather than on the file system containing the device node.
11494 GNU @command{df} does not attempt to determine the disk usage
11495 on unmounted file systems, because on most kinds of systems doing so
11496 requires extremely nonportable intimate knowledge of file system structures.
11498 The program accepts the following options.  Also see @ref{Common options}.
11500 @table @samp
11502 @item -a
11503 @itemx --all
11504 @opindex -a
11505 @opindex --all
11506 @cindex ignore file systems
11507 Include in the listing dummy, duplicate, or inaccessible file systems, which
11508 are omitted by default.  Dummy file systems are typically special purpose
11509 pseudo file systems such as @samp{/proc}, with no associated storage.
11510 Duplicate file systems are local or remote file systems that are mounted
11511 at separate locations in the local file hierarchy, or bind mounted locations.
11512 Inaccessible file systems are those which are mounted but subsequently
11513 over-mounted by another file system at that point, or otherwise inaccessible
11514 due to permissions of the mount point etc.
11516 @item -B @var{size}
11517 @itemx --block-size=@var{size}
11518 @opindex -B
11519 @opindex --block-size
11520 @cindex file system sizes
11521 Scale sizes by @var{size} before printing them (@pxref{Block size}).
11522 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
11524 @optHumanReadable
11526 @item -H
11527 @opindex -H
11528 Equivalent to @option{--si}.
11530 @item -i
11531 @itemx --inodes
11532 @opindex -i
11533 @opindex --inodes
11534 @cindex inode usage
11535 List inode usage information instead of block usage.  An inode (short
11536 for index node) contains information about a file such as its owner,
11537 permissions, timestamps, and location on the disk.
11539 @item -k
11540 @opindex -k
11541 @cindex kibibytes for file system sizes
11542 Print sizes in 1024-byte blocks, overriding the default block size
11543 (@pxref{Block size}).
11544 This option is equivalent to @option{--block-size=1K}.
11546 @item -l
11547 @itemx --local
11548 @opindex -l
11549 @opindex --local
11550 @cindex file system types, limiting output to certain
11551 Limit the listing to local file systems.  By default, remote file systems
11552 are also listed.
11554 @item --no-sync
11555 @opindex --no-sync
11556 @cindex file system space, retrieving old data more quickly
11557 Do not invoke the @code{sync} system call before getting any usage data.
11558 This may make @command{df} run significantly faster on systems with many
11559 disks, but on some systems (notably SunOS) the results may be slightly
11560 out of date.  This is the default.
11562 @item --output
11563 @itemx --output[=@var{field_list}]
11564 @opindex --output
11565 Use the output format defined by @var{field_list}, or print all fields if
11566 @var{field_list} is omitted.  In the latter case, the order of the columns
11567 conforms to the order of the field descriptions below.
11569 The use of the @option{--output} together with each of the options @option{-i},
11570 @option{-P}, and @option{-T} is mutually exclusive.
11572 FIELD_LIST is a comma-separated list of columns to be included in @command{df}'s
11573 output and therefore effectively controls the order of output columns.
11574 Each field can thus be used at the place of choice, but yet must only be
11575 used once.
11577 Valid field names in the @var{field_list} are:
11578 @table @samp
11579 @item source
11580 The source of the mount point, usually a device.
11581 @item fstype
11582 File system type.
11584 @item itotal
11585 Total number of inodes.
11586 @item iused
11587 Number of used inodes.
11588 @item iavail
11589 Number of available inodes.
11590 @item ipcent
11591 Percentage of @var{iused} divided by @var{itotal}.
11593 @item size
11594 Total number of blocks.
11595 @item used
11596 Number of used blocks.
11597 @item avail
11598 Number of available blocks.
11599 @item pcent
11600 Percentage of @var{used} divided by @var{size}.
11602 @item file
11603 The file name if specified on the command line.
11604 @item target
11605 The mount point.
11606 @end table
11608 The fields for block and inodes statistics are affected by the scaling
11609 options like @option{-h} as usual.
11611 The definition of the @var{field_list} can even be split among several
11612 @option{--output} uses.
11614 @example
11615 #!/bin/sh
11616 # Print the TARGET (i.e., the mount point) along with their percentage
11617 # statistic regarding the blocks and the inodes.
11618 df --out=target --output=pcent,ipcent
11620 # Print all available fields.
11621 df --o
11622 @end example
11625 @item -P
11626 @itemx --portability
11627 @opindex -P
11628 @opindex --portability
11629 @cindex one-line output format
11630 @cindex POSIX output format
11631 @cindex portable output format
11632 @cindex output format, portable
11633 Use the POSIX output format.  This is like the default format except
11634 for the following:
11636 @enumerate
11637 @item
11638 The information about each file system is always printed on exactly
11639 one line; a mount device is never put on a line by itself.  This means
11640 that if the mount device name is more than 20 characters long (e.g., for
11641 some network mounts), the columns are misaligned.
11643 @item
11644 The labels in the header output line are changed to conform to POSIX.
11646 @item
11647 The default block size and output format are unaffected by the
11648 @env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE} and @env{BLOCKSIZE} environment
11649 variables.  However, the default block size is still affected by
11650 @env{POSIXLY_CORRECT}: it is 512 if @env{POSIXLY_CORRECT} is set, 1024
11651 otherwise.  @xref{Block size}.
11652 @end enumerate
11654 @optSi
11656 @item --sync
11657 @opindex --sync
11658 @cindex file system space, retrieving current data more slowly
11659 Invoke the @code{sync} system call before getting any usage data.  On
11660 some systems (notably SunOS), doing this yields more up to date results,
11661 but in general this option makes @command{df} much slower, especially when
11662 there are many or very busy file systems.
11664 @item --total
11665 @opindex --total
11666 @cindex grand total of disk size, usage and available space
11667 Print a grand total of all arguments after all arguments have
11668 been processed.  This can be used to find out the total disk size, usage
11669 and available space of all listed devices.  If no arguments are specified
11670 df will try harder to elide file systems insignificant to the total
11671 available space, by suppressing duplicate remote file systems.
11673 For the grand total line, @command{df} prints @samp{"total"} into the
11674 @var{source} column, and @samp{"-"} into the @var{target} column.
11675 If there is no @var{source} column (see @option{--output}), then
11676 @command{df} prints @samp{"total"} into the @var{target} column,
11677 if present.
11679 @item -t @var{fstype}
11680 @itemx --type=@var{fstype}
11681 @opindex -t
11682 @opindex --type
11683 @cindex file system types, limiting output to certain
11684 Limit the listing to file systems of type @var{fstype}.  Multiple
11685 file system types can be specified by giving multiple @option{-t} options.
11686 By default, nothing is omitted.
11688 @item -T
11689 @itemx --print-type
11690 @opindex -T
11691 @opindex --print-type
11692 @cindex file system types, printing
11693 Print each file system's type.  The types printed here are the same ones
11694 you can include or exclude with @option{-t} and @option{-x}.  The particular
11695 types printed are whatever is supported by the system.  Here are some of
11696 the common names (this list is certainly not exhaustive):
11698 @table @samp
11700 @item nfs
11701 @cindex NFS file system type
11702 An NFS file system, i.e., one mounted over a network from another
11703 machine.  This is the one type name which seems to be used uniformly by
11704 all systems.
11706 @item ext2@r{, }ext3@r{, }ext4@r{, }xfs@r{, }btrfs@dots{}
11707 @cindex Linux file system types
11708 @cindex local file system types
11709 @opindex ext2 @r{file system type}
11710 @opindex ext3 @r{file system type}
11711 @opindex ext4 @r{file system type}
11712 @opindex xfs @r{file system type}
11713 @opindex btrfs @r{file system type}
11714 A file system on a locally-mounted hard disk.  (The system might even
11715 support more than one type here; Linux does.)
11717 @item iso9660@r{, }cdfs
11718 @cindex CD-ROM file system type
11719 @cindex DVD file system type
11720 @cindex ISO9660 file system type
11721 @opindex iso9660 @r{file system type}
11722 @opindex cdfs @r{file system type}
11723 A file system on a CD or DVD drive.  HP-UX uses @samp{cdfs}, most other
11724 systems use @samp{iso9660}.
11726 @item ntfs@r{,}fat
11727 @cindex NTFS file system
11728 @cindex DOS file system
11729 @cindex MS-DOS file system
11730 @cindex MS-Windows file system
11731 @opindex ntfs @r{file system file}
11732 @opindex fat @r{file system file}
11733 File systems used by MS-Windows / MS-DOS.
11735 @end table
11737 @item -x @var{fstype}
11738 @itemx --exclude-type=@var{fstype}
11739 @opindex -x
11740 @opindex --exclude-type
11741 Limit the listing to file systems not of type @var{fstype}.
11742 Multiple file system types can be eliminated by giving multiple
11743 @option{-x} options.  By default, no file system types are omitted.
11745 @item -v
11746 Ignored; for compatibility with System V versions of @command{df}.
11748 @end table
11750 @command{df} is installed only on systems that have usable mount tables,
11751 so portable scripts should not rely on its existence.
11753 @exitstatus
11754 Failure includes the case where no output is generated, so you can
11755 inspect the exit status of a command like @samp{df -t ext3 -t reiserfs
11756 @var{dir}} to test whether @var{dir} is on a file system of type
11757 @samp{ext3} or @samp{reiserfs}.
11759 Since the list of file systems (@var{mtab}) is needed to determine the
11760 file system type, failure includes the cases when that list cannot
11761 be read and one or more of the options @option{-a}, @option{-l}, @option{-t}
11762 or @option{-x} is used together with a file name argument.
11765 @node du invocation
11766 @section @command{du}: Estimate file space usage
11768 @pindex du
11769 @cindex file space usage
11770 @cindex disk usage for files
11772 @command{du} reports the amount of disk space used by the set of specified files
11773 and for each subdirectory (of directory arguments).  Synopsis:
11775 @example
11776 du [@var{option}]@dots{} [@var{file}]@dots{}
11777 @end example
11779 With no arguments, @command{du} reports the disk space for the current
11780 directory.  Normally the disk space is printed in units of
11781 1024 bytes, but this can be overridden (@pxref{Block size}).
11782 Non-integer quantities are rounded up to the next higher unit.
11784 If two or more hard links point to the same file, only one of the hard
11785 links is counted.  The @var{file} argument order affects which links
11786 are counted, and changing the argument order may change the numbers
11787 and entries that @command{du} outputs.
11789 The program accepts the following options.  Also see @ref{Common options}.
11791 @table @samp
11793 @optNull
11795 @item -a
11796 @itemx --all
11797 @opindex -a
11798 @opindex --all
11799 Show counts for all files, not just directories.
11801 @item --apparent-size
11802 @opindex --apparent-size
11803 Print apparent sizes, rather than disk usage.  The apparent size of a
11804 file is the number of bytes reported by @code{wc -c} on regular files,
11805 or more generally, @code{ls -l --block-size=1} or @code{stat --format=%s}.
11806 For example, a file containing the word @samp{zoo} with no newline would,
11807 of course, have an apparent size of 3.  Such a small file may require
11808 anywhere from 0 to 16 KiB or more of disk space, depending on
11809 the type and configuration of the file system on which the file resides.
11810 However, a sparse file created with this command:
11812 @example
11813 dd bs=1 seek=2GiB if=/dev/null of=big
11814 @end example
11816 @noindent
11817 has an apparent size of 2 GiB, yet on most modern
11818 systems, it actually uses almost no disk space.
11820 @item -B @var{size}
11821 @itemx --block-size=@var{size}
11822 @opindex -B
11823 @opindex --block-size
11824 @cindex file sizes
11825 Scale sizes by @var{size} before printing them (@pxref{Block size}).
11826 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
11828 @item -b
11829 @itemx --bytes
11830 @opindex -b
11831 @opindex --bytes
11832 Equivalent to @code{--apparent-size --block-size=1}.
11834 @item -c
11835 @itemx --total
11836 @opindex -c
11837 @opindex --total
11838 @cindex grand total of disk space
11839 Print a grand total of all arguments after all arguments have
11840 been processed.  This can be used to find out the total disk usage of
11841 a given set of files or directories.
11843 @item -D
11844 @itemx --dereference-args
11845 @opindex -D
11846 @opindex --dereference-args
11847 Dereference symbolic links that are command line arguments.
11848 Does not affect other symbolic links.  This is helpful for finding
11849 out the disk usage of directories, such as @file{/usr/tmp}, which
11850 are often symbolic links.
11852 @item -d @var{depth}
11853 @itemx --max-depth=@var{depth}
11854 @opindex -d @var{depth}
11855 @opindex --max-depth=@var{depth}
11856 @cindex limiting output of @command{du}
11857 Show the total for each directory (and file if --all) that is at
11858 most MAX_DEPTH levels down from the root of the hierarchy.  The root
11859 is at level 0, so @code{du --max-depth=0} is equivalent to @code{du -s}.
11861 @c --files0-from=FILE
11862 @filesZeroFromOption{du,, with the @option{--total} (@option{-c}) option}
11864 @item -H
11865 @opindex -H
11866 Equivalent to @option{--dereference-args} (@option{-D}).
11868 @optHumanReadable
11870 @item --inodes
11871 @opindex --inodes
11872 @cindex inode usage, dereferencing in @command{du}
11873 List inode usage information instead of block usage.
11874 This option is useful for finding directories which contain many files, and
11875 therefore eat up most of the inodes space of a file system (see @command{df},
11876 option @option{--inodes}).
11877 It can well be combined with the options @option{-a}, @option{-c},
11878 @option{-h}, @option{-l}, @option{-s}, @option{-S}, @option{-t} and
11879 @option{-x}; however, passing other options regarding the block size, for
11880 example @option{-b}, @option{-m} and @option{--apparent-size}, is ignored.
11882 @item -k
11883 @opindex -k
11884 @cindex kibibytes for file sizes
11885 Print sizes in 1024-byte blocks, overriding the default block size
11886 (@pxref{Block size}).
11887 This option is equivalent to @option{--block-size=1K}.
11889 @item -L
11890 @itemx --dereference
11891 @opindex -L
11892 @opindex --dereference
11893 @cindex symbolic links, dereferencing in @command{du}
11894 Dereference symbolic links (show the disk space used by the file
11895 or directory that the link points to instead of the space used by
11896 the link).
11898 @item -l
11899 @itemx --count-links
11900 @opindex -l
11901 @opindex --count-links
11902 @cindex hard links, counting in @command{du}
11903 Count the size of all files, even if they have appeared already (as a
11904 hard link).
11906 @item -m
11907 @opindex -m
11908 @cindex mebibytes for file sizes
11909 Print sizes in 1,048,576-byte blocks, overriding the default block size
11910 (@pxref{Block size}).
11911 This option is equivalent to @option{--block-size=1M}.
11913 @item -P
11914 @itemx --no-dereference
11915 @opindex -P
11916 @opindex --no-dereference
11917 @cindex symbolic links, dereferencing in @command{du}
11918 For each symbolic links encountered by @command{du},
11919 consider the disk space used by the symbolic link.
11921 @item -S
11922 @itemx --separate-dirs
11923 @opindex -S
11924 @opindex --separate-dirs
11925 Normally, in the output of @command{du} (when not using @option{--summarize}),
11926 the size listed next to a directory name, @var{d}, represents the sum
11927 of sizes of all entries beneath @var{d} as well as the size of @var{d} itself.
11928 With @option{--separate-dirs}, the size reported for a directory name,
11929 @var{d}, will exclude the size of any subdirectories.
11931 @optSi
11933 @item -s
11934 @itemx --summarize
11935 @opindex -s
11936 @opindex --summarize
11937 Display only a total for each argument.
11939 @item -t @var{size}
11940 @itemx --threshold=@var{size}
11941 @opindex -t
11942 @opindex --threshold
11943 Exclude entries based on a given @var{size}.  The @var{size} refers to used
11944 blocks in normal mode (@pxref{Block size}), or inodes count in conjunction
11945 with the @option{--inodes} option.
11947 If @var{size} is positive, then @command{du} will only print entries with a size
11948 greater than or equal to that.
11950 If @var{size} is negative, then @command{du} will only print entries with a size
11951 smaller than or equal to that.
11953 Although GNU @command{find} can be used to find files of a certain size,
11954 @command{du}'s @option{--threshold} option can be used to also filter
11955 directories based on a given size.
11957 Please note that the @option{--threshold} option can be combined with the
11958 @option{--apparent-size} option, and in this case would elide entries based on
11959 its apparent size.
11961 Please note that the @option{--threshold} option can be combined with the
11962 @option{--inodes} option, and in this case would elide entries based on
11963 its inodes count.
11965 Here's how you would use @option{--threshold} to find directories with a size
11966 greater than or equal to 200 megabytes:
11968 @example
11969 du --threshold=200MB
11970 @end example
11972 Here's how you would use @option{--threshold} to find directories and files -
11973 note the @option{-a} - with an apparent size smaller than or equal to 500 bytes:
11975 @example
11976 du -a -t -500 --apparent-size
11977 @end example
11979 Here's how you would use @option{--threshold} to find directories on the root
11980 file system with more than 20000 inodes used in the directory tree below:
11982 @example
11983 du --inodes -x --threshold=20000 /
11984 @end example
11987 @item --time
11988 @opindex --time
11989 @cindex last modified dates, displaying in @command{du}
11990 Show the most recent modification timestamp (mtime) of any file in the
11991 directory, or any of its subdirectories.  @xref{File timestamps}.
11993 @item --time=ctime
11994 @itemx --time=status
11995 @itemx --time=use
11996 @opindex --time
11997 @opindex ctime@r{, show the most recent}
11998 @opindex status time@r{, show the most recent}
11999 @opindex use time@r{, show the most recent}
12000 Show the most recent status change timestamp (ctime) of any file in
12001 the directory, or any of its subdirectories.  @xref{File timestamps}.
12003 @item --time=atime
12004 @itemx --time=access
12005 @opindex --time
12006 @opindex atime@r{, show the most recent}
12007 @opindex access timestamp@r{, show the most recent}
12008 Show the most recent access timestamp (atime) of any file in the
12009 directory, or any of its subdirectories.  @xref{File timestamps}.
12011 @item --time-style=@var{style}
12012 @opindex --time-style
12013 @cindex time style
12014 List timestamps in style @var{style}.  This option has an effect only if
12015 the @option{--time} option is also specified.  The @var{style} should
12016 be one of the following:
12018 @table @samp
12019 @item +@var{format}
12020 @vindex LC_TIME
12021 List timestamps using @var{format}, where @var{format} is interpreted
12022 like the format argument of @command{date} (@pxref{date invocation}).
12023 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
12024 @command{du} to list timestamps like @samp{2002-03-30 23:45:56}.  As
12025 with @command{date}, @var{format}'s interpretation is affected by the
12026 @env{LC_TIME} locale category.
12028 @item full-iso
12029 List timestamps in full using ISO 8601-like date, time, and time zone
12030 components with nanosecond precision, e.g., @samp{2002-03-30
12031 23:45:56.477817180 -0700}.  This style is equivalent to
12032 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
12034 @item long-iso
12035 List ISO 8601 date and time components with minute precision, e.g.,
12036 @samp{2002-03-30 23:45}.  These timestamps are shorter than
12037 @samp{full-iso} timestamps, and are usually good enough for everyday
12038 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
12040 @item iso
12041 List ISO 8601 dates for timestamps, e.g., @samp{2002-03-30}.
12042 This style is equivalent to @samp{+%Y-%m-%d}.
12043 @end table
12045 @vindex TIME_STYLE
12046 You can specify the default value of the @option{--time-style} option
12047 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
12048 the default style is @samp{long-iso}.  For compatibility with @command{ls},
12049 if @env{TIME_STYLE} begins with @samp{+} and contains a newline,
12050 the newline and any later characters are ignored; if @env{TIME_STYLE}
12051 begins with @samp{posix-} the @samp{posix-} is ignored; and if
12052 @env{TIME_STYLE} is @samp{locale} it is ignored.
12054 @item -X @var{file}
12055 @itemx --exclude-from=@var{file}
12056 @opindex -X @var{file}
12057 @opindex --exclude-from=@var{file}
12058 @cindex excluding files from @command{du}
12059 Like @option{--exclude}, except take the patterns to exclude from @var{file},
12060 one per line.  If @var{file} is @samp{-}, take the patterns from standard
12061 input.
12063 @item --exclude=@var{pattern}
12064 @opindex --exclude=@var{pattern}
12065 @cindex excluding files from @command{du}
12066 When recursing, skip subdirectories or files matching @var{pattern}.
12067 For example, @code{du --exclude='*.o'} excludes files whose names
12068 end in @samp{.o}.
12070 @item -x
12071 @itemx --one-file-system
12072 @opindex -x
12073 @opindex --one-file-system
12074 @cindex one file system, restricting @command{du} to
12075 Skip directories that are on different file systems from the one that
12076 the argument being processed is on.
12078 @end table
12080 @cindex NFS mounts from BSD to HP-UX
12081 On BSD systems, @command{du} reports sizes that are half the correct
12082 values for files that are NFS-mounted from HP-UX systems.  On HP-UX
12083 systems, it reports sizes that are twice the correct values for
12084 files that are NFS-mounted from BSD systems.  This is due to a flaw
12085 in HP-UX; it also affects the HP-UX @command{du} program.
12087 @exitstatus
12090 @node stat invocation
12091 @section @command{stat}: Report file or file system status
12093 @pindex stat
12094 @cindex file status
12095 @cindex file system status
12097 @command{stat} displays information about the specified file(s).  Synopsis:
12099 @example
12100 stat [@var{option}]@dots{} [@var{file}]@dots{}
12101 @end example
12103 With no option, @command{stat} reports all information about the given files.
12104 But it also can be used to report the information of the file systems the
12105 given files are located on.  If the files are links, @command{stat} can
12106 also give information about the files the links point to.
12108 @mayConflictWithShellBuiltIn{stat}
12110 @table @samp
12112 @item -L
12113 @itemx --dereference
12114 @opindex -L
12115 @opindex --dereference
12116 @cindex symbolic links, dereferencing in @command{stat}
12117 Change how @command{stat} treats symbolic links.
12118 With this option, @command{stat} acts on the file referenced
12119 by each symbolic link argument.
12120 Without it, @command{stat} acts on any symbolic link argument directly.
12122 @item -f
12123 @itemx --file-system
12124 @opindex -f
12125 @opindex --file-system
12126 @cindex file systems
12127 Report information about the file systems where the given files are located
12128 instead of information about the files themselves.
12129 This option implies the @option{-L} option.
12131 @item -c
12132 @itemx --format=@var{format}
12133 @opindex -c
12134 @opindex --format=@var{format}
12135 @cindex output format
12136 Use @var{format} rather than the default format.
12137 @var{format} is automatically newline-terminated, so
12138 running a command like the following with two or more @var{file}
12139 operands produces a line of output for each operand:
12140 @example
12141 $ stat --format=%d:%i / /usr
12142 2050:2
12143 2057:2
12144 @end example
12146 @item --printf=@var{format}
12147 @opindex --printf=@var{format}
12148 @cindex output format
12149 Use @var{format} rather than the default format.
12150 Like @option{--format}, but interpret backslash escapes,
12151 and do not output a mandatory trailing newline.
12152 If you want a newline, include @samp{\n} in the @var{format}.
12153 Here's how you would use @option{--printf} to print the device
12154 and inode numbers of @file{/} and @file{/usr}:
12155 @example
12156 $ stat --printf='%d:%i\n' / /usr
12157 2050:2
12158 2057:2
12159 @end example
12161 @item -t
12162 @itemx --terse
12163 @opindex -t
12164 @opindex --terse
12165 @cindex terse output
12166 Print the information in terse form, suitable for parsing by other programs.
12168 The output of the following commands are identical and the @option{--format}
12169 also identifies the items printed (in fuller form) in the default format.
12170 Note the format string would include another @samp{%C} at the end with an
12171 active SELinux security context.
12172 @example
12173 $ stat --format="%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" ...
12174 $ stat --terse ...
12175 @end example
12177 The same illustrating terse output in @option{--file-system} mode:
12178 @example
12179 $ stat -f --format="%n %i %l %t %s %S %b %f %a %c %d" ...
12180 $ stat -f --terse ...
12181 @end example
12182 @end table
12184 The valid @var{format} directives for files with @option{--format} and
12185 @option{--printf} are:
12187 @itemize @bullet
12188 @item %a - Access rights in octal (note @samp{#} and @samp{0} printf flags)
12189 @item %A - Access rights in human readable form
12190 @item %b - Number of blocks allocated (see @samp{%B})
12191 @item %B - The size in bytes of each block reported by @samp{%b}
12192 @item %C - The SELinux security context of a file, if available
12193 @item %d - Device number in decimal
12194 @item %D - Device number in hex
12195 @item %f - Raw mode in hex
12196 @item %F - File type
12197 @item %g - Group ID of owner
12198 @item %G - Group name of owner
12199 @item %h - Number of hard links
12200 @item %i - Inode number
12201 @item %m - Mount point (See note below)
12202 @item %n - File name
12203 @item %N - Quoted file name with dereference if symbolic link (see below)
12204 @item %o - Optimal I/O transfer size hint
12205 @item %s - Total size, in bytes
12206 @item %t - Major device type in hex (see below)
12207 @item %T - Minor device type in hex (see below)
12208 @item %u - User ID of owner
12209 @item %U - User name of owner
12210 @item %w - Time of file birth, or @samp{-} if unknown
12211 @item %W - Time of file birth as seconds since Epoch, or @samp{0}
12212 @item %x - Time of last access
12213 @item %X - Time of last access as seconds since Epoch
12214 @item %y - Time of last data modification
12215 @item %Y - Time of last data modification as seconds since Epoch
12216 @item %z - Time of last status change
12217 @item %Z - Time of last status change as seconds since Epoch
12218 @end itemize
12220 The @samp{%a} format prints the octal mode, and so it is useful
12221 to control the zero padding of the output with the @samp{#} and @samp{0}
12222 printf flags. For example to pad to at least 3 wide while making larger
12223 numbers unambiguously octal, you can use @samp{%#03a}.
12225 The @samp{%N} format can be set with the environment variable
12226 @env{QUOTING_STYLE}@.  If that environment variable is not set,
12227 the default value is @samp{shell-escape}.  Valid quoting styles are:
12228 @quotingStyles
12230 The @samp{%t} and @samp{%T} formats operate on the st_rdev member of
12231 the stat(2) structure, and are only defined for character and block
12232 special files.  On some systems or file types, st_rdev may be used to
12233 represent other quantities.
12235 The @samp{%W}, @samp{%X}, @samp{%Y}, and @samp{%Z} formats accept a
12236 precision preceded by a period to specify the number of digits to
12237 print after the decimal point.  For example, @samp{%.3X} outputs the
12238 access timestamp to millisecond precision.  If a period is given but no
12239 precision, @command{stat} uses 9 digits, so @samp{%.X} is equivalent to
12240 @samp{%.9X}@.  When discarding excess precision, timestamps are truncated
12241 toward minus infinity.
12243 @example
12244 zero pad:
12245   $ stat -c '[%015Y]' /usr
12246   [000001288929712]
12247 space align:
12248   $ stat -c '[%15Y]' /usr
12249   [     1288929712]
12250   $ stat -c '[%-15Y]' /usr
12251   [1288929712     ]
12252 precision:
12253   $ stat -c '[%.3Y]' /usr
12254   [1288929712.114]
12255   $ stat -c '[%.Y]' /usr
12256   [1288929712.114951834]
12257 @end example
12259 The mount point printed by @samp{%m} is similar to that output
12260 by @command{df}, except that:
12261 @itemize @bullet
12262 @item
12263 stat does not dereference symlinks by default
12264 (unless @option{-L} is specified)
12265 @item
12266 stat does not search for specified device nodes in the
12267 file system list, instead operating on them directly
12268 @item
12269 @cindex bind mount
12270 stat outputs the alias for a bind mounted file, rather than
12271 the initial mount point of its backing device.
12272 One can recursively call stat until there is no change in output,
12273 to get the current base mount point
12274 @end itemize
12276 When listing file system information (@option{--file-system} (@option{-f})),
12277 you must use a different set of @var{format} directives:
12279 @itemize @bullet
12280 @item %a - Free blocks available to non-super-user
12281 @item %b - Total data blocks in file system
12282 @item %c - Total file nodes in file system
12283 @item %d - Free file nodes in file system
12284 @item %f - Free blocks in file system
12285 @item %i - File System ID in hex
12286 @item %l - Maximum length of file names
12287 @item %n - File name
12288 @item %s - Block size (for faster transfers)
12289 @item %S - Fundamental block size (for block counts)
12290 @item %t - Type in hex
12291 @item %T - Type in human readable form
12292 @end itemize
12294 @vindex TZ
12295 Timestamps are listed according to the time zone rules specified by
12296 the @env{TZ} environment variable, or by the system default rules if
12297 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
12298 with @env{TZ}, libc, The GNU C Library Reference Manual}.
12300 @exitstatus
12303 @node sync invocation
12304 @section @command{sync}: Synchronize cached writes to persistent storage
12306 @pindex sync
12307 @cindex synchronize disk and memory
12308 @cindex Synchronize cached writes to persistent storage
12310 @command{sync} synchronizes in memory files or file systems to persistent
12311 storage.  Synopsis:
12313 @example
12314 sync [@var{option}] [@var{file}]@dots{}
12315 @end example
12317 @cindex superblock, writing
12318 @cindex inodes, written buffered
12319 @command{sync} writes any data buffered in memory out to disk.  This can
12320 include (but is not limited to) modified superblocks, modified inodes,
12321 and delayed reads and writes.  This must be implemented by the kernel;
12322 The @command{sync} program does nothing but exercise the @code{sync},
12323 @code{syncfs}, @code{fsync}, and @code{fdatasync} system calls.
12325 @cindex crashes and corruption
12326 The kernel keeps data in memory to avoid doing (relatively slow) disk
12327 reads and writes.  This improves performance, but if the computer
12328 crashes, data may be lost or the file system corrupted as a
12329 result.  The @command{sync} command instructs the kernel to write
12330 data in memory to persistent storage.
12332 If any argument is specified then only those files will be
12333 synchronized using the fsync(2) syscall by default.
12335 If at least one file is specified, it is possible to change the
12336 synchronization method with the following options.  Also see
12337 @ref{Common options}.
12339 @table @samp
12340 @item -d
12341 @itemx --data
12342 @opindex --data
12343 Use fdatasync(2) to sync only the data for the file,
12344 and any metadata required to maintain file system consistency.
12346 @item -f
12347 @itemx --file-system
12348 @opindex --file-system
12349 Synchronize all the I/O waiting for the file systems that contain the file,
12350 using the syscall syncfs(2).  Note you would usually @emph{not} specify
12351 this option if passing a device node like @samp{/dev/sda} for example,
12352 as that would sync the containing file system rather than the referenced one.
12353 Note also that depending on the system, passing individual device nodes or files
12354 may have different sync characteristics than using no arguments.
12355 I.e., arguments passed to fsync(2) may provide greater guarantees through
12356 write barriers, than a global sync(2) used when no arguments are provided.
12357 @end table
12359 @exitstatus
12362 @node truncate invocation
12363 @section @command{truncate}: Shrink or extend the size of a file
12365 @pindex truncate
12366 @cindex truncating, file sizes
12368 @command{truncate} shrinks or extends the size of each @var{file} to the
12369 specified size.  Synopsis:
12371 @example
12372 truncate @var{option}@dots{} @var{file}@dots{}
12373 @end example
12375 @cindex files, creating
12376 Any @var{file} that does not exist is created.
12378 @cindex sparse files, creating
12379 @cindex holes, creating files with
12380 If a @var{file} is larger than the specified size, the extra data is lost.
12381 If a @var{file} is shorter, it is extended and the extended part (or hole)
12382 reads as zero bytes.
12384 The program accepts the following options.  Also see @ref{Common options}.
12386 @table @samp
12388 @item -c
12389 @itemx --no-create
12390 @opindex -c
12391 @opindex --no-create
12392 Do not create files that do not exist.
12394 @item -o
12395 @itemx --io-blocks
12396 @opindex -o
12397 @opindex --io-blocks
12398 Treat @var{size} as number of I/O blocks of the @var{file} rather than bytes.
12400 @item -r @var{rfile}
12401 @itemx --reference=@var{rfile}
12402 @opindex -r
12403 @opindex --reference
12404 Base the size of each @var{file} on the size of @var{rfile}.
12406 @item -s @var{size}
12407 @itemx --size=@var{size}
12408 @opindex -s
12409 @opindex --size
12410 Set or adjust the size of each @var{file} according to @var{size}.
12411 @var{size} is in bytes unless @option{--io-blocks} is specified.
12412 @multiplierSuffixesNoBlocks{size}
12414 @var{size} may also be prefixed by one of the following to adjust
12415 the size of each @var{file} based on its current size:
12416 @example
12417 @samp{+}  => extend by
12418 @samp{-}  => reduce by
12419 @samp{<}  => at most
12420 @samp{>}  => at least
12421 @samp{/}  => round down to multiple of
12422 @samp{%}  => round up to multiple of
12423 @end example
12425 @end table
12427 @exitstatus
12430 @node Printing text
12431 @chapter Printing text
12433 @cindex printing text, commands for
12434 @cindex commands for printing text
12436 This section describes commands that display text strings.
12438 @menu
12439 * echo invocation::             Print a line of text.
12440 * printf invocation::           Format and print data.
12441 * yes invocation::              Print a string until interrupted.
12442 @end menu
12445 @node echo invocation
12446 @section @command{echo}: Print a line of text
12448 @pindex echo
12449 @cindex displaying text
12450 @cindex printing text
12451 @cindex text, displaying
12452 @cindex arbitrary text, displaying
12454 @command{echo} writes each given @var{string} to standard output, with a
12455 space between each and a newline after the last one.  Synopsis:
12457 @example
12458 echo [@var{option}]@dots{} [@var{string}]@dots{}
12459 @end example
12461 @mayConflictWithShellBuiltIn{echo}
12463 The program accepts the following options.  Also see @ref{Common options}.
12464 Options must precede operands, and the normally-special argument
12465 @samp{--} has no special meaning and is treated like any other
12466 @var{string}.
12468 @table @samp
12469 @item -n
12470 @opindex -n
12471 Do not output the trailing newline.
12473 @item -e
12474 @opindex -e
12475 @cindex backslash escapes
12476 Enable interpretation of the following backslash-escaped characters in
12477 each @var{string}:
12479 @table @samp
12480 @item \a
12481 alert (bell)
12482 @item \b
12483 backspace
12484 @item \c
12485 produce no further output
12486 @item \e
12487 escape
12488 @item \f
12489 form feed
12490 @item \n
12491 newline
12492 @item \r
12493 carriage return
12494 @item \t
12495 horizontal tab
12496 @item \v
12497 vertical tab
12498 @item \\
12499 backslash
12500 @item \0@var{nnn}
12501 the eight-bit value that is the octal number @var{nnn}
12502 (zero to three octal digits), if @var{nnn} is
12503 a nine-bit value, the ninth bit is ignored
12504 @item \@var{nnn}
12505 the eight-bit value that is the octal number @var{nnn}
12506 (one to three octal digits), if @var{nnn} is
12507 a nine-bit value, the ninth bit is ignored
12508 @item \x@var{hh}
12509 the eight-bit value that is the hexadecimal number @var{hh}
12510 (one or two hexadecimal digits)
12511 @end table
12513 @item -E
12514 @opindex -E
12515 @cindex backslash escapes
12516 Disable interpretation of backslash escapes in each @var{string}.
12517 This is the default.  If @option{-e} and @option{-E} are both
12518 specified, the last one given takes effect.
12520 @end table
12522 @vindex POSIXLY_CORRECT
12523 If the @env{POSIXLY_CORRECT} environment variable is set, then when
12524 @command{echo}'s first argument is not @option{-n} it outputs
12525 option-like arguments instead of treating them as options.  For
12526 example, @code{echo -ne hello} outputs @samp{-ne hello} instead of
12527 plain @samp{hello}.
12529 POSIX does not require support for any options, and says
12530 that the behavior of @command{echo} is implementation-defined if any
12531 @var{string} contains a backslash or if the first argument is
12532 @option{-n}.  Portable programs can use the @command{printf} command
12533 if they need to omit trailing newlines or output control characters or
12534 backslashes.  @xref{printf invocation}.
12536 @exitstatus
12539 @node printf invocation
12540 @section @command{printf}: Format and print data
12542 @pindex printf
12543 @command{printf} does formatted printing of text.  Synopsis:
12545 @example
12546 printf @var{format} [@var{argument}]@dots{}
12547 @end example
12549 @command{printf} prints the @var{format} string, interpreting @samp{%}
12550 directives and @samp{\} escapes to format numeric and string arguments
12551 in a way that is mostly similar to the C @samp{printf} function.
12552 @xref{Output Conversion Syntax,, @command{printf} format directives,
12553 libc, The GNU C Library Reference Manual}, for details.
12554 The differences are listed below.
12556 @mayConflictWithShellBuiltIn{printf}
12558 @itemize @bullet
12560 @item
12561 The @var{format} argument is reused as necessary to convert all the
12562 given @var{argument}s.  For example, the command @samp{printf %s a b}
12563 outputs @samp{ab}.
12565 @item
12566 Missing @var{argument}s are treated as null strings or as zeros,
12567 depending on whether the context expects a string or a number.  For
12568 example, the command @samp{printf %sx%d} prints @samp{x0}.
12570 @item
12571 @kindex \c
12572 An additional escape, @samp{\c}, causes @command{printf} to produce no
12573 further output.  For example, the command @samp{printf 'A%sC\cD%sF' B
12574 E} prints @samp{ABC}.
12576 @item
12577 The hexadecimal escape sequence @samp{\x@var{hh}} has at most two
12578 digits, as opposed to C where it can have an unlimited number of
12579 digits.  For example, the command @samp{printf '\x07e'} prints two
12580 bytes, whereas the C statement @samp{printf ("\x07e")} prints just
12581 one.
12583 @item
12584 @kindex %b
12585 An additional directive @samp{%b}, prints its
12586 argument string with @samp{\} escapes interpreted in the same way as in
12587 the @var{format} string, except that octal escapes are of the form
12588 @samp{\0@var{ooo}} where @var{ooo} is 0 to 3 octal digits.  If
12589 @samp{\@var{ooo}} is nine-bit value, ignore the ninth bit.
12590 If a precision is also given, it limits the number of bytes printed
12591 from the converted string.
12593 @item
12594 @kindex %q
12595 An additional directive @samp{%q}, prints its argument string
12596 in a format that can be reused as input by most shells.
12597 Non-printable characters are escaped with the POSIX proposed @samp{$''} syntax,
12598 and shell metacharacters are quoted appropriately.
12599 This is an equivalent format to @command{ls --quoting=shell-escape} output.
12601 @item
12602 Numeric arguments must be single C constants, possibly with leading
12603 @samp{+} or @samp{-}.  For example, @samp{printf %.4d -3} outputs
12604 @samp{-0003}.
12606 @item
12607 @vindex POSIXLY_CORRECT
12608 If the leading character of a numeric argument is @samp{"} or @samp{'}
12609 then its value is the numeric value of the immediately following
12610 character.  Any remaining characters are silently ignored if the
12611 @env{POSIXLY_CORRECT} environment variable is set; otherwise, a
12612 warning is printed.  For example, @samp{printf "%d" "'a"} outputs
12613 @samp{97} on hosts that use the ASCII character set, since
12614 @samp{a} has the numeric value 97 in ASCII.
12616 @end itemize
12618 @vindex LC_NUMERIC
12619 A floating-point argument must use a period before any fractional
12620 digits, but is printed according to the @env{LC_NUMERIC} category of the
12621 current locale.  For example, in a locale whose radix character is a
12622 comma, the command @samp{printf %g 3.14} outputs @samp{3,14} whereas
12623 the command @samp{printf %g 3,14} is an error.
12624 @xref{Floating point}.
12626 @kindex \@var{ooo}
12627 @kindex \x@var{hh}
12628 @command{printf} interprets @samp{\@var{ooo}} in @var{format} as an octal number
12629 (if @var{ooo} is 1 to 3 octal digits) specifying a byte to print,
12630 and @samp{\x@var{hh}} as a hexadecimal number (if @var{hh} is 1 to 2 hex
12631 digits) specifying a character to print.
12632 Note however that when @samp{\@var{ooo}} specifies a number larger than 255,
12633 @command{printf} ignores the ninth bit.
12634 For example, @samp{printf '\400'} is equivalent to @samp{printf '\0'}.
12636 @kindex \uhhhh
12637 @kindex \Uhhhhhhhh
12638 @cindex Unicode
12639 @cindex ISO/IEC 10646
12640 @vindex LC_CTYPE
12641 @command{printf} interprets two character syntaxes introduced in
12642 ISO C 99:
12643 @samp{\u} for 16-bit Unicode (ISO/IEC 10646)
12644 characters, specified as
12645 four hexadecimal digits @var{hhhh}, and @samp{\U} for 32-bit Unicode
12646 characters, specified as eight hexadecimal digits @var{hhhhhhhh}.
12647 @command{printf} outputs the Unicode characters
12648 according to the @env{LC_CTYPE} locale.  Unicode characters in the ranges
12649 U+0000@dots{}U+009F, U+D800@dots{}U+DFFF cannot be specified by this syntax,
12650 except for U+0024 ($), U+0040 (@@), and U+0060 (@`).
12652 The processing of @samp{\u} and @samp{\U} requires a full-featured
12653 @code{iconv} facility.  It is activated on systems with glibc 2.2 (or newer),
12654 or when @code{libiconv} is installed prior to this package.  Otherwise
12655 @samp{\u} and @samp{\U} will print as-is.
12657 The only options are a lone @option{--help} or
12658 @option{--version}.  @xref{Common options}.
12659 Options must precede operands.
12661 The Unicode character syntaxes are useful for writing strings in a locale
12662 independent way.  For example, a string containing the Euro currency symbol
12664 @example
12665 $ env printf '\u20AC 14.95'
12666 @end example
12668 @noindent
12669 will be output correctly in all locales supporting the Euro symbol
12670 (ISO-8859-15, UTF-8, and others).  Similarly, a Chinese string
12672 @example
12673 $ env printf '\u4e2d\u6587'
12674 @end example
12676 @noindent
12677 will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc).
12679 Note that in these examples, the @command{printf} command has been
12680 invoked via @command{env} to ensure that we run the program found via
12681 your shell's search path, and not a shell alias or a built-in function.
12683 For larger strings, you don't need to look up the hexadecimal code
12684 values of each character one by one.  ASCII characters mixed with \u
12685 escape sequences is also known as the JAVA source file encoding.  You can
12686 use GNU recode 3.5c (or newer) to convert strings to this encoding.  Here
12687 is how to convert a piece of text into a shell script which will output
12688 this text in a locale-independent way:
12690 @smallexample
12691 $ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \
12692     '\u4e2d\u6587\n' > sample.txt
12693 $ recode BIG5..JAVA < sample.txt \
12694     | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
12695     > sample.sh
12696 @end smallexample
12698 @exitstatus
12701 @node yes invocation
12702 @section @command{yes}: Print a string until interrupted
12704 @pindex yes
12705 @cindex repeated output of a string
12707 @command{yes} prints the command line arguments, separated by spaces and
12708 followed by a newline, forever until it is killed.  If no arguments are
12709 given, it prints @samp{y} followed by a newline forever until killed.
12711 Upon a write error, @command{yes} exits with status @samp{1}.
12713 The only options are a lone @option{--help} or @option{--version}.
12714 To output an argument that begins with
12715 @samp{-}, precede it with @option{--}, e.g., @samp{yes -- --help}.
12716 @xref{Common options}.
12719 @node Conditions
12720 @chapter Conditions
12722 @cindex conditions
12723 @cindex commands for exit status
12724 @cindex exit status commands
12726 This section describes commands that are primarily useful for their exit
12727 status, rather than their output.  Thus, they are often used as the
12728 condition of shell @code{if} statements, or as the last command in a
12729 pipeline.
12731 @menu
12732 * false invocation::            Do nothing, unsuccessfully.
12733 * true invocation::             Do nothing, successfully.
12734 * test invocation::             Check file types and compare values.
12735 * expr invocation::             Evaluate expressions.
12736 @end menu
12739 @node false invocation
12740 @section @command{false}: Do nothing, unsuccessfully
12742 @pindex false
12743 @cindex do nothing, unsuccessfully
12744 @cindex failure exit status
12745 @cindex exit status of @command{false}
12747 @command{false} does nothing except return an exit status of 1, meaning
12748 @dfn{failure}.  It can be used as a place holder in shell scripts
12749 where an unsuccessful command is needed.
12750 In most modern shells, @command{false} is a built-in command, so when
12751 you use @samp{false} in a script, you're probably using the built-in
12752 command, not the one documented here.
12754 @command{false} honors the @option{--help} and @option{--version} options.
12756 This version of @command{false} is implemented as a C program, and is thus
12757 more secure and faster than a shell script implementation, and may safely
12758 be used as a dummy shell for the purpose of disabling accounts.
12760 Note that @command{false} (unlike all other programs documented herein)
12761 exits unsuccessfully, even when invoked with
12762 @option{--help} or @option{--version}.
12764 Portable programs should not assume that the exit status of
12765 @command{false} is 1, as it is greater than 1 on some
12766 non-GNU hosts.
12769 @node true invocation
12770 @section @command{true}: Do nothing, successfully
12772 @pindex true
12773 @cindex do nothing, successfully
12774 @cindex no-op
12775 @cindex successful exit
12776 @cindex exit status of @command{true}
12778 @command{true} does nothing except return an exit status of 0, meaning
12779 @dfn{success}.  It can be used as a place holder in shell scripts
12780 where a successful command is needed, although the shell built-in
12781 command @code{:} (colon) may do the same thing faster.
12782 In most modern shells, @command{true} is a built-in command, so when
12783 you use @samp{true} in a script, you're probably using the built-in
12784 command, not the one documented here.
12786 @command{true} honors the @option{--help} and @option{--version} options.
12788 Note, however, that it is possible to cause @command{true}
12789 to exit with nonzero status: with the @option{--help} or @option{--version}
12790 option, and with standard
12791 output already closed or redirected to a file that evokes an I/O error.
12792 For example, using a Bourne-compatible shell:
12794 @example
12795 $ ./true --version >&-
12796 ./true: write error: Bad file number
12797 $ ./true --version > /dev/full
12798 ./true: write error: No space left on device
12799 @end example
12801 This version of @command{true} is implemented as a C program, and is thus
12802 more secure and faster than a shell script implementation, and may safely
12803 be used as a dummy shell for the purpose of disabling accounts.
12805 @node test invocation
12806 @section @command{test}: Check file types and compare values
12808 @pindex test
12809 @cindex check file types
12810 @cindex compare values
12811 @cindex expression evaluation
12813 @command{test} returns a status of 0 (true) or 1 (false) depending on the
12814 evaluation of the conditional expression @var{expr}.  Each part of the
12815 expression must be a separate argument.
12817 @command{test} has file status checks, string operators, and numeric
12818 comparison operators.
12820 @command{test} has an alternate form that uses opening and closing
12821 square brackets instead a leading @samp{test}.  For example, instead
12822 of @samp{test -d /}, you can write @samp{[ -d / ]}.  The square
12823 brackets must be separate arguments; for example, @samp{[-d /]} does
12824 not have the desired effect.  Since @samp{test @var{expr}} and @samp{[
12825 @var{expr} ]} have the same meaning, only the former form is discussed
12826 below.
12828 Synopses:
12830 @example
12831 test @var{expression}
12832 test
12833 [ @var{expression} ]
12834 [ ]
12835 [ @var{option}
12836 @end example
12838 @mayConflictWithShellBuiltIn{test}
12840 If @var{expression} is omitted, @command{test} returns false.
12841 If @var{expression} is a single argument,
12842 @command{test} returns false if the argument is null and true
12843 otherwise.  The argument
12844 can be any string, including strings like @samp{-d}, @samp{-1},
12845 @samp{--}, @samp{--help}, and @samp{--version} that most other
12846 programs would treat as options.  To get help and version information,
12847 invoke the commands @samp{[ --help} and @samp{[ --version}, without
12848 the usual closing brackets.  @xref{Common options}.
12850 @cindex exit status of @command{test}
12851 Exit status:
12853 @display
12854 0 if the expression is true,
12855 1 if the expression is false,
12856 2 if an error occurred.
12857 @end display
12859 @menu
12860 * File type tests::             -[bcdfhLpSt]
12861 * Access permission tests::     -[gkruwxOG]
12862 * File characteristic tests::   -e -s -nt -ot -ef
12863 * String tests::                -z -n = == !=
12864 * Numeric tests::               -eq -ne -lt -le -gt -ge
12865 * Connectives for test::        ! -a -o
12866 @end menu
12869 @node File type tests
12870 @subsection File type tests
12872 @cindex file type tests
12874 These options test for particular types of files.  (Everything's a file,
12875 but not all files are the same!)
12877 @table @samp
12879 @item -b @var{file}
12880 @opindex -b
12881 @cindex block special check
12882 True if @var{file} exists and is a block special device.
12884 @item -c @var{file}
12885 @opindex -c
12886 @cindex character special check
12887 True if @var{file} exists and is a character special device.
12889 @item -d @var{file}
12890 @opindex -d
12891 @cindex directory check
12892 True if @var{file} exists and is a directory.
12894 @item -f @var{file}
12895 @opindex -f
12896 @cindex regular file check
12897 True if @var{file} exists and is a regular file.
12899 @item -h @var{file}
12900 @itemx -L @var{file}
12901 @opindex -L
12902 @opindex -h
12903 @cindex symbolic link check
12904 True if @var{file} exists and is a symbolic link.
12905 Unlike all other file-related tests, this test does not dereference
12906 @var{file} if it is a symbolic link.
12908 @item -p @var{file}
12909 @opindex -p
12910 @cindex named pipe check
12911 True if @var{file} exists and is a named pipe.
12913 @item -S @var{file}
12914 @opindex -S
12915 @cindex socket check
12916 True if @var{file} exists and is a socket.
12918 @item -t @var{fd}
12919 @opindex -t
12920 @cindex terminal check
12921 True if @var{fd} is a file descriptor that is associated with a
12922 terminal.
12924 @end table
12927 @node Access permission tests
12928 @subsection Access permission tests
12930 @cindex access permission tests
12931 @cindex permission tests
12933 These options test for particular access permissions.
12935 @table @samp
12937 @item -g @var{file}
12938 @opindex -g
12939 @cindex set-group-ID check
12940 True if @var{file} exists and has its set-group-ID bit set.
12942 @item -k @var{file}
12943 @opindex -k
12944 @cindex sticky bit check
12945 True if @var{file} exists and has its @dfn{sticky} bit set.
12947 @item -r @var{file}
12948 @opindex -r
12949 @cindex readable file check
12950 True if @var{file} exists and read permission is granted.
12952 @item -u @var{file}
12953 @opindex -u
12954 @cindex set-user-ID check
12955 True if @var{file} exists and has its set-user-ID bit set.
12957 @item -w @var{file}
12958 @opindex -w
12959 @cindex writable file check
12960 True if @var{file} exists and write permission is granted.
12962 @item -x @var{file}
12963 @opindex -x
12964 @cindex executable file check
12965 True if @var{file} exists and execute permission is granted
12966 (or search permission, if it is a directory).
12968 @item -O @var{file}
12969 @opindex -O
12970 @cindex owned by effective user ID check
12971 True if @var{file} exists and is owned by the current effective user ID.
12973 @item -G @var{file}
12974 @opindex -G
12975 @cindex owned by effective group ID check
12976 True if @var{file} exists and is owned by the current effective group ID.
12978 @end table
12980 @node File characteristic tests
12981 @subsection File characteristic tests
12983 @cindex file characteristic tests
12985 These options test other file characteristics.
12987 @table @samp
12989 @item -e @var{file}
12990 @opindex -e
12991 @cindex existence-of-file check
12992 True if @var{file} exists.
12994 @item -s @var{file}
12995 @opindex -s
12996 @cindex nonempty file check
12997 True if @var{file} exists and has a size greater than zero.
12999 @item @var{file1} -nt @var{file2}
13000 @opindex -nt
13001 @cindex newer-than file check
13002 True if @var{file1} is newer (according to modification date) than
13003 @var{file2}, or if @var{file1} exists and @var{file2} does not.
13005 @item @var{file1} -ot @var{file2}
13006 @opindex -ot
13007 @cindex older-than file check
13008 True if @var{file1} is older (according to modification date) than
13009 @var{file2}, or if @var{file2} exists and @var{file1} does not.
13011 @item @var{file1} -ef @var{file2}
13012 @opindex -ef
13013 @cindex same file check
13014 @cindex hard link check
13015 True if @var{file1} and @var{file2} have the same device and inode
13016 numbers, i.e., if they are hard links to each other.
13018 @end table
13021 @node String tests
13022 @subsection String tests
13024 @cindex string tests
13026 These options test string characteristics.  You may need to quote
13027 @var{string} arguments for the shell.  For example:
13029 @example
13030 test -n "$V"
13031 @end example
13033 The quotes here prevent the wrong arguments from being passed to
13034 @command{test} if @samp{$V} is empty or contains special characters.
13036 @table @samp
13038 @item -z @var{string}
13039 @opindex -z
13040 @cindex zero-length string check
13041 True if the length of @var{string} is zero.
13043 @item -n @var{string}
13044 @itemx @var{string}
13045 @opindex -n
13046 @cindex nonzero-length string check
13047 True if the length of @var{string} is nonzero.
13049 @item @var{string1} = @var{string2}
13050 @opindex =
13051 @cindex equal string check
13052 True if the strings are equal.
13054 @item @var{string1} == @var{string2}
13055 @opindex ==
13056 @cindex equal string check
13057 True if the strings are equal (synonym for =).
13059 @item @var{string1} != @var{string2}
13060 @opindex !=
13061 @cindex not-equal string check
13062 True if the strings are not equal.
13064 @end table
13067 @node Numeric tests
13068 @subsection Numeric tests
13070 @cindex numeric tests
13071 @cindex arithmetic tests
13073 Numeric relational operators.  The arguments must be entirely numeric
13074 (possibly negative), or the special expression @w{@code{-l @var{string}}},
13075 which evaluates to the length of @var{string}.
13077 @table @samp
13079 @item @var{arg1} -eq @var{arg2}
13080 @itemx @var{arg1} -ne @var{arg2}
13081 @itemx @var{arg1} -lt @var{arg2}
13082 @itemx @var{arg1} -le @var{arg2}
13083 @itemx @var{arg1} -gt @var{arg2}
13084 @itemx @var{arg1} -ge @var{arg2}
13085 @opindex -eq
13086 @opindex -ne
13087 @opindex -lt
13088 @opindex -le
13089 @opindex -gt
13090 @opindex -ge
13091 These arithmetic binary operators return true if @var{arg1} is equal,
13092 not-equal, less-than, less-than-or-equal, greater-than, or
13093 greater-than-or-equal than @var{arg2}, respectively.
13095 @end table
13097 For example:
13099 @example
13100 test -1 -gt -2 && echo yes
13101 @result{} yes
13102 test -l abc -gt 1 && echo yes
13103 @result{} yes
13104 test 0x100 -eq 1
13105 @error{} test: integer expression expected before -eq
13106 @end example
13109 @node Connectives for test
13110 @subsection Connectives for @command{test}
13112 @cindex logical connectives
13113 @cindex connectives, logical
13115 Note it's preferred to use shell logical primitives
13116 rather than these logical connectives internal to @command{test},
13117 because an expression may become ambiguous
13118 depending on the expansion of its parameters.
13120 For example, this becomes ambiguous when @samp{$1}
13121 is set to @samp{'!'} and @samp{$2} to the empty string @samp{''}:
13123 @example
13124 test "$1" -a "$2"
13125 @end example
13127 and should be written as:
13129 @example
13130 test "$1" && test "$2"
13131 @end example
13133 Note the shell logical primitives also benefit from
13134 short circuit operation, which can be significant
13135 for file attribute tests.
13137 @table @samp
13139 @item ! @var{expr}
13140 @opindex !
13141 True if @var{expr} is false.
13142 @samp{!} has lower precedence than all parts of @var{expr}.
13143 Note @samp{!} needs to be specified to the left
13144 of a binary expression, I.e., @samp{'!' 1 -gt 2}
13145 rather than @samp{1 '!' -gt 2}.
13146 Also @samp{!} is often a shell special character
13147 and is best used quoted.
13150 @item @var{expr1} -a @var{expr2}
13151 @opindex -a
13152 @cindex logical and operator
13153 @cindex and operator
13154 True if both @var{expr1} and @var{expr2} are true.
13155 @samp{-a} is left associative,
13156 and has a higher precedence than @samp{-o}.
13158 @item @var{expr1} -o @var{expr2}
13159 @opindex -o
13160 @cindex logical or operator
13161 @cindex or operator
13162 True if either @var{expr1} or @var{expr2} is true.
13163 @samp{-o} is left associative.
13165 @end table
13168 @node expr invocation
13169 @section @command{expr}: Evaluate expressions
13171 @pindex expr
13172 @cindex expression evaluation
13173 @cindex evaluation of expressions
13175 @command{expr} evaluates an expression and writes the result on standard
13176 output.  Each token of the expression must be a separate argument.
13178 Operands are either integers or strings.  Integers consist of one or
13179 more decimal digits, with an optional leading @samp{-}.
13180 @command{expr} converts
13181 anything appearing in an operand position to an integer or a string
13182 depending on the operation being applied to it.
13184 Strings are not quoted for @command{expr} itself, though you may need to
13185 quote them to protect characters with special meaning to the shell,
13186 e.g., spaces.  However, regardless of whether it is quoted, a string
13187 operand should not be a parenthesis or any of @command{expr}'s
13188 operators like @code{+}, so you cannot safely pass an arbitrary string
13189 @code{$str} to expr merely by quoting it to the shell.  One way to
13190 work around this is to use the GNU extension @code{+},
13191 (e.g., @code{+ "$str" = foo}); a more portable way is to use
13192 @code{@w{" $str"}} and to adjust the rest of the expression to take
13193 the leading space into account (e.g., @code{@w{" $str" = " foo"}}).
13195 You should not pass a negative integer or a string with leading
13196 @samp{-} as @command{expr}'s first argument, as it might be
13197 misinterpreted as an option; this can be avoided by parenthesization.
13198 Also, portable scripts should not use a string operand that happens to
13199 take the form of an integer; this can be worked around by inserting
13200 leading spaces as mentioned above.
13202 @cindex parentheses for grouping
13203 Operators may be given as infix symbols or prefix keywords.  Parentheses
13204 may be used for grouping in the usual manner.  You must quote
13205 parentheses and many operators to avoid the shell evaluating them,
13206 however.
13208 When built with support for the GNU MP library, @command{expr} uses
13209 arbitrary-precision arithmetic; otherwise, it uses native arithmetic
13210 types and may fail due to arithmetic overflow.
13212 The only options are @option{--help} and @option{--version}.  @xref{Common
13213 options}.  Options must precede operands.
13215 @cindex exit status of @command{expr}
13216 Exit status:
13218 @display
13219 0 if the expression is neither null nor 0,
13220 1 if the expression is null or 0,
13221 2 if the expression is invalid,
13222 3 if an internal error occurred (e.g., arithmetic overflow).
13223 @end display
13225 @menu
13226 * String expressions::          + : match substr index length
13227 * Numeric expressions::         + - * / %
13228 * Relations for expr::          | & < <= = == != >= >
13229 * Examples of expr::            Examples.
13230 @end menu
13233 @node String expressions
13234 @subsection String expressions
13236 @cindex string expressions
13237 @cindex expressions, string
13239 @command{expr} supports pattern matching and other string operators.  These
13240 have higher precedence than both the numeric and relational operators (in
13241 the next sections).
13243 @table @samp
13245 @item @var{string} : @var{regex}
13246 @cindex pattern matching
13247 @cindex regular expression matching
13248 @cindex matching patterns
13249 Perform pattern matching.  The arguments are converted to strings and the
13250 second is considered to be a (basic, a la GNU @code{grep}) regular
13251 expression, with a @code{^} implicitly prepended.  The first argument is
13252 then matched against this regular expression.
13254 If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the
13255 @code{:} expression returns the part of @var{string} that matched the
13256 subexpression; otherwise, it returns the number of characters matched.
13258 If the match fails, the @code{:} operator returns the null string if
13259 @samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0.
13261 @kindex \( @r{regexp operator}
13262 Only the first @samp{\( @dots{} \)} pair is relevant to the return
13263 value; additional pairs are meaningful only for grouping the regular
13264 expression operators.
13266 @kindex \+ @r{regexp operator}
13267 @kindex \? @r{regexp operator}
13268 @kindex \| @r{regexp operator}
13269 In the regular expression, @code{\+}, @code{\?}, and @code{\|} are
13270 operators which respectively match one or more, zero or one, or separate
13271 alternatives.  SunOS and other @command{expr}'s treat these as regular
13272 characters.  (POSIX allows either behavior.)
13273 @xref{Top, , Regular Expression Library, regex, Regex}, for details of
13274 regular expression syntax.  Some examples are in @ref{Examples of expr}.
13276 @item match @var{string} @var{regex}
13277 @findex match
13278 An alternative way to do pattern matching.  This is the same as
13279 @w{@samp{@var{string} : @var{regex}}}.
13281 @item substr @var{string} @var{position} @var{length}
13282 @findex substr
13283 Returns the substring of @var{string} beginning at @var{position}
13284 with length at most @var{length}.  If either @var{position} or
13285 @var{length} is negative, zero, or non-numeric, returns the null string.
13287 @item index @var{string} @var{charset}
13288 @findex index
13289 Returns the first position in @var{string} where the first character in
13290 @var{charset} was found.  If no character in @var{charset} is found in
13291 @var{string}, return 0.
13293 @item length @var{string}
13294 @findex length
13295 Returns the length of @var{string}.
13297 @item + @var{token}
13298 @kindex +
13299 Interpret @var{token} as a string, even if it is a keyword like @var{match}
13300 or an operator like @code{/}.
13301 This makes it possible to test @code{expr length + "$x"} or
13302 @code{expr + "$x" : '.*/\(.\)'} and have it do the right thing even if
13303 the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
13304 This operator is a GNU extension.  Portable shell scripts should use
13305 @code{@w{" $token"} : @w{' \(.*\)'}} instead of @code{+ "$token"}.
13307 @end table
13309 To make @command{expr} interpret keywords as strings, you must use the
13310 @code{quote} operator.
13313 @node Numeric expressions
13314 @subsection Numeric expressions
13316 @cindex numeric expressions
13317 @cindex expressions, numeric
13319 @command{expr} supports the usual numeric operators, in order of increasing
13320 precedence.  These numeric operators have lower precedence than the
13321 string operators described in the previous section, and higher precedence
13322 than the connectives (next section).
13324 @table @samp
13326 @item + -
13327 @kindex +
13328 @kindex -
13329 @cindex addition
13330 @cindex subtraction
13331 Addition and subtraction.  Both arguments are converted to integers;
13332 an error occurs if this cannot be done.
13334 @item * / %
13335 @kindex *
13336 @kindex /
13337 @kindex %
13338 @cindex multiplication
13339 @cindex division
13340 @cindex remainder
13341 Multiplication, division, remainder.  Both arguments are converted to
13342 integers; an error occurs if this cannot be done.
13344 @end table
13347 @node Relations for expr
13348 @subsection Relations for @command{expr}
13350 @cindex connectives, logical
13351 @cindex logical connectives
13352 @cindex relations, numeric or string
13354 @command{expr} supports the usual logical connectives and relations.  These
13355 have lower precedence than the string and numeric operators
13356 (previous sections).  Here is the list, lowest-precedence operator first.
13358 @table @samp
13360 @item |
13361 @kindex |
13362 @cindex logical or operator
13363 @cindex or operator
13364 Returns its first argument if that is neither null nor zero, otherwise
13365 its second argument if it is neither null nor zero, otherwise 0.  It
13366 does not evaluate its second argument if its first argument is neither
13367 null nor zero.
13369 @item &
13370 @kindex &
13371 @cindex logical and operator
13372 @cindex and operator
13373 Return its first argument if neither argument is null or zero, otherwise
13374 0.  It does not evaluate its second argument if its first argument is
13375 null or zero.
13377 @item < <= = == != >= >
13378 @kindex <
13379 @kindex <=
13380 @kindex =
13381 @kindex ==
13382 @kindex >
13383 @kindex >=
13384 @cindex comparison operators
13385 @vindex LC_COLLATE
13386 Compare the arguments and return 1 if the relation is true, 0 otherwise.
13387 @code{==} is a synonym for @code{=}.  @command{expr} first tries to convert
13388 both arguments to integers and do a numeric comparison; if either
13389 conversion fails, it does a lexicographic comparison using the character
13390 collating sequence specified by the @env{LC_COLLATE} locale.
13392 @end table
13395 @node Examples of expr
13396 @subsection Examples of using @command{expr}
13398 @cindex examples of @command{expr}
13399 Here are a few examples, including quoting for shell metacharacters.
13401 To add 1 to the shell variable @code{foo}, in Bourne-compatible shells:
13403 @example
13404 foo=$(expr $foo + 1)
13405 @end example
13407 To print the non-directory part of the file name stored in
13408 @code{$fname}, which need not contain a @code{/}:
13410 @example
13411 expr $fname : '.*/\(.*\)' '|' $fname
13412 @end example
13414 An example showing that @code{\+} is an operator:
13416 @example
13417 expr aaa : 'a\+'
13418 @result{} 3
13419 @end example
13421 @example
13422 expr abc : 'a\(.\)c'
13423 @result{} b
13424 expr index abcdef cz
13425 @result{} 3
13426 expr index index a
13427 @error{} expr: syntax error
13428 expr index + index a
13429 @result{} 0
13430 @end example
13433 @node Redirection
13434 @chapter Redirection
13436 @cindex redirection
13437 @cindex commands for redirection
13439 Unix shells commonly provide several forms of @dfn{redirection}---ways
13440 to change the input source or output destination of a command.  But one
13441 useful redirection is performed by a separate command, not by the shell;
13442 it's described here.
13444 @menu
13445 * tee invocation::              Redirect output to multiple files or processes.
13446 @end menu
13449 @node tee invocation
13450 @section @command{tee}: Redirect output to multiple files or processes
13452 @pindex tee
13453 @cindex pipe fitting
13454 @cindex destinations, multiple output
13455 @cindex read from stdin and write to stdout and files
13457 The @command{tee} command copies standard input to standard output and also
13458 to any files given as arguments.  This is useful when you want not only
13459 to send some data down a pipe, but also to save a copy.  Synopsis:
13461 @example
13462 tee [@var{option}]@dots{} [@var{file}]@dots{}
13463 @end example
13465 If a file being written to does not already exist, it is created.  If a
13466 file being written to already exists, the data it previously contained
13467 is overwritten unless the @option{-a} option is used.
13469 In previous versions of GNU coreutils (v5.3.0 - v8.23), a @var{file} of @samp{-}
13470 caused @command{tee} to send another copy of input to standard output.
13471 However, as the interleaved output was not very useful, @command{tee} now
13472 conforms to POSIX which explicitly mandates it to treat @samp{-} as a file
13473 with such name.
13475 The program accepts the following options.  Also see @ref{Common options}.
13477 @table @samp
13478 @item -a
13479 @itemx --append
13480 @opindex -a
13481 @opindex --append
13482 Append standard input to the given files rather than overwriting
13483 them.
13485 @item -i
13486 @itemx --ignore-interrupts
13487 @opindex -i
13488 @opindex --ignore-interrupts
13489 Ignore interrupt signals.
13491 @item -p
13492 @itemx --output-error[=@var{mode}]
13493 @opindex -p
13494 @opindex --output-error
13495 Adjust the behavior with errors on the outputs,
13496 with the long form option supporting selection
13497 between the following @var{mode}s:
13499 @table @samp
13500 @item warn
13501 Warn on error opening or writing any output, including pipes.
13502 Writing is continued to still open files/pipes.
13503 Exit status indicates failure if any output has an error.
13505 @item warn-nopipe
13506 This is the default @var{mode} when not specified,
13507 or when the short form @option{-p} is used.
13508 Warn on error opening or writing any output, except pipes.
13509 Writing is continued to still open files/pipes.
13510 Exit status indicates failure if any non pipe output had an error.
13512 @item exit
13513 Exit on error opening or writing any output, including pipes.
13515 @item exit-nopipe
13516 Exit on error opening or writing any output, except pipes.
13517 @end table
13519 @end table
13521 The @command{tee} command is useful when you happen to be transferring a large
13522 amount of data and also want to summarize that data without reading
13523 it a second time.  For example, when you are downloading a DVD image,
13524 you often want to verify its signature or checksum right away.
13525 The inefficient way to do it is simply:
13527 @example
13528 wget https://example.com/some.iso && sha1sum some.iso
13529 @end example
13531 One problem with the above is that it makes you wait for the
13532 download to complete before starting the time-consuming SHA1 computation.
13533 Perhaps even more importantly, the above requires reading
13534 the DVD image a second time (the first was from the network).
13536 The efficient way to do it is to interleave the download
13537 and SHA1 computation.  Then, you'll get the checksum for
13538 free, because the entire process parallelizes so well:
13540 @example
13541 # slightly contrived, to demonstrate process substitution
13542 wget -O - https://example.com/dvd.iso \
13543   | tee >(sha1sum > dvd.sha1) > dvd.iso
13544 @end example
13546 That makes @command{tee} write not just to the expected output file,
13547 but also to a pipe running @command{sha1sum} and saving the final
13548 checksum in a file named @file{dvd.sha1}.
13550 Note, however, that this example relies on a feature of modern shells
13551 called @dfn{process substitution}
13552 (the @samp{>(command)} syntax, above;
13553 @xref{Process Substitution,,Process Substitution, bash,
13554 The Bash Reference Manual}.),
13555 so it works with @command{zsh}, @command{bash}, and @command{ksh},
13556 but not with @command{/bin/sh}.  So if you write code like this
13557 in a shell script, be sure to start the script with @samp{#!/bin/bash}.
13559 Note also that if any of the process substitutions (or piped stdout)
13560 might exit early without consuming all the data, the @option{-p} option
13561 is needed to allow @command{tee} to continue to process the input
13562 to any remaining outputs.
13564 Since the above example writes to one file and one process,
13565 a more conventional and portable use of @command{tee} is even better:
13567 @example
13568 wget -O - https://example.com/dvd.iso \
13569   | tee dvd.iso | sha1sum > dvd.sha1
13570 @end example
13572 You can extend this example to make @command{tee} write to two processes,
13573 computing MD5 and SHA1 checksums in parallel.  In this case,
13574 process substitution is required:
13576 @example
13577 wget -O - https://example.com/dvd.iso \
13578   | tee >(sha1sum > dvd.sha1) \
13579         >(md5sum > dvd.md5) \
13580   > dvd.iso
13581 @end example
13583 This technique is also useful when you want to make a @emph{compressed}
13584 copy of the contents of a pipe.
13585 Consider a tool to graphically summarize disk usage data from @samp{du -ak}.
13586 For a large hierarchy, @samp{du -ak} can run for a long time,
13587 and can easily produce terabytes of data, so you won't want to
13588 rerun the command unnecessarily.  Nor will you want to save
13589 the uncompressed output.
13591 Doing it the inefficient way, you can't even start the GUI
13592 until after you've compressed all of the @command{du} output:
13594 @example
13595 du -ak | gzip -9 > /tmp/du.gz
13596 gzip -d /tmp/du.gz | xdiskusage -a
13597 @end example
13599 With @command{tee} and process substitution, you start the GUI
13600 right away and eliminate the decompression completely:
13602 @example
13603 du -ak | tee >(gzip -9 > /tmp/du.gz) | xdiskusage -a
13604 @end example
13606 Finally, if you regularly create more than one type of
13607 compressed tarball at once, for example when @code{make dist} creates
13608 both @command{gzip}-compressed and @command{bzip2}-compressed tarballs,
13609 there may be a better way.
13610 Typical @command{automake}-generated @file{Makefile} rules create
13611 the two compressed tar archives with commands in sequence, like this
13612 (slightly simplified):
13614 @example
13615 tardir=your-pkg-M.N
13616 tar chof - "$tardir" | gzip  -9 -c > your-pkg-M.N.tar.gz
13617 tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13618 @end example
13620 However, if the hierarchy you are archiving and compressing is larger
13621 than a couple megabytes, and especially if you are using a multi-processor
13622 system with plenty of memory, then you can do much better by reading the
13623 directory contents only once and running the compression programs in parallel:
13625 @example
13626 tardir=your-pkg-M.N
13627 tar chof - "$tardir" \
13628   | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
13629   | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13630 @end example
13632 If you want to further process the output from process substitutions,
13633 and those processes write atomically (i.e., write less than the system's
13634 PIPE_BUF size at a time), that's possible with a construct like:
13636 @example
13637 tardir=your-pkg-M.N
13638 tar chof - "$tardir" \
13639   | tee >(md5sum --tag) > >(sha256sum --tag) \
13640   | sort | gpg --clearsign > your-pkg-M.N.tar.sig
13641 @end example
13643 @exitstatus
13646 @node File name manipulation
13647 @chapter File name manipulation
13649 @cindex file name manipulation
13650 @cindex manipulation of file names
13651 @cindex commands for file name manipulation
13653 This section describes commands that manipulate file names.
13655 @menu
13656 * basename invocation::         Strip directory and suffix from a file name.
13657 * dirname invocation::          Strip last file name component.
13658 * pathchk invocation::          Check file name validity and portability.
13659 * mktemp invocation::           Create temporary file or directory.
13660 * realpath invocation::         Print resolved file names.
13661 @end menu
13664 @node basename invocation
13665 @section @command{basename}: Strip directory and suffix from a file name
13667 @pindex basename
13668 @cindex strip directory and suffix from file names
13669 @cindex directory, stripping from file names
13670 @cindex suffix, stripping from file names
13671 @cindex file names, stripping directory and suffix
13672 @cindex leading directory components, stripping
13674 @command{basename} removes any leading directory components from
13675 @var{name}.  Synopsis:
13677 @example
13678 basename @var{name} [@var{suffix}]
13679 basename @var{option}@dots{} @var{name}@dots{}
13680 @end example
13682 If @var{suffix} is specified and is identical to the end of @var{name},
13683 it is removed from @var{name} as well.  Note that since trailing slashes
13684 are removed prior to suffix matching, @var{suffix} will do nothing if it
13685 contains slashes.  @command{basename} prints the result on standard
13686 output.
13688 @c This test is used both here and in the section on dirname.
13689 @macro basenameAndDirname
13690 Together, @command{basename} and @command{dirname} are designed such
13691 that if @samp{ls "$name"} succeeds, then the command sequence @samp{cd
13692 "$(dirname "$name")"; ls "$(basename "$name")"} will, too.  This works
13693 for everything except file names containing a trailing newline.
13694 @end macro
13695 @basenameAndDirname
13697 POSIX allows the implementation to define the results if
13698 @var{name} is empty or @samp{//}.  In the former case, GNU
13699 @command{basename} returns the empty string.  In the latter case, the
13700 result is @samp{//} on platforms where @var{//} is distinct from
13701 @var{/}, and @samp{/} on platforms where there is no difference.
13703 The program accepts the following options.  Also see @ref{Common options}.
13704 Options must precede operands.
13706 @table @samp
13708 @item -a
13709 @itemx --multiple
13710 @opindex -a
13711 @opindex --multiple
13712 Support more than one argument.  Treat every argument as a @var{name}.
13713 With this, an optional @var{suffix} must be specified using the
13714 @option{-s} option.
13716 @item -s @var{suffix}
13717 @itemx --suffix=@var{suffix}
13718 @opindex -s
13719 @opindex --suffix
13720 Remove a trailing @var{suffix}.
13721 This option implies the @option{-a} option.
13723 @optZero
13725 @end table
13727 @exitstatus
13729 Examples:
13731 @smallexample
13732 # Output "sort".
13733 basename /usr/bin/sort
13735 # Output "stdio".
13736 basename include/stdio.h .h
13738 # Output "stdio".
13739 basename -s .h include/stdio.h
13741 # Output "stdio" followed by "stdlib"
13742 basename -a -s .h include/stdio.h include/stdlib.h
13743 @end smallexample
13746 @node dirname invocation
13747 @section @command{dirname}: Strip last file name component
13749 @pindex dirname
13750 @cindex directory components, printing
13751 @cindex stripping non-directory suffix
13752 @cindex non-directory suffix, stripping
13754 @command{dirname} prints all but the final slash-delimited component
13755 of each @var{name}.  Slashes on either side of the final component are
13756 also removed.  If the string contains no slash, @command{dirname}
13757 prints @samp{.} (meaning the current directory).  Synopsis:
13759 @example
13760 dirname [@var{option}] @var{name}@dots{}
13761 @end example
13763 @var{name} need not be a file name, but if it is, this operation
13764 effectively lists the directory that contains the final component,
13765 including the case when the final component is itself a directory.
13767 @basenameAndDirname
13769 POSIX allows the implementation to define the results if
13770 @var{name} is @samp{//}.  With GNU @command{dirname}, the
13771 result is @samp{//} on platforms where @var{//} is distinct from
13772 @var{/}, and @samp{/} on platforms where there is no difference.
13774 The program accepts the following option.  Also see @ref{Common options}.
13776 @table @samp
13778 @optZero
13780 @end table
13782 @exitstatus
13784 Examples:
13786 @smallexample
13787 # Output "/usr/bin".
13788 dirname /usr/bin/sort
13789 dirname /usr/bin//.//
13791 # Output "dir1" followed by "dir2"
13792 dirname dir1/str dir2/str
13794 # Output ".".
13795 dirname stdio.h
13796 @end smallexample
13799 @node pathchk invocation
13800 @section @command{pathchk}: Check file name validity and portability
13802 @pindex pathchk
13803 @cindex file names, checking validity and portability
13804 @cindex valid file names, checking for
13805 @cindex portable file names, checking for
13807 @command{pathchk} checks validity and portability of file names.  Synopsis:
13809 @example
13810 pathchk [@var{option}]@dots{} @var{name}@dots{}
13811 @end example
13813 For each @var{name}, @command{pathchk} prints an error message if any of
13814 these conditions is true:
13816 @enumerate
13817 @item
13818 One of the existing directories in @var{name} does not have search
13819 (execute) permission,
13820 @item
13821 The length of @var{name} is larger than the maximum supported by the
13822 operating system.
13823 @item
13824 The length of one component of @var{name} is longer than
13825 its file system's maximum.
13826 @end enumerate
13828 A nonexistent @var{name} is not an error, so long a file with that
13829 name could be created under the above conditions.
13831 The program accepts the following options.  Also see @ref{Common options}.
13832 Options must precede operands.
13834 @table @samp
13836 @item -p
13837 @opindex -p
13838 Instead of performing checks based on the underlying file system,
13839 print an error message if any of these conditions is true:
13841 @enumerate
13842 @item
13843 A file name is empty.
13845 @item
13846 A file name contains a character outside the POSIX portable file
13847 name character set, namely, the ASCII letters and digits, @samp{.},
13848 @samp{_}, @samp{-}, and @samp{/}.
13850 @item
13851 The length of a file name or one of its components exceeds the
13852 POSIX minimum limits for portability.
13853 @end enumerate
13855 @item -P
13856 @opindex -P
13857 Print an error message if a file name is empty, or if it contains a component
13858 that begins with @samp{-}.
13860 @item --portability
13861 @opindex --portability
13862 Print an error message if a file name is not portable to all POSIX
13863 hosts.  This option is equivalent to @samp{-p -P}.
13865 @end table
13867 @cindex exit status of @command{pathchk}
13868 Exit status:
13870 @display
13871 0 if all specified file names passed all checks,
13872 1 otherwise.
13873 @end display
13875 @node mktemp invocation
13876 @section @command{mktemp}: Create temporary file or directory
13878 @pindex mktemp
13879 @cindex file names, creating temporary
13880 @cindex directory, creating temporary
13881 @cindex temporary files and directories
13883 @command{mktemp} manages the creation of temporary files and
13884 directories.  Synopsis:
13886 @example
13887 mktemp [@var{option}]@dots{} [@var{template}]
13888 @end example
13890 Safely create a temporary file or directory based on @var{template},
13891 and print its name.  If given, @var{template} must include at least
13892 three consecutive @samp{X}s in the last component.  If omitted, the template
13893 @samp{tmp.XXXXXXXXXX} is used, and option @option{--tmpdir} is
13894 implied.  The final run of @samp{X}s in the @var{template} will be replaced
13895 by alpha-numeric characters; thus, on a case-sensitive file system,
13896 and with a @var{template} including a run of @var{n} instances of @samp{X},
13897 there are @samp{62**@var{n}} potential file names.
13899 Older scripts used to create temporary files by simply joining the
13900 name of the program with the process id (@samp{$$}) as a suffix.
13901 However, that naming scheme is easily predictable, and suffers from a
13902 race condition where the attacker can create an appropriately named
13903 symbolic link, such that when the script then opens a handle to what
13904 it thought was an unused file, it is instead modifying an existing
13905 file.  Using the same scheme to create a directory is slightly safer,
13906 since the @command{mkdir} will fail if the target already exists, but
13907 it is still inferior because it allows for denial of service attacks.
13908 Therefore, modern scripts should use the @command{mktemp} command to
13909 guarantee that the generated name will be unpredictable, and that
13910 knowledge of the temporary file name implies that the file was created
13911 by the current script and cannot be modified by other users.
13913 When creating a file, the resulting file has read and write
13914 permissions for the current user, but no permissions for the group or
13915 others; these permissions are reduced if the current umask is more
13916 restrictive.
13918 Here are some examples (although note that if you repeat them, you
13919 will most likely get different file names):
13921 @itemize @bullet
13923 @item
13924 Create a temporary file in the current directory.
13925 @example
13926 $ mktemp file.XXXX
13927 file.H47c
13928 @end example
13930 @item
13931 Create a temporary file with a known suffix.
13932 @example
13933 $ mktemp --suffix=.txt file-XXXX
13934 file-H08W.txt
13935 $ mktemp file-XXXX-XXXX.txt
13936 file-XXXX-eI9L.txt
13937 @end example
13939 @item
13940 Create a secure fifo relative to the user's choice of @env{TMPDIR},
13941 but falling back to the current directory rather than @file{/tmp}.
13942 Note that @command{mktemp} does not create fifos, but can create a
13943 secure directory in which the fifo can live.  Exit the shell if the
13944 directory or fifo could not be created.
13945 @example
13946 $ dir=$(mktemp -p "$@{TMPDIR:-.@}" -d dir-XXXX) || exit 1
13947 $ fifo=$dir/fifo
13948 $ mkfifo "$fifo" || @{ rmdir "$dir"; exit 1; @}
13949 @end example
13951 @item
13952 Create and use a temporary file if possible, but ignore failure.  The
13953 file will reside in the directory named by @env{TMPDIR}, if specified,
13954 or else in @file{/tmp}.
13955 @example
13956 $ file=$(mktemp -q) && @{
13957 >   # Safe to use $file only within this block.  Use quotes,
13958 >   # since $TMPDIR, and thus $file, may contain whitespace.
13959 >   echo ... > "$file"
13960 >   rm "$file"
13961 > @}
13962 @end example
13964 @item
13965 Act as a semi-random character generator (it is not fully random,
13966 since it is impacted by the contents of the current directory).  To
13967 avoid security holes, do not use the resulting names to create a file.
13968 @example
13969 $ mktemp -u XXX
13971 $ mktemp -u XXX
13973 @end example
13975 @end itemize
13977 The program accepts the following options.  Also see @ref{Common options}.
13979 @table @samp
13981 @item -d
13982 @itemx --directory
13983 @opindex -d
13984 @opindex --directory
13985 Create a directory rather than a file.  The directory will have read,
13986 write, and search permissions for the current user, but no permissions
13987 for the group or others; these permissions are reduced if the current
13988 umask is more restrictive.
13990 @item -q
13991 @itemx --quiet
13992 @opindex -q
13993 @opindex --quiet
13994 Suppress diagnostics about failure to create a file or directory.  The
13995 exit status will still reflect whether a file was created.
13997 @item -u
13998 @itemx --dry-run
13999 @opindex -u
14000 @opindex --dry-run
14001 Generate a temporary name that does not name an existing file, without
14002 changing the file system contents.  Using the output of this command
14003 to create a new file is inherently unsafe, as there is a window of
14004 time between generating the name and using it where another process
14005 can create an object by the same name.
14007 @item -p @var{dir}
14008 @itemx --tmpdir[=@var{dir}]
14009 @opindex -p
14010 @opindex --tmpdir
14011 Treat @var{template} relative to the directory @var{dir}.  If
14012 @var{dir} is not specified (only possible with the long option
14013 @option{--tmpdir}) or is the empty string, use the value of
14014 @env{TMPDIR} if available, otherwise use @samp{/tmp}.  If this is
14015 specified, @var{template} must not be absolute.  However,
14016 @var{template} can still contain slashes, although intermediate
14017 directories must already exist.
14019 @item --suffix=@var{suffix}
14020 @opindex --suffix
14021 Append @var{suffix} to the @var{template}.  @var{suffix} must not
14022 contain slash.  If @option{--suffix} is specified, @var{template} must
14023 end in @samp{X}; if it is not specified, then an appropriate
14024 @option{--suffix} is inferred by finding the last @samp{X} in
14025 @var{template}.  This option exists for use with the default
14026 @var{template} and for the creation of a @var{suffix} that starts with
14027 @samp{X}.
14029 @item -t
14030 @opindex -t
14031 Treat @var{template} as a single file relative to the value of
14032 @env{TMPDIR} if available, or to the directory specified by
14033 @option{-p}, otherwise to @samp{/tmp}.  @var{template} must not
14034 contain slashes.  This option is deprecated; the use of @option{-p}
14035 without @option{-t} offers better defaults (by favoring the command
14036 line over @env{TMPDIR}) and more flexibility (by allowing intermediate
14037 directories).
14039 @end table
14041 @cindex exit status of @command{mktemp}
14042 Exit status:
14044 @display
14045 0 if the file was created,
14046 1 otherwise.
14047 @end display
14050 @node realpath invocation
14051 @section @command{realpath}: Print the resolved file name.
14053 @pindex realpath
14054 @cindex file names, canonicalization
14055 @cindex symlinks, resolution
14056 @cindex canonical file name
14057 @cindex canonicalize a file name
14058 @pindex realpath
14059 @findex realpath
14061 @command{realpath} expands all symbolic links and resolves references to
14062 @samp{/./}, @samp{/../} and extra @samp{/} characters.  By default,
14063 all but the last component of the specified files must exist.  Synopsis:
14065 @example
14066 realpath [@var{option}]@dots{} @var{file}@dots{}
14067 @end example
14069 The file name canonicalization functionality overlaps with that of the
14070 @command{readlink} command.  This is the preferred command for
14071 canonicalization as it's a more suitable and standard name.  In addition
14072 this command supports relative file name processing functionality.
14074 The program accepts the following options.  Also see @ref{Common options}.
14076 @table @samp
14078 @item -e
14079 @itemx --canonicalize-existing
14080 @opindex -e
14081 @opindex --canonicalize-existing
14082 Ensure that all components of the specified file names exist.
14083 If any component is missing or unavailable, @command{realpath} will output
14084 a diagnostic unless the @option{-q} option is specified, and exit with a
14085 nonzero exit code.  A trailing slash requires that the name resolve to a
14086 directory.
14088 @item -m
14089 @itemx --canonicalize-missing
14090 @opindex -m
14091 @opindex --canonicalize-missing
14092 If any component of a specified file name is missing or unavailable,
14093 treat it as a directory.
14095 @item -L
14096 @itemx --logical
14097 @opindex -L
14098 @opindex --logical
14099 Symbolic links are resolved in the specified file names,
14100 but they are resolved after any subsequent @samp{..} components are processed.
14102 @item -P
14103 @itemx --physical
14104 @opindex -P
14105 @opindex --physical
14106 Symbolic links are resolved in the specified file names,
14107 and they are resolved before any subsequent @samp{..} components are processed.
14108 This is the default mode of operation.
14110 @item -q
14111 @itemx --quiet
14112 @opindex -q
14113 @opindex --quiet
14114 Suppress diagnostic messages for specified file names.
14116 @item --relative-to=@var{dir}
14117 @opindex --relative-to
14118 @cindex relpath
14119 Print the resolved file names relative to the specified directory.
14120 Note this option honors the @option{-m} and @option{-e} options
14121 pertaining to file existence.
14123 @item --relative-base=@var{dir}
14124 @opindex --relative-base
14125 Print the resolved file names as relative @emph{if} the files
14126 are descendants of @var{dir}.
14127 Otherwise, print the resolved file names as absolute.
14128 Note this option honors the @option{-m} and @option{-e} options
14129 pertaining to file existence.
14130 For details about combining @option{--relative-to} and @option{--relative-base},
14131 @pxref{Realpath usage examples}.
14133 @item -s
14134 @itemx --strip
14135 @itemx --no-symlinks
14136 @opindex -s
14137 @opindex --strip
14138 @opindex --no-symlinks
14139 Do not resolve symbolic links.  Only resolve references to
14140 @samp{/./}, @samp{/../} and remove extra @samp{/} characters.
14141 When combined with the @option{-m} option, realpath operates
14142 only on the file name, and does not touch any actual file.
14144 @optZero
14146 @end table
14148 @cindex exit status of @command{realpath}
14149 Exit status:
14151 @display
14152 0 if all file names were printed without issue.
14153 1 otherwise.
14154 @end display
14157 @node Realpath usage examples
14158 @subsection Realpath usage examples
14160 @opindex --relative-to
14161 @opindex --relative-base
14163 By default, @command{realpath} prints the absolute file name of given files
14164 (symlinks are resolved, @file{words} is resolved to @file{american-english}):
14166 @example
14167 @group
14168 cd /home/user
14169 realpath /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
14170 @result{} /usr/bin/sort
14171 @result{} /tmp/foo
14172 @result{} /usr/share/dict/american-english
14173 @result{} /home/user/1.txt
14174 @end group
14175 @end example
14177 With @option{--relative-to}, file names are printed relative to
14178 the given directory:
14180 @example
14181 @group
14182 realpath --relative-to=/usr/bin \
14183          /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
14184 @result{} sort
14185 @result{} ../../tmp/foo
14186 @result{} ../share/dict/american-english
14187 @result{} ../../home/user/1.txt
14188 @end group
14189 @end example
14191 With @option{--relative-base}, relative file names are printed @emph{if}
14192 the resolved file name is below the given base directory. For files outside the
14193 base directory absolute file names are printed:
14195 @example
14196 @group
14197 realpath --relative-base=/usr \
14198          /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
14199 @result{} bin/sort
14200 @result{} /tmp/foo
14201 @result{} share/dict/american-english
14202 @result{} /home/user/1.txt
14203 @end group
14204 @end example
14206 When both @option{--relative-to=DIR1} and @option{--relative-base=DIR2}
14207 are used, file names are printed relative to @var{dir1} @emph{if} they are
14208 located below @var{dir2}. If the files are not below @var{dir2}, they are
14209 printed as absolute file names:
14211 @example
14212 @group
14213 realpath --relative-to=/usr/bin --relative-base=/usr \
14214          /usr/bin/sort /tmp/foo /usr/share/dict/words 1.txt
14215 @result{} sort
14216 @result{} /tmp/foo
14217 @result{} ../share/dict/american-english
14218 @result{} /home/user/1.txt
14219 @end group
14220 @end example
14222 When both @option{--relative-to=DIR1} and @option{--relative-base=DIR2}
14223 are used, @var{dir1} @emph{must} be a subdirectory of @var{dir2}. Otherwise,
14224 @command{realpath} prints absolutes file names.
14227 @node Working context
14228 @chapter Working context
14230 @cindex working context
14231 @cindex commands for printing the working context
14233 This section describes commands that display or alter the context in
14234 which you are working: the current directory, the terminal settings, and
14235 so forth.  See also the user-related commands in the next section.
14237 @menu
14238 * pwd invocation::              Print working directory.
14239 * stty invocation::             Print or change terminal characteristics.
14240 * printenv invocation::         Print environment variables.
14241 * tty invocation::              Print file name of terminal on standard input.
14242 @end menu
14245 @node pwd invocation
14246 @section @command{pwd}: Print working directory
14248 @pindex pwd
14249 @cindex print name of current directory
14250 @cindex current working directory, printing
14251 @cindex working directory, printing
14254 @command{pwd} prints the name of the current directory.  Synopsis:
14256 @example
14257 pwd [@var{option}]@dots{}
14258 @end example
14260 The program accepts the following options.  Also see @ref{Common options}.
14262 @table @samp
14263 @item -L
14264 @itemx --logical
14265 @opindex -L
14266 @opindex --logical
14267 If the contents of the environment variable @env{PWD} provide an
14268 absolute name of the current directory with no @samp{.} or @samp{..}
14269 components, but possibly with symbolic links, then output those
14270 contents.  Otherwise, fall back to default @option{-P} handling.
14272 @item -P
14273 @itemx --physical
14274 @opindex -P
14275 @opindex --physical
14276 Print a fully resolved name for the current directory.  That is, all
14277 components of the printed name will be actual directory names---none
14278 will be symbolic links.
14279 @end table
14281 @cindex symbolic links and @command{pwd}
14282 If @option{-L} and @option{-P} are both given, the last one takes
14283 precedence.  If neither option is given, then this implementation uses
14284 @option{-P} as the default unless the @env{POSIXLY_CORRECT}
14285 environment variable is set.
14287 @mayConflictWithShellBuiltIn{pwd}
14289 @exitstatus
14292 @node stty invocation
14293 @section @command{stty}: Print or change terminal characteristics
14295 @pindex stty
14296 @cindex change or print terminal settings
14297 @cindex terminal settings
14298 @cindex line settings of terminal
14300 @command{stty} prints or changes terminal characteristics, such as baud rate.
14301 Synopses:
14303 @example
14304 stty [@var{option}] [@var{setting}]@dots{}
14305 stty [@var{option}]
14306 @end example
14308 If given no line settings, @command{stty} prints the baud rate, line
14309 discipline number (on systems that support it), and line settings
14310 that have been changed from the values set by @samp{stty sane}.
14311 By default, mode reading and setting are performed on the tty line
14312 connected to standard input, although this can be modified by the
14313 @option{--file} option.
14315 @command{stty} accepts many non-option arguments that change aspects of
14316 the terminal line operation, as described below.
14318 The program accepts the following options.  Also see @ref{Common options}.
14320 @table @samp
14321 @item -a
14322 @itemx --all
14323 @opindex -a
14324 @opindex --all
14325 Print all current settings in human-readable form.  This option may not
14326 be used in combination with any line settings.
14328 @item -F @var{device}
14329 @itemx --file=@var{device}
14330 @opindex -F
14331 @opindex --file
14332 Set the line opened by the file name specified in @var{device} instead of
14333 the tty line connected to standard input.  This option is necessary
14334 because opening a POSIX tty requires use of the
14335 @code{O_NONDELAY} flag to prevent a POSIX tty from blocking
14336 until the carrier detect line is high if
14337 the @code{clocal} flag is not set.  Hence, it is not always possible
14338 to allow the shell to open the device in the traditional manner.
14340 @item -g
14341 @itemx --save
14342 @opindex -g
14343 @opindex --save
14344 @cindex machine-readable @command{stty} output
14345 Print all current settings in a form that can be used as an argument to
14346 another @command{stty} command to restore the current settings.  This option
14347 may not be used in combination with any line settings.
14349 @end table
14351 Many settings can be turned off by preceding them with a @samp{-}.
14352 Such arguments are marked below with ``May be negated'' in their
14353 description.  The descriptions themselves refer to the positive
14354 case, that is, when @emph{not} negated (unless stated otherwise,
14355 of course).
14357 Some settings are not available on all POSIX systems, since they use
14358 extensions.  Such arguments are marked below with
14359 ``Non-POSIX'' in their description.  On non-POSIX
14360 systems, those or other settings also may not
14361 be available, but it's not feasible to document all the variations: just
14362 try it and see.
14364 @command{stty} is installed only on platforms with the POSIX terminal
14365 interface, so portable scripts should not rely on its existence on
14366 non-POSIX platforms.
14368 @exitstatus
14370 @menu
14371 * Control::                     Control settings
14372 * Input::                       Input settings
14373 * Output::                      Output settings
14374 * Local::                       Local settings
14375 * Combination::                 Combination settings
14376 * Characters::                  Special characters
14377 * Special::                     Special settings
14378 @end menu
14381 @node Control
14382 @subsection Control settings
14384 @cindex control settings
14385 Control settings:
14387 @table @samp
14388 @item parenb
14389 @opindex parenb
14390 @cindex two-way parity
14391 Generate parity bit in output and expect parity bit in input.
14392 May be negated.
14394 @item parodd
14395 @opindex parodd
14396 @cindex odd parity
14397 @cindex even parity
14398 Set odd parity (even if negated).  May be negated.
14400 @item cmspar
14401 @opindex cmspar
14402 @cindex constant parity
14403 @cindex stick parity
14404 @cindex mark parity
14405 @cindex space parity
14406 Use "stick" (mark/space) parity.  If parodd is set, the parity bit is
14407 always 1; if parodd is not set, the parity bit is always zero.
14408 Non-POSIX@.  May be negated.
14410 @item cs5
14411 @itemx cs6
14412 @itemx cs7
14413 @itemx cs8
14414 @opindex cs@var{n}
14415 @cindex character size
14416 @cindex eight-bit characters
14417 Set character size to 5, 6, 7, or 8 bits.
14419 @item hup
14420 @itemx hupcl
14421 @opindex hup[cl]
14422 Send a hangup signal when the last process closes the tty.  May be
14423 negated.
14425 @item cstopb
14426 @opindex cstopb
14427 @cindex stop bits
14428 Use two stop bits per character (one if negated).  May be negated.
14430 @item cread
14431 @opindex cread
14432 Allow input to be received.  May be negated.
14434 @item clocal
14435 @opindex clocal
14436 @cindex modem control
14437 Disable modem control signals.  May be negated.
14439 @item crtscts
14440 @opindex crtscts
14441 @cindex hardware flow control
14442 @cindex flow control, hardware
14443 @cindex RTS/CTS flow control
14444 Enable RTS/CTS flow control.  Non-POSIX@.  May be negated.
14446 @item cdtrdsr
14447 @opindex cdtrdsr
14448 @cindex hardware flow control
14449 @cindex flow control, hardware
14450 @cindex DTR/DSR flow control
14451 Enable DTR/DSR flow control. Non-POSIX@.  May be negated.
14452 @end table
14455 @node Input
14456 @subsection Input settings
14458 @cindex input settings
14459 These settings control operations on data received from the terminal.
14461 @table @samp
14462 @item ignbrk
14463 @opindex ignbrk
14464 @cindex breaks, ignoring
14465 Ignore break characters.  May be negated.
14467 @item brkint
14468 @opindex brkint
14469 @cindex breaks, cause interrupts
14470 Make breaks cause an interrupt signal.  May be negated.
14472 @item ignpar
14473 @opindex ignpar
14474 @cindex parity, ignoring
14475 Ignore characters with parity errors.  May be negated.
14477 @item parmrk
14478 @opindex parmrk
14479 @cindex parity errors, marking
14480 Mark parity errors (with a 255-0-character sequence).  May be negated.
14482 @item inpck
14483 @opindex inpck
14484 Enable input parity checking.  May be negated.
14486 @item istrip
14487 @opindex istrip
14488 @cindex eight-bit input
14489 Clear high (8th) bit of input characters.  May be negated.
14491 @item inlcr
14492 @opindex inlcr
14493 @cindex newline, translating to return
14494 Translate newline to carriage return.  May be negated.
14496 @item igncr
14497 @opindex igncr
14498 @cindex return, ignoring
14499 Ignore carriage return.  May be negated.
14501 @item icrnl
14502 @opindex icrnl
14503 @cindex return, translating to newline
14504 Translate carriage return to newline.  May be negated.
14506 @item iutf8
14507 @opindex iutf8
14508 @cindex input encoding, UTF-8
14509 Assume input characters are UTF-8 encoded.  May be negated.
14511 @item ixon
14512 @opindex ixon
14513 @kindex C-s/C-q flow control
14514 @cindex XON/XOFF flow control
14515 Enable XON/XOFF flow control (that is, @kbd{Ctrl-S}/@kbd{Ctrl-Q}).  May
14516 be negated.
14518 @item ixoff
14519 @itemx tandem
14520 @opindex ixoff
14521 @opindex tandem
14522 @cindex software flow control
14523 @cindex flow control, software
14524 Enable sending of @code{stop} character when the system input buffer
14525 is almost full, and @code{start} character when it becomes almost
14526 empty again.  May be negated.
14528 @item iuclc
14529 @opindex iuclc
14530 @cindex uppercase, translating to lowercase
14531 Translate uppercase characters to lowercase.  Non-POSIX@.  May be
14532 negated.  Note ilcuc is not implemented, as one would not be able to issue
14533 almost any (lowercase) Unix command, after invoking it.
14535 @item ixany
14536 @opindex ixany
14537 Allow any character to restart output (only the start character
14538 if negated).  Non-POSIX@.  May be negated.
14540 @item imaxbel
14541 @opindex imaxbel
14542 @cindex beeping at input buffer full
14543 Enable beeping and not flushing input buffer if a character arrives
14544 when the input buffer is full.  Non-POSIX@.  May be negated.
14545 @end table
14548 @node Output
14549 @subsection Output settings
14551 @cindex output settings
14552 These settings control operations on data sent to the terminal.
14554 @table @samp
14555 @item opost
14556 @opindex opost
14557 Postprocess output.  May be negated.
14559 @item olcuc
14560 @opindex olcuc
14561 @cindex lowercase, translating to output
14562 Translate lowercase characters to uppercase.  Non-POSIX@.  May be
14563 negated.  (Note ouclc is not currently implemented.)
14565 @item ocrnl
14566 @opindex ocrnl
14567 @cindex return, translating to newline
14568 Translate carriage return to newline.  Non-POSIX@.  May be negated.
14570 @item onlcr
14571 @opindex onlcr
14572 @cindex newline, translating to crlf
14573 Translate newline to carriage return-newline.  Non-POSIX@.  May be
14574 negated.
14576 @item onocr
14577 @opindex onocr
14578 Do not print carriage returns in the first column.  Non-POSIX@.
14579 May be negated.
14581 @item onlret
14582 @opindex onlret
14583 Newline performs a carriage return.  Non-POSIX@.  May be negated.
14585 @item ofill
14586 @opindex ofill
14587 @cindex pad instead of timing for delaying
14588 Use fill (padding) characters instead of timing for delays.
14589 Non-POSIX@.
14590 May be negated.
14592 @item ofdel
14593 @opindex ofdel
14594 @cindex pad character
14595 Use ASCII DEL characters for fill instead of
14596 ASCII NUL characters.  Non-POSIX@.
14597 May be negated.
14599 @item nl1
14600 @itemx nl0
14601 @opindex nl@var{n}
14602 Newline delay style.  Non-POSIX.
14604 @item cr3
14605 @itemx cr2
14606 @itemx cr1
14607 @itemx cr0
14608 @opindex cr@var{n}
14609 Carriage return delay style.  Non-POSIX.
14611 @item tab3
14612 @itemx tab2
14613 @itemx tab1
14614 @itemx tab0
14615 @opindex tab@var{n}
14616 Horizontal tab delay style.  Non-POSIX.
14618 @item bs1
14619 @itemx bs0
14620 @opindex bs@var{n}
14621 Backspace delay style.  Non-POSIX.
14623 @item vt1
14624 @itemx vt0
14625 @opindex vt@var{n}
14626 Vertical tab delay style.  Non-POSIX.
14628 @item ff1
14629 @itemx ff0
14630 @opindex ff@var{n}
14631 Form feed delay style.  Non-POSIX.
14632 @end table
14635 @node Local
14636 @subsection Local settings
14638 @cindex local settings
14640 @table @samp
14641 @item isig
14642 @opindex isig
14643 Enable @code{interrupt}, @code{quit}, and @code{suspend} special
14644 characters.  May be negated.
14646 @item icanon
14647 @opindex icanon
14648 Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt}
14649 special characters.  May be negated.
14651 @item iexten
14652 @opindex iexten
14653 Enable non-POSIX special characters.  May be negated.
14655 @item echo
14656 @opindex echo
14657 Echo input characters.  May be negated.
14659 @item echoe
14660 @itemx crterase
14661 @opindex echoe
14662 @opindex crterase
14663 Echo @code{erase} characters as backspace-space-backspace.  May be
14664 negated.
14666 @item echok
14667 @opindex echok
14668 @cindex newline echoing after @code{kill}
14669 Echo a newline after a @code{kill} character.  May be negated.
14671 @item echonl
14672 @opindex echonl
14673 @cindex newline, echoing
14674 Echo newline even if not echoing other characters.  May be negated.
14676 @item noflsh
14677 @opindex noflsh
14678 @cindex flushing, disabling
14679 Disable flushing after @code{interrupt} and @code{quit} special
14680 characters.  May be negated.
14682 @item xcase
14683 @opindex xcase
14684 @cindex case translation
14685 Enable input and output of uppercase characters by preceding their
14686 lowercase equivalents with @samp{\}, when @code{icanon} is set.
14687 Non-POSIX@.  May be negated.
14689 @item tostop
14690 @opindex tostop
14691 @cindex background jobs, stopping at terminal write
14692 Stop background jobs that try to write to the terminal.  Non-POSIX@.
14693 May be negated.
14695 @item echoprt
14696 @itemx prterase
14697 @opindex echoprt
14698 @opindex prterase
14699 Echo erased characters backward, between @samp{\} and @samp{/}.
14700 Non-POSIX@.  May be negated.
14702 @item echoctl
14703 @itemx ctlecho
14704 @opindex echoctl
14705 @opindex ctlecho
14706 @cindex control characters, using @samp{^@var{c}}
14707 @cindex hat notation for control characters
14708 Echo control characters in hat notation (@samp{^@var{c}}) instead
14709 of literally.  Non-POSIX@.  May be negated.
14711 @item echoke
14712 @itemx crtkill
14713 @opindex echoke
14714 @opindex crtkill
14715 Echo the @code{kill} special character by erasing each character on
14716 the line as indicated by the @code{echoprt} and @code{echoe} settings,
14717 instead of by the @code{echoctl} and @code{echok} settings.
14718 Non-POSIX@.
14719 May be negated.
14721 @item extproc
14722 @opindex extproc
14723 Enable @samp{LINEMODE}, which is used to avoid echoing
14724 each character over high latency links.  See also
14725 @uref{https://tools.ietf.org/search/rfc1116, Internet RFC 1116}.
14726 Non-POSIX@.
14727 May be negated.
14729 @item flusho
14730 @opindex flusho
14731 Discard output.
14732 Note this setting is currently ignored on GNU/Linux systems.
14733 Non-POSIX@.
14734 May be negated.
14735 @end table
14738 @node Combination
14739 @subsection Combination settings
14741 @cindex combination settings
14742 Combination settings:
14744 @table @samp
14745 @item evenp
14746 @opindex evenp
14747 @itemx parity
14748 @opindex parity
14749 Same as @code{parenb -parodd cs7}.  May be negated.  If negated, same
14750 as @code{-parenb cs8}.
14752 @item oddp
14753 @opindex oddp
14754 Same as @code{parenb parodd cs7}.  May be negated.  If negated, same
14755 as @code{-parenb cs8}.
14757 @item nl
14758 @opindex nl
14759 Same as @code{-icrnl -onlcr}.  May be negated.  If negated, same as
14760 @code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}.
14762 @item ek
14763 @opindex ek
14764 Reset the @code{erase} and @code{kill} special characters to their default
14765 values.
14767 @item sane
14768 @opindex sane
14769 Same as:
14771 @c This is too long to write inline.
14772 @example
14773 cread -ignbrk brkint -inlcr -igncr icrnl
14774 icanon iexten echo echoe echok -echonl -noflsh
14775 -ixoff -iutf8 -iuclc -ixany imaxbel -xcase -olcuc -ocrnl
14776 opost -ofill onlcr -onocr -onlret nl0 cr0 tab0 bs0 vt0 ff0
14777 isig -tostop -ofdel -echoprt echoctl echoke -extproc
14778 @end example
14780 @noindent
14781 and also sets all special characters to their default values.
14783 @item cooked
14784 @opindex cooked
14785 Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus
14786 sets the @code{eof} and @code{eol} characters to their default values
14787 if they are the same as the @code{min} and @code{time} characters.
14788 May be negated.  If negated, same as @code{raw}.
14790 @item raw
14791 @opindex raw
14792 Same as:
14794 @example
14795 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
14796 -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost
14797 -isig -iuclc -ixany -imaxbel -xcase min 1 time 0
14798 @end example
14800 @noindent
14801 May be negated.  If negated, same as @code{cooked}.
14803 @item cbreak
14804 @opindex cbreak
14805 Same as @option{-icanon}.  May be negated.  If negated, same as
14806 @code{icanon}.
14808 @item pass8
14809 @opindex pass8
14810 @cindex eight-bit characters
14811 Same as @code{-parenb -istrip cs8}.  May be negated.  If negated,
14812 same as @code{parenb istrip cs7}.
14814 @item litout
14815 @opindex litout
14816 Same as @option{-parenb -istrip -opost cs8}.  May be negated.
14817 If negated, same as @code{parenb istrip opost cs7}.
14819 @item decctlq
14820 @opindex decctlq
14821 Same as @option{-ixany}.  Non-POSIX@.  May be negated.
14823 @item tabs
14824 @opindex tabs
14825 Same as @code{tab0}.  Non-POSIX@.  May be negated.  If negated, same
14826 as @code{tab3}.
14828 @item lcase
14829 @itemx LCASE
14830 @opindex lcase
14831 @opindex LCASE
14832 Same as @code{xcase iuclc olcuc}.  Non-POSIX@.  May be negated.
14833 (Used for terminals with uppercase characters only.)
14835 @item crt
14836 @opindex crt
14837 Same as @code{echoe echoctl echoke}.
14839 @item dec
14840 @opindex dec
14841 Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}.
14842 @end table
14845 @node Characters
14846 @subsection Special characters
14848 @cindex special characters
14849 @cindex characters, special
14851 The special characters' default values vary from system to system.
14852 They are set with the syntax @samp{name value}, where the names are
14853 listed below and the value can be given either literally, in hat
14854 notation (@samp{^@var{c}}), or as an integer which may start with
14855 @samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or
14856 any other digit to indicate decimal.
14858 @cindex disabling special characters
14859 @kindex u@r{, and disabling special characters}
14860 For GNU stty, giving a value of @code{^-} or @code{undef} disables that
14861 special character.  (This is incompatible with Ultrix @command{stty},
14862 which uses  a value of @samp{u} to disable a special character.  GNU
14863 @command{stty} treats a value @samp{u} like any other, namely to set that
14864 special character to @key{U}.)
14866 @table @samp
14868 @item intr
14869 @opindex intr
14870 Send an interrupt signal.
14872 @item quit
14873 @opindex quit
14874 Send a quit signal.
14876 @item erase
14877 @opindex erase
14878 Erase the last character typed.
14880 @item kill
14881 @opindex kill
14882 Erase the current line.
14884 @item eof
14885 @opindex eof
14886 Send an end of file (terminate the input).
14888 @item eol
14889 @opindex eol
14890 End the line.
14892 @item eol2
14893 @opindex eol2
14894 Alternate character to end the line.  Non-POSIX.
14896 @item discard
14897 @opindex discard
14898 @opindex flush
14899 Alternate character to toggle discarding of output.  Non-POSIX.
14901 @item swtch
14902 @opindex swtch
14903 Switch to a different shell layer.  Non-POSIX.
14905 @item status
14906 @opindex status
14907 Send an info signal.  Not currently supported on Linux.  Non-POSIX.
14909 @item start
14910 @opindex start
14911 Restart the output after stopping it.
14913 @item stop
14914 @opindex stop
14915 Stop the output.
14917 @item susp
14918 @opindex susp
14919 Send a terminal stop signal.
14921 @item dsusp
14922 @opindex dsusp
14923 Send a terminal stop signal after flushing the input.  Non-POSIX.
14925 @item rprnt
14926 @opindex rprnt
14927 Redraw the current line.  Non-POSIX.
14929 @item werase
14930 @opindex werase
14931 Erase the last word typed.  Non-POSIX.
14933 @item lnext
14934 @opindex lnext
14935 Enter the next character typed literally, even if it is a special
14936 character.  Non-POSIX.
14937 @end table
14940 @node Special
14941 @subsection Special settings
14943 @cindex special settings
14945 @table @samp
14946 @item min @var{n}
14947 @opindex min
14948 Set the minimum number of characters that will satisfy a read until
14949 the time value has expired, when @option{-icanon} is set.
14951 @item time @var{n}
14952 @opindex time
14953 Set the number of tenths of a second before reads time out if the minimum
14954 number of characters have not been read, when @option{-icanon} is set.
14956 @item ispeed @var{n}
14957 @opindex ispeed
14958 Set the input speed to @var{n}.
14960 @item ospeed @var{n}
14961 @opindex ospeed
14962 Set the output speed to @var{n}.
14964 @item rows @var{n}
14965 @opindex rows
14966 Tell the tty kernel driver that the terminal has @var{n} rows.
14967 Non-POSIX.
14969 @item cols @var{n}
14970 @itemx columns @var{n}
14971 @opindex cols
14972 @opindex columns
14973 Tell the kernel that the terminal has @var{n} columns.  Non-POSIX.
14975 @item drain
14976 @opindex drain
14977 @cindex nonblocking @command{stty} setting
14978 Apply settings after first waiting for pending output to be transmitted.
14979 This is enabled by default for GNU @command{stty}.
14980 It is useful to disable this option
14981 in cases where the system may be in a state where serial transmission
14982 is not possible.
14983 For example, if the system has received the @samp{DC3} character
14984 with @code{ixon} (software flow control) enabled, then @command{stty} would
14985 block without @code{-drain} being specified.
14986 May be negated. Non-POSIX.
14988 @item size
14989 @opindex size
14990 @vindex LINES
14991 @vindex COLUMNS
14992 Print the number of rows and columns that the kernel thinks the
14993 terminal has.  (Systems that don't support rows and columns in the kernel
14994 typically use the environment variables @env{LINES} and @env{COLUMNS}
14995 instead; however, GNU @command{stty} does not know anything about them.)
14996 Non-POSIX.
14998 @item line @var{n}
14999 @opindex line
15000 Use line discipline @var{n}.  Non-POSIX.
15002 @item speed
15003 @opindex speed
15004 Print the terminal speed.
15006 @item @var{n}
15007 @cindex baud rate, setting
15008 Set the input and output speeds to @var{n}.  @var{n} can be one of: 0
15009 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200
15010 38400 @code{exta} @code{extb}.  @code{exta} is the same as 19200;
15011 @code{extb} is the same as 38400.  Many systems, including GNU/Linux,
15012 support higher speeds.  The @command{stty} command includes support
15013 for speeds of
15014 57600,
15015 115200,
15016 230400,
15017 460800,
15018 500000,
15019 576000,
15020 921600,
15021 1000000,
15022 1152000,
15023 1500000,
15024 2000000,
15025 2500000,
15026 3000000,
15027 3500000,
15029 4000000 where the system supports these.
15030 0 hangs up the line if @option{-clocal} is set.
15031 @end table
15034 @node printenv invocation
15035 @section @command{printenv}: Print all or some environment variables
15037 @pindex printenv
15038 @cindex printing all or some environment variables
15039 @cindex environment variables, printing
15041 @command{printenv} prints environment variable values.  Synopsis:
15043 @example
15044 printenv [@var{option}] [@var{variable}]@dots{}
15045 @end example
15047 If no @var{variable}s are specified, @command{printenv} prints the value of
15048 every environment variable.  Otherwise, it prints the value of each
15049 @var{variable} that is set, and nothing for those that are not set.
15051 The program accepts the following option.  Also see @ref{Common options}.
15053 @table @samp
15055 @optNull
15057 @end table
15059 @cindex exit status of @command{printenv}
15060 Exit status:
15062 @display
15063 0 if all variables specified were found
15064 1 if at least one specified variable was not found
15065 2 if a write error occurred
15066 @end display
15069 @node tty invocation
15070 @section @command{tty}: Print file name of terminal on standard input
15072 @pindex tty
15073 @cindex print terminal file name
15074 @cindex terminal file name, printing
15076 @command{tty} prints the file name of the terminal connected to its standard
15077 input.  It prints @samp{not a tty} if standard input is not a terminal.
15078 Synopsis:
15080 @example
15081 tty [@var{option}]@dots{}
15082 @end example
15084 The program accepts the following option.  Also see @ref{Common options}.
15086 @table @samp
15088 @item -s
15089 @itemx --silent
15090 @itemx --quiet
15091 @opindex -s
15092 @opindex --silent
15093 @opindex --quiet
15094 Print nothing; only return an exit status.
15096 @end table
15098 @cindex exit status of @command{tty}
15099 Exit status:
15101 @display
15102 0 if standard input is a terminal
15103 1 if standard input is a non-terminal file
15104 2 if given incorrect arguments
15105 3 if a write error occurs
15106 4 if standard input is closed or its type cannot be determined
15107 @end display
15110 @node User information
15111 @chapter User information
15113 @cindex user information, commands for
15114 @cindex commands for printing user information
15116 This section describes commands that print user-related information:
15117 logins, groups, and so forth.
15119 @menu
15120 * id invocation::               Print user identity.
15121 * logname invocation::          Print current login name.
15122 * whoami invocation::           Print effective user ID.
15123 * groups invocation::           Print group names a user is in.
15124 * users invocation::            Print login names of users currently logged in.
15125 * who invocation::              Print who is currently logged in.
15126 @end menu
15129 @node id invocation
15130 @section @command{id}: Print user identity
15132 @pindex id
15133 @cindex real user and group IDs, printing
15134 @cindex effective user and group IDs, printing
15135 @cindex printing real and effective user and group IDs
15137 @command{id} prints information about the given user, or the process
15138 running it if no user is specified.  Synopsis:
15140 @example
15141 id [@var{option}]@dots{} [@var{user}]
15142 @end example
15144 @var{user} can be either a user ID or a name, with name look-up
15145 taking precedence unless the ID is specified with a leading @samp{+}.
15146 @xref{Disambiguating names and IDs}.
15148 @vindex POSIXLY_CORRECT
15149 By default, it prints the real user ID, real group ID, effective user ID
15150 if different from the real user ID, effective group ID if different from
15151 the real group ID, and supplemental group IDs.
15152 In addition, if SELinux
15153 is enabled and the @env{POSIXLY_CORRECT} environment variable is not set,
15154 then print @samp{context=@var{c}}, where @var{c} is the security context.
15156 Each of these numeric values is preceded by an identifying string and
15157 followed by the corresponding user or group name in parentheses.
15159 The options cause @command{id} to print only part of the above information.
15160 Also see @ref{Common options}.
15162 @table @samp
15163 @item -g
15164 @itemx --group
15165 @opindex -g
15166 @opindex --group
15167 Print only the group ID.
15169 @item -G
15170 @itemx --groups
15171 @opindex -G
15172 @opindex --groups
15173 Print only the group ID and the supplementary groups.
15175 @item -n
15176 @itemx --name
15177 @opindex -n
15178 @opindex --name
15179 Print the user or group name instead of the ID number.  Requires
15180 @option{-u}, @option{-g}, or @option{-G}.
15182 @item -r
15183 @itemx --real
15184 @opindex -r
15185 @opindex --real
15186 Print the real, instead of effective, user or group ID@.  Requires
15187 @option{-u}, @option{-g}, or @option{-G}.
15189 @item -u
15190 @itemx --user
15191 @opindex -u
15192 @opindex --user
15193 Print only the user ID.
15195 @item -Z
15196 @itemx --context
15197 @opindex -Z
15198 @opindex --context
15199 @cindex SELinux
15200 @cindex security context
15201 Print only the security context of the process, which is generally
15202 the user's security context inherited from the parent process.
15203 If neither SELinux or SMACK is enabled then print a warning and
15204 set the exit status to 1.
15206 @item -z
15207 @itemx --zero
15208 @opindex -z
15209 @opindex --zero
15210 Delimit output items with NUL characters.
15211 This option is not permitted when using the default format.
15213 Example:
15214 @example
15215 $ id -Gn --zero
15216 users <NUL> devs <NUL>
15217 @end example
15219 @end table
15221 @macro primaryAndSupplementaryGroups{cmd,arg}
15222 Primary and supplementary groups for a process are normally inherited
15223 from its parent and are usually unchanged since login.  This means
15224 that if you change the group database after logging in, @command{\cmd\}
15225 will not reflect your changes within your existing login session.
15226 Running @command{\cmd\} with a \arg\ causes the user and group
15227 database to be consulted afresh, and so will give a different result.
15228 @end macro
15229 @primaryAndSupplementaryGroups{id,user argument}
15231 @exitstatus
15233 @node logname invocation
15234 @section @command{logname}: Print current login name
15236 @pindex logname
15237 @cindex printing user's login name
15238 @cindex login name, printing
15239 @cindex user name, printing
15241 @flindex utmp
15242 @command{logname} prints the calling user's name, as found in a
15243 system-maintained file (often @file{/var/run/utmp} or
15244 @file{/etc/utmp}), and exits with a status of 0.  If there is no entry
15245 for the calling process, @command{logname} prints
15246 an error message and exits with a status of 1.
15248 The only options are @option{--help} and @option{--version}.  @xref{Common
15249 options}.
15251 @exitstatus
15254 @node whoami invocation
15255 @section @command{whoami}: Print effective user ID
15257 @pindex whoami
15258 @cindex effective user ID, printing
15259 @cindex printing the effective user ID
15261 @command{whoami} prints the user name associated with the current
15262 effective user ID@.  It is equivalent to the command @samp{id -un}.
15264 The only options are @option{--help} and @option{--version}.  @xref{Common
15265 options}.
15267 @exitstatus
15270 @node groups invocation
15271 @section @command{groups}: Print group names a user is in
15273 @pindex groups
15274 @cindex printing groups a user is in
15275 @cindex supplementary groups, printing
15277 @command{groups} prints the names of the primary and any supplementary
15278 groups for each given @var{username}, or the current process if no names
15279 are given.  If more than one name is given, the name of each user is
15280 printed before
15281 the list of that user's groups and the user name is separated from the
15282 group list by a colon.  Synopsis:
15284 @example
15285 groups [@var{username}]@dots{}
15286 @end example
15288 The group lists are equivalent to the output of the command @samp{id -Gn}.
15290 The only options are @option{--help} and @option{--version}.  @xref{Common
15291 options}.
15293 @primaryAndSupplementaryGroups{groups,list of users}
15295 @exitstatus
15297 @node users invocation
15298 @section @command{users}: Print login names of users currently logged in
15300 @pindex users
15301 @cindex printing current usernames
15302 @cindex usernames, printing current
15304 @cindex login sessions, printing users with
15305 @command{users} prints on a single line a blank-separated list of user
15306 names of users currently logged in to the current host.  Each user name
15307 corresponds to a login session, so if a user has more than one login
15308 session, that user's name will appear the same number of times in the
15309 output.  Synopsis:
15311 @example
15312 users [@var{file}]
15313 @end example
15315 @flindex utmp
15316 @flindex wtmp
15317 With no @var{file} argument, @command{users} extracts its information from
15318 a system-maintained file (often @file{/var/run/utmp} or
15319 @file{/etc/utmp}).  If a file argument is given, @command{users} uses
15320 that file instead.  A common choice is @file{/var/log/wtmp}.
15322 The only options are @option{--help} and @option{--version}.  @xref{Common
15323 options}.
15325 The @command{users} command is installed only on platforms with the
15326 POSIX @code{<utmpx.h>} include file or equivalent, so portable scripts
15327 should not rely on its existence on non-POSIX platforms.
15329 @exitstatus
15332 @node who invocation
15333 @section @command{who}: Print who is currently logged in
15335 @pindex who
15336 @cindex printing current user information
15337 @cindex information, about current users
15339 @command{who} prints information about users who are currently logged on.
15340 Synopsis:
15342 @example
15343 @command{who} [@var{option}] [@var{file}] [am i]
15344 @end example
15346 @cindex terminal lines, currently used
15347 @cindex login time
15348 @cindex remote hostname
15349 If given no non-option arguments, @command{who} prints the following
15350 information for each user currently logged on: login name, terminal
15351 line, login time, and remote hostname or X display.
15353 @flindex utmp
15354 @flindex wtmp
15355 If given one non-option argument, @command{who} uses that instead of
15356 a default system-maintained file (often @file{/var/run/utmp} or
15357 @file{/etc/utmp}) as the name of the file containing the record of
15358 users logged on.  @file{/var/log/wtmp} is commonly given as an argument
15359 to @command{who} to look at who has previously logged on.
15361 @opindex am i
15362 @opindex who am i
15363 If given two non-option arguments, @command{who} prints only the entry
15364 for the user running it (determined from its standard input), preceded
15365 by the hostname.  Traditionally, the two arguments given are @samp{am
15366 i}, as in @samp{who am i}.
15368 @vindex TZ
15369 Timestamps are listed according to the time zone rules specified by
15370 the @env{TZ} environment variable, or by the system default rules if
15371 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
15372 with @env{TZ}, libc, The GNU C Library Reference Manual}.
15374 The program accepts the following options.  Also see @ref{Common options}.
15376 @table @samp
15378 @item -a
15379 @itemx --all
15380 @opindex -a
15381 @opindex --all
15382 Same as @samp{-b -d --login -p -r -t -T -u}.
15384 @item -b
15385 @itemx --boot
15386 @opindex -b
15387 @opindex --boot
15388 Print the date and time of last system boot.
15390 @item -d
15391 @itemx --dead
15392 @opindex -d
15393 @opindex --dead
15394 Print information corresponding to dead processes.
15396 @item -H
15397 @itemx --heading
15398 @opindex -H
15399 @opindex --heading
15400 Print a line of column headings.
15402 @item -l
15403 @itemx --login
15404 @opindex -l
15405 @opindex --login
15406 List only the entries that correspond to processes via which the
15407 system is waiting for a user to login.  The user name is always @samp{LOGIN}.
15409 @item --lookup
15410 @opindex --lookup
15411 Attempt to canonicalize hostnames found in utmp through a DNS lookup.  This
15412 is not the default because it can cause significant delays on systems with
15413 automatic dial-up internet access.
15415 @item -m
15416 @opindex -m
15417 Same as @samp{who am i}.
15419 @item -p
15420 @itemx --process
15421 @opindex -p
15422 @opindex --process
15423 List active processes spawned by init.
15425 @item -q
15426 @itemx --count
15427 @opindex -q
15428 @opindex --count
15429 Print only the login names and the number of users logged on.
15430 Overrides all other options.
15432 @item -r
15433 @itemx --runlevel
15434 @opindex -r
15435 @opindex --runlevel
15436 Print the current (and maybe previous) run-level of the init process.
15438 @item -s
15439 @opindex -s
15440 Ignored; for compatibility with other versions of @command{who}.
15442 @item -t
15443 @itemx --time
15444 @opindex -t
15445 @opindex --time
15446 Print last system clock change.
15448 @item -u
15449 @opindex -u
15450 @cindex idle time
15451 After the login time, print the number of hours and minutes that the
15452 user has been idle.  @samp{.} means the user was active in the last minute.
15453 @samp{old} means the user has been idle for more than 24 hours.
15455 @item -w
15456 @itemx -T
15457 @itemx --mesg
15458 @itemx --message
15459 @itemx --writable
15460 @opindex -w
15461 @opindex -T
15462 @opindex --mesg
15463 @opindex --message
15464 @opindex --writable
15465 @cindex message status
15466 @pindex write@r{, allowed}
15467 After each login name print a character indicating the user's message status:
15469 @display
15470 @samp{+} allowing @code{write} messages
15471 @samp{-} disallowing @code{write} messages
15472 @samp{?} cannot find terminal device
15473 @end display
15475 @end table
15477 The @command{who} command is installed only on platforms with the
15478 POSIX @code{<utmpx.h>} include file or equivalent, so portable scripts
15479 should not rely on its existence on non-POSIX platforms.
15481 @exitstatus
15484 @node System context
15485 @chapter System context
15487 @cindex system context
15488 @cindex context, system
15489 @cindex commands for system context
15491 This section describes commands that print or change system-wide
15492 information.
15494 @menu
15495 * date invocation::             Print or set system date and time.
15496 * arch invocation::             Print machine hardware name.
15497 * nproc invocation::            Print the number of processors.
15498 * uname invocation::            Print system information.
15499 * hostname invocation::         Print or set system name.
15500 * hostid invocation::           Print numeric host identifier.
15501 * uptime invocation::           Print system uptime and load.
15502 @end menu
15504 @node date invocation
15505 @section @command{date}: Print or set system date and time
15507 @pindex date
15508 @cindex time, printing or setting
15509 @cindex printing the current time
15511 Synopses:
15513 @example
15514 date [@var{option}]@dots{} [+@var{format}]
15515 date [-u|--utc|--universal] @c this avoids a newline in the output
15516 [ MMDDhhmm[[CC]YY][.ss] ]
15517 @end example
15519 @vindex LC_TIME
15520 Invoking @command{date} with no @var{format} argument is equivalent to invoking
15521 it with a default format that depends on the @env{LC_TIME} locale category.
15522 In the default C locale, this format is @samp{'+%a %b %e %H:%M:%S %Z %Y'},
15523 so the output looks like @samp{Thu Mar @ 3 13:47:51 PST 2005}.
15525 @vindex TZ
15526 Normally, @command{date} uses the time zone rules indicated by the
15527 @env{TZ} environment variable, or the system default rules if @env{TZ}
15528 is not set.  @xref{TZ Variable,, Specifying the Time Zone with
15529 @env{TZ}, libc, The GNU C Library Reference Manual}.
15531 @findex strftime @r{and @command{date}}
15532 @cindex time formats
15533 @cindex formatting times
15534 If given an argument that starts with a @samp{+}, @command{date} prints the
15535 current date and time (or the date and time specified by the
15536 @option{--date} option, see below) in the format defined by that argument,
15537 which is similar to that of the @code{strftime} function.  Except for
15538 conversion specifiers, which start with @samp{%}, characters in the
15539 format string are printed unchanged.  The conversion specifiers are
15540 described below.
15542 @exitstatus
15544 @menu
15545 * Time conversion specifiers::     %[HIklMNpPrRsSTXzZ]
15546 * Date conversion specifiers::     %[aAbBcCdDeFgGhjmuUVwWxyY]
15547 * Literal conversion specifiers::  %[%nt]
15548 * Padding and other flags::        Pad with zeros, spaces, etc.
15549 * Setting the time::               Changing the system clock.
15550 * Options for date::               Instead of the current time.
15551 @detailmenu
15552 * Date input formats::             Specifying date strings.
15553 @end detailmenu
15554 * Examples of date::               Examples.
15555 @end menu
15557 @node Time conversion specifiers
15558 @subsection Time conversion specifiers
15560 @cindex time conversion specifiers
15561 @cindex conversion specifiers, time
15563 @command{date} conversion specifiers related to times.
15565 @table @samp
15566 @item %H
15567 hour (@samp{00}@dots{}@samp{23})
15568 @item %I
15569 hour (@samp{01}@dots{}@samp{12})
15570 @item %k
15571 hour, space padded (@samp{ 0}@dots{}@samp{23}); equivalent to @samp{%_H}@.
15572 This is a GNU extension.
15573 @item %l
15574 hour, space padded (@samp{ 1}@dots{}@samp{12}); equivalent to @samp{%_I}@.
15575 This is a GNU extension.
15576 @item %M
15577 minute (@samp{00}@dots{}@samp{59})
15578 @item %N
15579 nanoseconds (@samp{000000000}@dots{}@samp{999999999}).
15580 This is a GNU extension.
15581 @item %p
15582 locale's equivalent of either @samp{AM} or @samp{PM};
15583 blank in many locales.
15584 Noon is treated as @samp{PM} and midnight as @samp{AM}.
15585 @item %P
15586 like @samp{%p}, except lower case.
15587 This is a GNU extension.
15588 @item %r
15589 locale's 12-hour clock time (e.g., @samp{11:11:04 PM})
15590 @item %R
15591 24-hour hour and minute.  Same as @samp{%H:%M}.
15592 @item %s
15593 @cindex epoch, seconds since
15594 @cindex seconds since the epoch
15595 @cindex beginning of time
15596 @cindex leap seconds
15597 seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC@.
15598 Leap seconds are not counted unless leap second support is available.
15599 @xref{%s-examples}, for examples.
15600 This is a GNU extension.
15601 @item %S
15602 @cindex leap seconds
15603 second (@samp{00}@dots{}@samp{60}).
15604 This may be @samp{60} if leap seconds are supported.
15605 @item %T
15606 24-hour hour, minute, and second.  Same as @samp{%H:%M:%S}.
15607 @item %X
15608 locale's time representation (e.g., @samp{23:13:48})
15609 @item %z
15610 Four-digit numeric time zone, e.g., @samp{-0600} or @samp{+0530}, or
15611 @samp{-0000} if no
15612 time zone is determinable.  This value reflects the numeric time zone
15613 appropriate for the current time, using the time zone rules specified
15614 by the @env{TZ} environment variable.  A time zone is not determinable if
15615 its numeric offset is zero and its abbreviation begins with @samp{-}.
15616 The time (and optionally, the time zone rules) can be overridden
15617 by the @option{--date} option.
15618 @item %:z
15619 Numeric time zone with @samp{:}, e.g., @samp{-06:00} or
15620 @samp{+05:30}), or @samp{-00:00} if no time zone is determinable.
15621 This is a GNU extension.
15622 @item %::z
15623 Numeric time zone to the nearest second with @samp{:} (e.g.,
15624 @samp{-06:00:00} or @samp{+05:30:00}), or @samp{-00:00:00} if no time zone is
15625 determinable.
15626 This is a GNU extension.
15627 @item %:::z
15628 Numeric time zone with @samp{:} using the minimum necessary precision
15629 (e.g., @samp{-06}, @samp{+05:30}, or @samp{-04:56:02}), or @samp{-00} if
15630 no time zone is determinable.
15631 This is a GNU extension.
15632 @item %Z
15633 alphabetic time zone abbreviation (e.g., @samp{EDT}), or nothing if no
15634 time zone is determinable.  See @samp{%z} for how it is determined.
15635 @end table
15638 @node Date conversion specifiers
15639 @subsection Date conversion specifiers
15641 @cindex date conversion specifiers
15642 @cindex conversion specifiers, date
15644 @command{date} conversion specifiers related to dates.
15646 @table @samp
15647 @item %a
15648 locale's abbreviated weekday name (e.g., @samp{Sun})
15649 @item %A
15650 locale's full weekday name, variable length (e.g., @samp{Sunday})
15651 @item %b
15652 locale's abbreviated month name (e.g., @samp{Jan})
15653 @item %B
15654 locale's full month name, variable length (e.g., @samp{January})
15655 @item %c
15656 locale's date and time (e.g., @samp{Thu Mar @ 3 23:05:25 2005})
15657 @item %C
15658 century.  This is like @samp{%Y}, except the last two digits are omitted.
15659 For example, it is @samp{20} if @samp{%Y} is @samp{2000},
15660 and is @samp{-0} if @samp{%Y} is @samp{-001}.
15661 It is normally at least two characters, but it may be more.
15662 @item %d
15663 day of month (e.g., @samp{01})
15664 @item %D
15665 date; same as @samp{%m/%d/%y}
15666 @item %e
15667 day of month, space padded; same as @samp{%_d}
15668 @item %F
15669 full date in ISO 8601 format; same as @samp{%Y-%m-%d}.
15670 This is a good choice for a date format, as it is standard and
15671 is easy to sort in the usual case where years are in the range
15672 0000@dots{}9999.
15673 @item %g
15674 year corresponding to the ISO week number, but without the century
15675 (range @samp{00} through @samp{99}).  This has the same format and value
15676 as @samp{%y}, except that if the ISO week number (see
15677 @samp{%V}) belongs
15678 to the previous or next year, that year is used instead.
15679 @item %G
15680 year corresponding to the ISO week number.  This has the
15681 same format and value as @samp{%Y}, except that if the ISO
15682 week number (see
15683 @samp{%V}) belongs to the previous or next year, that year is used
15684 instead.
15685 It is normally useful only if @samp{%V} is also used;
15686 for example, the format @samp{%G-%m-%d} is probably a mistake,
15687 since it combines the ISO week number year with the conventional month and day.
15688 @item %h
15689 same as @samp{%b}
15690 @item %j
15691 day of year (@samp{001}@dots{}@samp{366})
15692 @item %m
15693 month (@samp{01}@dots{}@samp{12})
15694 @item %q
15695 quarter of year (@samp{1}@dots{}@samp{4})
15696 @item %u
15697 day of week (@samp{1}@dots{}@samp{7}) with @samp{1} corresponding to Monday
15698 @item %U
15699 week number of year, with Sunday as the first day of the week
15700 (@samp{00}@dots{}@samp{53}).
15701 Days in a new year preceding the first Sunday are in week zero.
15702 @item %V
15703 ISO week number, that is, the
15704 week number of year, with Monday as the first day of the week
15705 (@samp{01}@dots{}@samp{53}).
15706 If the week containing January 1 has four or more days in
15707 the new year, then it is considered week 1; otherwise, it is week 53 of
15708 the previous year, and the next week is week 1.  (See the ISO 8601
15709 standard.)
15710 @item %w
15711 day of week (@samp{0}@dots{}@samp{6}) with 0 corresponding to Sunday
15712 @item %W
15713 week number of year, with Monday as first day of week
15714 (@samp{00}@dots{}@samp{53}).
15715 Days in a new year preceding the first Monday are in week zero.
15716 @item %x
15717 locale's date representation (e.g., @samp{12/31/99})
15718 @item %y
15719 last two digits of year (@samp{00}@dots{}@samp{99})
15720 @item %Y
15721 year.  This is normally at least four characters, but it may be more.
15722 Year @samp{0000} precedes year @samp{0001}, and year @samp{-001}
15723 precedes year @samp{0000}.
15724 @end table
15727 @node Literal conversion specifiers
15728 @subsection Literal conversion specifiers
15730 @cindex literal conversion specifiers
15731 @cindex conversion specifiers, literal
15733 @command{date} conversion specifiers that produce literal strings.
15735 @table @samp
15736 @item %%
15737 a literal %
15738 @item %n
15739 a newline
15740 @item %t
15741 a horizontal tab
15742 @end table
15745 @node Padding and other flags
15746 @subsection Padding and other flags
15748 @cindex numeric field padding
15749 @cindex padding of numeric fields
15750 @cindex fields, padding numeric
15752 Unless otherwise specified, @command{date} normally pads numeric fields
15753 with zeros, so that, for
15754 example, numeric months are always output as two digits.
15755 Seconds since the epoch are not padded, though,
15756 since there is no natural width for them.
15758 As a GNU extension, @command{date} recognizes any of the
15759 following optional flags after the @samp{%}:
15761 @table @samp
15762 @item -
15763 (hyphen) Do not pad the field; useful if the output is intended for
15764 human consumption.
15765 @item _
15766 (underscore) Pad with spaces; useful if you need a fixed
15767 number of characters in the output, but zeros are too distracting.
15768 @item 0
15769 (zero) Pad with zeros even if the conversion specifier
15770 would normally pad with spaces.
15771 @item ^
15772 Use upper case characters if possible.
15773 @item #
15774 Use opposite case characters if possible.
15775 A field that is normally upper case becomes lower case, and vice versa.
15776 @end table
15778 @noindent
15779 Here are some examples of padding:
15781 @example
15782 date +%d/%m -d "Feb 1"
15783 @result{} 01/02
15784 date +%-d/%-m -d "Feb 1"
15785 @result{} 1/2
15786 date +%_d/%_m -d "Feb 1"
15787 @result{}  1/ 2
15788 @end example
15790 As a GNU extension, you can specify the field width
15791 (after any flag, if present) as a decimal number.  If the natural size of the
15792 output of the field has less than the specified number of characters,
15793 the result is written right adjusted and padded to the given
15794 size.  For example, @samp{%9B} prints the right adjusted month name in
15795 a field of width 9.
15797 An optional modifier can follow the optional flag and width
15798 specification.  The modifiers are:
15800 @table @samp
15801 @item E
15802 Use the locale's alternate representation for date and time.  This
15803 modifier applies to the @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X},
15804 @samp{%y} and @samp{%Y} conversion specifiers.  In a Japanese locale, for
15805 example, @samp{%Ex} might yield a date format based on the Japanese
15806 Emperors' reigns.
15808 @item O
15809 Use the locale's alternate numeric symbols for numbers.  This modifier
15810 applies only to numeric conversion specifiers.
15811 @end table
15813 If the format supports the modifier but no alternate representation
15814 is available, it is ignored.
15817 @node Setting the time
15818 @subsection Setting the time
15820 @cindex setting the time
15821 @cindex time setting
15822 @cindex appropriate privileges
15824 If given an argument that does not start with @samp{+}, @command{date} sets
15825 the system clock to the date and time specified by that argument (as
15826 described below).  You must have appropriate privileges to set the
15827 system clock.  Note for changes to persist across a reboot, the
15828 hardware clock may need to be updated from the system clock, which
15829 might not happen automatically on your system.
15831 The argument must consist entirely of digits, which have the following
15832 meaning:
15834 @table @samp
15835 @item MM
15836 month
15837 @item DD
15838 day within month
15839 @item hh
15840 hour
15841 @item mm
15842 minute
15843 @item CC
15844 first two digits of year (optional)
15845 @item YY
15846 last two digits of year (optional)
15847 @item ss
15848 second (optional)
15849 @end table
15851 Note, the @option{--date} and @option{--set} options may not be used with an
15852 argument in the above format.  The @option{--universal} option may be used
15853 with such an argument to indicate that the specified date and time are
15854 relative to Universal Time rather than to the local time zone.
15857 @node Options for date
15858 @subsection Options for @command{date}
15860 @cindex @command{date} options
15861 @cindex options for @command{date}
15863 The program accepts the following options.  Also see @ref{Common options}.
15865 @table @samp
15867 @item -d @var{datestr}
15868 @itemx --date=@var{datestr}
15869 @opindex -d
15870 @opindex --date
15871 @cindex parsing date strings
15872 @cindex date strings, parsing
15873 @cindex arbitrary date strings, parsing
15874 @opindex yesterday
15875 @opindex tomorrow
15876 @opindex next @var{day}
15877 @opindex last @var{day}
15878 Display the date and time specified in @var{datestr} instead of the
15879 current date and time.  @var{datestr} can be in almost any common
15880 format.  It can contain month names, time zones, @samp{am} and @samp{pm},
15881 @samp{yesterday}, etc.  For example, @option{--date="2004-02-27
15882 14:19:13.489392193 +0530"} specifies the instant of time that is
15883 489,392,193 nanoseconds after February 27, 2004 at 2:19:13 PM in a
15884 time zone that is 5 hours and 30 minutes east of UTC.@*
15885 Note: input currently must be in locale independent format.  E.g., the
15886 LC_TIME=C below is needed to print back the correct date in many locales:
15887 @example
15888 date -d "$(LC_TIME=C date)"
15889 @end example
15890 @xref{Date input formats}.
15892 @item --debug
15893 @opindex --debug
15894 @cindex debugging date strings
15895 @cindex date strings, debugging
15896 @cindex arbitrary date strings, debugging
15897 Annotate the parsed date, display the effective time zone, and warn about
15898 potential misuse.
15900 @item -f @var{datefile}
15901 @itemx --file=@var{datefile}
15902 @opindex -f
15903 @opindex --file
15904 Parse each line in @var{datefile} as with @option{-d} and display the
15905 resulting date and time.  If @var{datefile} is @samp{-}, use standard
15906 input.  This is useful when you have many dates to process, because the
15907 system overhead of starting up the @command{date} executable many times can
15908 be considerable.
15910 @item -I[@var{timespec}]
15911 @itemx --iso-8601[=@var{timespec}]
15912 @opindex -I[@var{timespec}]
15913 @opindex --iso-8601[=@var{timespec}]
15914 Display the date using an ISO 8601 format, @samp{%Y-%m-%d}.
15916 The argument @var{timespec} specifies the number of additional
15917 terms of the time to include.  It can be one of the following:
15918 @table @samp
15919 @item auto
15920 Print just the date.  This is the default if @var{timespec} is omitted.
15922 @item hours
15923 Append the hour of the day to the date.
15925 @item minutes
15926 Append the hours and minutes.
15928 @item seconds
15929 Append the hours, minutes and seconds.
15931 @item ns
15932 Append the hours, minutes, seconds and nanoseconds.
15933 @end table
15935 If showing any time terms, then include the time zone using the format
15936 @samp{%:z}.
15937 @macro dateParseNote
15938 This format is always suitable as input
15939 for the @option{--date} (@option{-d}) and @option{--file}
15940 (@option{-f}) options, regardless of the current locale.
15941 @end macro
15942 @dateParseNote
15944 @item -r @var{file}
15945 @itemx --reference=@var{file}
15946 @opindex -r
15947 @opindex --reference
15948 Display the date and time of the last modification of @var{file},
15949 instead of the current date and time.
15951 @item -R
15952 @itemx --rfc-email
15953 @opindex -R
15954 @opindex --rfc-email
15955 Display the date and time using the format @samp{%a, %d %b %Y %H:%M:%S
15956 %z}, evaluated in the C locale so abbreviations are always in English.
15957 For example:
15959 @example
15960 Fri, 09 Sep 2005 13:51:39 -0700
15961 @end example
15963 @opindex --rfc-822
15964 @opindex --rfc-2822
15965 This format conforms to Internet RFCs
15966 @uref{https://tools.ietf.org/search/rfc5322, 5322},
15967 @uref{https://tools.ietf.org/search/rfc2822, 822} and
15968 @uref{https://tools.ietf.org/search/rfc822, 822}, the
15969 current and previous standards for Internet email.
15970 For compatibility with older versions of @command{date},
15971 @option{--rfc-2822} and @option{--rfc-822} are aliases for
15972 @option{--rfc-email}.
15974 @item --rfc-3339=@var{timespec}
15975 @opindex --rfc-3339=@var{timespec}
15976 Display the date using a format specified by
15977 @uref{https://tools.ietf.org/search/rfc3339, Internet
15978 RFC 3339}.  This is like @option{--iso-8601}, except that a space rather
15979 than a @samp{T} separates dates from times.
15980 @dateParseNote
15982 The argument @var{timespec} specifies how much of the time to include.
15983 It can be one of the following:
15985 @table @samp
15986 @item date
15987 Print just the full-date, e.g., @samp{2005-09-14}.
15988 This is equivalent to the format @samp{%Y-%m-%d}.
15990 @item seconds
15991 Print the full-date and full-time separated by a space, e.g.,
15992 @samp{2005-09-14 00:56:06+05:30}.  The output ends with a numeric
15993 time-offset; here the @samp{+05:30} means that local time is five
15994 hours and thirty minutes east of UTC@.  This is equivalent to
15995 the format @samp{%Y-%m-%d %H:%M:%S%:z}.
15997 @item ns
15998 Like @samp{seconds}, but also print nanoseconds, e.g.,
15999 @samp{2005-09-14 00:56:06.998458565+05:30}.
16000 This is equivalent to the format @samp{%Y-%m-%d %H:%M:%S.%N%:z}.
16002 @end table
16004 @item -s @var{datestr}
16005 @itemx --set=@var{datestr}
16006 @opindex -s
16007 @opindex --set
16008 Set the date and time to @var{datestr}.  See @option{-d} above.
16009 See also @ref{Setting the time}.
16011 @item -u
16012 @itemx --utc
16013 @itemx --universal
16014 @opindex -u
16015 @opindex --utc
16016 @opindex --universal
16017 @cindex Coordinated Universal Time
16018 @cindex UTC
16019 @cindex Greenwich Mean Time
16020 @cindex GMT
16021 @cindex leap seconds
16022 @vindex TZ
16023 @cindex Universal Time
16024 Use Universal Time by operating as if the
16025 @env{TZ} environment variable were set to the string @samp{UTC0}.
16026 UTC stands for Coordinated Universal Time, established in 1960.
16027 Universal Time is often called ``Greenwich Mean Time'' (GMT) for
16028 historical reasons.
16029 Typically, systems ignore leap seconds and thus implement an
16030 approximation to UTC rather than true UTC.
16031 @end table
16034 @node Examples of date
16035 @subsection Examples of @command{date}
16037 @cindex examples of @command{date}
16039 Here are a few examples.  Also see the documentation for the @option{-d}
16040 option in the previous section.
16042 @itemize @bullet
16044 @item
16045 To print the date of the day before yesterday:
16047 @example
16048 date --date='2 days ago'
16049 @end example
16051 @item
16052 To print the date of the day three months and one day hence:
16054 @example
16055 date --date='3 months 1 day'
16056 @end example
16058 @item
16059 To print the day of year of Christmas in the current year:
16061 @example
16062 date --date='25 Dec' +%j
16063 @end example
16065 @item
16066 To print the current full month name and the day of the month:
16068 @example
16069 date '+%B %d'
16070 @end example
16072 But this may not be what you want because for the first nine days of
16073 the month, the @samp{%d} expands to a zero-padded two-digit field,
16074 for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}.
16076 @item
16077 To print a date without the leading zero for one-digit days
16078 of the month, you can use the (GNU extension)
16079 @samp{-} flag to suppress
16080 the padding altogether:
16082 @example
16083 date -d 1may '+%B %-d'
16084 @end example
16086 @item
16087 To print the current date and time in the format required by many
16088 non-GNU versions of @command{date} when setting the system clock:
16090 @example
16091 date +%m%d%H%M%Y.%S
16092 @end example
16094 @item
16095 To set the system clock forward by two minutes:
16097 @example
16098 date --set='+2 minutes'
16099 @end example
16101 @item
16102 To print the date in Internet RFC 5322 format,
16103 use @samp{date --rfc-email}.  Here is some example output:
16105 @example
16106 Fri, 09 Sep 2005 13:51:39 -0700
16107 @end example
16109 @anchor{%s-examples}
16110 @item
16111 To convert a date string to the number of seconds since the epoch
16112 (which is 1970-01-01 00:00:00 UTC), use the @option{--date} option with
16113 the @samp{%s} format.  That can be useful in sorting and/or graphing
16114 and/or comparing data by date.  The following command outputs the
16115 number of the seconds since the epoch for the time two minutes after the
16116 epoch:
16118 @example
16119 date --date='1970-01-01 00:02:00 +0000' +%s
16121 @end example
16123 If you do not specify time zone information in the date string,
16124 @command{date} uses your computer's idea of the time zone when
16125 interpreting the string.  For example, if your computer's time zone is
16126 that of Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000
16127 seconds) behind UTC:
16129 @example
16130 # local time zone used
16131 date --date='1970-01-01 00:02:00' +%s
16132 18120
16133 @end example
16135 @item
16136 If you're sorting or graphing dated data, your raw date values may be
16137 represented as seconds since the epoch.  But few people can look at
16138 the date @samp{946684800} and casually note ``Oh, that's the first second
16139 of the year 2000 in Greenwich, England.''
16141 @example
16142 date --date='2000-01-01 UTC' +%s
16143 946684800
16144 @end example
16146 An alternative is to use the @option{--utc} (@option{-u}) option.
16147 Then you may omit @samp{UTC} from the date string.  Although this
16148 produces the same result for @samp{%s} and many other format sequences,
16149 with a time zone offset different from zero, it would give a different
16150 result for zone-dependent formats like @samp{%z}.
16152 @example
16153 date -u --date=2000-01-01 +%s
16154 946684800
16155 @end example
16157 To convert such an unwieldy number of seconds back to
16158 a more readable form, use a command like this:
16160 @smallexample
16161 # local time zone used
16162 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
16163 1999-12-31 19:00:00 -0500
16164 @end smallexample
16166 Or if you do not mind depending on the @samp{@@} feature present since
16167 coreutils 5.3.0, you could shorten this to:
16169 @smallexample
16170 date -d @@946684800 +"%F %T %z"
16171 1999-12-31 19:00:00 -0500
16172 @end smallexample
16174 Often it is better to output UTC-relative date and time:
16176 @smallexample
16177 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
16178 2000-01-01 00:00:00 +0000
16179 @end smallexample
16181 @item
16182 @cindex leap seconds
16183 Typically the seconds count omits leap seconds, but some systems are
16184 exceptions.  Because leap seconds are not predictable, the mapping
16185 between the seconds count and a future timestamp is not reliable on
16186 the atypical systems that include leap seconds in their counts.
16188 Here is how the two kinds of systems handle the leap second at
16189 2012-06-30 23:59:60 UTC:
16191 @example
16192 # Typical systems ignore leap seconds:
16193 date --date='2012-06-30 23:59:59 +0000' +%s
16194 1341100799
16195 date --date='2012-06-30 23:59:60 +0000' +%s
16196 date: invalid date '2012-06-30 23:59:60 +0000'
16197 date --date='2012-07-01 00:00:00 +0000' +%s
16198 1341100800
16199 @end example
16201 @example
16202 # Atypical systems count leap seconds:
16203 date --date='2012-06-30 23:59:59 +0000' +%s
16204 1341100823
16205 date --date='2012-06-30 23:59:60 +0000' +%s
16206 1341100824
16207 date --date='2012-07-01 00:00:00 +0000' +%s
16208 1341100825
16209 @end example
16211 @end itemize
16214 @node arch invocation
16215 @section @command{arch}: Print machine hardware name
16217 @pindex arch
16218 @cindex print machine hardware name
16219 @cindex system information, printing
16221 @command{arch} prints the machine hardware name,
16222 and is equivalent to @samp{uname -m}.
16223 Synopsis:
16225 @example
16226 arch [@var{option}]
16227 @end example
16229 The program accepts the @ref{Common options} only.
16231 @command{arch} is not installed by default, so portable scripts should
16232 not rely on its existence.
16234 @exitstatus
16237 @node nproc invocation
16238 @section @command{nproc}: Print the number of available processors
16240 @pindex nproc
16241 @cindex Print the number of processors
16242 @cindex system information, printing
16244 Print the number of processing units available to the current process,
16245 which may be less than the number of online processors.
16246 If this information is not accessible, then print the number of
16247 processors installed.  If the @env{OMP_NUM_THREADS} or @env{OMP_THREAD_LIMIT}
16248 environment variables are set, then they will determine the minimum
16249 and maximum returned value respectively.  The result is guaranteed to be
16250 greater than zero.  Synopsis:
16252 @example
16253 nproc [@var{option}]
16254 @end example
16256 The program accepts the following options.  Also see @ref{Common options}.
16258 @table @samp
16260 @item --all
16261 @opindex --all
16262 Print the number of installed processors on the system, which may
16263 be greater than the number online or available to the current process.
16264 The @env{OMP_NUM_THREADS} or @env{OMP_THREAD_LIMIT} environment variables
16265 are not honored in this case.
16267 @item --ignore=@var{number}
16268 @opindex --ignore
16269 If possible, exclude this @var{number} of processing units.
16271 @end table
16273 @exitstatus
16276 @node uname invocation
16277 @section @command{uname}: Print system information
16279 @pindex uname
16280 @cindex print system information
16281 @cindex system information, printing
16283 @command{uname} prints information about the machine and operating system
16284 it is run on.  If no options are given, @command{uname} acts as if the
16285 @option{-s} option were given.  Synopsis:
16287 @example
16288 uname [@var{option}]@dots{}
16289 @end example
16291 If multiple options or @option{-a} are given, the selected information is
16292 printed in this order:
16294 @example
16295 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
16296 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
16297 @end example
16299 The information may contain internal spaces, so such output cannot be
16300 parsed reliably.  In the following example, @var{release} is
16301 @samp{2.2.18ss.e820-bda652a #4 SMP Tue Jun 5 11:24:08 PDT 2001}:
16303 @smallexample
16304 uname -a
16305 @result{} Linux dumdum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686@c
16306  unknown unknown GNU/Linux
16307 @end smallexample
16310 The program accepts the following options.  Also see @ref{Common options}.
16312 @table @samp
16314 @item -a
16315 @itemx --all
16316 @opindex -a
16317 @opindex --all
16318 Print all of the below information, except omit the processor type
16319 and the hardware platform name if they are unknown.
16321 @item -i
16322 @itemx --hardware-platform
16323 @opindex -i
16324 @opindex --hardware-platform
16325 @cindex implementation, hardware
16326 @cindex hardware platform
16327 @cindex platform, hardware
16328 Print the hardware platform name
16329 (sometimes called the hardware implementation).
16330 Print @samp{unknown} if this information is not available.
16331 Note this is non-portable (even across GNU/Linux distributions).
16333 @item -m
16334 @itemx --machine
16335 @opindex -m
16336 @opindex --machine
16337 @cindex machine type
16338 @cindex hardware class
16339 @cindex hardware type
16340 Print the machine hardware name (sometimes called the hardware class
16341 or hardware type).
16343 @item -n
16344 @itemx --nodename
16345 @opindex -n
16346 @opindex --nodename
16347 @cindex hostname
16348 @cindex node name
16349 @cindex network node name
16350 Print the network node hostname.
16352 @item -p
16353 @itemx --processor
16354 @opindex -p
16355 @opindex --processor
16356 @cindex host processor type
16357 Print the processor type (sometimes called the instruction set
16358 architecture or ISA).
16359 Print @samp{unknown} if this information is not available.
16360 Note this is non-portable (even across GNU/Linux distributions).
16362 @item -o
16363 @itemx --operating-system
16364 @opindex -o
16365 @opindex --operating-system
16366 @cindex operating system name
16367 Print the name of the operating system.
16369 @item -r
16370 @itemx --kernel-release
16371 @opindex -r
16372 @opindex --kernel-release
16373 @cindex kernel release
16374 @cindex release of kernel
16375 Print the kernel release.
16377 @item -s
16378 @itemx --kernel-name
16379 @opindex -s
16380 @opindex --kernel-name
16381 @cindex kernel name
16382 @cindex name of kernel
16383 Print the kernel name.
16384 POSIX 1003.1-2001 (@pxref{Standards conformance}) calls this
16385 ``the implementation of the operating system'', because the
16386 POSIX specification itself has no notion of ``kernel''.
16387 The kernel name might be the same as the operating system name printed
16388 by the @option{-o} or @option{--operating-system} option, but it might
16389 differ.  Some operating systems (e.g., FreeBSD, HP-UX) have the same
16390 name as their underlying kernels; others (e.g., GNU/Linux, Solaris)
16391 do not.
16393 @item -v
16394 @itemx --kernel-version
16395 @opindex -v
16396 @opindex --kernel-version
16397 @cindex kernel version
16398 @cindex version of kernel
16399 Print the kernel version.
16401 @end table
16403 @exitstatus
16406 @node hostname invocation
16407 @section @command{hostname}: Print or set system name
16409 @pindex hostname
16410 @cindex setting the hostname
16411 @cindex printing the hostname
16412 @cindex system name, printing
16413 @cindex appropriate privileges
16415 With no arguments, @command{hostname} prints the name of the current host
16416 system.  With one argument, it sets the current host name to the
16417 specified string.  You must have appropriate privileges to set the host
16418 name.  Synopsis:
16420 @example
16421 hostname [@var{name}]
16422 @end example
16424 The only options are @option{--help} and @option{--version}.  @xref{Common
16425 options}.
16427 @command{hostname} is not installed by default, and other packages
16428 also supply a @command{hostname} command, so portable scripts should
16429 not rely on its existence or on the exact behavior documented above.
16431 @exitstatus
16434 @node hostid invocation
16435 @section @command{hostid}: Print numeric host identifier
16437 @pindex hostid
16438 @cindex printing the host identifier
16440 @command{hostid} prints the numeric identifier of the current host
16441 in hexadecimal.  This command accepts no arguments.
16442 The only options are @option{--help} and @option{--version}.
16443 @xref{Common options}.
16445 For example, here's what it prints on one system I use:
16447 @example
16448 $ hostid
16449 1bac013d
16450 @end example
16452 On that system, the 32-bit quantity happens to be closely
16453 related to the system's Internet address, but that isn't always
16454 the case.
16456 @command{hostid} is installed only on systems that have the
16457 @code{gethostid} function, so portable scripts should not rely on its
16458 existence.
16460 @exitstatus
16462 @node uptime invocation
16463 @section @command{uptime}: Print system uptime and load
16465 @pindex uptime
16466 @cindex printing the system uptime and load
16468 @command{uptime} prints the current time, the system's uptime, the
16469 number of logged-in users and the current load average.
16471 If an argument is specified, it is used as the file to be read
16472 to discover how many users are logged in.  If no argument is
16473 specified, a system default is used (@command{uptime --help} indicates
16474 the default setting).
16476 The only options are @option{--help} and @option{--version}.
16477 @xref{Common options}.
16479 For example, here's what it prints right now on one system I use:
16481 @example
16482 $ uptime
16483  14:07  up   3:35,  3 users,  load average: 1.39, 1.15, 1.04
16484 @end example
16486 The precise method of calculation of load average varies somewhat
16487 between systems.  Some systems calculate it as the average number of
16488 runnable processes over the last 1, 5 and 15 minutes, but some systems
16489 also include processes in the uninterruptible sleep state (that is,
16490 those processes which are waiting for disk I/O).  The Linux kernel
16491 includes uninterruptible processes.
16493 @command{uptime} is installed only on platforms with infrastructure
16494 for obtaining the boot time, and other packages also supply an
16495 @command{uptime} command, so portable scripts should not rely on its
16496 existence or on the exact behavior documented above.
16498 @exitstatus
16500 @node SELinux context
16501 @chapter SELinux context
16503 @cindex SELinux context
16504 @cindex SELinux, context
16505 @cindex commands for SELinux context
16507 This section describes commands for operations with SELinux
16508 contexts.
16510 @menu
16511 * chcon invocation::            Change SELinux context of file
16512 * runcon invocation::           Run a command in specified SELinux context
16513 @end menu
16515 @node chcon invocation
16516 @section @command{chcon}: Change SELinux context of file
16518 @pindex chcon
16519 @cindex changing security context
16520 @cindex change SELinux context
16522 @command{chcon} changes the SELinux security context of the selected files.
16523 Synopses:
16525 @smallexample
16526 chcon [@var{option}]@dots{} @var{context} @var{file}@dots{}
16527 chcon [@var{option}]@dots{} [-u @var{user}] [-r @var{role}] [-l @var{range}]@c
16528  [-t @var{type}] @var{file}@dots{}
16529 chcon [@var{option}]@dots{} --reference=@var{rfile} @var{file}@dots{}
16530 @end smallexample
16532 Change the SELinux security context of each @var{file} to @var{context}.
16533 With @option{--reference}, change the security context of each @var{file}
16534 to that of @var{rfile}.
16536 The program accepts the following options.  Also see @ref{Common options}.
16538 @table @samp
16540 @item --dereference
16541 @opindex --dereference
16542 Do not affect symbolic links but what they refer to; this is the default.
16544 @item -h
16545 @itemx --no-dereference
16546 @opindex -h
16547 @opindex --no-dereference
16548 @cindex no dereference
16549 Affect the symbolic links themselves instead of any referenced file.
16551 @item --reference=@var{rfile}
16552 @opindex --reference
16553 @cindex reference file
16554 Use @var{rfile}'s security context rather than specifying a @var{context} value.
16556 @item -R
16557 @itemx --recursive
16558 @opindex -R
16559 @opindex --recursive
16560 Operate on files and directories recursively.
16562 @item --preserve-root
16563 @opindex --preserve-root
16564 Refuse to operate recursively on the root directory, @file{/},
16565 when used together with the @option{--recursive} option.
16566 @xref{Treating / specially}.
16568 @item --no-preserve-root
16569 @opindex --no-preserve-root
16570 Do not treat the root directory, @file{/}, specially when operating
16571 recursively; this is the default.
16572 @xref{Treating / specially}.
16574 @choptH
16575 @xref{Traversing symlinks}.
16577 @choptL
16578 @xref{Traversing symlinks}.
16580 @choptP
16581 @xref{Traversing symlinks}.
16583 @item -v
16584 @itemx --verbose
16585 @opindex -v
16586 @opindex --verbose
16587 @cindex diagnostic
16588 Output a diagnostic for every file processed.
16590 @item -u @var{user}
16591 @itemx --user=@var{user}
16592 @opindex -u
16593 @opindex --user
16594 Set user @var{user} in the target security context.
16596 @item -r @var{role}
16597 @itemx --role=@var{role}
16598 @opindex -r
16599 @opindex --role
16600 Set role @var{role} in the target security context.
16602 @item -t @var{type}
16603 @itemx --type=@var{type}
16604 @opindex -t
16605 @opindex --type
16606 Set type @var{type} in the target security context.
16608 @item -l @var{range}
16609 @itemx --range=@var{range}
16610 @opindex -l
16611 @opindex --range
16612 Set range @var{range} in the target security context.
16614 @end table
16616 @exitstatus
16618 @node runcon invocation
16619 @section @command{runcon}: Run a command in specified SELinux context
16621 @pindex runcon
16622 @cindex run with security context
16625 @command{runcon} runs file in specified SELinux security context.
16627 Synopses:
16628 @smallexample
16629 runcon @var{context} @var{command} [@var{args}]
16630 runcon [ -c ] [-u @var{user}] [-r @var{role}] [-t @var{type}]@c
16631  [-l @var{range}] @var{command} [@var{args}]
16632 @end smallexample
16634 Run @var{command} with completely-specified @var{context}, or with
16635 current or transitioned security context modified by one or more of @var{level},
16636 @var{role}, @var{type} and @var{user}.
16638 If none of @option{-c}, @option{-t}, @option{-u}, @option{-r}, or @option{-l}
16639 is specified, the first argument is used as the complete context.
16640 Any additional arguments after @var{command}
16641 are interpreted as arguments to the command.
16643 With neither @var{context} nor @var{command}, print the current
16644 security context.
16646 @cindex restricted security context
16647 @cindex NO_NEW_PRIVS
16648 Note also the @command{setpriv} command which can be used to set the
16649 NO_NEW_PRIVS bit using @command{setpriv --no-new-privs runcon ...},
16650 thus disallowing usage of a security context with more privileges
16651 than the process would normally have.
16653 @command{runcon} accepts the following options.  Also see @ref{Common options}.
16655 @table @samp
16657 @item -c
16658 @itemx --compute
16659 @opindex -c
16660 @opindex --compute
16661 Compute process transition context before modifying.
16663 @item -u @var{user}
16664 @itemx --user=@var{user}
16665 @opindex -u
16666 @opindex --user
16667 Set user @var{user} in the target security context.
16669 @item -r @var{role}
16670 @itemx --role=@var{role}
16671 @opindex -r
16672 @opindex --role
16673 Set role @var{role} in the target security context.
16675 @item -t @var{type}
16676 @itemx --type=@var{type}
16677 @opindex -t
16678 @opindex --type
16679 Set type @var{type} in the target security context.
16681 @item -l @var{range}
16682 @itemx --range=@var{range}
16683 @opindex -l
16684 @opindex --range
16685 Set range @var{range} in the target security context.
16687 @end table
16689 @cindex exit status of @command{runcon}
16690 Exit status:
16692 @display
16693 126 if @var{command} is found but cannot be invoked
16694 127 if @command{runcon} itself fails or if @var{command} cannot be found
16695 the exit status of @var{command} otherwise
16696 @end display
16698 @node Modified command invocation
16699 @chapter Modified command invocation
16701 @cindex modified command invocation
16702 @cindex invocation of commands, modified
16703 @cindex commands for invoking other commands
16705 This section describes commands that run other commands in some context
16706 different than the current one: a modified environment, as a different
16707 user, etc.
16709 @menu
16710 * chroot invocation::           Modify the root directory.
16711 * env invocation::              Modify environment variables.
16712 * nice invocation::             Modify niceness.
16713 * nohup invocation::            Immunize to hangups.
16714 * stdbuf invocation::           Modify buffering of standard streams.
16715 * timeout invocation::          Run with time limit.
16716 @end menu
16719 @node chroot invocation
16720 @section @command{chroot}: Run a command with a different root directory
16722 @pindex chroot
16723 @cindex running a program in a specified root directory
16724 @cindex root directory, running a program in a specified
16726 @command{chroot} runs a command with a specified root directory.
16727 On many systems, only the super-user can do this.@footnote{However,
16728 some systems (e.g., FreeBSD) can be configured to allow certain regular
16729 users to use the @code{chroot} system call, and hence to run this program.
16730 Also, on Cygwin, anyone can run the @command{chroot} command, because the
16731 underlying function is non-privileged due to lack of support in MS-Windows.
16732 Furthermore, the @command{chroot} command avoids the @code{chroot} system call
16733 when @var{newroot} is identical to the old @file{/} directory for consistency
16734 with systems where this is allowed for non-privileged users.}.
16735 Synopses:
16737 @example
16738 chroot @var{option} @var{newroot} [@var{command} [@var{args}]@dots{}]
16739 chroot @var{option}
16740 @end example
16742 Ordinarily, file names are looked up starting at the root of the
16743 directory structure, i.e., @file{/}.  @command{chroot} changes the root to
16744 the directory @var{newroot} (which must exist), then changes the working
16745 directory to @file{/}, and finally runs @var{command} with optional @var{args}.
16746 If @var{command} is not specified, the default is the value of the @env{SHELL}
16747 environment variable or @command{/bin/sh} if not set, invoked with the
16748 @option{-i} option.
16749 @var{command} must not be a special built-in utility
16750 (@pxref{Special built-in utilities}).
16752 The program accepts the following options.  Also see @ref{Common options}.
16753 Options must precede operands.
16755 @table @samp
16757 @item --groups=@var{groups}
16758 @opindex --groups
16759 Use this option to override the supplementary @var{groups} to be
16760 used by the new process.
16761 The items in the list (names or numeric IDs) must be separated by commas.
16762 Use @samp{--groups=''} to disable the supplementary group look-up
16763 implicit in the @option{--userspec} option.
16765 @item --userspec=@var{user}[:@var{group}]
16766 @opindex --userspec
16767 By default, @var{command} is run with the same credentials
16768 as the invoking process.
16769 Use this option to run it as a different @var{user} and/or with a
16770 different primary @var{group}.
16771 If a @var{user} is specified then the supplementary groups
16772 are set according to the system defined list for that user,
16773 unless overridden with the @option{--groups} option.
16775 @item --skip-chdir
16776 @opindex --skip-chdir
16777 Use this option to not change the working directory to @file{/} after changing
16778 the root directory to @var{newroot}, i.e., inside the chroot.
16779 This option is only permitted when @var{newroot} is the old @file{/} directory,
16780 and therefore is mostly useful together with the @option{--groups} and
16781 @option{--userspec} options to retain the previous working directory.
16783 @end table
16785 The user and group name look-up performed by the @option{--userspec}
16786 and @option{--groups} options, is done both outside and inside
16787 the chroot, with successful look-ups inside the chroot taking precedence.
16788 If the specified user or group items are intended to represent a numeric ID,
16789 then a name to ID resolving step is avoided by specifying a leading @samp{+}.
16790 @xref{Disambiguating names and IDs}.
16792 Here are a few tips to help avoid common problems in using chroot.
16793 To start with a simple example, make @var{command} refer to a statically
16794 linked binary.  If you were to use a dynamically linked executable, then
16795 you'd have to arrange to have the shared libraries in the right place under
16796 your new root directory.
16798 For example, if you create a statically linked @command{ls} executable,
16799 and put it in @file{/tmp/empty}, you can run this command as root:
16801 @example
16802 $ chroot /tmp/empty /ls -Rl /
16803 @end example
16805 Then you'll see output like this:
16807 @example
16809 total 1023
16810 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
16811 @end example
16813 If you want to use a dynamically linked executable, say @command{bash},
16814 then first run @samp{ldd bash} to see what shared objects it needs.
16815 Then, in addition to copying the actual binary, also copy the listed
16816 files to the required positions under your intended new root directory.
16817 Finally, if the executable requires any other files (e.g., data, state,
16818 device files), copy them into place, too.
16820 @command{chroot} is installed only on systems that have the
16821 @code{chroot} function, so portable scripts should not rely on its
16822 existence.
16824 @cindex exit status of @command{chroot}
16825 Exit status:
16827 @display
16828 125 if @command{chroot} itself fails
16829 126 if @var{command} is found but cannot be invoked
16830 127 if @var{command} cannot be found
16831 the exit status of @var{command} otherwise
16832 @end display
16835 @node env invocation
16836 @section @command{env}: Run a command in a modified environment
16838 @pindex env
16839 @cindex environment, running a program in a modified
16840 @cindex modified environment, running a program in a
16841 @cindex running a program in a modified environment
16843 @command{env} runs a command with a modified environment.  Synopses:
16845 @example
16846 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
16847 [@var{command} [@var{args}]@dots{}]
16849 @end example
16851 Operands of the form @samp{@var{variable}=@var{value}} set
16852 the environment variable @var{variable} to value @var{value}.
16853 @var{value} may be empty (@samp{@var{variable}=}).  Setting a variable
16854 to an empty value is different from unsetting it.
16855 These operands are evaluated left-to-right, so if two operands
16856 mention the same variable the earlier is ignored.
16858 Environment variable names can be empty, and can contain any
16859 characters other than @samp{=} and ASCII NUL.
16860 However, it is wise to limit yourself to names that
16861 consist solely of underscores, digits, and ASCII letters,
16862 and that begin with a non-digit, as applications like the shell do not
16863 work well with other names.
16865 @vindex PATH
16866 The first operand that does not contain the character @samp{=}
16867 specifies the program to invoke; it is
16868 searched for according to the @env{PATH} environment variable.  Any
16869 remaining arguments are passed as arguments to that program.
16870 The program should not be a special built-in utility
16871 (@pxref{Special built-in utilities}).
16873 Modifications to @env{PATH} take effect prior to searching for
16874 @var{command}.  Use caution when reducing @env{PATH}; behavior is
16875 not portable when @env{PATH} is undefined or omits key directories
16876 such as @file{/bin}.
16878 In the rare case that a utility contains a @samp{=} in the name, the
16879 only way to disambiguate it from a variable assignment is to use an
16880 intermediate command for @var{command}, and pass the problematic
16881 program name via @var{args}.  For example, if @file{./prog=} is an
16882 executable in the current @env{PATH}:
16884 @example
16885 env prog= true # runs 'true', with prog= in environment
16886 env ./prog= true # runs 'true', with ./prog= in environment
16887 env -- prog= true # runs 'true', with prog= in environment
16888 env sh -c '\prog= true' # runs 'prog=' with argument 'true'
16889 env sh -c 'exec "$@@"' sh prog= true # also runs 'prog='
16890 @end example
16892 @cindex environment, printing
16894 If no command name is specified following the environment
16895 specifications, the resulting environment is printed.  This is like
16896 specifying the @command{printenv} program.
16898 For some examples, suppose the environment passed to @command{env}
16899 contains @samp{LOGNAME=rms}, @samp{EDITOR=emacs}, and
16900 @samp{PATH=.:/gnubin:/hacks}:
16902 @itemize @bullet
16904 @item
16905 Output the current environment.
16906 @example
16907 $ env | LC_ALL=C sort
16908 EDITOR=emacs
16909 LOGNAME=rms
16910 PATH=.:/gnubin:/hacks
16911 @end example
16913 @item
16914 Run @command{foo} with a reduced environment, preserving only the
16915 original @env{PATH} to avoid problems in locating @command{foo}.
16916 @example
16917 env - PATH="$PATH" foo
16918 @end example
16920 @item
16921 Run @command{foo} with the environment containing @samp{LOGNAME=rms},
16922 @samp{EDITOR=emacs}, and @samp{PATH=.:/gnubin:/hacks}, and guarantees
16923 that @command{foo} was found in the file system rather than as a shell
16924 built-in.
16925 @example
16926 env foo
16927 @end example
16929 @item
16930 Run @command{nemacs} with the environment containing @samp{LOGNAME=foo},
16931 @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks}, and
16932 @samp{DISPLAY=gnu:0}.
16933 @example
16934 env DISPLAY=gnu:0 LOGNAME=foo nemacs
16935 @end example
16937 @item
16938 Attempt to run the program @command{/energy/--} (as that is the only
16939 possible path search result); if the command exists, the environment
16940 will contain @samp{LOGNAME=rms} and @samp{PATH=/energy}, and the
16941 arguments will be @samp{e=mc2}, @samp{bar}, and @samp{baz}.
16942 @example
16943 env -u EDITOR PATH=/energy -- e=mc2 bar baz
16944 @end example
16946 @end itemize
16949 The program accepts the following options.  Also see @ref{Common options}.
16950 Options must precede operands.
16952 @table @samp
16954 @optNull
16956 @item -u @var{name}
16957 @itemx --unset=@var{name}
16958 @opindex -u
16959 @opindex --unset
16960 Remove variable @var{name} from the environment, if it was in the
16961 environment.
16963 @item -
16964 @itemx -i
16965 @itemx --ignore-environment
16966 @opindex -
16967 @opindex -i
16968 @opindex --ignore-environment
16969 Start with an empty environment, ignoring the inherited environment.
16971 @item -C @var{dir}
16972 @itemx --chdir=@var{dir}
16973 @opindex -C
16974 @opindex --chdir
16975 Change the working directory to @var{dir} before invoking @var{command}.
16976 This differs from the shell built-in @command{cd} in that it starts
16977 @var{command} as a subprocess rather than altering the shell's own working
16978 directory; this allows it to be chained with other commands that run commands
16979 in a different context.  For example:
16981 @example
16982 # Run 'true' with /chroot as its root directory and /srv as its working
16983 # directory.
16984 chroot /chroot env --chdir=/srv true
16985 # Run 'true' with /build as its working directory, FOO=bar in its
16986 # environment, and a time limit of five seconds.
16987 env --chdir=/build FOO=bar timeout 5 true
16988 @end example
16990 @end table
16992 @cindex exit status of @command{env}
16993 Exit status:
16995 @display
16996 0   if no @var{command} is specified and the environment is output
16997 125 if @command{env} itself fails
16998 126 if @var{command} is found but cannot be invoked
16999 127 if @var{command} cannot be found
17000 the exit status of @var{command} otherwise
17001 @end display
17004 @node nice invocation
17005 @section @command{nice}: Run a command with modified niceness
17007 @pindex nice
17008 @cindex niceness
17009 @cindex scheduling, affecting
17010 @cindex appropriate privileges
17012 @command{nice} prints a process's @dfn{niceness}, or runs
17013 a command with modified niceness.  @dfn{niceness} affects how
17014 favorably the process is scheduled in the system.
17015 Synopsis:
17017 @example
17018 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
17019 @end example
17021 If no arguments are given, @command{nice} prints the current niceness.
17022 Otherwise, @command{nice} runs the given @var{command} with its
17023 niceness adjusted.  By default, its niceness is incremented by 10.
17025 Niceness values range at least from @minus{}20 (process has high priority
17026 and gets more resources, thus slowing down other processes) through 19
17027 (process has lower priority and runs slowly itself, but has less impact
17028 on the speed of other running processes).  Some systems
17029 may have a wider range of niceness values; conversely, other systems may
17030 enforce more restrictive limits.  An attempt to set the niceness
17031 outside the supported range is treated as an attempt to use the
17032 minimum or maximum supported value.
17034 A niceness should not be confused with a scheduling priority, which
17035 lets applications determine the order in which threads are scheduled
17036 to run.  Unlike a priority, a niceness is merely advice to the
17037 scheduler, which the scheduler is free to ignore.  Also, as a point of
17038 terminology, POSIX defines the behavior of @command{nice} in
17039 terms of a @dfn{nice value}, which is the non-negative difference
17040 between a niceness and the minimum niceness.  Though @command{nice}
17041 conforms to POSIX, its documentation and diagnostics use the
17042 term ``niceness'' for compatibility with historical practice.
17044 @var{command} must not be a special built-in utility (@pxref{Special
17045 built-in utilities}).
17047 @mayConflictWithShellBuiltIn{nice}
17049 Note to change the @dfn{niceness} of an existing process,
17050 one needs to use the @command{renice} command.
17052 The program accepts the following option.  Also see @ref{Common options}.
17053 Options must precede operands.
17055 @table @samp
17056 @item -n @var{adjustment}
17057 @itemx --adjustment=@var{adjustment}
17058 @opindex -n
17059 @opindex --adjustment
17060 Add @var{adjustment} instead of 10 to the command's niceness.  If
17061 @var{adjustment} is negative and you lack appropriate privileges,
17062 @command{nice} issues a warning but otherwise acts as if you specified
17063 a zero adjustment.
17065 For compatibility @command{nice} also supports an obsolete
17066 option syntax @option{-@var{adjustment}}.  New scripts should use
17067 @option{-n @var{adjustment}} instead.
17069 @end table
17071 @command{nice} is installed only on systems that have the POSIX
17072 @code{setpriority} function, so portable scripts should not rely on
17073 its existence on non-POSIX platforms.
17075 @cindex exit status of @command{nice}
17076 Exit status:
17078 @display
17079 0   if no @var{command} is specified and the niceness is output
17080 125 if @command{nice} itself fails
17081 126 if @var{command} is found but cannot be invoked
17082 127 if @var{command} cannot be found
17083 the exit status of @var{command} otherwise
17084 @end display
17086 It is sometimes useful to run a non-interactive program with reduced niceness.
17088 @example
17089 $ nice factor 4611686018427387903
17090 @end example
17092 Since @command{nice} prints the current niceness,
17093 you can invoke it through itself to demonstrate how it works.
17095 The default behavior is to increase the niceness by @samp{10}:
17097 @example
17098 $ nice
17100 $ nice nice
17102 $ nice -n 10 nice
17104 @end example
17106 The @var{adjustment} is relative to the current niceness.  In the
17107 next example, the first @command{nice} invocation runs the second one
17108 with niceness 10, and it in turn runs the final one with a niceness
17109 that is 3 more:
17111 @example
17112 $ nice nice -n 3 nice
17114 @end example
17116 Specifying a niceness larger than the supported range
17117 is the same as specifying the maximum supported value:
17119 @example
17120 $ nice -n 10000000000 nice
17122 @end example
17124 Only a privileged user may run a process with lower niceness:
17126 @example
17127 $ nice -n -1 nice
17128 nice: cannot set niceness: Permission denied
17130 $ sudo nice -n -1 nice
17132 @end example
17135 @node nohup invocation
17136 @section @command{nohup}: Run a command immune to hangups
17138 @pindex nohup
17139 @cindex hangups, immunity to
17140 @cindex immunity to hangups
17141 @cindex logging out and continuing to run
17143 @flindex nohup.out
17144 @command{nohup} runs the given @var{command} with hangup signals ignored,
17145 so that the command can continue running in the background after you log
17146 out.  Synopsis:
17148 @example
17149 nohup @var{command} [@var{arg}]@dots{}
17150 @end example
17152 If standard input is a terminal, redirect it so that terminal sessions
17153 do not mistakenly consider the terminal to be used by the command.
17154 Make the substitute file descriptor unreadable, so that commands that
17155 mistakenly attempt to read from standard input can report an error.
17156 This redirection is a GNU extension; programs intended to be portable
17157 to non-GNU hosts can use @samp{nohup @var{command} [@var{arg}]@dots{}
17158 0>/dev/null} instead.
17160 @flindex nohup.out
17161 If standard output is a terminal, the command's standard output is appended
17162 to the file @file{nohup.out}; if that cannot be written to, it is appended
17163 to the file @file{$HOME/nohup.out}; and if that cannot be written to, the
17164 command is not run.
17165 Any @file{nohup.out} or @file{$HOME/nohup.out} file created by
17166 @command{nohup} is made readable and writable only to the user,
17167 regardless of the current umask settings.
17169 If standard error is a terminal, it is normally redirected to the same file
17170 descriptor as the (possibly-redirected) standard output.
17171 However, if standard output is closed, standard error terminal output
17172 is instead appended to the file @file{nohup.out} or
17173 @file{$HOME/nohup.out} as above.
17175 To capture the command's output to a file other than @file{nohup.out}
17176 you can redirect it.  For example, to capture the output of
17177 @command{make}:
17179 @example
17180 nohup make > make.log
17181 @end example
17183 @command{nohup} does not automatically put the command it runs in the
17184 background; you must do that explicitly, by ending the command line
17185 with an @samp{&}.  Also, @command{nohup} does not alter the
17186 niceness of @var{command}; use @command{nice} for that,
17187 e.g., @samp{nohup nice @var{command}}.
17189 @var{command} must not be a special built-in utility (@pxref{Special
17190 built-in utilities}).
17192 The only options are @option{--help} and @option{--version}.  @xref{Common
17193 options}.  Options must precede operands.
17195 @cindex exit status of @command{nohup}
17196 Exit status:
17198 @display
17199 125 if @command{nohup} itself fails, and @env{POSIXLY_CORRECT} is not set
17200 126 if @var{command} is found but cannot be invoked
17201 127 if @var{command} cannot be found
17202 the exit status of @var{command} otherwise
17203 @end display
17205 If @env{POSIXLY_CORRECT} is set, internal failures give status 127
17206 instead of 125.
17209 @node stdbuf invocation
17210 @section @command{stdbuf}: Run a command with modified I/O stream buffering
17212 @pindex stdbuf
17213 @cindex standard streams, buffering
17214 @cindex line buffered
17216 @command{stdbuf} allows one to modify the buffering operations of the
17217 three standard I/O streams associated with a program.  Synopsis:
17219 @example
17220 stdbuf @var{option}@dots{} @var{command}
17221 @end example
17223 @var{command} must start with the name of a program that
17224 @enumerate
17225 @item
17226 uses the ISO C @code{FILE} streams for input/output (note the
17227 programs @command{dd} and @command{cat} don't do that),
17229 @item
17230 does not adjust the buffering of its standard streams (note the
17231 program @command{tee} is not in this category).
17232 @end enumerate
17234 Any additional @var{arg}s are passed as additional arguments to the
17235 @var{command}.
17237 The program accepts the following options.  Also see @ref{Common options}.
17239 @table @samp
17241 @item -i @var{mode}
17242 @itemx --input=@var{mode}
17243 @opindex -i
17244 @opindex --input
17245 Adjust the standard input stream buffering.
17247 @item -o @var{mode}
17248 @itemx --output=@var{mode}
17249 @opindex -o
17250 @opindex --output
17251 Adjust the standard output stream buffering.
17253 @item -e @var{mode}
17254 @itemx --error=@var{mode}
17255 @opindex -e
17256 @opindex --error
17257 Adjust the standard error stream buffering.
17259 @end table
17261 The @var{mode} can be specified as follows:
17263 @table @samp
17265 @item L
17266 Set the stream to line buffered mode.
17267 In this mode data is coalesced until a newline is output or
17268 input is read from any stream attached to a terminal device.
17269 This option is invalid with standard input.
17271 @item 0
17272 Disable buffering of the selected stream.
17273 In this mode, data is output immediately and only the
17274 amount of data requested is read from input.
17275 Note the difference in function for input and output.
17276 Disabling buffering for input will not influence the responsiveness
17277 or blocking behavior of the stream input functions.
17278 For example @code{fread} will still block until @code{EOF} or error,
17279 even if the underlying @code{read} returns less data than requested.
17281 @item @var{size}
17282 Specify the size of the buffer to use in fully buffered mode.
17283 @multiplierSuffixesNoBlocks{size}
17285 @end table
17287 @command{stdbuf} is installed only on platforms that use the
17288 Executable and Linkable Format (ELF) and support the
17289 @code{constructor} attribute, so portable scripts should not rely on
17290 its existence.
17292 @cindex exit status of @command{stdbuf}
17293 Exit status:
17295 @display
17296 125 if @command{stdbuf} itself fails
17297 126 if @var{command} is found but cannot be invoked
17298 127 if @var{command} cannot be found
17299 the exit status of @var{command} otherwise
17300 @end display
17303 @node timeout invocation
17304 @section @command{timeout}: Run a command with a time limit
17306 @pindex timeout
17307 @cindex time limit
17308 @cindex run commands with bounded time
17310 @command{timeout} runs the given @var{command} and kills it if it is
17311 still running after the specified time interval.  Synopsis:
17313 @example
17314 timeout [@var{option}] @var{duration} @var{command} [@var{arg}]@dots{}
17315 @end example
17317 @var{command} must not be a special built-in utility (@pxref{Special
17318 built-in utilities}).
17320 The program accepts the following options.  Also see @ref{Common options}.
17321 Options must precede operands.
17323 @table @samp
17324 @item --preserve-status
17325 @opindex --preserve-status
17326 Return the exit status of the managed @var{command} on timeout, rather than
17327 a specific exit status indicating a timeout.  This is useful if the
17328 managed @var{command} supports running for an indeterminate amount of time.
17330 @item --foreground
17331 @opindex --foreground
17332 Don't create a separate background program group, so that
17333 the managed @var{command} can use the foreground TTY normally.
17334 This is needed to support timing out commands not started
17335 directly from an interactive shell, in two situations.
17336 @enumerate
17337 @item
17338 @var{command} is interactive and needs to read from the terminal for example
17339 @item
17340 the user wants to support sending signals directly to @var{command}
17341 from the terminal (like Ctrl-C for example)
17342 @end enumerate
17344 Note in this mode of operation, any children of @var{command}
17345 will not be timed out.  Also SIGCONT will not be sent to @var{command},
17346 as it's generally not needed with foreground processes, and can
17347 cause intermittent signal delivery issues with programs that are monitors
17348 themselves (like GDB for example).
17350 @item -k @var{duration}
17351 @itemx --kill-after=@var{duration}
17352 @opindex -k
17353 @opindex --kill-after
17354 Ensure the monitored @var{command} is killed by also sending a @samp{KILL}
17355 signal, after the specified @var{duration}.  Without this option, if the
17356 selected signal proves not to be fatal, @command{timeout} does not kill
17357 the @var{command}.
17359 @item -s @var{signal}
17360 @itemx --signal=@var{signal}
17361 @opindex -s
17362 @opindex --signal
17363 Send this @var{signal} to @var{command} on timeout, rather than the
17364 default @samp{TERM} signal.  @var{signal} may be a name like @samp{HUP}
17365 or a number.  @xref{Signal specifications}.
17366 @end table
17368 @cindex time units
17369 @var{duration} is a floating point number followed by an optional unit:
17370 @display
17371 @samp{s} for seconds (the default)
17372 @samp{m} for minutes
17373 @samp{h} for hours
17374 @samp{d} for days
17375 @end display
17376 A duration of 0 disables the associated timeout.
17377 Note that the actual timeout duration is dependent on system conditions,
17378 which should be especially considered when specifying sub-second timeouts.
17380 @cindex exit status of @command{timeout}
17381 Exit status:
17383 @display
17384 124 if @var{command} times out
17385 125 if @command{timeout} itself fails
17386 126 if @var{command} is found but cannot be invoked
17387 127 if @var{command} cannot be found
17388 137 if @var{command} is sent the KILL(9) signal (128+9)
17389 the exit status of @var{command} otherwise
17390 @end display
17393 @node Process control
17394 @chapter Process control
17396 @cindex processes, commands for controlling
17397 @cindex commands for controlling processes
17399 @menu
17400 * kill invocation::             Sending a signal to processes.
17401 @end menu
17404 @node kill invocation
17405 @section @command{kill}: Send a signal to processes
17407 @pindex kill
17408 @cindex send a signal to processes
17410 The @command{kill} command sends a signal to processes, causing them
17411 to terminate or otherwise act upon receiving the signal in some way.
17412 Alternatively, it lists information about signals.  Synopses:
17414 @example
17415 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
17416 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
17417 @end example
17419 @mayConflictWithShellBuiltIn{kill}
17421 The first form of the @command{kill} command sends a signal to all
17422 @var{pid} arguments.  The default signal to send if none is specified
17423 is @samp{TERM}@.  The special signal number @samp{0} does not denote a
17424 valid signal, but can be used to test whether the @var{pid} arguments
17425 specify processes to which a signal could be sent.
17427 If @var{pid} is positive, the signal is sent to the process with the
17428 process ID @var{pid}.  If @var{pid} is zero, the signal is sent to all
17429 processes in the process group of the current process.  If @var{pid}
17430 is @minus{}1, the signal is sent to all processes for which the user has
17431 permission to send a signal.  If @var{pid} is less than @minus{}1, the signal
17432 is sent to all processes in the process group that equals the absolute
17433 value of @var{pid}.
17435 If @var{pid} is not positive, a system-dependent set of system
17436 processes is excluded from the list of processes to which the signal
17437 is sent.
17439 If a negative @var{pid} argument is desired as the first one, it
17440 should be preceded by @option{--}.  However, as a common extension to
17441 POSIX, @option{--} is not required with @samp{kill
17442 -@var{signal} -@var{pid}}.  The following commands are equivalent:
17444 @example
17445 kill -15 -1
17446 kill -TERM -1
17447 kill -s TERM -- -1
17448 kill -- -1
17449 @end example
17451 The first form of the @command{kill} command succeeds if every @var{pid}
17452 argument specifies at least one process that the signal was sent to.
17454 The second form of the @command{kill} command lists signal information.
17455 Either the @option{-l} or @option{--list} option, or the @option{-t}
17456 or @option{--table} option must be specified.  Without any
17457 @var{signal} argument, all supported signals are listed.  The output
17458 of @option{-l} or @option{--list} is a list of the signal names, one
17459 per line; if @var{signal} is already a name, the signal number is
17460 printed instead.  The output of @option{-t} or @option{--table} is a
17461 table of signal numbers, names, and descriptions.  This form of the
17462 @command{kill} command succeeds if all @var{signal} arguments are valid
17463 and if there is no output error.
17465 The @command{kill} command also supports the @option{--help} and
17466 @option{--version} options.  @xref{Common options}.
17468 A @var{signal} may be a signal name like @samp{HUP}, or a signal
17469 number like @samp{1}, or an exit status of a process terminated by the
17470 signal.  A signal name can be given in canonical form or prefixed by
17471 @samp{SIG}@.  The case of the letters is ignored, except for the
17472 @option{-@var{signal}} option which must use upper case to avoid
17473 ambiguity with lower case option letters.
17474 @xref{Signal specifications}, for a list of supported
17475 signal names and numbers.
17477 @node Delaying
17478 @chapter Delaying
17480 @cindex delaying commands
17481 @cindex commands for delaying
17483 @c Perhaps @command{wait} or other commands should be described here also?
17485 @menu
17486 * sleep invocation::            Delay for a specified time.
17487 @end menu
17490 @node sleep invocation
17491 @section @command{sleep}: Delay for a specified time
17493 @pindex sleep
17494 @cindex delay for a specified time
17496 @command{sleep} pauses for an amount of time specified by the sum of
17497 the values of the command line arguments.
17498 Synopsis:
17500 @example
17501 sleep @var{number}[smhd]@dots{}
17502 @end example
17504 @cindex time units
17505 Each argument is a number followed by an optional unit; the default
17506 is seconds.  The units are:
17508 @table @samp
17509 @item s
17510 seconds
17511 @item m
17512 minutes
17513 @item h
17514 hours
17515 @item d
17516 days
17517 @end table
17519 Historical implementations of @command{sleep} have required that
17520 @var{number} be an integer, and only accepted a single argument
17521 without a suffix.  However, GNU @command{sleep} accepts
17522 arbitrary floating point numbers.  @xref{Floating point}.
17524 The only options are @option{--help} and @option{--version}.  @xref{Common
17525 options}.
17527 @c sleep is a shell built-in at least with Solaris 11's /bin/sh
17528 @mayConflictWithShellBuiltIn{sleep}
17530 @exitstatus
17533 @node Numeric operations
17534 @chapter Numeric operations
17536 @cindex numeric operations
17537 These programs do numerically-related operations.
17539 @menu
17540 * factor invocation::              Show factors of numbers.
17541 * numfmt invocation::              Reformat numbers.
17542 * seq invocation::                 Print sequences of numbers.
17543 @end menu
17546 @node factor invocation
17547 @section @command{factor}: Print prime factors
17549 @pindex factor
17550 @cindex prime factors
17552 @command{factor} prints prime factors.  Synopses:
17554 @example
17555 factor [@var{number}]@dots{}
17556 factor @var{option}
17557 @end example
17559 If no @var{number} is specified on the command line, @command{factor} reads
17560 numbers from standard input, delimited by newlines, tabs, or spaces.
17562 The @command{factor} command supports only a small number of options:
17564 @table @samp
17565 @item --help
17566 Print a short help on standard output, then exit without further
17567 processing.
17569 @item --version
17570 Print the program version on standard output, then exit without further
17571 processing.
17572 @end table
17574 Factoring the product of the eighth and ninth Mersenne primes
17575 takes about 30 milliseconds of CPU time on a 2.2 GHz Athlon.
17577 @example
17578 M8=$(echo 2^31-1|bc)
17579 M9=$(echo 2^61-1|bc)
17580 n=$(echo "$M8 * $M9" | bc)
17581 /usr/bin/time -f %U factor $n
17582 4951760154835678088235319297: 2147483647 2305843009213693951
17583 0.03
17584 @end example
17586 Similarly, factoring the eighth Fermat number @math{2^{256}+1} takes
17587 about 20 seconds on the same machine.
17589 Factoring large numbers is, in general, hard.  The Pollard-Brent rho
17590 algorithm used by @command{factor} is particularly effective for
17591 numbers with relatively small factors.  If you wish to factor large
17592 numbers which do not have small factors (for example, numbers which
17593 are the product of two large primes), other methods are far better.
17595 If @command{factor} is built without using GNU MP, only
17596 single-precision arithmetic is available, and so large numbers
17597 (typically @math{2^{128}} and above) will not be supported.
17598 The single-precision code uses an algorithm which is designed
17599 for factoring smaller numbers.
17601 @exitstatus
17604 @node numfmt invocation
17605 @section @command{numfmt}: Reformat numbers
17607 @pindex numfmt
17609 @command{numfmt} reads numbers in various representations and reformats them
17610 as requested.  The most common usage is converting numbers to/from @emph{human}
17611 representation (e.g. @samp{4G} @expansion{} @samp{4,000,000,000}).
17613 @example
17614 numfmt [@var{option}]@dots{} [@var{number}]
17615 @end example
17617 @command{numfmt} converts each @var{number} on the command-line according to the
17618 specified options (see below).  If no @var{number}s are given, it reads numbers
17619 from standard input.  @command{numfmt} can optionally extract numbers from
17620 specific columns, maintaining proper line padding and alignment.
17622 @exitstatus
17624 See @option{--invalid} for additional information regarding exit status.
17626 @subsection General options
17628 The program accepts the following options.  Also see @ref{Common options}.
17630 @table @samp
17632 @item --debug
17633 @opindex --debug
17634 Print (to standard error) warning messages about possible erroneous usage.
17636 @item -d @var{d}
17637 @itemx --delimiter=@var{d}
17638 @opindex -d
17639 @opindex --delimiter
17640 Use the character @var{d} as input field separator (default: whitespace).
17641 @emph{Note}: Using non-default delimiter turns off automatic padding.
17643 @item --field=@var{fields}
17644 @opindex --field
17645 Convert the number in input field @var{fields} (default: 1).
17646 @var{fields} supports @command{cut} style field ranges:
17648 @example
17649 N    N'th field, counted from 1
17650 N-   from N'th field, to end of line
17651 N-M  from N'th to M'th field (inclusive)
17652 -M   from first to M'th field (inclusive)
17653 -    all fields
17654 @end example
17657 @item --format=@var{format}
17658 @opindex --format
17659 Use printf-style floating FORMAT string.  The @var{format} string must contain
17660 one @samp{%f} directive, optionally with @samp{'}, @samp{-}, @samp{0}, width
17661 or precision modifiers.  The @samp{'} modifier will enable @option{--grouping},
17662 the @samp{-} modifier will enable left-aligned @option{--padding} and the width
17663 modifier will enable right-aligned @option{--padding}.  The @samp{0} width
17664 modifier (without the @samp{-} modifier) will generate leading zeros on the
17665 number, up to the specified width.  A precision specification like @samp{%.1f}
17666 will override the precision determined from the input data or set due to
17667 @option{--to} option auto scaling.
17669 @item --from=@var{unit}
17670 @opindex --from
17671 Auto-scales input numbers according to @var{unit}.  See UNITS below.
17672 The default is no scaling, meaning suffixes (e.g. @samp{M}, @samp{G}) will
17673 trigger an error.
17675 @item --from-unit=@var{n}
17676 @opindex --from-unit
17677 Specify the input unit size (instead of the default 1).  Use this option when
17678 the input numbers represent other units (e.g. if the input number @samp{10}
17679 represents 10 units of 512 bytes, use @samp{--from-unit=512}).
17680 Suffixes are handled as with @samp{--from=auto}.
17682 @item --grouping
17683 @opindex --grouping
17684 Group digits in output numbers according to the current locale's grouping rules
17685 (e.g @emph{Thousands Separator} character, commonly @samp{.} (dot) or @samp{,}
17686 comma).  This option has no effect in @samp{POSIX/C} locale.
17688 @item --header[=@var{n}]
17689 @opindex --header
17690 @opindex --header=N
17691 Print the first @var{n} (default: 1) lines without any conversion.
17693 @item --invalid=@var{mode}
17694 @opindex --invalid
17695 The default action on input errors is to exit immediately with status code 2.
17696 @option{--invalid=@samp{abort}} explicitly specifies this default mode.
17697 With a @var{mode} of @samp{fail}, print a warning for @emph{each} conversion
17698 error, and exit with status 2.  With a @var{mode} of @samp{warn}, exit with
17699 status 0, even in the presence of conversion errors, and with a @var{mode} of
17700 @samp{ignore} do not even print diagnostics.
17702 @item --padding=@var{n}
17703 @opindex --padding
17704 Pad the output numbers to @var{n} characters, by adding spaces.  If @var{n} is
17705 a positive number, numbers will be right-aligned.  If @var{n} is a negative
17706 number, numbers will be left-aligned.  By default, numbers are automatically
17707 aligned based on the input line's width (only with the default delimiter).
17709 @item --round=@var{method}
17710 @opindex --round
17711 @opindex --round=up
17712 @opindex --round=down
17713 @opindex --round=from-zero
17714 @opindex --round=towards-zero
17715 @opindex --round=nearest
17716 When converting number representations, round the number according to
17717 @var{method}, which can be @samp{up}, @samp{down},
17718 @samp{from-zero} (the default), @samp{towards-zero}, @samp{nearest}.
17720 @item --suffix=@var{suffix}
17721 @opindex --suffix
17722 Add @samp{SUFFIX} to the output numbers, and accept optional @samp{SUFFIX} in
17723 input numbers.
17725 @item --to=@var{unit}
17726 @opindex --to
17727 Auto-scales output numbers according to @var{unit}.  See @emph{Units} below.
17728 The default is no scaling, meaning all the digits of the number are printed.
17730 @item --to-unit=@var{n}
17731 @opindex --to-unit
17732 Specify the output unit size (instead of the default 1).  Use this option when
17733 the output numbers represent other units (e.g. to represent @samp{4,000,000}
17734 bytes in blocks of 1KB, use @samp{--to=si --to-unit=1000}).
17735 Suffixes are handled as with @samp{--from=auto}.
17737 @optZeroTerminated
17738 @newlineFieldSeparator
17740 @end table
17742 @subsection Possible @var{unit}s:
17744 The following are the possible @var{unit} options with @option{--from=UNITS} and
17745 @option{--to=UNITS}:
17747 @table @var
17749 @item none
17750 No scaling is performed.  For input numbers, no suffixes are accepted, and any
17751 trailing characters following the number will trigger an error.  For output
17752 numbers, all digits of the numbers will be printed.
17754 @item si
17755 Auto-scale numbers according to the @emph{International System of Units (SI)}
17756 standard.
17757 For input numbers, accept one of the following suffixes.
17758 For output numbers, values larger than 1000 will be rounded, and printed with
17759 one of the following suffixes:
17761 @example
17762 @samp{K}  =>  @math{1000^1 = 10^3} (Kilo)
17763 @samp{M}  =>  @math{1000^2 = 10^6} (Mega)
17764 @samp{G}  =>  @math{1000^3 = 10^9} (Giga)
17765 @samp{T}  =>  @math{1000^4 = 10^{12}} (Tera)
17766 @samp{P}  =>  @math{1000^5 = 10^{15}} (Peta)
17767 @samp{E}  =>  @math{1000^6 = 10^{18}} (Exa)
17768 @samp{Z}  =>  @math{1000^7 = 10^{21}} (Zetta)
17769 @samp{Y}  =>  @math{1000^8 = 10^{24}} (Yotta)
17770 @end example
17772 @item iec
17773 Auto-scale numbers according to the @emph{International Electrotechnical
17774 Commission (IEC)} standard.
17775 For input numbers, accept one of the following suffixes.
17776 For output numbers, values larger than 1024 will be rounded, and printed with
17777 one of the following suffixes:
17779 @example
17780 @samp{K}  =>  @math{1024^1 = 2^{10}} (Kibi)
17781 @samp{M}  =>  @math{1024^2 = 2^{20}} (Mebi)
17782 @samp{G}  =>  @math{1024^3 = 2^{30}} (Gibi)
17783 @samp{T}  =>  @math{1024^4 = 2^{40}} (Tebi)
17784 @samp{P}  =>  @math{1024^5 = 2^{50}} (Pebi)
17785 @samp{E}  =>  @math{1024^6 = 2^{60}} (Exbi)
17786 @samp{Z}  =>  @math{1024^7 = 2^{70}} (Zebi)
17787 @samp{Y}  =>  @math{1024^8 = 2^{80}} (Yobi)
17788 @end example
17790 The @option{iec} option uses a single letter suffix (e.g. @samp{G}), which is
17791 not fully standard, as the @emph{iec} standard recommends a two-letter symbol
17792 (e.g @samp{Gi}) - but in practice, this method common.  Compare with
17793 the @option{iec-i} option.
17795 @item iec-i
17796 Auto-scale numbers according to the @emph{International Electrotechnical
17797 Commission (IEC)} standard.
17798 For input numbers, accept one of the following suffixes.
17799 For output numbers, values larger than 1024 will be rounded, and printed with
17800 one of the following suffixes:
17802 @example
17803 @samp{Ki}  =>  @math{1024^1 = 2^{10}} (Kibi)
17804 @samp{Mi}  =>  @math{1024^2 = 2^{20}} (Mebi)
17805 @samp{Gi}  =>  @math{1024^3 = 2^{30}} (Gibi)
17806 @samp{Ti}  =>  @math{1024^4 = 2^{40}} (Tebi)
17807 @samp{Pi}  =>  @math{1024^5 = 2^{50}} (Pebi)
17808 @samp{Ei}  =>  @math{1024^6 = 2^{60}} (Exbi)
17809 @samp{Zi}  =>  @math{1024^7 = 2^{70}} (Zebi)
17810 @samp{Yi}  =>  @math{1024^8 = 2^{80}} (Yobi)
17811 @end example
17813 The @option{iec-i} option uses a two-letter suffix symbol (e.g. @samp{Gi}),
17814 as the @emph{iec} standard recommends, but this is not always common in
17815 practice.  Compare with the @option{iec} option.
17817 @item auto
17818 @samp{auto} can only be used with @option{--from}.  With this method, numbers
17819 with @samp{K},@samp{M},@samp{G},@samp{T},@samp{P},@samp{E},@samp{Z},@samp{Y}
17820 suffixes are interpreted as @emph{SI} values, and numbers with @samp{Ki},
17821 @samp{Mi},@samp{Gi},@samp{Ti},@samp{Pi},@samp{Ei},@samp{Zi},@samp{Yi} suffixes
17822 are interpreted as @emph{IEC} values.
17824 @end table
17826 @subsection Examples of using @command{numfmt}
17828 Converting a single number from/to @emph{human} representation:
17829 @example
17830 $ numfmt --to=si 500000
17831 500K
17833 $ numfmt --to=iec 500000
17834 489K
17836 $ numfmt --to=iec-i 500000
17837 489Ki
17839 $ numfmt --from=si 1M
17840 1000000
17842 $ numfmt --from=iec 1M
17843 1048576
17845 # with '--from=auto', M=Mega, Mi=Mebi
17846 $ numfmt --from=auto 1M
17847 1000000
17848 $ numfmt --from=auto 1Mi
17849 1048576
17850 @end example
17852 Converting from @samp{SI} to @samp{IEC} scales (e.g. when a harddisk capacity is
17853 advertised as @samp{1TB}, while checking the drive's capacity gives lower
17854 values):
17856 @example
17857 $ numfmt --from=si --to=iec 1T
17858 932G
17859 @end example
17862 Converting a single field from an input file / piped input (these contrived
17863 examples are for demonstration purposes only, as both @command{ls} and
17864 @command{df} support the @option{--human-readable} option to
17865 output sizes in human-readable format):
17867 @example
17868 # Third field (file size) will be shown in SI representation
17869 $ ls -log | numfmt --field 3 --header --to=si | head -n4
17870 -rw-r--r--  1     94K Aug 23  2011 ABOUT-NLS
17871 -rw-r--r--  1    3.7K Jan  7 16:15 AUTHORS
17872 -rw-r--r--  1     36K Jun  1  2011 COPYING
17873 -rw-r--r--  1       0 Jan  7 15:15 ChangeLog
17875 # Second field (size) will be shown in IEC representation
17876 $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
17877 File system   1B-blocks        Used  Available Use% Mounted on
17878 rootfs             132G   104741408   26554036  80% /
17879 tmpfs              794M        7580     804960   1% /run/shm
17880 /dev/sdb1          694G   651424756   46074696  94% /home
17881 @end example
17884 Output can be tweaked using @option{--padding} or @option{--format}:
17886 @example
17887 # Pad to 10 characters, right-aligned
17888 $ du -s * | numfmt --to=si --padding=10
17889       2.5K config.log
17890        108 config.status
17891       1.7K configure
17892         20 configure.ac
17894 # Pad to 10 characters, left-aligned
17895 $ du -s * | numfmt --to=si --padding=-10
17896 2.5K       config.log
17897 108        config.status
17898 1.7K       configure
17899 20         configure.ac
17901 # Pad to 10 characters, left-aligned, using 'format'
17902 $ du -s * | numfmt --to=si --format="%10f"
17903       2.5K config.log
17904        108 config.status
17905       1.7K configure
17906         20 configure.ac
17908 # Pad to 10 characters, left-aligned, using 'format'
17909 $ du -s * | numfmt --to=si --padding="%-10f"
17910 2.5K       config.log
17911 108        config.status
17912 1.7K       configure
17913 20         configure.ac
17914 @end example
17916 With locales that support grouping digits, using @option{--grouping} or
17917 @option{--format} enables grouping.  In @samp{POSIX} locale, grouping is
17918 silently ignored:
17920 @example
17921 $ LC_ALL=C numfmt --from=iec --grouping 2G
17922 2147483648
17924 $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
17925 2,147,483,648
17927 $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
17928 2,14,74,83,648
17930 $ LC_ALL=C ./src/numfmt --from=iec --format="==%'15f==" 2G
17931 ==     2147483648==
17933 $ LC_ALL=en_US.utf8 ./src/numfmt --from=iec --format="==%'15f==" 2G
17934 ==  2,147,483,648==
17936 $ LC_ALL=en_US.utf8 ./src/numfmt --from=iec --format="==%'-15f==" 2G
17937 ==2,147,483,648  ==
17939 $ LC_ALL=ta_IN ./src/numfmt --from=iec --format="==%'15f==" 2G
17940 == 2,14,74,83,648==
17941 @end example
17944 @node seq invocation
17945 @section @command{seq}: Print numeric sequences
17947 @pindex seq
17948 @cindex numeric sequences
17949 @cindex sequence of numbers
17951 @command{seq} prints a sequence of numbers to standard output.  Synopses:
17953 @example
17954 seq [@var{option}]@dots{} @var{last}
17955 seq [@var{option}]@dots{} @var{first} @var{last}
17956 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
17957 @end example
17959 @command{seq} prints the numbers from @var{first} to @var{last} by
17960 @var{increment}.  By default, each number is printed on a separate line.
17961 When @var{increment} is not specified, it defaults to @samp{1},
17962 even when @var{first} is larger than @var{last}.
17963 @var{first} also defaults to @samp{1}.  So @code{seq 1} prints
17964 @samp{1}, but @code{seq 0} and @code{seq 10 5} produce no output.
17965 The sequence of numbers ends when the sum of the current number and
17966 @var{increment} would become greater than @var{last},
17967 so @code{seq 1 10 10} only produces @samp{1}.
17968 @var{increment} must not be @samp{0}; use @command{yes} to get
17969 repeated output of a constant number.
17970 @var{first}, @var{increment} and @var{last} must not be @code{NaN}.
17971 Floating-point numbers may be specified.  @xref{Floating point}.
17973 The program accepts the following options.  Also see @ref{Common options}.
17974 Options must precede operands.
17976 @table @samp
17977 @item -f @var{format}
17978 @itemx --format=@var{format}
17979 @opindex -f
17980 @opindex --format
17981 @cindex formatting of numbers in @command{seq}
17982 Print all numbers using @var{format}.
17983 @var{format} must contain exactly one of the @samp{printf}-style
17984 floating point conversion specifications @samp{%a}, @samp{%e},
17985 @samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F}, @samp{%G}@.
17986 The @samp{%} may be followed by zero or more flags taken from the set
17987 @samp{-+#0 '}, then an optional width containing one or more digits,
17988 then an optional precision consisting of a @samp{.} followed by zero
17989 or more digits.  @var{format} may also contain any number of @samp{%%}
17990 conversion specifications.  All conversion specifications have the
17991 same meaning as with @samp{printf}.
17993 The default format is derived from @var{first}, @var{step}, and
17994 @var{last}.  If these all use a fixed point decimal representation,
17995 the default format is @samp{%.@var{p}f}, where @var{p} is the minimum
17996 precision that can represent the output numbers exactly.  Otherwise,
17997 the default format is @samp{%g}.
17999 @item -s @var{string}
18000 @itemx --separator=@var{string}
18001 @opindex -s
18002 @opindex --separator
18003 @cindex separator for numbers in @command{seq}
18004 Separate numbers with @var{string}; default is a newline.
18005 The output always terminates with a newline.
18007 @item -w
18008 @itemx --equal-width
18009 @opindex -w
18010 @opindex --equal-width
18011 Print all numbers with the same width, by padding with leading zeros.
18012 @var{first}, @var{step}, and @var{last} should all use a fixed point
18013 decimal representation.
18014 (To have other kinds of padding, use @option{--format}).
18016 @end table
18018 You can get finer-grained control over output with @option{-f}:
18020 @example
18021 $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
18022 (-9.00E+05)
18023 ( 2.00E+05)
18024 ( 1.30E+06)
18025 @end example
18027 If you want hexadecimal integer output, you can use @command{printf}
18028 to perform the conversion:
18030 @example
18031 $ printf '%x\n' $(seq 1048575 1024 1050623)
18032 fffff
18033 1003ff
18034 1007ff
18035 @end example
18037 For very long lists of numbers, use xargs to avoid
18038 system limitations on the length of an argument list:
18040 @example
18041 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
18042 f423e
18043 f423f
18044 f4240
18045 @end example
18047 To generate octal output, use the printf @code{%o} format instead
18048 of @code{%x}.
18050 On most systems, seq can produce whole-number output for values up to
18051 at least @math{2^{53}}.  Larger integers are approximated.  The details
18052 differ depending on your floating-point implementation.
18053 @xref{Floating point}.  A common
18054 case is that @command{seq} works with integers through @math{2^{64}},
18055 and larger integers may not be numerically correct:
18057 @example
18058 $ seq 50000000000000000000 2 50000000000000000004
18059 50000000000000000000
18060 50000000000000000000
18061 50000000000000000004
18062 @end example
18064 However, note that when limited to non-negative whole numbers,
18065 an increment of 1 and no format-specifying option, seq can print
18066 arbitrarily large numbers.
18068 Be careful when using @command{seq} with outlandish values: otherwise
18069 you may see surprising results, as @command{seq} uses floating point
18070 internally.  For example, on the x86 platform, where the internal
18071 representation uses a 64-bit fraction, the command:
18073 @example
18074 seq 1 0.0000000000000000001 1.0000000000000000009
18075 @end example
18077 outputs 1.0000000000000000007 twice and skips 1.0000000000000000008.
18079 @exitstatus
18082 @node File permissions
18083 @chapter File permissions
18084 @include perm.texi
18087 @node File timestamps
18088 @chapter File timestamps
18090 @cindex atime
18091 @cindex birthtime
18092 @cindex ctime
18093 @cindex mtime
18094 Standard POSIX files have three timestamps: the access timestamp
18095 (atime) of the last read, the modification timestamp (mtime) of the
18096 last write, and the status change timestamp (ctime) of the last change
18097 to the file's meta-information.  Some file systems support a
18098 fourth time: the birth timestamp (birthtime) of when the file was
18099 created; by definition, birthtime never changes.
18101 One common example of a ctime change is when the permissions of a file
18102 change.  Changing the permissions doesn't access the file, so atime
18103 doesn't change, nor does it modify the file, so the mtime doesn't
18104 change.  Yet, something about the file itself has changed, and this
18105 must be noted somewhere.  This is the job of the ctime field.  This is
18106 necessary, so that, for example, a backup program can make a fresh
18107 copy of the file, including the new permissions value.  Another
18108 operation that modifies a file's ctime without affecting the others is
18109 renaming.
18111 Naively, a file's atime, mtime, and ctime are set to the current time
18112 whenever you read, write, or change the attributes of the file
18113 respectively, and searching a directory counts as reading it.  A
18114 file's atime and mtime can also be set directly, via the
18115 @command{touch} command (@pxref{touch invocation}).  In practice,
18116 though, timestamps are not updated quite that way.
18118 For efficiency reasons, many systems are lazy about updating atimes:
18119 when a program accesses a file, they may delay updating the file's
18120 atime, or may not update the file's atime if the file has been
18121 accessed recently, or may not update the atime at all.  Similar
18122 laziness, though typically not quite so extreme, applies to mtimes and
18123 ctimes.
18125 Some systems emulate timestamps instead of supporting them directly,
18126 and these emulations may disagree with the naive interpretation.  For
18127 example, a system may fake an atime or ctime by using the mtime.
18129 @cindex clock skew
18130 The determination of what time is ``current'' depends on the
18131 platform.  Platforms with network file systems often use different
18132 clocks for the operating system and for file systems; because
18133 updates typically uses file systems' clocks by default, clock
18134 skew can cause the resulting file timestamps to appear to be in a
18135 program's ``future'' or ``past''.
18137 @cindex file timestamp resolution
18138 When the system updates a file timestamp to a desired time @var{t}
18139 (which is either the current time, or a time specified via the
18140 @command{touch} command), there are several reasons the file's
18141 timestamp may be set to a value that differs from @var{t}.  First,
18142 @var{t} may have a higher resolution than supported.  Second, a file
18143 system may use different resolutions for different types of times.
18144 Third, file timestamps may use a different resolution than operating
18145 system timestamps.  Fourth, the operating system primitives used to
18146 update timestamps may employ yet a different resolution.  For example,
18147 in theory a file system might use 10-microsecond resolution for access
18148 timestamp and 100-nanosecond resolution for modification timestamp, and the
18149 operating system might use nanosecond resolution for the current time
18150 and microsecond resolution for the primitive that @command{touch} uses
18151 to set a file's timestamp to an arbitrary value.
18154 @include parse-datetime.texi
18157 @c              What's GNU?
18158 @c              Arnold Robbins
18159 @node Opening the software toolbox
18160 @chapter Opening the Software Toolbox
18162 An earlier version of this chapter appeared in
18163 @uref{http://www.linuxjournal.com/article.php?sid=2762, the
18164 @cite{What's GNU@?} column of the June 1994 @cite{Linux Journal}}.
18165 It was written by Arnold Robbins.
18167 @menu
18168 * Toolbox introduction::        Toolbox introduction
18169 * I/O redirection::             I/O redirection
18170 * The who command::             The @command{who} command
18171 * The cut command::             The @command{cut} command
18172 * The sort command::            The @command{sort} command
18173 * The uniq command::            The @command{uniq} command
18174 * Putting the tools together::  Putting the tools together
18175 @end menu
18178 @node Toolbox introduction
18179 @unnumberedsec Toolbox Introduction
18181 This month's column is only peripherally related to the GNU Project, in
18182 that it describes a number of the GNU tools on your GNU/Linux system
18183 and how they
18184 might be used.  What it's really about is the ``Software Tools'' philosophy
18185 of program development and usage.
18187 The software tools philosophy was an important and integral concept
18188 in the initial design and development of Unix (of which Linux and GNU are
18189 essentially clones).  Unfortunately, in the modern day press of
18190 Internetworking and flashy GUIs, it seems to have fallen by the
18191 wayside.  This is a shame, since it provides a powerful mental model
18192 for solving many kinds of problems.
18194 Many people carry a Swiss Army knife around in their pants pockets (or
18195 purse).  A Swiss Army knife is a handy tool to have: it has several knife
18196 blades, a screwdriver, tweezers, toothpick, nail file, corkscrew, and perhaps
18197 a number of other things on it.  For the everyday, small miscellaneous jobs
18198 where you need a simple, general purpose tool, it's just the thing.
18200 On the other hand, an experienced carpenter doesn't build a house using
18201 a Swiss Army knife.  Instead, he has a toolbox chock full of specialized
18202 tools---a saw, a hammer, a screwdriver, a plane, and so on.  And he knows
18203 exactly when and where to use each tool; you won't catch him hammering nails
18204 with the handle of his screwdriver.
18206 The Unix developers at Bell Labs were all professional programmers and trained
18207 computer scientists.  They had found that while a one-size-fits-all program
18208 might appeal to a user because there's only one program to use, in practice
18209 such programs are
18211 @enumerate a
18212 @item
18213 difficult to write,
18215 @item
18216 difficult to maintain and
18217 debug, and
18219 @item
18220 difficult to extend to meet new situations.
18221 @end enumerate
18223 Instead, they felt that programs should be specialized tools.  In short, each
18224 program ``should do one thing well.''  No more and no less.  Such programs are
18225 simpler to design, write, and get right---they only do one thing.
18227 Furthermore, they found that with the right machinery for hooking programs
18228 together, that the whole was greater than the sum of the parts.  By combining
18229 several special purpose programs, you could accomplish a specific task
18230 that none of the programs was designed for, and accomplish it much more
18231 quickly and easily than if you had to write a special purpose program.
18232 We will see some (classic) examples of this further on in the column.
18233 (An important additional point was that, if necessary, take a detour
18234 and build any software tools you may need first, if you don't already
18235 have something appropriate in the toolbox.)
18237 @node I/O redirection
18238 @unnumberedsec I/O Redirection
18240 Hopefully, you are familiar with the basics of I/O redirection in the
18241 shell, in particular the concepts of ``standard input,'' ``standard output,''
18242 and ``standard error''.  Briefly, ``standard input'' is a data source, where
18243 data comes from.  A program should not need to either know or care if the
18244 data source is a disk file, a keyboard, a magnetic tape, or even a punched
18245 card reader.  Similarly, ``standard output'' is a data sink, where data goes
18246 to.  The program should neither know nor care where this might be.
18247 Programs that only read their standard input, do something to the data,
18248 and then send it on, are called @dfn{filters}, by analogy to filters in a
18249 water pipeline.
18251 With the Unix shell, it's very easy to set up data pipelines:
18253 @smallexample
18254 program_to_create_data | filter1 | ... | filterN > final.pretty.data
18255 @end smallexample
18257 We start out by creating the raw data; each filter applies some successive
18258 transformation to the data, until by the time it comes out of the pipeline,
18259 it is in the desired form.
18261 This is fine and good for standard input and standard output.  Where does the
18262 standard error come in to play?  Well, think about @command{filter1} in
18263 the pipeline above.  What happens if it encounters an error in the data it
18264 sees?  If it writes an error message to standard output, it will just
18265 disappear down the pipeline into @command{filter2}'s input, and the
18266 user will probably never see it.  So programs need a place where they can send
18267 error messages so that the user will notice them.  This is standard error,
18268 and it is usually connected to your console or window, even if you have
18269 redirected standard output of your program away from your screen.
18271 For filter programs to work together, the format of the data has to be
18272 agreed upon.  The most straightforward and easiest format to use is simply
18273 lines of text.  Unix data files are generally just streams of bytes, with
18274 lines delimited by the ASCII LF (Line Feed) character,
18275 conventionally called a ``newline'' in the Unix literature.  (This is
18276 @code{'\n'} if you're a C programmer.)  This is the format used by all
18277 the traditional filtering programs.  (Many earlier operating systems
18278 had elaborate facilities and special purpose programs for managing
18279 binary data.  Unix has always shied away from such things, under the
18280 philosophy that it's easiest to simply be able to view and edit your
18281 data with a text editor.)
18283 OK, enough introduction.  Let's take a look at some of the tools, and then
18284 we'll see how to hook them together in interesting ways.   In the following
18285 discussion, we will only present those command line options that interest
18286 us.  As you should always do, double check your system documentation
18287 for the full story.
18289 @node The who command
18290 @unnumberedsec The @command{who} Command
18292 The first program is the @command{who} command.  By itself, it generates a
18293 list of the users who are currently logged in.  Although I'm writing
18294 this on a single-user system, we'll pretend that several people are
18295 logged in:
18297 @example
18298 $ who
18299 @print{} arnold   console Jan 22 19:57
18300 @print{} miriam   ttyp0   Jan 23 14:19(:0.0)
18301 @print{} bill     ttyp1   Jan 21 09:32(:0.0)
18302 @print{} arnold   ttyp2   Jan 23 20:48(:0.0)
18303 @end example
18305 Here, the @samp{$} is the usual shell prompt, at which I typed @samp{who}.
18306 There are three people logged in, and I am logged in twice.  On traditional
18307 Unix systems, user names are never more than eight characters long.  This
18308 little bit of trivia will be useful later.  The output of @command{who} is nice,
18309 but the data is not all that exciting.
18311 @node The cut command
18312 @unnumberedsec The @command{cut} Command
18314 The next program we'll look at is the @command{cut} command.  This program
18315 cuts out columns or fields of input data.  For example, we can tell it
18316 to print just the login name and full name from the @file{/etc/passwd}
18317 file.  The @file{/etc/passwd} file has seven fields, separated by
18318 colons:
18320 @example
18321 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
18322 @end example
18324 To get the first and fifth fields, we would use @command{cut} like this:
18326 @example
18327 $ cut -d: -f1,5 /etc/passwd
18328 @print{} root:Operator
18329 @dots{}
18330 @print{} arnold:Arnold D. Robbins
18331 @print{} miriam:Miriam A. Robbins
18332 @dots{}
18333 @end example
18335 With the @option{-c} option, @command{cut} will cut out specific characters
18336 (i.e., columns) in the input lines.  This is useful for input data
18337 that has fixed width fields, and does not have a field separator.  For
18338 example, list the Monday dates for the current month:
18340 @c Is using cal ok?  Looked at gcal, but I don't like it.
18341 @example
18342 $ cal | cut -c 3-5
18343 @print{}Mo
18344 @print{}
18345 @print{}  6
18346 @print{} 13
18347 @print{} 20
18348 @print{} 27
18349 @end example
18351 @node The sort command
18352 @unnumberedsec The @command{sort} Command
18354 Next we'll look at the @command{sort} command.  This is one of the most
18355 powerful commands on a Unix-style system; one that you will often find
18356 yourself using when setting up fancy data plumbing.
18358 The @command{sort}
18359 command reads and sorts each file named on the command line.  It then
18360 merges the sorted data and writes it to standard output.  It will read
18361 standard input if no files are given on the command line (thus
18362 making it into a filter).  The sort is based on the character collating
18363 sequence or based on user-supplied ordering criteria.
18366 @node The uniq command
18367 @unnumberedsec The @command{uniq} Command
18369 Finally (at least for now), we'll look at the @command{uniq} program.  When
18370 sorting data, you will often end up with duplicate lines, lines that
18371 are identical.  Usually, all you need is one instance of each line.
18372 This is where @command{uniq} comes in.  The @command{uniq} program reads its
18373 standard input.  It prints only one
18374 copy of each repeated line.  It does have several options.  Later on,
18375 we'll use the @option{-c} option, which prints each unique line, preceded
18376 by a count of the number of times that line occurred in the input.
18379 @node Putting the tools together
18380 @unnumberedsec Putting the Tools Together
18382 Now, let's suppose this is a large ISP server system with dozens of users
18383 logged in.  The management wants the system administrator to write a
18384 program that will
18385 generate a sorted list of logged in users.  Furthermore, even if a user
18386 is logged in multiple times, his or her name should only show up in the
18387 output once.
18389 The administrator could sit down with the system documentation and write a C
18390 program that did this.  It would take perhaps a couple of hundred lines
18391 of code and about two hours to write it, test it, and debug it.
18392 However, knowing the software toolbox, the administrator can instead start out
18393 by generating just a list of logged on users:
18395 @example
18396 $ who | cut -c1-8
18397 @print{} arnold
18398 @print{} miriam
18399 @print{} bill
18400 @print{} arnold
18401 @end example
18403 Next, sort the list:
18405 @example
18406 $ who | cut -c1-8 | sort
18407 @print{} arnold
18408 @print{} arnold
18409 @print{} bill
18410 @print{} miriam
18411 @end example
18413 Finally, run the sorted list through @command{uniq}, to weed out duplicates:
18415 @example
18416 $ who | cut -c1-8 | sort | uniq
18417 @print{} arnold
18418 @print{} bill
18419 @print{} miriam
18420 @end example
18422 The @command{sort} command actually has a @option{-u} option that does what
18423 @command{uniq} does.  However, @command{uniq} has other uses for which one
18424 cannot substitute @samp{sort -u}.
18426 The administrator puts this pipeline into a shell script, and makes it
18427 available for
18428 all the users on the system (@samp{#} is the system administrator,
18429 or @code{root}, prompt):
18431 @example
18432 # cat > /usr/local/bin/listusers
18433 who | cut -c1-8 | sort | uniq
18435 # chmod +x /usr/local/bin/listusers
18436 @end example
18438 There are four major points to note here.  First, with just four
18439 programs, on one command line, the administrator was able to save about two
18440 hours worth of work.  Furthermore, the shell pipeline is just about as
18441 efficient as the C program would be, and it is much more efficient in
18442 terms of programmer time.  People time is much more expensive than
18443 computer time, and in our modern ``there's never enough time to do
18444 everything'' society, saving two hours of programmer time is no mean
18445 feat.
18447 Second, it is also important to emphasize that with the
18448 @emph{combination} of the tools, it is possible to do a special
18449 purpose job never imagined by the authors of the individual programs.
18451 Third, it is also valuable to build up your pipeline in stages, as we did here.
18452 This allows you to view the data at each stage in the pipeline, which helps
18453 you acquire the confidence that you are indeed using these tools correctly.
18455 Finally, by bundling the pipeline in a shell script, other users can use
18456 your command, without having to remember the fancy plumbing you set up for
18457 them.  In terms of how you run them, shell scripts and compiled programs are
18458 indistinguishable.
18460 After the previous warm-up exercise, we'll look at two additional, more
18461 complicated pipelines.  For them, we need to introduce two more tools.
18463 The first is the @command{tr} command, which stands for ``transliterate.''
18464 The @command{tr} command works on a character-by-character basis, changing
18465 characters.  Normally it is used for things like mapping upper case to
18466 lower case:
18468 @example
18469 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
18470 @print{} this example has mixed case!
18471 @end example
18473 There are several options of interest:
18475 @table @code
18476 @item -c
18477 work on the complement of the listed characters, i.e.,
18478 operations apply to characters not in the given set
18480 @item -d
18481 delete characters in the first set from the output
18483 @item -s
18484 squeeze repeated characters in the output into just one character.
18485 @end table
18487 We will be using all three options in a moment.
18489 The other command we'll look at is @command{comm}.  The @command{comm}
18490 command takes two sorted input files as input data, and prints out the
18491 files' lines in three columns.  The output columns are the data lines
18492 unique to the first file, the data lines unique to the second file, and
18493 the data lines that are common to both.  The @option{-1}, @option{-2}, and
18494 @option{-3} command line options @emph{omit} the respective columns.  (This is
18495 non-intuitive and takes a little getting used to.)  For example:
18497 @example
18498 $ cat f1
18499 @print{} 11111
18500 @print{} 22222
18501 @print{} 33333
18502 @print{} 44444
18503 $ cat f2
18504 @print{} 00000
18505 @print{} 22222
18506 @print{} 33333
18507 @print{} 55555
18508 $ comm f1 f2
18509 @print{}         00000
18510 @print{} 11111
18511 @print{}                 22222
18512 @print{}                 33333
18513 @print{} 44444
18514 @print{}         55555
18515 @end example
18517 The file name @file{-} tells @command{comm} to read standard input
18518 instead of a regular file.
18520 Now we're ready to build a fancy pipeline.  The first application is a word
18521 frequency counter.  This helps an author determine if he or she is over-using
18522 certain words.
18524 The first step is to change the case of all the letters in our input file
18525 to one case.  ``The'' and ``the'' are the same word when doing counting.
18527 @example
18528 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
18529 @end example
18531 The next step is to get rid of punctuation.  Quoted words and unquoted words
18532 should be treated identically; it's easiest to just get the punctuation out of
18533 the way.
18535 @smallexample
18536 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
18537 @end smallexample
18539 The second @command{tr} command operates on the complement of the listed
18540 characters, which are all the letters, the digits, the underscore, and
18541 the blank.  The @samp{\n} represents the newline character; it has to
18542 be left alone.  (The ASCII tab character should also be included for
18543 good measure in a production script.)
18545 At this point, we have data consisting of words separated by blank space.
18546 The words only contain alphanumeric characters (and the underscore).  The
18547 next step is break the data apart so that we have one word per line.  This
18548 makes the counting operation much easier, as we will see shortly.
18550 @smallexample
18551 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18552 > tr -s ' ' '\n' | ...
18553 @end smallexample
18555 This command turns blanks into newlines.  The @option{-s} option squeezes
18556 multiple newline characters in the output into just one, removing
18557 blank lines.  (The @samp{>} is the shell's ``secondary prompt.''
18558 This is what the shell prints when it notices you haven't finished
18559 typing in all of a command.)
18561 We now have data consisting of one word per line, no punctuation, all one
18562 case.  We're ready to count each word:
18564 @smallexample
18565 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18566 > tr -s ' ' '\n' | sort | uniq -c | ...
18567 @end smallexample
18569 At this point, the data might look something like this:
18571 @example
18572      60 a
18573       2 able
18574       6 about
18575       1 above
18576       2 accomplish
18577       1 acquire
18578       1 actually
18579       2 additional
18580 @end example
18582 The output is sorted by word, not by count!  What we want is the most
18583 frequently used words first.  Fortunately, this is easy to accomplish,
18584 with the help of two more @command{sort} options:
18586 @table @code
18587 @item -n
18588 do a numeric sort, not a textual one
18590 @item -r
18591 reverse the order of the sort
18592 @end table
18594 The final pipeline looks like this:
18596 @smallexample
18597 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18598 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
18599 @print{}    156 the
18600 @print{}     60 a
18601 @print{}     58 to
18602 @print{}     51 of
18603 @print{}     51 and
18604 @dots{}
18605 @end smallexample
18607 Whew!  That's a lot to digest.  Yet, the same principles apply.  With six
18608 commands, on two lines (really one long one split for convenience), we've
18609 created a program that does something interesting and useful, in much
18610 less time than we could have written a C program to do the same thing.
18612 A minor modification to the above pipeline can give us a simple spelling
18613 checker!  To determine if you've spelled a word correctly, all you have to
18614 do is look it up in a dictionary.  If it is not there, then chances are
18615 that your spelling is incorrect.  So, we need a dictionary.
18616 The conventional location for a dictionary is @file{/usr/dict/words}.
18617 On my GNU/Linux system,@footnote{Redhat Linux 6.1, for the November 2000
18618 revision of this article.}
18619 this is a sorted, 45,402 word dictionary.
18621 Now, how to compare our file with the dictionary?  As before, we generate
18622 a sorted list of words, one per line:
18624 @smallexample
18625 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18626 > tr -s ' ' '\n' | sort -u | ...
18627 @end smallexample
18629 Now, all we need is a list of words that are @emph{not} in the
18630 dictionary.  Here is where the @command{comm} command comes in.
18632 @smallexample
18633 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18634 > tr -s ' ' '\n' | sort -u |
18635 > comm -23 - /usr/dict/words
18636 @end smallexample
18638 The @option{-2} and @option{-3} options eliminate lines that are only in the
18639 dictionary (the second file), and lines that are in both files.  Lines
18640 only in the first file (standard input, our stream of words), are
18641 words that are not in the dictionary.  These are likely candidates for
18642 spelling errors.  This pipeline was the first cut at a production
18643 spelling checker on Unix.
18645 There are some other tools that deserve brief mention.
18647 @table @command
18648 @item grep
18649 search files for text that matches a regular expression
18651 @item wc
18652 count lines, words, characters
18654 @item tee
18655 a T-fitting for data pipes, copies data to files and to standard output
18657 @item sed
18658 the stream editor, an advanced tool
18660 @item awk
18661 a data manipulation language, another advanced tool
18662 @end table
18664 The software tools philosophy also espoused the following bit of
18665 advice: ``Let someone else do the hard part.''  This means, take
18666 something that gives you most of what you need, and then massage it the
18667 rest of the way until it's in the form that you want.
18669 To summarize:
18671 @enumerate 1
18672 @item
18673 Each program should do one thing well.  No more, no less.
18675 @item
18676 Combining programs with appropriate plumbing leads to results where
18677 the whole is greater than the sum of the parts.  It also leads to novel
18678 uses of programs that the authors might never have imagined.
18680 @item
18681 Programs should never print extraneous header or trailer data, since these
18682 could get sent on down a pipeline.  (A point we didn't mention earlier.)
18684 @item
18685 Let someone else do the hard part.
18687 @item
18688 Know your toolbox!  Use each program appropriately.  If you don't have an
18689 appropriate tool, build one.
18690 @end enumerate
18692 All the programs discussed are available as described in
18693 @uref{https://www.gnu.org/software/coreutils/coreutils.html,
18694 GNU core utilities}.
18696 None of what I have presented in this column is new.  The Software Tools
18697 philosophy was first introduced in the book @cite{Software Tools}, by
18698 Brian Kernighan and P.J. Plauger (Addison-Wesley, ISBN 0-201-03669-X).
18699 This book showed how to write and use software tools.  It was written in
18700 1976, using a preprocessor for FORTRAN named @command{ratfor} (RATional
18701 FORtran).  At the time, C was not as ubiquitous as it is now; FORTRAN
18702 was.  The last chapter presented a @command{ratfor} to FORTRAN
18703 processor, written in @command{ratfor}.  @command{ratfor} looks an awful
18704 lot like C; if you know C, you won't have any problem following the
18705 code.
18707 In 1981, the book was updated and made available as @cite{Software Tools
18708 in Pascal} (Addison-Wesley, ISBN 0-201-10342-7).  Both books are
18709 still in print and are well worth
18710 reading if you're a programmer.  They certainly made a major change in
18711 how I view programming.
18713 The programs in both books are available from
18714 @uref{https://www.cs.princeton.edu/~bwk/, Brian Kernighan's home page}.
18715 For a number of years, there was an active
18716 Software Tools Users Group, whose members had ported the original
18717 @command{ratfor} programs to essentially every computer system with a
18718 FORTRAN compiler.  The popularity of the group waned in the middle 1980s
18719 as Unix began to spread beyond universities.
18721 With the current proliferation of GNU code and other clones of Unix programs,
18722 these programs now receive little attention; modern C versions are
18723 much more efficient and do more than these programs do.  Nevertheless, as
18724 exposition of good programming style, and evangelism for a still-valuable
18725 philosophy, these books are unparalleled, and I recommend them highly.
18727 Acknowledgment: I would like to express my gratitude to Brian Kernighan
18728 of Bell Labs, the original Software Toolsmith, for reviewing this column.
18730 @node GNU Free Documentation License
18731 @appendix GNU Free Documentation License
18733 @include fdl.texi
18735 @node Concept index
18736 @unnumbered Index
18738 @printindex cp
18740 @bye
18742 @c Local variables:
18743 @c texinfo-column-for-description: 32
18744 @c End: