12215c3c14232d5d8ed27217607f4851e15a63df
[platform/upstream/coreutils.git] / doc / coreutils.texi
1 \input texinfo
2 @c %**start of header
3 @setfilename coreutils.info
4 @settitle @sc{gnu} Coreutils
5
6 @c %**end of header
7
8 @include version.texi
9 @include constants.texi
10
11 @c Define new indices.
12 @defcodeindex op
13 @defcodeindex fl
14
15 @c Put everything in one index (arbitrarily chosen to be the concept index).
16 @syncodeindex fl cp
17 @syncodeindex fn cp
18 @syncodeindex ky cp
19 @syncodeindex op cp
20 @syncodeindex pg cp
21 @syncodeindex vr cp
22
23 @dircategory Basics
24 @direntry
25 * Coreutils: (coreutils).       Core GNU (file, text, shell) utilities.
26 * Common options: (coreutils)Common options.      Common options.
27 * File permissions: (coreutils)File permissions.  Access modes.
28 * Date input formats: (coreutils)Date input formats.
29 @end direntry
30
31 @c FIXME: the following need documentation
32 @c * [: (coreutils)[ invocation.                   File/string tests.
33 @c * pinky: (coreutils)pinky invocation.           FIXME.
34 @c * uptime: (coreutils)uptime invocation.         FIXME.
35
36 @dircategory Individual utilities
37 @direntry
38 * base64: (coreutils)base64 invocation.         Base64 encode/decode data.
39 * basename: (coreutils)basename invocation.     Strip directory and suffix.
40 * cat: (coreutils)cat invocation.               Concatenate and write files.
41 * chgrp: (coreutils)chgrp invocation.           Change file groups.
42 * chmod: (coreutils)chmod invocation.           Change file permissions.
43 * chown: (coreutils)chown invocation.           Change file owners/groups.
44 * chroot: (coreutils)chroot invocation.         Specify the root directory.
45 * cksum: (coreutils)cksum invocation.           Print POSIX CRC checksum.
46 * comm: (coreutils)comm invocation.             Compare sorted files by line.
47 * cp: (coreutils)cp invocation.                 Copy files.
48 * csplit: (coreutils)csplit invocation.         Split by context.
49 * cut: (coreutils)cut invocation.               Print selected parts of lines.
50 * date: (coreutils)date invocation.             Print/set system date and time.
51 * dd: (coreutils)dd invocation.                 Copy and convert a file.
52 * df: (coreutils)df invocation.                 Report file system disk usage.
53 * dir: (coreutils)dir invocation.               List directories briefly.
54 * dircolors: (coreutils)dircolors invocation.   Color setup for ls.
55 * dirname: (coreutils)dirname invocation.       Strip non-directory suffix.
56 * du: (coreutils)du invocation.                 Report on disk usage.
57 * echo: (coreutils)echo invocation.             Print a line of text.
58 * env: (coreutils)env invocation.               Modify the environment.
59 * expand: (coreutils)expand invocation.         Convert tabs to spaces.
60 * expr: (coreutils)expr invocation.             Evaluate expressions.
61 * factor: (coreutils)factor invocation.         Print prime factors
62 * false: (coreutils)false invocation.           Do nothing, unsuccessfully.
63 * fmt: (coreutils)fmt invocation.               Reformat paragraph text.
64 * fold: (coreutils)fold invocation.             Wrap long input lines.
65 * groups: (coreutils)groups invocation.         Print group names a user is in.
66 * head: (coreutils)head invocation.             Output the first part of files.
67 * hostid: (coreutils)hostid invocation.         Print numeric host identifier.
68 * hostname: (coreutils)hostname invocation.     Print or set system name.
69 * id: (coreutils)id invocation.                 Print user identity.
70 * install: (coreutils)install invocation.       Copy and change attributes.
71 * join: (coreutils)join invocation.             Join lines on a common field.
72 * kill: (coreutils)kill invocation.             Send a signal to processes.
73 * link: (coreutils)link invocation.             Make hard links between files.
74 * ln: (coreutils)ln invocation.                 Make links between files.
75 * logname: (coreutils)logname invocation.       Print current login name.
76 * ls: (coreutils)ls invocation.                 List directory contents.
77 * md5sum: (coreutils)md5sum invocation.         Print or check MD5 digests.
78 * mkdir: (coreutils)mkdir invocation.           Create directories.
79 * mkfifo: (coreutils)mkfifo invocation.         Create FIFOs (named pipes).
80 * mknod: (coreutils)mknod invocation.           Create special files.
81 * mv: (coreutils)mv invocation.                 Rename files.
82 * nice: (coreutils)nice invocation.             Modify niceness.
83 * nl: (coreutils)nl invocation.                 Number lines and write files.
84 * nohup: (coreutils)nohup invocation.           Immunize to hangups.
85 * od: (coreutils)od invocation.                 Dump files in octal, etc.
86 * paste: (coreutils)paste invocation.           Merge lines of files.
87 * pathchk: (coreutils)pathchk invocation.       Check file name portability.
88 * pr: (coreutils)pr invocation.                 Paginate or columnate files.
89 * printenv: (coreutils)printenv invocation.     Print environment variables.
90 * printf: (coreutils)printf invocation.         Format and print data.
91 * ptx: (coreutils)ptx invocation.               Produce permuted indexes.
92 * pwd: (coreutils)pwd invocation.               Print working directory.
93 * readlink: (coreutils)readlink invocation.     Print referent of a symlink.
94 * rm: (coreutils)rm invocation.                 Remove files.
95 * rmdir: (coreutils)rmdir invocation.           Remove empty directories.
96 * seq: (coreutils)seq invocation.               Print numeric sequences
97 * sha1sum: (coreutils)sha1sum invocation.       Print or check SHA-1 digests.
98 * sha2: (coreutils)sha2 utilities.              Print or check SHA-2 digests.
99 * shred: (coreutils)shred invocation.           Remove files more securely.
100 * shuf: (coreutils)shuf invocation.             Shuffling text files.
101 * sleep: (coreutils)sleep invocation.           Delay for a specified time.
102 * sort: (coreutils)sort invocation.             Sort text files.
103 * split: (coreutils)split invocation.           Split into fixed-size pieces.
104 * stat: (coreutils)stat invocation.             Report file(system) status.
105 * stty: (coreutils)stty invocation.             Print/change terminal settings.
106 * su: (coreutils)su invocation.                 Modify user and group ID.
107 * sum: (coreutils)sum invocation.               Print traditional checksum.
108 * sync: (coreutils)sync invocation.             Synchronize memory and disk.
109 * tac: (coreutils)tac invocation.               Reverse files.
110 * tail: (coreutils)tail invocation.             Output the last part of files.
111 * tee: (coreutils)tee invocation.               Redirect to multiple files.
112 * test: (coreutils)test invocation.             File/string tests.
113 * touch: (coreutils)touch invocation.           Change file timestamps.
114 * tr: (coreutils)tr invocation.                 Translate characters.
115 * true: (coreutils)true invocation.             Do nothing, successfully.
116 * tsort: (coreutils)tsort invocation.           Topological sort.
117 * tty: (coreutils)tty invocation.               Print terminal name.
118 * uname: (coreutils)uname invocation.           Print system information.
119 * unexpand: (coreutils)unexpand invocation.     Convert spaces to tabs.
120 * uniq: (coreutils)uniq invocation.             Uniquify files.
121 * unlink: (coreutils)unlink invocation.         Removal via unlink(2).
122 * users: (coreutils)users invocation.           Print current user names.
123 * vdir: (coreutils)vdir invocation.             List directories verbosely.
124 * wc: (coreutils)wc invocation.                 Line, word, and byte counts.
125 * who: (coreutils)who invocation.               Print who is logged in.
126 * whoami: (coreutils)whoami invocation.         Print effective user ID.
127 * yes: (coreutils)yes invocation.               Print a string indefinitely.
128 @end direntry
129
130 @copying
131 This manual documents version @value{VERSION} of the @sc{gnu} core
132 utilities, including the standard programs for text and file manipulation.
133
134 Copyright @copyright{} 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2004,
135 2005, 2006 Free Software Foundation, Inc.
136
137 @quotation
138 Permission is granted to copy, distribute and/or modify this document
139 under the terms of the GNU Free Documentation License, Version 1.1 or
140 any later version published by the Free Software Foundation; with no
141 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
142 Texts.  A copy of the license is included in the section entitled ``GNU
143 Free Documentation License''.
144 @end quotation
145 @end copying
146
147 @titlepage
148 @title @sc{gnu} @code{Coreutils}
149 @subtitle Core GNU utilities
150 @subtitle for version @value{VERSION}, @value{UPDATED}
151 @author David MacKenzie et al.
152
153 @page
154 @vskip 0pt plus 1filll
155 @insertcopying
156 @end titlepage
157
158
159 @ifnottex
160 @node Top
161 @top GNU Coreutils
162
163 @insertcopying
164 @end ifnottex
165
166 @cindex core utilities
167 @cindex text utilities
168 @cindex shell utilities
169 @cindex file utilities
170
171 @menu
172 * Introduction::                       Caveats, overview, and authors.
173 * Common options::                     Common options.
174 * Output of entire files::             cat tac nl od
175 * Formatting file contents::           fmt pr fold
176 * Output of parts of files::           head tail split csplit
177 * Summarizing files::                  wc sum cksum md5sum sha1sum sha2
178 * Operating on sorted files::          sort shuf uniq comm ptx tsort
179 * Operating on fields within a line::  cut paste join
180 * Operating on characters::            tr expand unexpand
181 * Directory listing::                  ls dir vdir dircolors
182 * Basic operations::                   cp dd install mv rm shred
183 * Special file types::                 ln mkdir rmdir mkfifo mknod
184 * Changing file attributes::           chgrp chmod chown touch
185 * Disk usage::                         df du stat sync
186 * Printing text::                      echo printf yes
187 * Conditions::                         false true test expr
188 * Redirection::                        tee
189 * File name manipulation::             dirname basename pathchk
190 * Working context::                    pwd stty printenv tty
191 * User information::                   id logname whoami groups users who
192 * System context::                     date uname hostname hostid
193 * Modified command invocation::        chroot env nice nohup su
194 * Process control::                    kill
195 * Delaying::                           sleep
196 * Numeric operations::                 factor seq
197 * File permissions::                   Access modes.
198 * Date input formats::                 Specifying date strings.
199 * Opening the software toolbox::       The software tools philosophy.
200 * GNU Free Documentation License::     The license for this documentation.
201 * Index::                              General index.
202
203 @detailmenu
204  --- The Detailed Node Listing ---
205
206 Common Options
207
208 * Exit status::                 Indicating program success or failure.
209 * Backup options::              Backup options
210 * Block size::                  Block size
211 * Random sources::              Sources of random data
212 * Target directory::            Target directory
213 * Trailing slashes::            Trailing slashes
214 * Traversing symlinks::         Traversing symlinks to directories
215 * Treating / specially::        Treating / specially
216 * Standards conformance::       Standards conformance
217
218 Output of entire files
219
220 * cat invocation::              Concatenate and write files.
221 * tac invocation::              Concatenate and write files in reverse.
222 * nl invocation::               Number lines and write files.
223 * od invocation::               Write files in octal or other formats.
224 * base64 invocation::           Transform data into printable data.
225
226 Formatting file contents
227
228 * fmt invocation::              Reformat paragraph text.
229 * pr invocation::               Paginate or columnate files for printing.
230 * fold invocation::             Wrap input lines to fit in specified width.
231
232 Output of parts of files
233
234 * head invocation::             Output the first part of files.
235 * tail invocation::             Output the last part of files.
236 * split invocation::            Split a file into fixed-size pieces.
237 * csplit invocation::           Split a file into context-determined pieces.
238
239 Summarizing files
240
241 * wc invocation::               Print newline, word, and byte counts.
242 * sum invocation::              Print checksum and block counts.
243 * cksum invocation::            Print CRC checksum and byte counts.
244 * md5sum invocation::           Print or check MD5 digests.
245 * sha1sum invocation::          Print or check SHA-1 digests.
246 * sha2 utilities::              Print or check SHA-2 digests.
247
248 Operating on sorted files
249
250 * sort invocation::             Sort text files.
251 * shuf invocation::             Shuffle text files.
252 * uniq invocation::             Uniquify files.
253 * comm invocation::             Compare two sorted files line by line.
254 * ptx invocation::              Produce a permuted index of file contents.
255 * tsort invocation::            Topological sort.
256
257 @command{ptx}: Produce permuted indexes
258
259 * General options in ptx::      Options which affect general program behavior.
260 * Charset selection in ptx::    Underlying character set considerations.
261 * Input processing in ptx::     Input fields, contexts, and keyword selection.
262 * Output formatting in ptx::    Types of output format, and sizing the fields.
263 * Compatibility in ptx::        The @acronym{GNU} extensions to @command{ptx}
264
265 Operating on fields within a line
266
267 * cut invocation::              Print selected parts of lines.
268 * paste invocation::            Merge lines of files.
269 * join invocation::             Join lines on a common field.
270
271 Operating on characters
272
273 * tr invocation::               Translate, squeeze, and/or delete characters.
274 * expand invocation::           Convert tabs to spaces.
275 * unexpand invocation::         Convert spaces to tabs.
276
277 @command{tr}: Translate, squeeze, and/or delete characters
278
279 * Character sets::              Specifying sets of characters.
280 * Translating::                 Changing one set of characters to another.
281 * Squeezing::                   Squeezing repeats and deleting.
282
283 Directory listing
284
285 * ls invocation::               List directory contents
286 * dir invocation::              Briefly list directory contents
287 * vdir invocation::             Verbosely list directory contents
288 * dircolors invocation::        Color setup for @command{ls}
289
290 @command{ls}:  List directory contents
291
292 * Which files are listed::      Which files are listed
293 * What information is listed::  What information is listed
294 * Sorting the output::          Sorting the output
295 * More details about version sort::  More details about version sort
296 * General output formatting::   General output formatting
297 * Formatting the file names::   Formatting the file names
298
299 Basic operations
300
301 * cp invocation::               Copy files and directories
302 * dd invocation::               Convert and copy a file
303 * install invocation::          Copy files and set attributes
304 * mv invocation::               Move (rename) files
305 * rm invocation::               Remove files or directories
306 * shred invocation::            Remove files more securely
307
308 Special file types
309
310 * link invocation::             Make a hard link via the link syscall
311 * ln invocation::               Make links between files
312 * mkdir invocation::            Make directories
313 * mkfifo invocation::           Make FIFOs (named pipes)
314 * mknod invocation::            Make block or character special files
315 * readlink invocation::         Print the referent of a symbolic link
316 * rmdir invocation::            Remove empty directories
317 * unlink invocation::           Remove files via unlink syscall
318
319 Changing file attributes
320
321 * chown invocation::            Change file owner and group
322 * chgrp invocation::            Change group ownership
323 * chmod invocation::            Change access permissions
324 * touch invocation::            Change file timestamps
325
326 Disk usage
327
328 * df invocation::               Report file system disk space usage
329 * du invocation::               Estimate file space usage
330 * stat invocation::             Report file or file system status
331 * sync invocation::             Synchronize data on disk with memory
332
333 Printing text
334
335 * echo invocation::             Print a line of text
336 * printf invocation::           Format and print data
337 * yes invocation::              Print a string until interrupted
338
339 Conditions
340
341 * false invocation::              Do nothing, unsuccessfully
342 * true invocation::               Do nothing, successfully
343 * test invocation::               Check file types and compare values
344 * expr invocation::               Evaluate expressions
345
346 @command{test}: Check file types and compare values
347
348 * File type tests::               File type tests
349 * Access permission tests::       Access permission tests
350 * File characteristic tests::     File characteristic tests
351 * String tests::                  String tests
352 * Numeric tests::                 Numeric tests
353
354 @command{expr}: Evaluate expression
355
356 * String expressions::         + : match substr index length
357 * Numeric expressions::        + - * / %
358 * Relations for expr::         | & < <= = == != >= >
359 * Examples of expr::           Examples of using @command{expr}
360
361 Redirection
362
363 * tee invocation::               Redirect output to multiple files
364
365 File name manipulation
366
367 * basename invocation::          Strip directory and suffix from a file name
368 * dirname invocation::           Strip non-directory suffix from a file name
369 * pathchk invocation::           Check file name portability
370
371 Working context
372
373 * pwd invocation::               Print working directory
374 * stty invocation::              Print or change terminal characteristics
375 * printenv invocation::          Print all or some environment variables
376 * tty invocation::               Print file name of terminal on standard input
377
378 @command{stty}: Print or change terminal characteristics
379
380 * Control::                     Control settings
381 * Input::                       Input settings
382 * Output::                      Output settings
383 * Local::                       Local settings
384 * Combination::                 Combination settings
385 * Characters::                  Special characters
386 * Special::                     Special settings
387
388 User information
389
390 * id invocation::                Print user identity
391 * logname invocation::           Print current login name
392 * whoami invocation::            Print effective user ID
393 * groups invocation::            Print group names a user is in
394 * users invocation::             Print login names of users currently logged in
395 * who invocation::               Print who is currently logged in
396
397 System context
398
399 * date invocation::              Print or set system date and time
400 * uname invocation::             Print system information
401 * hostname invocation::          Print or set system name
402 * hostid invocation::            Print numeric host identifier.
403
404 @command{date}: Print or set system date and time
405
406 * Time conversion specifiers::   %[HIklMNpPrRsSTXzZ]
407 * Date conversion specifiers::   %[aAbBcCdDeFgGhjmuUVwWxyY]
408 * Literal conversion specifiers:: %[%nt]
409 * Padding and other flags::      Pad with zeros, spaces, etc.
410 * Setting the time::             Changing the system clock.
411 * Options for date::             Instead of the current time.
412 * Examples of date::             Examples.
413
414 Modified command invocation
415
416 * chroot invocation::            Run a command with a different root directory
417 * env invocation::               Run a command in a modified environment
418 * nice invocation::              Run a command with modified niceness
419 * nohup invocation::             Run a command immune to hangups
420 * su invocation::                Run a command with substitute user and group ID
421
422 Process control
423
424 * kill invocation::              Sending a signal to processes.
425
426 Delaying
427
428 * sleep invocation::             Delay for a specified time
429
430 Numeric operations
431
432 * factor invocation::            Print prime factors
433 * seq invocation::               Print numeric sequences
434
435 File permissions
436
437 * Mode Structure::               Structure of file mode bits.
438 * Symbolic Modes::               Mnemonic representation of file mode bits.
439 * Numeric Modes::                File mode bits as octal numbers.
440 * Directory Setuid and Setgid::  Set-user-ID and set-group-ID on directories.
441
442 Date input formats
443
444 * General date syntax::          Common rules.
445 * Calendar date items::          19 Dec 1994.
446 * Time of day items::            9:20pm.
447 * Time zone items::              @sc{est}, @sc{pdt}, @sc{gmt}.
448 * Day of week items::            Monday and others.
449 * Relative items in date strings:: next tuesday, 2 years ago.
450 * Pure numbers in date strings:: 19931219, 1440.
451 * Seconds since the Epoch::      @@1078100502.
452 * Specifying time zone rules::   TZ="America/New_York", TZ="UTC0".
453 * Authors of get_date::          Bellovin, Eggert, Salz, Berets, et al.
454
455 Opening the software toolbox
456
457 * Toolbox introduction::         Toolbox introduction
458 * I/O redirection::              I/O redirection
459 * The who command::              The @command{who} command
460 * The cut command::              The @command{cut} command
461 * The sort command::             The @command{sort} command
462 * The uniq command::             The @command{uniq} command
463 * Putting the tools together::   Putting the tools together
464
465 GNU Free Documentation License
466
467 * How to use this License for your documents::
468
469 @end detailmenu
470 @end menu
471
472
473 @node Introduction
474 @chapter Introduction
475
476 This manual is a work in progress: many sections make no attempt to explain
477 basic concepts in a way suitable for novices.  Thus, if you are interested,
478 please get involved in improving this manual.  The entire @sc{gnu} community
479 will benefit.
480
481 @cindex @acronym{POSIX}
482 The @sc{gnu} utilities documented here are mostly compatible with the
483 @acronym{POSIX} standard.
484 @cindex bugs, reporting
485 Please report bugs to @email{bug-coreutils@@gnu.org}.  Remember
486 to include the version number, machine architecture, input files, and
487 any other information needed to reproduce the bug: your input, what you
488 expected, what you got, and why it is wrong.  Diffs are welcome, but
489 please include a description of the problem as well, since this is
490 sometimes difficult to infer.  @xref{Bugs, , , gcc, Using and Porting GNU CC}.
491
492 @cindex Berry, K.
493 @cindex Paterson, R.
494 @cindex Stallman, R.
495 @cindex Pinard, F.
496 @cindex MacKenzie, D.
497 @cindex Meyering, J.
498 @cindex Youmans, B.
499 This manual was originally derived from the Unix man pages in the
500 distributions, which were written by David MacKenzie and updated by Jim
501 Meyering.  What you are reading now is the authoritative documentation
502 for these utilities; the man pages are no longer being maintained.  The
503 original @command{fmt} man page was written by Ross Paterson.  Fran@,{c}ois
504 Pinard did the initial conversion to Texinfo format.  Karl Berry did the
505 indexing, some reorganization, and editing of the results.  Brian
506 Youmans of the Free Software Foundation office staff combined the
507 manuals for textutils, fileutils, and sh-utils to produce the present
508 omnibus manual.  Richard Stallman contributed his usual invaluable
509 insights to the overall process.
510
511 @node Common options
512 @chapter Common options
513
514 @macro optBackup
515 @item -b
516 @itemx @w{@kbd{--backup}[=@var{method}]}
517 @opindex -b
518 @opindex --backup
519 @vindex VERSION_CONTROL
520 @cindex backups, making
521 @xref{Backup options}.
522 Make a backup of each file that would otherwise be overwritten or removed.
523 @end macro
524
525 @macro optBackupSuffix
526 @item -S @var{suffix}
527 @itemx --suffix=@var{suffix}
528 @opindex -S
529 @opindex --suffix
530 Append @var{suffix} to each backup file made with @option{-b}.
531 @xref{Backup options}.
532 @end macro
533
534 @macro optTargetDirectory
535 @item -t @var{directory}
536 @itemx @w{@kbd{--target-directory}=@var{directory}}
537 @opindex -t
538 @opindex --target-directory
539 @cindex target directory
540 @cindex destination directory
541 Specify the destination @var{directory}.
542 @xref{Target directory}.
543 @end macro
544
545 @macro optNoTargetDirectory
546 @item -T
547 @itemx --no-target-directory
548 @opindex -T
549 @opindex --no-target-directory
550 @cindex target directory
551 @cindex destination directory
552 Do not treat the last operand specially when it is a directory or a
553 symbolic link to a directory.  @xref{Target directory}.
554 @end macro
555
556 @macro optSi
557 @itemx --si
558 @opindex --si
559 @cindex SI output
560 Append an SI-style abbreviation to each size, such as @samp{MB} for
561 megabytes.  Powers of 1000 are used, not 1024; @samp{MB} stands for
562 1,000,000 bytes.  This option is equivalent to
563 @option{--block-size=si}.  Use the @option{-h} or
564 @option{--human-readable} option if
565 you prefer powers of 1024.
566 @end macro
567
568 @macro optHumanReadable
569 @item -h
570 @itemx --human-readable
571 @opindex -h
572 @opindex --human-readable
573 @cindex human-readable output
574 Append a size letter to each size, such as @samp{M} for mebibytes.
575 Powers of 1024 are used, not 1000; @samp{M} stands for 1,048,576 bytes.
576 Use the @option{--si} option if you prefer powers of 1000.
577 @end macro
578
579 @macro optStripTrailingSlashes
580 @itemx @w{@kbd{--strip-trailing-slashes}}
581 @opindex --strip-trailing-slashes
582 @cindex stripping trailing slashes
583 Remove any trailing slashes from each @var{source} argument.
584 @xref{Trailing slashes}.
585 @end macro
586
587 @cindex common options
588
589 Certain options are available in all of these programs.  Rather than
590 writing identical descriptions for each of the programs, they are
591 described here.  (In fact, every @sc{gnu} program accepts (or should accept)
592 these options.)
593
594 @vindex POSIXLY_CORRECT
595 Normally options and operands can appear in any order, and programs act
596 as if all the options appear before any operands.  For example,
597 @samp{sort -r passwd -t :} acts like @samp{sort -r -t : passwd}, since
598 @samp{:} is an option-argument of @option{-t}.  However, if the
599 @env{POSIXLY_CORRECT} environment variable is set, options must appear
600 before operands, unless otherwise specified for a particular command.
601
602 A few programs can usefully have trailing operands with leading
603 @samp{-}.  With such a program, options must precede operands even if
604 @env{POSIXLY_CORRECT} is not set, and this fact is noted in the
605 program description.  For example, the @command{env} command's options
606 must appear before its operands, since in some cases the operands
607 specify a command that itself contains options.
608
609 Some of these programs recognize the @option{--help} and @option{--version}
610 options only when one of them is the sole command line argument.
611
612 @table @samp
613
614 @item --help
615 @opindex --help
616 @cindex help, online
617 Print a usage message listing all available options, then exit successfully.
618
619 @item --version
620 @opindex --version
621 @cindex version number, finding
622 Print the version number, then exit successfully.
623
624 @item --
625 @opindex --
626 @cindex option delimiter
627 Delimit the option list.  Later arguments, if any, are treated as
628 operands even if they begin with @samp{-}.  For example, @samp{sort --
629 -r} reads from the file named @file{-r}.
630
631 @end table
632
633 @cindex standard input
634 @cindex standard output
635 A single @samp{-} operand is not really an option, though it looks like one.  It
636 stands for standard input, or for standard output if that is clear from
637 the context.  For example, @samp{sort -} reads from standard input,
638 and is equivalent to plain @samp{sort}, and @samp{tee -} writes an
639 extra copy of its input to standard output.  Unless otherwise
640 specified, @samp{-} can appear as any operand that requires a file
641 name.
642
643 @menu
644 * Exit status::                 Indicating program success or failure.
645 * Backup options::              -b -S, in some programs.
646 * Block size::                  BLOCK_SIZE and --block-size, in some programs.
647 * Random sources::              --random-source, in some programs.
648 * Target directory::            Specifying a target directory, in some programs.
649 * Trailing slashes::            --strip-trailing-slashes, in some programs.
650 * Traversing symlinks::         -H, -L, or -P, in some programs.
651 * Treating / specially::        --preserve-root and --no-preserve-root.
652 * Special built-in utilities::  @command{break}, @command{:}, @command{eval}, @dots{}
653 * Standards conformance::       Conformance to the @acronym{POSIX} standard.
654 @end menu
655
656
657 @node Exit status
658 @section Exit status
659
660 @macro exitstatus
661 An exit status of zero indicates success,
662 and a nonzero value indicates failure.
663 @end macro
664
665 Nearly every command invocation yields an integral @dfn{exit status}
666 that can be used to change how other commands work.
667 For the vast majority of commands, an exit status of zero indicates
668 success.  Failure is indicated by a nonzero value---typically
669 @samp{1}, though it may differ on unusual platforms as @acronym{POSIX}
670 requires only that it be nonzero.
671
672 However, some of the programs documented here do produce
673 other exit status values and a few associate different
674 meanings with the values @samp{0} and @samp{1}.
675 Here are some of the exceptions:
676 @command{chroot}, @command{env}, @command{expr},
677 @command{nice}, @command{nohup}, @command{printenv},
678 @command{sort}, @command{su}, @command{test}, @command{tty}.
679
680
681 @node Backup options
682 @section Backup options
683
684 @cindex backup options
685
686 Some @sc{gnu} programs (at least @command{cp}, @command{install},
687 @command{ln}, and @command{mv}) optionally make backups of files
688 before writing new versions.
689 These options control the details of these backups.  The options are also
690 briefly mentioned in the descriptions of the particular programs.
691
692 @table @samp
693
694 @item -b
695 @itemx @w{@kbd{--backup}[=@var{method}]}
696 @opindex -b
697 @opindex --backup
698 @vindex VERSION_CONTROL
699 @cindex backups, making
700 Make a backup of each file that would otherwise be overwritten or removed.
701 Without this option, the original versions are destroyed.
702 Use @var{method} to determine the type of backups to make.
703 When this option is used but @var{method} is not specified,
704 then the value of the @env{VERSION_CONTROL}
705 environment variable is used.  And if @env{VERSION_CONTROL} is not set,
706 the default backup type is @samp{existing}.
707
708 Note that the short form of this option, @option{-b} does not accept any
709 argument.  Using @option{-b} is equivalent to using @option{--backup=existing}.
710
711 @vindex version-control @r{Emacs variable}
712 This option corresponds to the Emacs variable @samp{version-control};
713 the values for @var{method} are the same as those used in Emacs.
714 This option also accepts more descriptive names.
715 The valid @var{method}s are (unique abbreviations are accepted):
716
717 @table @samp
718 @item none
719 @itemx off
720 @opindex none @r{backup method}
721 Never make backups.
722
723 @item numbered
724 @itemx t
725 @opindex numbered @r{backup method}
726 Always make numbered backups.
727
728 @item existing
729 @itemx nil
730 @opindex existing @r{backup method}
731 Make numbered backups of files that already have them, simple backups
732 of the others.
733
734 @item simple
735 @itemx never
736 @opindex simple @r{backup method}
737 Always make simple backups.  Please note @samp{never} is not to be
738 confused with @samp{none}.
739
740 @end table
741
742 @item -S @var{suffix}
743 @itemx --suffix=@var{suffix}
744 @opindex -S
745 @opindex --suffix
746 @cindex backup suffix
747 @vindex SIMPLE_BACKUP_SUFFIX
748 Append @var{suffix} to each backup file made with @option{-b}.  If this
749 option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX}
750 environment variable is used.  And if @env{SIMPLE_BACKUP_SUFFIX} is not
751 set, the default is @samp{~}, just as in Emacs.
752
753 @end table
754
755 @node Block size
756 @section Block size
757
758 @cindex block size
759
760 Some @sc{gnu} programs (at least @command{df}, @command{du}, and
761 @command{ls}) display sizes in ``blocks''.  You can adjust the block size
762 and method of display to make sizes easier to read.  The block size
763 used for display is independent of any file system block size.
764 Fractional block counts are rounded up to the nearest integer.
765
766 @opindex --block-size=@var{size}
767 @vindex BLOCKSIZE
768 @vindex BLOCK_SIZE
769 @vindex DF_BLOCK_SIZE
770 @vindex DU_BLOCK_SIZE
771 @vindex LS_BLOCK_SIZE
772 @vindex POSIXLY_CORRECT@r{, and block size}
773
774 The default block size is chosen by examining the following environment
775 variables in turn; the first one that is set determines the block size.
776
777 @table @code
778
779 @item DF_BLOCK_SIZE
780 This specifies the default block size for the @command{df} command.
781 Similarly, @env{DU_BLOCK_SIZE} specifies the default for @command{du} and
782 @env{LS_BLOCK_SIZE} for @command{ls}.
783
784 @item BLOCK_SIZE
785 This specifies the default block size for all three commands, if the
786 above command-specific environment variables are not set.
787
788 @item BLOCKSIZE
789 This specifies the default block size for all values that are normally
790 printed as blocks, if neither @env{BLOCK_SIZE} nor the above
791 command-specific environment variables are set.  Unlike the other
792 environment variables, @env{BLOCKSIZE} does not affect values that are
793 normally printed as byte counts, e.g., the file sizes contained in
794 @code{ls -l} output.
795
796 @item POSIXLY_CORRECT
797 If neither @env{@var{command}_BLOCK_SIZE}, nor @env{BLOCK_SIZE}, nor
798 @env{BLOCKSIZE} is set, but this variable is set, the block size
799 defaults to 512.
800
801 @end table
802
803 If none of the above environment variables are set, the block size
804 currently defaults to 1024 bytes in most contexts, but this number may
805 change in the future.  For @command{ls} file sizes, the block size
806 defaults to 1 byte.
807
808 @cindex human-readable output
809 @cindex SI output
810
811 A block size specification can be a positive integer specifying the number
812 of bytes per block, or it can be @code{human-readable} or @code{si} to
813 select a human-readable format.  Integers may be followed by suffixes
814 that are upward compatible with the
815 @uref{http://www.bipm.fr/enus/3_SI/si-prefixes.html, SI prefixes}
816 for decimal multiples and with the
817 @uref{http://physics.nist.gov/cuu/Units/binary.html, IEC 60027-2
818 prefixes for binary multiples}.
819
820 With human-readable formats, output sizes are followed by a size letter
821 such as @samp{M} for megabytes.  @code{BLOCK_SIZE=human-readable} uses
822 powers of 1024; @samp{M} stands for 1,048,576 bytes.
823 @code{BLOCK_SIZE=si} is similar, but uses powers of 1000 and appends
824 @samp{B}; @samp{MB} stands for 1,000,000 bytes.
825
826 @vindex LC_NUMERIC
827 A block size specification preceded by @samp{'} causes output sizes to
828 be displayed with thousands separators.  The @env{LC_NUMERIC} locale
829 specifies the thousands separator and grouping.  For example, in an
830 American English locale, @samp{--block-size="'1kB"} would cause a size
831 of 1234000 bytes to be displayed as @samp{1,234}.  In the default C
832 locale, there is no thousands separator so a leading @samp{'} has no
833 effect.
834
835 An integer block size can be followed by a suffix to specify a
836 multiple of that size.  A bare size letter,
837 or one followed by @samp{iB}, specifies
838 a multiple using powers of 1024.  A size letter followed by @samp{B}
839 specifies powers of 1000 instead.  For example, @samp{1M} and
840 @samp{1MiB} are equivalent to @samp{1048576}, whereas @samp{1MB} is
841 equivalent to @samp{1000000}.
842
843 A plain suffix without a preceding integer acts as if @samp{1} were
844 prepended, except that it causes a size indication to be appended to
845 the output.  For example, @samp{--block-size="kB"} displays 3000 as
846 @samp{3kB}.
847
848 The following suffixes are defined.  Large sizes like @code{1Y}
849 may be rejected by your computer due to limitations of its arithmetic.
850
851 @table @samp
852 @item kB
853 @cindex kilobyte, definition of
854 kilobyte: @math{10^3 = 1000}.
855 @item k
856 @itemx K
857 @itemx KiB
858 @cindex kibibyte, definition of
859 kibibyte: @math{2^10 = 1024}.  @samp{K} is special: the SI prefix is
860 @samp{k} and the IEC 60027-2 prefix is @samp{Ki}, but tradition and
861 @acronym{POSIX} use @samp{k} to mean @samp{KiB}.
862 @item MB
863 @cindex megabyte, definition of
864 megabyte: @math{10^6 = 1,000,000}.
865 @item M
866 @itemx MiB
867 @cindex mebibyte, definition of
868 mebibyte: @math{2^20 = 1,048,576}.
869 @item GB
870 @cindex gigabyte, definition of
871 gigabyte: @math{10^9 = 1,000,000,000}.
872 @item G
873 @itemx GiB
874 @cindex gibibyte, definition of
875 gibibyte: @math{2^30 = 1,073,741,824}.
876 @item TB
877 @cindex terabyte, definition of
878 terabyte:  @math{10^12 = 1,000,000,000,000}.
879 @item T
880 @itemx TiB
881 @cindex tebibyte, definition of
882 tebibyte: @math{2^40 = 1,099,511,627,776}.
883 @item PB
884 @cindex petabyte, definition of
885 petabyte: @math{10^15 = 1,000,000,000,000,000}.
886 @item P
887 @itemx PiB
888 @cindex pebibyte, definition of
889 pebibyte: @math{2^50 = 1,125,899,906,842,624}.
890 @item EB
891 @cindex exabyte, definition of
892 exabyte: @math{10^18 = 1,000,000,000,000,000,000}.
893 @item E
894 @itemx EiB
895 @cindex exbibyte, definition of
896 exbibyte: @math{2^60 = 1,152,921,504,606,846,976}.
897 @item ZB
898 @cindex zettabyte, definition of
899 zettabyte: @math{10^21 = 1,000,000,000,000,000,000,000}
900 @item Z
901 @itemx ZiB
902 @math{2^70 = 1,180,591,620,717,411,303,424}.
903 (@samp{Zi} is a @acronym{GNU} extension to IEC 60027-2.)
904 @item YB
905 @cindex yottabyte, definition of
906 yottabyte: @math{10^24 = 1,000,000,000,000,000,000,000,000}.
907 @item Y
908 @itemx YiB
909 @math{2^80 = 1,208,925,819,614,629,174,706,176}.
910 (@samp{Yi} is a @acronym{GNU} extension to IEC 60027-2.)
911 @end table
912
913 @opindex -k
914 @opindex -h
915 @opindex --block-size
916 @opindex --human-readable
917 @opindex --si
918
919 Block size defaults can be overridden by an explicit
920 @option{--block-size=@var{size}} option.  The @option{-k}
921 option is equivalent to @option{--block-size=1K}, which
922 is the default unless the @env{POSIXLY_CORRECT} environment variable is
923 set.  The @option{-h} or @option{--human-readable} option is equivalent to
924 @option{--block-size=human-readable}.  The @option{--si} option is
925 equivalent to @option{--block-size=si}.
926
927 @node Random sources
928 @section Sources of random data
929
930 @cindex random sources
931
932 The @command{shuf}, @command{shred}, and @command{sort} commands
933 sometimes need random data to do their work.  For example, @samp{sort
934 -R} must choose a hash function at random, and it needs random data to
935 make this selection.
936
937 Normally these commands use the device file @file{/dev/urandom} as the
938 source of random data.  Typically, this device gathers environmental
939 noise from device drivers and other sources into an entropy pool, and
940 uses the pool to generate random bits.  If the pool is short of data,
941 the device reuses the internal pool to produce more bits, using a
942 cryptographically secure pseudorandom number generator.
943
944 @file{/dev/urandom} suffices for most practical uses, but applications
945 requiring high-value or long-term protection of private data may
946 require an alternate data source like @file{/dev/random} or
947 @file{/dev/arandom}.  The set of available sources depends on your
948 operating system.
949
950 To use such a source, specify the @option{--random-source=@var{file}}
951 option, e.g., @samp{shuf --random-source=/dev/random}.  The contents
952 of @var{file} should be as random as possible.  An error is reported
953 if @var{file} does not contain enough bytes to randomize the input
954 adequately.
955
956 To reproduce the results of an earlier invocation of a command, you
957 can save some random data into a file and then use that file as the
958 random source in earlier and later invocations of the command.
959
960 Some old-fashioned or stripped-down operating systems lack support for
961 @command{/dev/urandom}.  On these systems commands like @command{shuf}
962 by default fall back on an internal pseudorandom generator initialized
963 by a small amount of entropy.
964
965 @node Target directory
966 @section Target directory
967
968 @cindex target directory
969
970 The @command{cp}, @command{install}, @command{ln}, and @command{mv}
971 commands normally treat the last operand specially when it is a
972 directory or a symbolic link to a directory.  For example, @samp{cp
973 source dest} is equivalent to @samp{cp source dest/source} if
974 @file{dest} is a directory.  Sometimes this behavior is not exactly
975 what is wanted, so these commands support the following options to
976 allow more fine-grained control:
977
978 @table @samp
979
980 @item -T
981 @itemx --no-target-directory
982 @opindex --no-target-directory
983 @cindex target directory
984 @cindex destination directory
985 Do not treat the last operand specially when it is a directory or a
986 symbolic link to a directory.  This can help avoid race conditions in
987 programs that operate in a shared area.  For example, when the command
988 @samp{mv /tmp/source /tmp/dest} succeeds, there is no guarantee that
989 @file{/tmp/source} was renamed to @file{/tmp/dest}: it could have been
990 renamed to @file{/tmp/dest/source} instead, if some other process
991 created @file{/tmp/dest} as a directory.  However, if @file{mv
992 -T /tmp/source /tmp/dest} succeeds, there is no
993 question that @file{/tmp/source} was renamed to @file{/tmp/dest}.
994
995 In the opposite situation, where you want the last operand to be
996 treated as a directory and want a diagnostic otherwise, you can use
997 the @option{--target-directory} (@option{-t}) option.
998
999 @item -t @var{directory}
1000 @itemx @w{@kbd{--target-directory}=@var{directory}}
1001 @opindex --target-directory
1002 @cindex target directory
1003 @cindex destination directory
1004 Use @var{directory} as the directory component of each destination
1005 file name.
1006
1007 The interface for most programs is that after processing options and a
1008 finite (possibly zero) number of fixed-position arguments, the remaining
1009 argument list is either expected to be empty, or is a list of items
1010 (usually files) that will all be handled identically.  The @command{xargs}
1011 program is designed to work well with this convention.
1012
1013 The commands in the @command{mv}-family are unusual in that they take
1014 a variable number of arguments with a special case at the @emph{end}
1015 (namely, the target directory).  This makes it nontrivial to perform some
1016 operations, e.g., ``move all files from here to ../d/'', because
1017 @code{mv * ../d/} might exhaust the argument space, and @code{ls | xargs ...}
1018 doesn't have a clean way to specify an extra final argument for each
1019 invocation of the subject command.  (It can be done by going through a
1020 shell command, but that requires more human labor and brain power than
1021 it should.)
1022
1023 The @w{@kbd{--target-directory}} (@option{-t}) option allows the @command{cp},
1024 @command{install}, @command{ln}, and @command{mv} programs to be used
1025 conveniently with @command{xargs}.  For example, you can move the files
1026 from the current directory to a sibling directory, @code{d} like this:
1027
1028 @smallexample
1029 ls | xargs mv -t ../d --
1030 @end smallexample
1031
1032 However, this doesn't move files whose names begin with @samp{.}.
1033 If you use the @sc{gnu} @command{find} program, you can move those
1034 files too, with this command:
1035
1036 @example
1037 find . -mindepth 1 -maxdepth 1 \
1038   | xargs mv -t ../d
1039 @end example
1040
1041 But both of the above approaches fail if there are no files in the
1042 current directory, or if any file has a name containing a blank or
1043 some other special characters.
1044 The following example removes those limitations and requires both
1045 @sc{gnu} @command{find} and @sc{gnu} @command{xargs}:
1046
1047 @example
1048 find . -mindepth 1 -maxdepth 1 -print0 \
1049   | xargs --null --no-run-if-empty \
1050       mv -t ../d
1051 @end example
1052
1053 @end table
1054
1055 @noindent
1056 The @option{--target-directory} (@option{-t}) and
1057 @option{--no-target-directory} (@option{-T})
1058 options cannot be combined.
1059
1060 @node Trailing slashes
1061 @section Trailing slashes
1062
1063 @cindex trailing slashes
1064
1065 Some @sc{gnu} programs (at least @command{cp} and @command{mv}) allow you to
1066 remove any trailing slashes from each @var{source} argument before
1067 operating on it.  The @w{@kbd{--strip-trailing-slashes}} option enables
1068 this behavior.
1069
1070 This is useful when a @var{source} argument may have a trailing slash and
1071 @c FIXME: mv's behavior in this case is system-dependent
1072 specify a symbolic link to a directory.  This scenario is in fact rather
1073 common because some shells can automatically append a trailing slash when
1074 performing file name completion on such symbolic links.  Without this
1075 option, @command{mv}, for example, (via the system's rename function) must
1076 interpret a trailing slash as a request to dereference the symbolic link
1077 and so must rename the indirectly referenced @emph{directory} and not
1078 the symbolic link.  Although it may seem surprising that such behavior
1079 be the default, it is required by @acronym{POSIX} and is consistent with
1080 other parts of that standard.
1081
1082 @node Traversing symlinks
1083 @section Traversing symlinks
1084
1085 @cindex symbolic link to directory, controlling traversal of
1086
1087 The following options modify how @command{chown} and @command{chgrp}
1088 @c FIXME: note that `du' has these options, too, but they have slightly
1089 @c different meaning.
1090 traverse a hierarchy when the @option{--recursive} (@option{-R})
1091 option is also specified.
1092 If more than one of the following options is specified, only the final
1093 one takes effect.
1094 These options specify whether processing a symbolic link to a directory
1095 entails operating on just the symbolic link or on all files in the
1096 hierarchy rooted at that directory.
1097
1098 These options are independent of @option{--dereference} and
1099 @option{--no-dereference} (@option{-h}), which control whether to modify
1100 a symlink or its referent.
1101
1102 @table @samp
1103
1104 @macro choptH
1105 @item -H
1106 @opindex -H
1107 @cindex symbolic link to directory, traverse each that is specified on the command line
1108 If @option{--recursive} (@option{-R}) is specified and
1109 a command line argument is a symbolic link to a directory, traverse it.
1110 @end macro
1111 @choptH
1112
1113 @macro choptL
1114 @item -L
1115 @opindex -L
1116 @cindex symbolic link to directory, traverse each that is encountered
1117 In a recursive traversal, traverse every symbolic link to a directory
1118 that is encountered.
1119 @end macro
1120 @choptL
1121
1122 @macro choptP
1123 @item -P
1124 @opindex -P
1125 @cindex symbolic link to directory, never traverse
1126 Do not traverse any symbolic links.
1127 This is the default if none of @option{-H}, @option{-L},
1128 or @option{-P} is specified.
1129 @end macro
1130 @choptP
1131
1132 @end table
1133
1134
1135 @node Treating / specially
1136 @section Treating / specially
1137
1138 Certain commands can operate destructively on entire hierarchies.
1139 For example, if a user with appropriate privileges mistakenly runs
1140 @samp{rm -rf / tmp/junk} or @samp{cd /bin; rm -rf ../}, that may remove
1141 all files on the entire system.  Since there are so few
1142 @footnote{If you know of one, please write to @email{bug-coreutils@@gnu.org}.}
1143 legitimate uses for such a command,
1144 @sc{gnu} @command{rm} provides the @option{--preserve-root} option
1145 to make it so @command{rm} declines to operate on any directory
1146 that resolves to @file{/}.  The default is still to allow
1147 @samp{rm -rf /} to operate unimpeded.
1148 Another new option, @option{--no-preserve-root}, cancels the
1149 effect of any preceding @option{--preserve-root} option.
1150 Note that the @option{--preserve-root} behavior may become the default
1151 for @command{rm}.
1152
1153 The commands @command{chgrp}, @command{chmod} and @command{chown}
1154 can also operate destructively on entire hierarchies, so they too
1155 support these options.  Although, unlike @command{rm}, they don't
1156 actually unlink files, these commands are arguably more dangerous
1157 when operating recursively on @file{/}, since they often work much
1158 more quickly, and hence damage more files before an alert user can
1159 interrupt them.
1160
1161 @node Special built-in utilities
1162 @section Special built-in utilities
1163
1164 Some programs like @command{nice} can invoke other programs; for
1165 example, the command @samp{nice cat file} invokes the program
1166 @command{cat} by executing the command @samp{cat file}.  However,
1167 @dfn{special built-in utilities} like @command{exit} cannot be invoked
1168 this way.  For example, the command @samp{nice exit} does not have a
1169 well-defined behavior: it may generate an error message instead of
1170 exiting.
1171
1172 Here is a list of the special built-in utilities that are standardized
1173 by @acronym{POSIX} 1003.1-2004.
1174
1175 @quotation
1176 @t{.@: : break continue eval exec exit export readonly
1177 return set shift times trap unset}
1178 @end quotation
1179
1180 For example, because @samp{.}, @samp{:}, and @samp{exec} are special,
1181 the commands @samp{nice . foo.sh}, @samp{nice :}, and @samp{nice exec
1182 pwd} do not work as you might expect.
1183
1184 Many shells extend this list.  For example, Bash has several extra
1185 special built-in utilities like @command{history}, and
1186 @command{suspend}, and with Bash the command @samp{nice suspend}
1187 generates an error message instead of suspending.
1188
1189 @node Standards conformance
1190 @section Standards conformance
1191
1192 @vindex POSIXLY_CORRECT
1193 In a few cases, the @sc{gnu} utilities' default behavior is
1194 incompatible with the @acronym{POSIX} standard.  To suppress these
1195 incompatibilities, define the @env{POSIXLY_CORRECT} environment
1196 variable.  Unless you are checking for @acronym{POSIX} conformance, you
1197 probably do not need to define @env{POSIXLY_CORRECT}.
1198
1199 Newer versions of @acronym{POSIX} are occasionally incompatible with older
1200 versions.  For example, older versions of @acronym{POSIX} required the
1201 command @samp{sort +1} to sort based on the second and succeeding
1202 fields in each input line, but starting with @acronym{POSIX} 1003.1-2001
1203 the same command is required to sort the file named @file{+1}, and you
1204 must instead use the command @samp{sort -k 2} to get the field-based
1205 sort.
1206
1207 @vindex _POSIX2_VERSION
1208 The @sc{gnu} utilities normally conform to the version of @acronym{POSIX}
1209 that is standard for your system.  To cause them to conform to a
1210 different version of @acronym{POSIX}, define the @env{_POSIX2_VERSION}
1211 environment variable to a value of the form @var{yyyymm} specifying
1212 the year and month the standard was adopted.  Two values are currently
1213 supported for @env{_POSIX2_VERSION}: @samp{199209} stands for
1214 @acronym{POSIX} 1003.2-1992, and @samp{200112} stands for @acronym{POSIX}
1215 1003.1-2001.  For example, if you have a newer system but are running software
1216 that assumes an older version of @acronym{POSIX} and uses @samp{sort +1}
1217 or @samp{tail +10}, you can work around any compatibility problems by setting
1218 @samp{_POSIX2_VERSION=199209} in your environment.
1219
1220 @node Output of entire files
1221 @chapter Output of entire files
1222
1223 @cindex output of entire files
1224 @cindex entire files, output of
1225
1226 These commands read and write entire files, possibly transforming them
1227 in some way.
1228
1229 @menu
1230 * cat invocation::              Concatenate and write files.
1231 * tac invocation::              Concatenate and write files in reverse.
1232 * nl invocation::               Number lines and write files.
1233 * od invocation::               Write files in octal or other formats.
1234 * base64 invocation::           Transform data into printable data.
1235 @end menu
1236
1237 @node cat invocation
1238 @section @command{cat}: Concatenate and write files
1239
1240 @pindex cat
1241 @cindex concatenate and write files
1242 @cindex copying files
1243
1244 @command{cat} copies each @var{file} (@samp{-} means standard input), or
1245 standard input if none are given, to standard output.  Synopsis:
1246
1247 @example
1248 cat [@var{option}] [@var{file}]@dots{}
1249 @end example
1250
1251 The program accepts the following options.  Also see @ref{Common options}.
1252
1253 @table @samp
1254
1255 @item -A
1256 @itemx --show-all
1257 @opindex -A
1258 @opindex --show-all
1259 Equivalent to @option{-vET}.
1260
1261 @item -b
1262 @itemx --number-nonblank
1263 @opindex -b
1264 @opindex --number-nonblank
1265 Number all nonblank output lines, starting with 1.
1266
1267 @item -e
1268 @opindex -e
1269 Equivalent to @option{-vE}.
1270
1271 @item -E
1272 @itemx --show-ends
1273 @opindex -E
1274 @opindex --show-ends
1275 Display a @samp{$} after the end of each line.
1276
1277 @item -n
1278 @itemx --number
1279 @opindex -n
1280 @opindex --number
1281 Number all output lines, starting with 1.
1282
1283 @item -s
1284 @itemx --squeeze-blank
1285 @opindex -s
1286 @opindex --squeeze-blank
1287 @cindex squeezing blank lines
1288 Replace multiple adjacent blank lines with a single blank line.
1289
1290 @item -t
1291 @opindex -t
1292 Equivalent to @option{-vT}.
1293
1294 @item -T
1295 @itemx --show-tabs
1296 @opindex -T
1297 @opindex --show-tabs
1298 Display TAB characters as @samp{^I}.
1299
1300 @item -u
1301 @opindex -u
1302 Ignored; for @acronym{POSIX} compatibility.
1303
1304 @item -v
1305 @itemx --show-nonprinting
1306 @opindex -v
1307 @opindex --show-nonprinting
1308 Display control characters except for LFD and TAB using
1309 @samp{^} notation and precede characters that have the high bit set with
1310 @samp{M-}.
1311
1312 @end table
1313
1314 On systems like MS-DOS that distinguish between text and binary files,
1315 @command{cat} normally reads and writes in binary mode.  However,
1316 @command{cat} reads in text mode if one of the options
1317 @option{-bensAE} is used or if @command{cat} is reading from standard
1318 input and standard input is a terminal.  Similarly, @command{cat}
1319 writes in text mode if one of the options @option{-bensAE} is used or
1320 if standard output is a terminal.
1321
1322 @exitstatus
1323
1324 Examples:
1325
1326 @smallexample
1327 # Output f's contents, then standard input, then g's contents.
1328 cat f - g
1329
1330 # Copy standard input to standard output.
1331 cat
1332 @end smallexample
1333
1334
1335 @node tac invocation
1336 @section @command{tac}: Concatenate and write files in reverse
1337
1338 @pindex tac
1339 @cindex reversing files
1340
1341 @command{tac} copies each @var{file} (@samp{-} means standard input), or
1342 standard input if none are given, to standard output, reversing the
1343 records (lines by default) in each separately.  Synopsis:
1344
1345 @example
1346 tac [@var{option}]@dots{} [@var{file}]@dots{}
1347 @end example
1348
1349 @dfn{Records} are separated by instances of a string (newline by
1350 default).  By default, this separator string is attached to the end of
1351 the record that it follows in the file.
1352
1353 The program accepts the following options.  Also see @ref{Common options}.
1354
1355 @table @samp
1356
1357 @item -b
1358 @itemx --before
1359 @opindex -b
1360 @opindex --before
1361 The separator is attached to the beginning of the record that it
1362 precedes in the file.
1363
1364 @item -r
1365 @itemx --regex
1366 @opindex -r
1367 @opindex --regex
1368 Treat the separator string as a regular expression.  Users of @command{tac}
1369 on MS-DOS/MS-Windows should note that, since @command{tac} reads files in
1370 binary mode, each line of a text file might end with a CR/LF pair
1371 instead of the Unix-style LF.
1372
1373 @item -s @var{separator}
1374 @itemx --separator=@var{separator}
1375 @opindex -s
1376 @opindex --separator
1377 Use @var{separator} as the record separator, instead of newline.
1378
1379 @end table
1380
1381 @exitstatus
1382
1383
1384 @node nl invocation
1385 @section @command{nl}: Number lines and write files
1386
1387 @pindex nl
1388 @cindex numbering lines
1389 @cindex line numbering
1390
1391 @command{nl} writes each @var{file} (@samp{-} means standard input), or
1392 standard input if none are given, to standard output, with line numbers
1393 added to some or all of the lines.  Synopsis:
1394
1395 @example
1396 nl [@var{option}]@dots{} [@var{file}]@dots{}
1397 @end example
1398
1399 @cindex logical pages, numbering on
1400 @command{nl} decomposes its input into (logical) pages; by default, the
1401 line number is reset to 1 at the top of each logical page.  @command{nl}
1402 treats all of the input files as a single document; it does not reset
1403 line numbers or logical pages between files.
1404
1405 @cindex headers, numbering
1406 @cindex body, numbering
1407 @cindex footers, numbering
1408 A logical page consists of three sections: header, body, and footer.
1409 Any of the sections can be empty.  Each can be numbered in a different
1410 style from the others.
1411
1412 The beginnings of the sections of logical pages are indicated in the
1413 input file by a line containing exactly one of these delimiter strings:
1414
1415 @table @samp
1416 @item \:\:\:
1417 start of header;
1418 @item \:\:
1419 start of body;
1420 @item \:
1421 start of footer.
1422 @end table
1423
1424 The two characters from which these strings are made can be changed from
1425 @samp{\} and @samp{:} via options (see below), but the pattern and
1426 length of each string cannot be changed.
1427
1428 A section delimiter is replaced by an empty line on output.  Any text
1429 that comes before the first section delimiter string in the input file
1430 is considered to be part of a body section, so @command{nl} treats a
1431 file that contains no section delimiters as a single body section.
1432
1433 The program accepts the following options.  Also see @ref{Common options}.
1434
1435 @table @samp
1436
1437 @item -b @var{style}
1438 @itemx --body-numbering=@var{style}
1439 @opindex -b
1440 @opindex --body-numbering
1441 Select the numbering style for lines in the body section of each
1442 logical page.  When a line is not numbered, the current line number
1443 is not incremented, but the line number separator character is still
1444 prepended to the line.  The styles are:
1445
1446 @table @samp
1447 @item a
1448 number all lines,
1449 @item t
1450 number only nonempty lines (default for body),
1451 @item n
1452 do not number lines (default for header and footer),
1453 @item p@var{bre}
1454 number only lines that contain a match for the basic regular
1455 expression @var{bre}.
1456 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep Manual}.
1457 @end table
1458
1459 @item -d @var{cd}
1460 @itemx --section-delimiter=@var{cd}
1461 @opindex -d
1462 @opindex --section-delimiter
1463 @cindex section delimiters of pages
1464 Set the section delimiter characters to @var{cd}; default is
1465 @samp{\:}.  If only @var{c} is given, the second remains @samp{:}.
1466 (Remember to protect @samp{\} or other metacharacters from shell
1467 expansion with quotes or extra backslashes.)
1468
1469 @item -f @var{style}
1470 @itemx --footer-numbering=@var{style}
1471 @opindex -f
1472 @opindex --footer-numbering
1473 Analogous to @option{--body-numbering}.
1474
1475 @item -h @var{style}
1476 @itemx --header-numbering=@var{style}
1477 @opindex -h
1478 @opindex --header-numbering
1479 Analogous to @option{--body-numbering}.
1480
1481 @item -i @var{number}
1482 @itemx --page-increment=@var{number}
1483 @opindex -i
1484 @opindex --page-increment
1485 Increment line numbers by @var{number} (default 1).
1486
1487 @item -l @var{number}
1488 @itemx --join-blank-lines=@var{number}
1489 @opindex -l
1490 @opindex --join-blank-lines
1491 @cindex empty lines, numbering
1492 @cindex blank lines, numbering
1493 Consider @var{number} (default 1) consecutive empty lines to be one
1494 logical line for numbering, and only number the last one.  Where fewer
1495 than @var{number} consecutive empty lines occur, do not number them.
1496 An empty line is one that contains no characters, not even spaces
1497 or tabs.
1498
1499 @item -n @var{format}
1500 @itemx --number-format=@var{format}
1501 @opindex -n
1502 @opindex --number-format
1503 Select the line numbering format (default is @code{rn}):
1504
1505 @table @samp
1506 @item ln
1507 @opindex ln @r{format for @command{nl}}
1508 left justified, no leading zeros;
1509 @item rn
1510 @opindex rn @r{format for @command{nl}}
1511 right justified, no leading zeros;
1512 @item rz
1513 @opindex rz @r{format for @command{nl}}
1514 right justified, leading zeros.
1515 @end table
1516
1517 @item -p
1518 @itemx --no-renumber
1519 @opindex -p
1520 @opindex --no-renumber
1521 Do not reset the line number at the start of a logical page.
1522
1523 @item -s @var{string}
1524 @itemx --number-separator=@var{string}
1525 @opindex -s
1526 @opindex --number-separator
1527 Separate the line number from the text line in the output with
1528 @var{string} (default is the TAB character).
1529
1530 @item -v @var{number}
1531 @itemx --starting-line-number=@var{number}
1532 @opindex -v
1533 @opindex --starting-line-number
1534 Set the initial line number on each logical page to @var{number} (default 1).
1535
1536 @item -w @var{number}
1537 @itemx --number-width=@var{number}
1538 @opindex -w
1539 @opindex --number-width
1540 Use @var{number} characters for line numbers (default 6).
1541
1542 @end table
1543
1544 @exitstatus
1545
1546
1547 @node od invocation
1548 @section @command{od}: Write files in octal or other formats
1549
1550 @pindex od
1551 @cindex octal dump of files
1552 @cindex hex dump of files
1553 @cindex ASCII dump of files
1554 @cindex file contents, dumping unambiguously
1555
1556 @command{od} writes an unambiguous representation of each @var{file}
1557 (@samp{-} means standard input), or standard input if none are given.
1558 Synopses:
1559
1560 @smallexample
1561 od [@var{option}]@dots{} [@var{file}]@dots{}
1562 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1563 od [@var{option}]@dots{} --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1564 @end smallexample
1565
1566 Each line of output consists of the offset in the input, followed by
1567 groups of data from the file.  By default, @command{od} prints the offset in
1568 octal, and each group of file data is a C @code{short int}'s worth of input
1569 printed as a single octal number.
1570
1571 If @var{offset} is given, it specifies how many input bytes to skip
1572 before formatting and writing.  By default, it is interpreted as an
1573 octal number, but the optional trailing decimal point causes it to be
1574 interpreted as decimal.  If no decimal is specified and the offset
1575 begins with @samp{0x} or @samp{0X} it is interpreted as a hexadecimal
1576 number.  If there is a trailing @samp{b}, the number of bytes skipped
1577 will be @var{offset} multiplied by 512.
1578
1579 If a command is of both the first and second forms, the second form is
1580 assumed if the last operand begins with @samp{+} or (if there are two
1581 operands) a digit.  For example, in @samp{od foo 10} and @samp{od +10}
1582 the @samp{10} is an offset, whereas in @samp{od 10} the @samp{10} is a
1583 file name.
1584
1585 The program accepts the following options.  Also see @ref{Common options}.
1586
1587 @table @samp
1588
1589 @item -A @var{radix}
1590 @itemx --address-radix=@var{radix}
1591 @opindex -A
1592 @opindex --address-radix
1593 @cindex radix for file offsets
1594 @cindex file offset radix
1595 Select the base in which file offsets are printed.  @var{radix} can
1596 be one of the following:
1597
1598 @table @samp
1599 @item d
1600 decimal;
1601 @item o
1602 octal;
1603 @item x
1604 hexadecimal;
1605 @item n
1606 none (do not print offsets).
1607 @end table
1608
1609 The default is octal.
1610
1611 @item -j @var{bytes}
1612 @itemx --skip-bytes=@var{bytes}
1613 @opindex -j
1614 @opindex --skip-bytes
1615 Skip @var{bytes} input bytes before formatting and writing.  If
1616 @var{bytes} begins with @samp{0x} or @samp{0X}, it is interpreted in
1617 hexadecimal; otherwise, if it begins with @samp{0}, in octal; otherwise,
1618 in decimal.  Appending @samp{b} multiplies @var{bytes} by 512, @samp{k}
1619 by 1024, and @samp{m} by 1048576.
1620
1621 @item -N @var{bytes}
1622 @itemx --read-bytes=@var{bytes}
1623 @opindex -N
1624 @opindex --read-bytes
1625 Output at most @var{bytes} bytes of the input.  Prefixes and suffixes on
1626 @code{bytes} are interpreted as for the @option{-j} option.
1627
1628 @item -S @var{n}
1629 @itemx --strings[=@var{n}]
1630 @opindex -S
1631 @opindex --strings
1632 @cindex string constants, outputting
1633 Instead of the normal output, output only @dfn{string constants}: at
1634 least @var{n} consecutive @acronym{ASCII} graphic characters,
1635 followed by a null (zero) byte.
1636
1637 If @var{n} is omitted with @option{--strings}, the default is 3.
1638
1639 @item -t @var{type}
1640 @itemx --format=@var{type}
1641 @opindex -t
1642 @opindex --format
1643 Select the format in which to output the file data.  @var{type} is a
1644 string of one or more of the below type indicator characters.  If you
1645 include more than one type indicator character in a single @var{type}
1646 string, or use this option more than once, @command{od} writes one copy
1647 of each output line using each of the data types that you specified,
1648 in the order that you specified.
1649
1650 Adding a trailing ``z'' to any type specification appends a display
1651 of the @acronym{ASCII} character representation of the printable characters
1652 to the output line generated by the type specification.
1653
1654 @table @samp
1655 @item a
1656 named character, ignoring high-order bit
1657 @item c
1658 @acronym{ASCII} character or backslash escape,
1659 @item d
1660 signed decimal
1661 @item f
1662 floating point
1663 @item o
1664 octal
1665 @item u
1666 unsigned decimal
1667 @item x
1668 hexadecimal
1669 @end table
1670
1671 The type @code{a} outputs things like @samp{sp} for space, @samp{nl} for
1672 newline, and @samp{nul} for a null (zero) byte.  Only the least significant
1673 seven bits of each byte is used; the high-order bit is ignored.
1674 Type @code{c} outputs
1675 @samp{ }, @samp{\n}, and @code{\0}, respectively.
1676
1677 @cindex type size
1678 Except for types @samp{a} and @samp{c}, you can specify the number
1679 of bytes to use in interpreting each number in the given data type
1680 by following the type indicator character with a decimal integer.
1681 Alternately, you can specify the size of one of the C compiler's
1682 built-in data types by following the type indicator character with
1683 one of the following characters.  For integers (@samp{d}, @samp{o},
1684 @samp{u}, @samp{x}):
1685
1686 @table @samp
1687 @item C
1688 char
1689 @item S
1690 short
1691 @item I
1692 int
1693 @item L
1694 long
1695 @end table
1696
1697 For floating point (@code{f}):
1698
1699 @table @asis
1700 @item F
1701 float
1702 @item D
1703 double
1704 @item L
1705 long double
1706 @end table
1707
1708 @item -v
1709 @itemx --output-duplicates
1710 @opindex -v
1711 @opindex --output-duplicates
1712 Output consecutive lines that are identical.  By default, when two or
1713 more consecutive output lines would be identical, @command{od} outputs only
1714 the first line, and puts just an asterisk on the following line to
1715 indicate the elision.
1716
1717 @item -w[@var{n}]
1718 @itemx --width[=@var{n}]
1719 @opindex -w
1720 @opindex --width
1721 Dump @code{n} input bytes per output line.  This must be a multiple of
1722 the least common multiple of the sizes associated with the specified
1723 output types.
1724
1725 If this option is not given at all, the default is 16.  If @var{n} is
1726 omitted, the default is 32.
1727
1728 @end table
1729
1730 The next several options are shorthands for format specifications.
1731 @sc{gnu} @command{od} accepts any combination of shorthands and format
1732 specification options.  These options accumulate.
1733
1734 @table @samp
1735
1736 @item -a
1737 @opindex -a
1738 Output as named characters.  Equivalent to @samp{-t a}.
1739
1740 @item -b
1741 @opindex -b
1742 Output as octal bytes.  Equivalent to @samp{-t o1}.
1743
1744 @item -c
1745 @opindex -c
1746 Output as @acronym{ASCII} characters or backslash escapes.  Equivalent to
1747 @samp{-t c}.
1748
1749 @item -d
1750 @opindex -d
1751 Output as unsigned decimal two-byte units.  Equivalent to @samp{-t u2}.
1752
1753 @item -f
1754 @opindex -f
1755 Output as floats.  Equivalent to @samp{-t fF}.
1756
1757 @item -i
1758 @opindex -i
1759 Output as decimal ints.  Equivalent to @samp{-t dI}.
1760
1761 @item -l
1762 @opindex -l
1763 Output as decimal long ints.  Equivalent to @samp{-t dL}.
1764
1765 @item -o
1766 @opindex -o
1767 Output as octal two-byte units.  Equivalent to @option{-t o2}.
1768
1769 @item -s
1770 @opindex -s
1771 Output as decimal two-byte units.  Equivalent to @option{-t d2}.
1772
1773 @item -x
1774 @opindex -x
1775 Output as hexadecimal two-byte units.  Equivalent to @samp{-t x2}.
1776
1777 @item --traditional
1778 @opindex --traditional
1779 Recognize the non-option label argument that traditional @command{od}
1780 accepted.  The following syntax:
1781
1782 @smallexample
1783 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1784 @end smallexample
1785
1786 @noindent
1787 can be used to specify at most one file and optional arguments
1788 specifying an offset and a pseudo-start address, @var{label}.
1789 The @var{label} argument is interpreted
1790 just like @var{offset}, but it specifies an initial pseudo-address.  The
1791 pseudo-addresses are displayed in parentheses following any normal
1792 address.
1793
1794 @end table
1795
1796 @exitstatus
1797
1798 @node base64 invocation
1799 @section @command{base64}: Transform data into printable data.
1800
1801 @pindex base64
1802 @cindex base64 encoding
1803
1804 @command{base64} transforms data read from a file, or standard input,
1805 into (or from) base64 encoded form.  The base64 encoded form uses
1806 printable @acronym{ASCII} characters to represent binary data, see
1807 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3548.txt, RFC 3548}.
1808 Synopses:
1809
1810 @smallexample
1811 base64 [@var{option}]@dots{} [@var{file}]
1812 base64 --decode [@var{option}]@dots{} [@var{file}]
1813 @end smallexample
1814
1815 The base64 encoding expands data to roughly 133% of the original.
1816
1817 The program accepts the following options.  Also see @ref{Common options}.
1818
1819 @table @samp
1820
1821 @item -w @var{COLS}
1822 @itemx --wrap=@var{COLS}
1823 @opindex -w
1824 @opindex --wrap
1825 @cindex wrap data
1826 @cindex column to wrap data after
1827 During encoding, wrap lines after @var{COLS} characters.  This must be
1828 a positive number.
1829
1830 The default is to wrap after 76 characters.  Use the value 0 to
1831 disable line wrapping altogether.
1832
1833 @item -d
1834 @itemx --decode
1835 @opindex -d
1836 @opindex --decode
1837 @cindex Decode base64 data
1838 @cindex Base64 decoding
1839 Change the mode of operation, from the default of encoding data, to
1840 decoding data.  Input is expected to be base64 encoded data, and the
1841 output will be the original data.
1842
1843 @item -i
1844 @itemx --ignore-garbage
1845 @opindex -i
1846 @opindex --ignore-garbage
1847 @cindex Ignore garbage in base64 stream
1848 During decoding, ignore unrecognized characters (including newline),
1849 to permit distorted data to be decoded.
1850
1851 @end table
1852
1853 @exitstatus
1854
1855
1856 @node Formatting file contents
1857 @chapter Formatting file contents
1858
1859 @cindex formatting file contents
1860
1861 These commands reformat the contents of files.
1862
1863 @menu
1864 * fmt invocation::              Reformat paragraph text.
1865 * pr invocation::               Paginate or columnate files for printing.
1866 * fold invocation::             Wrap input lines to fit in specified width.
1867 @end menu
1868
1869
1870 @node fmt invocation
1871 @section @command{fmt}: Reformat paragraph text
1872
1873 @pindex fmt
1874 @cindex reformatting paragraph text
1875 @cindex paragraphs, reformatting
1876 @cindex text, reformatting
1877
1878 @command{fmt} fills and joins lines to produce output lines of (at most)
1879 a given number of characters (75 by default).  Synopsis:
1880
1881 @example
1882 fmt [@var{option}]@dots{} [@var{file}]@dots{}
1883 @end example
1884
1885 @command{fmt} reads from the specified @var{file} arguments (or standard
1886 input if none are given), and writes to standard output.
1887
1888 By default, blank lines, spaces between words, and indentation are
1889 preserved in the output; successive input lines with different
1890 indentation are not joined; tabs are expanded on input and introduced on
1891 output.
1892
1893 @cindex line-breaking
1894 @cindex sentences and line-breaking
1895 @cindex Knuth, Donald E.
1896 @cindex Plass, Michael F.
1897 @command{fmt} prefers breaking lines at the end of a sentence, and tries to
1898 avoid line breaks after the first word of a sentence or before the last
1899 word of a sentence.  A @dfn{sentence break} is defined as either the end
1900 of a paragraph or a word ending in any of @samp{.?!}, followed by two
1901 spaces or end of line, ignoring any intervening parentheses or quotes.
1902 Like @TeX{}, @command{fmt} reads entire ``paragraphs'' before choosing line
1903 breaks; the algorithm is a variant of that given by Donald E. Knuth
1904 and Michael F. Plass in ``Breaking Paragraphs Into Lines'',
1905 @cite{Software---Practice & Experience} @b{11}, 11 (November 1981),
1906 1119--1184.
1907
1908 The program accepts the following options.  Also see @ref{Common options}.
1909
1910 @table @samp
1911
1912 @item -c
1913 @itemx --crown-margin
1914 @opindex -c
1915 @opindex --crown-margin
1916 @cindex crown margin
1917 @dfn{Crown margin} mode: preserve the indentation of the first two
1918 lines within a paragraph, and align the left margin of each subsequent
1919 line with that of the second line.
1920
1921 @item -t
1922 @itemx --tagged-paragraph
1923 @opindex -t
1924 @opindex --tagged-paragraph
1925 @cindex tagged paragraphs
1926 @dfn{Tagged paragraph} mode: like crown margin mode, except that if
1927 indentation of the first line of a paragraph is the same as the
1928 indentation of the second, the first line is treated as a one-line
1929 paragraph.
1930
1931 @item -s
1932 @itemx --split-only
1933 @opindex -s
1934 @opindex --split-only
1935 Split lines only.  Do not join short lines to form longer ones.  This
1936 prevents sample lines of code, and other such ``formatted'' text from
1937 being unduly combined.
1938
1939 @item -u
1940 @itemx --uniform-spacing
1941 @opindex -u
1942 @opindex --uniform-spacing
1943 Uniform spacing.  Reduce spacing between words to one space, and spacing
1944 between sentences to two spaces.
1945
1946 @item -@var{width}
1947 @itemx -w @var{width}
1948 @itemx --width=@var{width}
1949 @opindex -@var{width}
1950 @opindex -w
1951 @opindex --width
1952 Fill output lines up to @var{width} characters (default 75).  @command{fmt}
1953 initially tries to make lines about 7% shorter than this, to give it
1954 room to balance line lengths.
1955
1956 @item -p @var{prefix}
1957 @itemx --prefix=@var{prefix}
1958 Only lines beginning with @var{prefix} (possibly preceded by whitespace)
1959 are subject to formatting.  The prefix and any preceding whitespace are
1960 stripped for the formatting and then re-attached to each formatted output
1961 line.  One use is to format certain kinds of program comments, while
1962 leaving the code unchanged.
1963
1964 @end table
1965
1966 @exitstatus
1967
1968
1969 @node pr invocation
1970 @section @command{pr}: Paginate or columnate files for printing
1971
1972 @pindex pr
1973 @cindex printing, preparing files for
1974 @cindex multicolumn output, generating
1975 @cindex merging files in parallel
1976
1977 @command{pr} writes each @var{file} (@samp{-} means standard input), or
1978 standard input if none are given, to standard output, paginating and
1979 optionally outputting in multicolumn format; optionally merges all
1980 @var{file}s, printing all in parallel, one per column.  Synopsis:
1981
1982 @example
1983 pr [@var{option}]@dots{} [@var{file}]@dots{}
1984 @end example
1985
1986 @vindex LC_MESSAGES
1987 By default, a 5-line header is printed at each page: two blank lines;
1988 a line with the date, the file name, and the page count; and two more
1989 blank lines.  A footer of five blank lines is also printed.
1990 With the @option{-F}
1991 option, a 3-line header is printed: the leading two blank lines are
1992 omitted; no footer is used.  The default @var{page_length} in both cases is 66
1993 lines.  The default number of text lines changes from 56 (without @option{-F})
1994 to 63 (with @option{-F}).  The text line of the header takes the form
1995 @samp{@var{date} @var{string} @var{page}}, with spaces inserted around
1996 @var{string} so that the line takes up the full @var{page_width}.  Here,
1997 @var{date} is the date (see the @option{-D} or @option{--date-format}
1998 option for details), @var{string} is the centered header string, and
1999 @var{page} identifies the page number.  The @env{LC_MESSAGES} locale
2000 category affects the spelling of @var{page}; in the default C locale, it
2001 is @samp{Page @var{number}} where @var{number} is the decimal page
2002 number.
2003
2004 Form feeds in the input cause page breaks in the output.  Multiple form
2005 feeds produce empty pages.
2006
2007 Columns are of equal width, separated by an optional string (default
2008 is @samp{space}).  For multicolumn output, lines will always be truncated to
2009 @var{page_width} (default 72), unless you use the @option{-J} option.
2010 For single
2011 column output no line truncation occurs by default.  Use @option{-W} option to
2012 truncate lines in that case.
2013
2014 The following changes were made in version 1.22i and apply to later
2015 versions of @command{pr}:
2016 @c FIXME: this whole section here sounds very awkward to me. I
2017 @c made a few small changes, but really it all needs to be redone. - Brian
2018 @c OK, I fixed another sentence or two, but some of it I just don't understand.
2019 @ - Brian
2020 @itemize @bullet
2021
2022 @item
2023 Some small @var{letter options} (@option{-s}, @option{-w}) have been
2024 redefined for better @acronym{POSIX} compliance.  The output of some further
2025 cases has been adapted to other Unix systems.  These changes are not
2026 compatible with earlier versions of the program.
2027
2028 @item
2029 Some @var{new capital letter} options (@option{-J}, @option{-S}, @option{-W})
2030 have been introduced to turn off unexpected interferences of small letter
2031 options.  The @option{-N} option and the second argument @var{last_page}
2032 of @samp{+FIRST_PAGE} offer more flexibility.  The detailed handling of
2033 form feeds set in the input files requires the @option{-T} option.
2034
2035 @item
2036 Capital letter options override small letter ones.
2037
2038 @item
2039 Some of the option-arguments (compare @option{-s}, @option{-e},
2040 @option{-i}, @option{-n}) cannot be specified as separate arguments from the
2041 preceding option letter (already stated in the @acronym{POSIX} specification).
2042 @end itemize
2043
2044 The program accepts the following options.  Also see @ref{Common options}.
2045
2046 @table @samp
2047
2048 @item +@var{first_page}[:@var{last_page}]
2049 @itemx --pages=@var{first_page}[:@var{last_page}]
2050 @c The two following @opindex lines evoke warnings because they contain `:'
2051 @c The `info' spec does not permit that.  If we use those lines, we end
2052 @c up with truncated index entries that don't work.
2053 @c @opindex +@var{first_page}[:@var{last_page}]
2054 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2055 @opindex +@var{page_range}
2056 @opindex --pages=@var{page_range}
2057 Begin printing with page @var{first_page} and stop with @var{last_page}.
2058 Missing @samp{:@var{last_page}} implies end of file.  While estimating
2059 the number of skipped pages each form feed in the input file results
2060 in a new page.  Page counting with and without @samp{+@var{first_page}}
2061 is identical.  By default, counting starts with the first page of input
2062 file (not first page printed).  Line numbering may be altered by @option{-N}
2063 option.
2064
2065 @item -@var{column}
2066 @itemx --columns=@var{column}
2067 @opindex -@var{column}
2068 @opindex --columns
2069 @cindex down columns
2070 With each single @var{file}, produce @var{column} columns of output
2071 (default is 1) and print columns down, unless @option{-a} is used.  The
2072 column width is automatically decreased as @var{column} increases; unless
2073 you use the @option{-W/-w} option to increase @var{page_width} as well.
2074 This option might well cause some lines to be truncated.  The number of
2075 lines in the columns on each page are balanced.  The options @option{-e}
2076 and @option{-i} are on for multiple text-column output.  Together with
2077 @option{-J} option column alignment and line truncation is turned off.
2078 Lines of full length are joined in a free field format and @option{-S}
2079 option may set field separators.  @option{-@var{column}} may not be used
2080 with @option{-m} option.
2081
2082 @item -a
2083 @itemx --across
2084 @opindex -a
2085 @opindex --across
2086 @cindex across columns
2087 With each single @var{file}, print columns across rather than down.  The
2088 @option{-@var{column}} option must be given with @var{column} greater than one.
2089 If a line is too long to fit in a column, it is truncated.
2090
2091 @item -c
2092 @itemx --show-control-chars
2093 @opindex -c
2094 @opindex --show-control-chars
2095 Print control characters using hat notation (e.g., @samp{^G}); print
2096 other nonprinting characters in octal backslash notation.  By default,
2097 nonprinting characters are not changed.
2098
2099 @item -d
2100 @itemx --double-space
2101 @opindex -d
2102 @opindex --double-space
2103 @cindex double spacing
2104 Double space the output.
2105
2106 @item -D @var{format}
2107 @itemx --date-format=@var{format}
2108 @cindex time formats
2109 @cindex formatting times
2110 Format header dates using @var{format}, using the same conventions as
2111 for the command @samp{date +@var{format}}; @xref{date invocation}.
2112 Except for directives, which start with
2113 @samp{%}, characters in @var{format} are printed unchanged.  You can use
2114 this option to specify an arbitrary string in place of the header date,
2115 e.g., @option{--date-format="Monday morning"}.
2116
2117 @vindex POSIXLY_CORRECT
2118 @vindex LC_TIME
2119 Normally the date
2120 format defaults to @samp{%Y-%m-%d %H:%M} (for example, @samp{2001-12-04
2121 23:59}); but if the @env{POSIXLY_CORRECT} environment variable is set
2122 and the @env{LC_TIME} locale category specifies the @acronym{POSIX}
2123 locale, the default is @samp{%b %e %H:%M %Y} (for example,
2124 @samp{Dec@ @ 4 23:59 2001}.
2125
2126 @vindex TZ
2127 Time stamps are listed according to the time zone rules specified by
2128 the @env{TZ} environment variable, or by the system default rules if
2129 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
2130 with @env{TZ}, libc, The GNU C Library}.
2131
2132 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2133 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2134 @opindex -e
2135 @opindex --expand-tabs
2136 @cindex input tabs
2137 Expand @var{tab}s to spaces on input.  Optional argument @var{in-tabchar} is
2138 the input tab character (default is the TAB character).  Second optional
2139 argument @var{in-tabwidth} is the input tab character's width (default
2140 is 8).
2141
2142 @item -f
2143 @itemx -F
2144 @itemx --form-feed
2145 @opindex -F
2146 @opindex -f
2147 @opindex --form-feed
2148 Use a form feed instead of newlines to separate output pages.  The default
2149 page length of 66 lines is not altered.  But the number of lines of text
2150 per page changes from default 56 to 63 lines.
2151
2152 @item -h @var{HEADER}
2153 @itemx --header=@var{HEADER}
2154 @opindex -h
2155 @opindex --header
2156 Replace the file name in the header with the centered string @var{header}.
2157 When using the shell, @var{header} should be quoted and should be
2158 separated from @option{-h} by a space.
2159
2160 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2161 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2162 @opindex -i
2163 @opindex --output-tabs
2164 @cindex output tabs
2165 Replace spaces with @var{tab}s on output.  Optional argument @var{out-tabchar}
2166 is the output tab character (default is the TAB character).  Second optional
2167 argument @var{out-tabwidth} is the output tab character's width (default
2168 is 8).
2169
2170 @item -J
2171 @itemx --join-lines
2172 @opindex -J
2173 @opindex --join-lines
2174 Merge lines of full length.  Used together with the column options
2175 @option{-@var{column}}, @option{-a -@var{column}} or @option{-m}.  Turns off
2176 @option{-W/-w} line truncation;
2177 no column alignment used; may be used with
2178 @option{--sep-string[=@var{string}]}.  @option{-J} has been introduced
2179 (together with @option{-W} and @option{--sep-string})
2180 to disentangle the old (@acronym{POSIX}-compliant) options @option{-w} and
2181 @option{-s} along with the three column options.
2182
2183
2184 @item -l @var{page_length}
2185 @itemx --length=@var{page_length}
2186 @opindex -l
2187 @opindex --length
2188 Set the page length to @var{page_length} (default 66) lines, including
2189 the lines of the header [and the footer].  If @var{page_length} is less
2190 than or equal to 10 (or <= 3 with @option{-F}), the header and footer are
2191 omitted, and all form feeds set in input files are eliminated, as if
2192 the @option{-T} option had been given.
2193
2194 @item -m
2195 @itemx --merge
2196 @opindex -m
2197 @opindex --merge
2198 Merge and print all @var{file}s in parallel, one in each column.  If a
2199 line is too long to fit in a column, it is truncated, unless the @option{-J}
2200 option is used.  @option{--sep-string[=@var{string}]} may be used.
2201 Empty pages in
2202 some @var{file}s (form feeds set) produce empty columns, still marked
2203 by @var{string}.  The result is a continuous line numbering and column
2204 marking throughout the whole merged file.  Completely empty merged pages
2205 show no separators or line numbers.  The default header becomes
2206 @samp{@var{date} @var{page}} with spaces inserted in the middle; this
2207 may be used with the @option{-h} or @option{--header} option to fill up
2208 the middle blank part.
2209
2210 @item -n[@var{number-separator}[@var{digits}]]
2211 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2212 @opindex -n
2213 @opindex --number-lines
2214 Provide @var{digits} digit line numbering (default for @var{digits} is
2215 5).  With multicolumn output the number occupies the first @var{digits}
2216 column positions of each text column or only each line of @option{-m}
2217 output.  With single column output the number precedes each line just as
2218 @option{-m} does.  Default counting of the line numbers starts with the
2219 first line of the input file (not the first line printed, compare the
2220 @option{--page} option and @option{-N} option).
2221 Optional argument @var{number-separator} is the character appended to
2222 the line number to separate it from the text followed.  The default
2223 separator is the TAB character.  In a strict sense a TAB is always
2224 printed with single column output only.  The @var{TAB}-width varies
2225 with the @var{TAB}-position, e.g., with the left @var{margin} specified
2226 by @option{-o} option.  With multicolumn output priority is given to
2227 @samp{equal width of output columns} (a @acronym{POSIX} specification).
2228 The @var{TAB}-width is fixed to the value of the first column and does
2229 not change with different values of left @var{margin}.  That means a
2230 fixed number of spaces is always printed in the place of the
2231 @var{number-separator tab}.  The tabification depends upon the output
2232 position.
2233
2234 @item -N @var{line_number}
2235 @itemx --first-line-number=@var{line_number}
2236 @opindex -N
2237 @opindex --first-line-number
2238 Start line counting with the number @var{line_number} at first line of
2239 first page printed (in most cases not the first line of the input file).
2240
2241 @item -o @var{margin}
2242 @itemx --indent=@var{margin}
2243 @opindex -o
2244 @opindex --indent
2245 @cindex indenting lines
2246 @cindex left margin
2247 Indent each line with a margin @var{margin} spaces wide (default is zero).
2248 The total page width is the size of the margin plus the @var{page_width}
2249 set with the @option{-W/-w} option.  A limited overflow may occur with
2250 numbered single column output (compare @option{-n} option).
2251
2252 @item -r
2253 @itemx --no-file-warnings
2254 @opindex -r
2255 @opindex --no-file-warnings
2256 Do not print a warning message when an argument @var{file} cannot be
2257 opened.  (The exit status will still be nonzero, however.)
2258
2259 @item -s[@var{char}]
2260 @itemx --separator[=@var{char}]
2261 @opindex -s
2262 @opindex --separator
2263 Separate columns by a single character @var{char}.  The default for
2264 @var{char} is the TAB character without @option{-w} and @samp{no
2265 character} with @option{-w}.  Without @option{-s} the default separator
2266 @samp{space} is set.  @option{-s[char]} turns off line truncation of all
2267 three column options (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m}) unless
2268 @option{-w} is set.  This is a @acronym{POSIX}-compliant formulation.
2269
2270
2271 @item -S@var{string}
2272 @itemx --sep-string[=@var{string}]
2273 @opindex -S
2274 @opindex --sep-string
2275 Use @var{string} to separate output columns.  The @option{-S} option doesn't
2276 affect the @option{-W/-w} option, unlike the @option{-s} option which does.  It
2277 does not affect line truncation or column alignment.
2278 Without @option{-S}, and with @option{-J}, @command{pr} uses the default output
2279 separator, TAB@.
2280 Without @option{-S} or @option{-J}, @command{pr} uses a @samp{space}
2281 (same as @option{-S"@w{ }"}).  @option{--sep-string} with no
2282 @samp{=@var{string}} is equivalent to @option{--sep-string=""}.
2283
2284 @item -t
2285 @itemx --omit-header
2286 @opindex -t
2287 @opindex --omit-header
2288 Do not print the usual header [and footer] on each page, and do not fill
2289 out the bottom of pages (with blank lines or a form feed).  No page
2290 structure is produced, but form feeds set in the input files are retained.
2291 The predefined pagination is not changed.  @option{-t} or @option{-T} may be
2292 useful together with other options; e.g.: @option{-t -e4}, expand TAB characters
2293 in the input file to 4 spaces but don't make any other changes.  Use of
2294 @option{-t} overrides @option{-h}.
2295
2296 @item -T
2297 @itemx --omit-pagination
2298 @opindex -T
2299 @opindex --omit-pagination
2300 Do not print header [and footer].  In addition eliminate all form feeds
2301 set in the input files.
2302
2303 @item -v
2304 @itemx --show-nonprinting
2305 @opindex -v
2306 @opindex --show-nonprinting
2307 Print nonprinting characters in octal backslash notation.
2308
2309 @item -w @var{page_width}
2310 @itemx --width=@var{page_width}
2311 @opindex -w
2312 @opindex --width
2313 Set page width to @var{page_width} characters for multiple text-column
2314 output only (default for @var{page_width} is 72).  @option{-s[CHAR]} turns
2315 off the default page width and any line truncation and column alignment.
2316 Lines of full length are merged, regardless of the column options
2317 set.  No @var{page_width} setting is possible with single column output.
2318 A @acronym{POSIX}-compliant formulation.
2319
2320 @item -W @var{page_width}
2321 @itemx --page_width=@var{page_width}
2322 @opindex -W
2323 @opindex --page_width
2324 Set the page width to @var{page_width} characters.  That's valid with and
2325 without a column option.  Text lines are truncated, unless @option{-J}
2326 is used.  Together with one of the three column options
2327 (@option{-@var{column}}, @option{-a -@var{column}} or @option{-m}) column
2328 alignment is always used.  The separator options @option{-S} or @option{-s}
2329 don't affect the @option{-W} option.  Default is 72 characters.  Without
2330 @option{-W @var{page_width}} and without any of the column options NO line
2331 truncation is used (defined to keep downward compatibility and to meet
2332 most frequent tasks).  That's equivalent to @option{-W 72 -J}.  The header
2333 line is never truncated.
2334
2335 @end table
2336
2337 @exitstatus
2338
2339
2340 @node fold invocation
2341 @section @command{fold}: Wrap input lines to fit in specified width
2342
2343 @pindex fold
2344 @cindex wrapping long input lines
2345 @cindex folding long input lines
2346
2347 @command{fold} writes each @var{file} (@option{-} means standard input), or
2348 standard input if none are given, to standard output, breaking long
2349 lines.  Synopsis:
2350
2351 @example
2352 fold [@var{option}]@dots{} [@var{file}]@dots{}
2353 @end example
2354
2355 By default, @command{fold} breaks lines wider than 80 columns.  The output
2356 is split into as many lines as necessary.
2357
2358 @cindex screen columns
2359 @command{fold} counts screen columns by default; thus, a tab may count more
2360 than one column, backspace decreases the column count, and carriage
2361 return sets the column to zero.
2362
2363 The program accepts the following options.  Also see @ref{Common options}.
2364
2365 @table @samp
2366
2367 @item -b
2368 @itemx --bytes
2369 @opindex -b
2370 @opindex --bytes
2371 Count bytes rather than columns, so that tabs, backspaces, and carriage
2372 returns are each counted as taking up one column, just like other
2373 characters.
2374
2375 @item -s
2376 @itemx --spaces
2377 @opindex -s
2378 @opindex --spaces
2379 Break at word boundaries: the line is broken after the last blank before
2380 the maximum line length.  If the line contains no such blanks, the line
2381 is broken at the maximum line length as usual.
2382
2383 @item -w @var{width}
2384 @itemx --width=@var{width}
2385 @opindex -w
2386 @opindex --width
2387 Use a maximum line length of @var{width} columns instead of 80.
2388
2389 For compatibility @command{fold} supports an obsolete option syntax
2390 @option{-@var{width}}.  New scripts should use @option{-w @var{width}}
2391 instead.
2392
2393 @end table
2394
2395 @exitstatus
2396
2397
2398 @node Output of parts of files
2399 @chapter Output of parts of files
2400
2401 @cindex output of parts of files
2402 @cindex parts of files, output of
2403
2404 These commands output pieces of the input.
2405
2406 @menu
2407 * head invocation::             Output the first part of files.
2408 * tail invocation::             Output the last part of files.
2409 * split invocation::            Split a file into fixed-size pieces.
2410 * csplit invocation::           Split a file into context-determined pieces.
2411 @end menu
2412
2413 @node head invocation
2414 @section @command{head}: Output the first part of files
2415
2416 @pindex head
2417 @cindex initial part of files, outputting
2418 @cindex first part of files, outputting
2419
2420 @command{head} prints the first part (10 lines by default) of each
2421 @var{file}; it reads from standard input if no files are given or
2422 when given a @var{file} of @option{-}.  Synopsis:
2423
2424 @example
2425 head [@var{option}]@dots{} [@var{file}]@dots{}
2426 @end example
2427
2428 If more than one @var{file} is specified, @command{head} prints a
2429 one-line header consisting of:
2430
2431 @example
2432 ==> @var{file name} <==
2433 @end example
2434
2435 @noindent
2436 before the output for each @var{file}.
2437
2438 The program accepts the following options.  Also see @ref{Common options}.
2439
2440 @table @samp
2441
2442 @item -c @var{n}
2443 @itemx --bytes=@var{n}
2444 @opindex -c
2445 @opindex --bytes
2446 Print the first @var{n} bytes, instead of initial lines.  Appending
2447 @samp{b} multiplies @var{n} by 512, @samp{k} by 1024, and @samp{m}
2448 by 1048576.
2449 However, if @var{n} starts with a @samp{-},
2450 print all but the last @var{n} bytes of each file.
2451
2452 @itemx -n @var{n}
2453 @itemx --lines=@var{n}
2454 @opindex -n
2455 @opindex --lines
2456 Output the first @var{n} lines.
2457 However, if @var{n} starts with a @samp{-},
2458 print all but the last @var{n} lines of each file.
2459
2460 @item -q
2461 @itemx --quiet
2462 @itemx --silent
2463 @opindex -q
2464 @opindex --quiet
2465 @opindex --silent
2466 Never print file name headers.
2467
2468 @item -v
2469 @itemx --verbose
2470 @opindex -v
2471 @opindex --verbose
2472 Always print file name headers.
2473
2474 @end table
2475
2476 For compatibility @command{head} also supports an obsolete option syntax
2477 @option{-@var{count}@var{options}}, which is recognized only if it is
2478 specified first.  @var{count} is a decimal number optionally followed
2479 by a size letter (@samp{b}, @samp{k}, @samp{m}) as in @option{-c}, or
2480 @samp{l} to mean count by lines, or other option letters (@samp{cqv}).
2481 Scripts intended for standard hosts should use @option{-c @var{count}}
2482 or @option{-n @var{count}} instead.  If your script must also run on
2483 hosts that support only the obsolete syntax, it is usually simpler to
2484 avoid @command{head}, e.g., by using @samp{sed 5q} instead of
2485 @samp{head -5}.
2486
2487 @exitstatus
2488
2489
2490 @node tail invocation
2491 @section @command{tail}: Output the last part of files
2492
2493 @pindex tail
2494 @cindex last part of files, outputting
2495
2496 @command{tail} prints the last part (10 lines by default) of each
2497 @var{file}; it reads from standard input if no files are given or
2498 when given a @var{file} of @samp{-}.  Synopsis:
2499
2500 @example
2501 tail [@var{option}]@dots{} [@var{file}]@dots{}
2502 @end example
2503
2504 If more than one @var{file} is specified, @command{tail} prints a
2505 one-line header consisting of:
2506
2507 @example
2508 ==> @var{file name} <==
2509 @end example
2510
2511 @noindent
2512 before the output for each @var{file}.
2513
2514 @cindex BSD @command{tail}
2515 @sc{gnu} @command{tail} can output any amount of data (some other versions of
2516 @command{tail} cannot).  It also has no @option{-r} option (print in
2517 reverse), since reversing a file is really a different job from printing
2518 the end of a file; BSD @command{tail} (which is the one with @option{-r}) can
2519 only reverse files that are at most as large as its buffer, which is
2520 typically 32 KiB@.  A more reliable and versatile way to reverse files is
2521 the @sc{gnu} @command{tac} command.
2522
2523 If any option-argument is a number @var{n} starting with a @samp{+},
2524 @command{tail} begins printing with the @var{n}th item from the start of
2525 each file, instead of from the end.
2526
2527 The program accepts the following options.  Also see @ref{Common options}.
2528
2529 @table @samp
2530
2531 @item -c @var{bytes}
2532 @itemx --bytes=@var{bytes}
2533 @opindex -c
2534 @opindex --bytes
2535 Output the last @var{bytes} bytes, instead of final lines.  Appending
2536 @samp{b} multiplies @var{bytes} by 512, @samp{k} by 1024, and @samp{m}
2537 by 1048576.
2538
2539 @item -f
2540 @itemx --follow[=@var{how}]
2541 @opindex -f
2542 @opindex --follow
2543 @cindex growing files
2544 @vindex name @r{follow option}
2545 @vindex descriptor @r{follow option}
2546 Loop forever trying to read more characters at the end of the file,
2547 presumably because the file is growing.
2548 If more than one file is given, @command{tail} prints a header whenever it
2549 gets output from a different file, to indicate which file that output is
2550 from.
2551
2552 There are two ways to specify how you'd like to track files with this option,
2553 but that difference is noticeable only when a followed file is removed or
2554 renamed.
2555 If you'd like to continue to track the end of a growing file even after
2556 it has been unlinked, use @option{--follow=descriptor}.  This is the default
2557 behavior, but it is not useful if you're tracking a log file that may be
2558 rotated (removed or renamed, then reopened).  In that case, use
2559 @option{--follow=name} to track the named file by reopening it periodically
2560 to see if it has been removed and recreated by some other program.
2561
2562 No matter which method you use, if the tracked file is determined to have
2563 shrunk, @command{tail} prints a message saying the file has been truncated
2564 and resumes tracking the end of the file from the newly-determined endpoint.
2565
2566 When a file is removed, @command{tail}'s behavior depends on whether it is
2567 following the name or the descriptor.  When following by name, tail can
2568 detect that a file has been removed and gives a message to that effect,
2569 and if @option{--retry} has been specified it will continue checking
2570 periodically to see if the file reappears.
2571 When following a descriptor, tail does not detect that the file has
2572 been unlinked or renamed and issues no message;  even though the file
2573 may no longer be accessible via its original name, it may still be
2574 growing.
2575
2576 The option values @samp{descriptor} and @samp{name} may be specified only
2577 with the long form of the option, not with @option{-f}.
2578
2579 @vindex POSIXLY_CORRECT
2580 If @env{POSIXLY_CORRECT} is set, the @option{-f} option is ignored if
2581 no @var{file} operand is specified and standard input is a pipe.
2582
2583 @item -F
2584 @opindex -F
2585 This option is the same as @option{--follow=name --retry}.  That is, tail
2586 will attempt to reopen a file when it is removed.  Should this fail, tail
2587 will keep trying until it becomes accessible again.
2588
2589 @itemx --retry
2590 @opindex --retry
2591 This option is useful mainly when following by name (i.e., with
2592 @option{--follow=name}).
2593 Without this option, when tail encounters a file that doesn't
2594 exist or is otherwise inaccessible, it reports that fact and
2595 never checks it again.
2596
2597 @itemx --sleep-interval=@var{number}
2598 @opindex --sleep-interval
2599 Change the number of seconds to wait between iterations (the default is 1.0).
2600 During one iteration, every specified file is checked to see if it has
2601 changed size.
2602 Historical implementations of @command{tail} have required that
2603 @var{number} be an integer.  However, GNU @command{tail} accepts
2604 an arbitrary floating point number (using a period before any
2605 fractional digits).
2606
2607 @itemx --pid=@var{pid}
2608 @opindex --pid
2609 When following by name or by descriptor, you may specify the process ID,
2610 @var{pid}, of the sole writer of all @var{file} arguments.  Then, shortly
2611 after that process terminates, tail will also terminate.  This will
2612 work properly only if the writer and the tailing process are running on
2613 the same machine.  For example, to save the output of a build in a file
2614 and to watch the file grow, if you invoke @command{make} and @command{tail}
2615 like this then the tail process will stop when your build completes.
2616 Without this option, you would have had to kill the @code{tail -f}
2617 process yourself.
2618
2619 @example
2620 $ make >& makerr & tail --pid=$! -f makerr
2621 @end example
2622
2623 If you specify a @var{pid} that is not in use or that does not correspond
2624 to the process that is writing to the tailed files, then @command{tail}
2625 may terminate long before any @var{file}s stop growing or it may not
2626 terminate until long after the real writer has terminated.
2627 Note that @option{--pid} cannot be supported on some systems; @command{tail}
2628 will print a warning if this is the case.
2629
2630 @itemx --max-unchanged-stats=@var{n}
2631 @opindex --max-unchanged-stats
2632 When tailing a file by name, if there have been @var{n} (default
2633 n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive
2634 iterations for which the file has not changed, then
2635 @code{open}/@code{fstat} the file to determine if that file name is
2636 still associated with the same device/inode-number pair as before.
2637 When following a log file that is rotated, this is approximately the
2638 number of seconds between when tail prints the last pre-rotation lines
2639 and when it prints the lines that have accumulated in the new log file.
2640 This option is meaningful only when following by name.
2641
2642 @itemx -n @var{n}
2643 @itemx --lines=@var{n}
2644 @opindex -n
2645 @opindex --lines
2646 Output the last @var{n} lines.
2647
2648 @item -q
2649 @itemx --quiet
2650 @itemx --silent
2651 @opindex -q
2652 @opindex --quiet
2653 @opindex --silent
2654 Never print file name headers.
2655
2656 @item -v
2657 @itemx --verbose
2658 @opindex -v
2659 @opindex --verbose
2660 Always print file name headers.
2661
2662 @end table
2663
2664 For compatibility @command{tail} also supports an obsolete usage
2665 @samp{tail -[@var{count}][bcl][f] [@var{file}]}, which is recognized
2666 only if it does not conflict with the usage described
2667 above.  This obsolete form uses exactly one option and at most one
2668 file.  In the option, @var{count} is an optional decimal number optionally
2669 followed by a size letter (@samp{b}, @samp{c}, @samp{l}) to mean count
2670 by 512-byte blocks, bytes, or lines, optionally followed by @samp{f}
2671 which has the same meaning as @option{-f}.
2672
2673 @vindex _POSIX2_VERSION
2674 On older systems, the leading @samp{-} can be replaced by @samp{+} in
2675 the obsolete option syntax with the same meaning as in counts, and
2676 obsolete usage overrides normal usage when the two conflict.
2677 This obsolete behavior can be enabled or disabled with the
2678 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
2679 conformance}).
2680
2681 Scripts intended for use on standard hosts should avoid obsolete
2682 syntax and should use @option{-c @var{count}[b]}, @option{-n
2683 @var{count}}, and/or @option{-f} instead.  If your script must also
2684 run on hosts that support only the obsolete syntax, you can often
2685 rewrite it to avoid problematic usages, e.g., by using @samp{sed -n
2686 '$p'} rather than @samp{tail -1}.  If that's not possible, the script
2687 can use a test like @samp{if tail -c +1 </dev/null >/dev/null 2>&1;
2688 then @dots{}} to decide which syntax to use.
2689
2690 Even if your script assumes the standard behavior, you should still
2691 beware usages whose behaviors differ depending on the @acronym{POSIX}
2692 version.  For example, avoid @samp{tail - main.c}, since it might be
2693 interpreted as either @samp{tail main.c} or as @samp{tail -- -
2694 main.c}; avoid @samp{tail -c 4}, since it might mean either @samp{tail
2695 -c4} or @samp{tail -c 10 4}; and avoid @samp{tail +4}, since it might
2696 mean either @samp{tail ./+4} or @samp{tail -n +4}.
2697
2698 @exitstatus
2699
2700
2701 @node split invocation
2702 @section @command{split}: Split a file into fixed-size pieces
2703
2704 @pindex split
2705 @cindex splitting a file into pieces
2706 @cindex pieces, splitting a file into
2707
2708 @command{split} creates output files containing consecutive sections of
2709 @var{input} (standard input if none is given or @var{input} is
2710 @samp{-}).  Synopsis:
2711
2712 @example
2713 split [@var{option}] [@var{input} [@var{prefix}]]
2714 @end example
2715
2716 By default, @command{split} puts 1000 lines of @var{input} (or whatever is
2717 left over for the last section), into each output file.
2718
2719 @cindex output file name prefix
2720 The output files' names consist of @var{prefix} (@samp{x} by default)
2721 followed by a group of characters (@samp{aa}, @samp{ab}, @dots{} by
2722 default), such that concatenating the output files in traditional
2723 sorted order by file name produces
2724 the original input file.  If the output file names are exhausted,
2725 @command{split} reports an error without deleting the output files
2726 that it did create.
2727
2728 The program accepts the following options.  Also see @ref{Common options}.
2729
2730 @table @samp
2731
2732 @item -a @var{length}
2733 @itemx --suffix-length=@var{length}
2734 @opindex -a
2735 @opindex --suffix-length
2736 Use suffixes of length @var{length}.  The default @var{length} is 2.
2737
2738 @item -l @var{lines}
2739 @itemx --lines=@var{lines}
2740 @opindex -l
2741 @opindex --lines
2742 Put @var{lines} lines of @var{input} into each output file.
2743
2744 For compatibility @command{split} also supports an obsolete
2745 option syntax @option{-@var{lines}}.  New scripts should use @option{-l
2746 @var{lines}} instead.
2747
2748 @item -b @var{bytes}
2749 @itemx --bytes=@var{bytes}
2750 @opindex -b
2751 @opindex --bytes
2752 Put the first @var{bytes} bytes of @var{input} into each output file.
2753 Appending @samp{b} multiplies @var{bytes} by 512, @samp{k} by 1024, and
2754 @samp{m} by 1048576.
2755
2756 @item -C @var{bytes}
2757 @itemx --line-bytes=@var{bytes}
2758 @opindex -C
2759 @opindex --line-bytes
2760 Put into each output file as many complete lines of @var{input} as
2761 possible without exceeding @var{bytes} bytes.  For lines longer than
2762 @var{bytes} bytes, put @var{bytes} bytes into each output file until
2763 less than @var{bytes} bytes of the line are left, then continue
2764 normally.  @var{bytes} has the same format as for the @option{--bytes}
2765 option.
2766
2767 @item -d
2768 @itemx --numeric-suffixes
2769 @opindex -d
2770 @opindex --numeric-suffixes
2771 Use digits in suffixes rather than lower-case letters.
2772
2773 @itemx --verbose
2774 @opindex --verbose
2775 Write a diagnostic to standard error just before each output file is opened.
2776
2777 @end table
2778
2779 @exitstatus
2780
2781
2782 @node csplit invocation
2783 @section @command{csplit}: Split a file into context-determined pieces
2784
2785 @pindex csplit
2786 @cindex context splitting
2787 @cindex splitting a file into pieces by context
2788
2789 @command{csplit} creates zero or more output files containing sections of
2790 @var{input} (standard input if @var{input} is @samp{-}).  Synopsis:
2791
2792 @example
2793 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
2794 @end example
2795
2796 The contents of the output files are determined by the @var{pattern}
2797 arguments, as detailed below.  An error occurs if a @var{pattern}
2798 argument refers to a nonexistent line of the input file (e.g., if no
2799 remaining line matches a given regular expression).  After every
2800 @var{pattern} has been matched, any remaining input is copied into one
2801 last output file.
2802
2803 By default, @command{csplit} prints the number of bytes written to each
2804 output file after it has been created.
2805
2806 The types of pattern arguments are:
2807
2808 @table @samp
2809
2810 @item @var{n}
2811 Create an output file containing the input up to but not including line
2812 @var{n} (a positive integer).  If followed by a repeat count, also
2813 create an output file containing the next @var{n} lines of the input
2814 file once for each repeat.
2815
2816 @item /@var{regexp}/[@var{offset}]
2817 Create an output file containing the current line up to (but not
2818 including) the next line of the input file that contains a match for
2819 @var{regexp}.  The optional @var{offset} is an integer.
2820 If it is given, the input up to (but not including) the
2821 matching line plus or minus @var{offset} is put into the output file,
2822 and the line after that begins the next section of input.
2823
2824 @item %@var{regexp}%[@var{offset}]
2825 Like the previous type, except that it does not create an output
2826 file, so that section of the input file is effectively ignored.
2827
2828 @item @{@var{repeat-count}@}
2829 Repeat the previous pattern @var{repeat-count} additional
2830 times.  The @var{repeat-count} can either be a positive integer or an
2831 asterisk, meaning repeat as many times as necessary until the input is
2832 exhausted.
2833
2834 @end table
2835
2836 The output files' names consist of a prefix (@samp{xx} by default)
2837 followed by a suffix.  By default, the suffix is an ascending sequence
2838 of two-digit decimal numbers from @samp{00} to @samp{99}.  In any case,
2839 concatenating the output files in sorted order by file name produces the
2840 original input file.
2841
2842 By default, if @command{csplit} encounters an error or receives a hangup,
2843 interrupt, quit, or terminate signal, it removes any output files
2844 that it has created so far before it exits.
2845
2846 The program accepts the following options.  Also see @ref{Common options}.
2847
2848 @table @samp
2849
2850 @item -f @var{prefix}
2851 @itemx --prefix=@var{prefix}
2852 @opindex -f
2853 @opindex --prefix
2854 @cindex output file name prefix
2855 Use @var{prefix} as the output file name prefix.
2856
2857 @item -b @var{suffix}
2858 @itemx --suffix=@var{suffix}
2859 @opindex -b
2860 @opindex --suffix
2861 @cindex output file name suffix
2862 Use @var{suffix} as the output file name suffix.  When this option is
2863 specified, the suffix string must include exactly one
2864 @code{printf(3)}-style conversion specification, possibly including
2865 format specification flags, a field width, a precision specifications,
2866 or all of these kinds of modifiers.  The format letter must convert a
2867 binary integer argument to readable form; thus, only @samp{d}, @samp{i},
2868 @samp{u}, @samp{o}, @samp{x}, and @samp{X} conversions are allowed.  The
2869 entire @var{suffix} is given (with the current output file number) to
2870 @code{sprintf(3)} to form the file name suffixes for each of the
2871 individual output files in turn.  If this option is used, the
2872 @option{--digits} option is ignored.
2873
2874 @item -n @var{digits}
2875 @itemx --digits=@var{digits}
2876 @opindex -n
2877 @opindex --digits
2878 Use output file names containing numbers that are @var{digits} digits
2879 long instead of the default 2.
2880
2881 @item -k
2882 @itemx --keep-files
2883 @opindex -k
2884 @opindex --keep-files
2885 Do not remove output files when errors are encountered.
2886
2887 @item -z
2888 @itemx --elide-empty-files
2889 @opindex -z
2890 @opindex --elide-empty-files
2891 Suppress the generation of zero-length output files.  (In cases where
2892 the section delimiters of the input file are supposed to mark the first
2893 lines of each of the sections, the first output file will generally be a
2894 zero-length file unless you use this option.)  The output file sequence
2895 numbers always run consecutively starting from 0, even when this option
2896 is specified.
2897
2898 @item -s
2899 @itemx -q
2900 @itemx --silent
2901 @itemx --quiet
2902 @opindex -s
2903 @opindex -q
2904 @opindex --silent
2905 @opindex --quiet
2906 Do not print counts of output file sizes.
2907
2908 @end table
2909
2910 @exitstatus
2911
2912
2913 @node Summarizing files
2914 @chapter Summarizing files
2915
2916 @cindex summarizing files
2917
2918 These commands generate just a few numbers representing entire
2919 contents of files.
2920
2921 @menu
2922 * wc invocation::               Print newline, word, and byte counts.
2923 * sum invocation::              Print checksum and block counts.
2924 * cksum invocation::            Print CRC checksum and byte counts.
2925 * md5sum invocation::           Print or check MD5 digests.
2926 * sha1sum invocation::          Print or check SHA-1 digests.
2927 * sha2 utilities::              Print or check SHA-2 digests.
2928 @end menu
2929
2930
2931 @node wc invocation
2932 @section @command{wc}: Print newline, word, and byte counts
2933
2934 @pindex wc
2935 @cindex byte count
2936 @cindex character count
2937 @cindex word count
2938 @cindex line count
2939
2940 @command{wc} counts the number of bytes, characters, whitespace-separated
2941 words, and newlines in each given @var{file}, or standard input if none
2942 are given or for a @var{file} of @samp{-}.  Synopsis:
2943
2944 @example
2945 wc [@var{option}]@dots{} [@var{file}]@dots{}
2946 @end example
2947
2948 @cindex total counts
2949 @command{wc} prints one line of counts for each file, and if the file was
2950 given as an argument, it prints the file name following the counts.  If
2951 more than one @var{file} is given, @command{wc} prints a final line
2952 containing the cumulative counts, with the file name @file{total}.  The
2953 counts are printed in this order: newlines, words, characters, bytes.
2954 Each count is printed right-justified in a field with at least one
2955 space between fields so that the numbers and file names normally line
2956 up nicely in columns.  The width of the count fields varies depending
2957 on the inputs, so you should not depend on a particular field width.
2958 However, as a @acronym{GNU} extension, if only one count is printed,
2959 it is guaranteed to be printed without leading spaces.
2960
2961 By default, @command{wc} prints three counts: the newline, words, and byte
2962 counts.  Options can specify that only certain counts be printed.
2963 Options do not undo others previously given, so
2964
2965 @example
2966 wc --bytes --words
2967 @end example
2968
2969 @noindent
2970 prints both the byte counts and the word counts.
2971
2972 With the @option{--max-line-length} option, @command{wc} prints the length
2973 of the longest line per file, and if there is more than one file it
2974 prints the maximum (not the sum) of those lengths.
2975
2976 The program accepts the following options.  Also see @ref{Common options}.
2977
2978 @table @samp
2979
2980 @item -c
2981 @itemx --bytes
2982 @opindex -c
2983 @opindex --bytes
2984 Print only the byte counts.
2985
2986 @item -m
2987 @itemx --chars
2988 @opindex -m
2989 @opindex --chars
2990 Print only the character counts.
2991
2992 @item -w
2993 @itemx --words
2994 @opindex -w
2995 @opindex --words
2996 Print only the word counts.
2997
2998 @item -l
2999 @itemx --lines
3000 @opindex -l
3001 @opindex --lines
3002 Print only the newline counts.
3003
3004 @item -L
3005 @itemx --max-line-length
3006 @opindex -L
3007 @opindex --max-line-length
3008 Print only the maximum line lengths.
3009
3010 @itemx --files0-from=@var{FILE}
3011 @opindex --files0-from=@var{FILE}
3012 @cindex including files from @command{du}
3013 Rather than processing files named on the command line, process those
3014 named in file @var{FILE}; each name is terminated by a null byte.
3015 This is useful when
3016 the list of file names is so long that it may exceed a command line
3017 length limitation.
3018 In such cases, running @command{wc} via @command{xargs} is undesirable
3019 because it splits the list into pieces and makes @command{wc} print a
3020 total for each sublist rather than for the entire list.
3021 One way to produce a list of null-byte-terminated file names is with @sc{gnu}
3022 @command{find}, using its @option{-print0} predicate.  For example, to find
3023 the length of the longest line in any @file{.c} or @file{.h} file in the
3024 current hierarchy, do this:
3025
3026 @example
3027 find . -name '*.[ch]' -print0 | wc -L --files0-from=- | tail -n1
3028 @end example
3029
3030 Do not specify any @var{FILE} on the command line when using this option.
3031
3032 @end table
3033
3034 @exitstatus
3035
3036
3037 @node sum invocation
3038 @section @command{sum}: Print checksum and block counts
3039
3040 @pindex sum
3041 @cindex 16-bit checksum
3042 @cindex checksum, 16-bit
3043
3044 @command{sum} computes a 16-bit checksum for each given @var{file}, or
3045 standard input if none are given or for a @var{file} of @samp{-}.  Synopsis:
3046
3047 @example
3048 sum [@var{option}]@dots{} [@var{file}]@dots{}
3049 @end example
3050
3051 @command{sum} prints the checksum for each @var{file} followed by the
3052 number of blocks in the file (rounded up).  If more than one @var{file}
3053 is given, file names are also printed (by default).  (With the
3054 @option{--sysv} option, corresponding file names are printed when there is
3055 at least one file argument.)
3056
3057 By default, @sc{gnu} @command{sum} computes checksums using an algorithm
3058 compatible with BSD @command{sum} and prints file sizes in units of
3059 1024-byte blocks.
3060
3061 The program accepts the following options.  Also see @ref{Common options}.
3062
3063 @table @samp
3064
3065 @item -r
3066 @opindex -r
3067 @cindex BSD @command{sum}
3068 Use the default (BSD compatible) algorithm.  This option is included for
3069 compatibility with the System V @command{sum}.  Unless @option{-s} was also
3070 given, it has no effect.
3071
3072 @item -s
3073 @itemx --sysv
3074 @opindex -s
3075 @opindex --sysv
3076 @cindex System V @command{sum}
3077 Compute checksums using an algorithm compatible with System V
3078 @command{sum}'s default, and print file sizes in units of 512-byte blocks.
3079
3080 @end table
3081
3082 @command{sum} is provided for compatibility; the @command{cksum} program (see
3083 next section) is preferable in new applications.
3084
3085 @exitstatus
3086
3087
3088 @node cksum invocation
3089 @section @command{cksum}: Print CRC checksum and byte counts
3090
3091 @pindex cksum
3092 @cindex cyclic redundancy check
3093 @cindex CRC checksum
3094
3095 @command{cksum} computes a cyclic redundancy check (CRC) checksum for each
3096 given @var{file}, or standard input if none are given or for a
3097 @var{file} of @samp{-}.  Synopsis:
3098
3099 @example
3100 cksum [@var{option}]@dots{} [@var{file}]@dots{}
3101 @end example
3102
3103 @command{cksum} prints the CRC checksum for each file along with the number
3104 of bytes in the file, and the file name unless no arguments were given.
3105
3106 @command{cksum} is typically used to ensure that files
3107 transferred by unreliable means (e.g., netnews) have not been corrupted,
3108 by comparing the @command{cksum} output for the received files with the
3109 @command{cksum} output for the original files (typically given in the
3110 distribution).
3111
3112 The CRC algorithm is specified by the @acronym{POSIX} standard.  It is not
3113 compatible with the BSD or System V @command{sum} algorithms (see the
3114 previous section); it is more robust.
3115
3116 The only options are @option{--help} and @option{--version}.  @xref{Common
3117 options}.
3118
3119 @exitstatus
3120
3121
3122 @node md5sum invocation
3123 @section @command{md5sum}: Print or check MD5 digests
3124
3125 @pindex md5sum
3126 @cindex MD5
3127 @cindex 128-bit checksum
3128 @cindex checksum, 128-bit
3129 @cindex fingerprint, 128-bit
3130 @cindex message-digest, 128-bit
3131
3132 @command{md5sum} computes a 128-bit checksum (or @dfn{fingerprint} or
3133 @dfn{message-digest}) for each specified @var{file}.
3134
3135 Note: The MD5 digest is more reliable than a simple CRC (provided by
3136 the @command{cksum} command) for detecting accidental file corruption,
3137 as the chances of accidentally having two files with identical MD5
3138 are vanishingly small.  However, it should not be considered truly
3139 secure against malicious tampering: although finding a file with a
3140 given MD5 fingerprint, or modifying a file so as to retain its MD5 are
3141 considered infeasible at the moment, it is known how to produce
3142 different files with identical MD5 (a ``collision''), something which
3143 can be a security issue in certain contexts.  For more secure hashes,
3144 consider using SHA-1 or SHA-2.  @xref{sha1sum invocation}, and
3145 @ref{sha2 utilities}.
3146
3147 If a @var{file} is specified as @samp{-} or if no files are given
3148 @command{md5sum} computes the checksum for the standard input.
3149 @command{md5sum} can also determine whether a file and checksum are
3150 consistent.  Synopsis:
3151
3152 @example
3153 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
3154 @end example
3155
3156 For each @var{file}, @samp{md5sum} outputs the MD5 checksum, a flag
3157 indicating a binary or text input file, and the file name.
3158 If @var{file} is omitted or specified as @samp{-}, standard input is read.
3159
3160 The program accepts the following options.  Also see @ref{Common options}.
3161
3162 @table @samp
3163
3164 @item -b
3165 @itemx --binary
3166 @opindex -b
3167 @opindex --binary
3168 @cindex binary input files
3169 Treat each input file as binary, by reading it in binary mode and
3170 outputting a @samp{*} flag.  This is the inverse of @option{--text}.
3171 On systems like @acronym{GNU} that do not distinguish between binary
3172 and text files, this option merely flags each input file as binary:
3173 the MD5 checksum is unaffected.  This option is the default on systems
3174 like MS-DOS that distinguish between binary and text files, except
3175 for reading standard input when standard input is a terminal.
3176
3177 @item -c
3178 @itemx --check
3179 Read file names and checksum information (not data) from each
3180 @var{file} (or from stdin if no @var{file} was specified) and report
3181 whether the checksums match the contents of the named files.
3182 The input to this mode of @command{md5sum} is usually the output of
3183 a prior, checksum-generating run of @samp{md5sum}.
3184 Each valid line of input consists of an MD5 checksum, a binary/text
3185 flag, and then a file name.
3186 Binary files are marked with @samp{*}, text with @samp{ }.
3187 For each such line, @command{md5sum} reads the named file and computes its
3188 MD5 checksum.  Then, if the computed message digest does not match the
3189 one on the line with the file name, the file is noted as having
3190 failed the test.  Otherwise, the file passes the test.
3191 By default, for each valid line, one line is written to standard
3192 output indicating whether the named file passed the test.
3193 After all checks have been performed, if there were any failures,
3194 a warning is issued to standard error.
3195 Use the @option{--status} option to inhibit that output.
3196 If any listed file cannot be opened or read, if any valid line has
3197 an MD5 checksum inconsistent with the associated file, or if no valid
3198 line is found, @command{md5sum} exits with nonzero status.  Otherwise,
3199 it exits successfully.
3200
3201 @itemx --status
3202 @opindex --status
3203 @cindex verifying MD5 checksums
3204 This option is useful only when verifying checksums.
3205 When verifying checksums, don't generate the default one-line-per-file
3206 diagnostic and don't output the warning summarizing any failures.
3207 Failures to open or read a file still evoke individual diagnostics to
3208 standard error.
3209 If all listed files are readable and are consistent with the associated
3210 MD5 checksums, exit successfully.  Otherwise exit with a status code
3211 indicating there was a failure.
3212
3213 @item -t
3214 @itemx --text
3215 @opindex -t
3216 @opindex --text
3217 @cindex text input files
3218 Treat each input file as text, by reading it in text mode and
3219 outputting a @samp{ } flag.  This is the inverse of @option{--binary}.
3220 This option is the default on systems like @acronym{GNU} that do not
3221 distinguish between binary and text files.  On other systems, it is
3222 the default for reading standard input when standard input is a
3223 terminal.
3224
3225 @item -w
3226 @itemx --warn
3227 @opindex -w
3228 @opindex --warn
3229 @cindex verifying MD5 checksums
3230 When verifying checksums, warn about improperly formatted MD5 checksum lines.
3231 This option is useful only if all but a few lines in the checked input
3232 are valid.
3233
3234 @end table
3235
3236 @exitstatus
3237
3238
3239 @node sha1sum invocation
3240 @section @command{sha1sum}: Print or check SHA-1 digests
3241
3242 @pindex sha1sum
3243 @cindex SHA-1
3244 @cindex 160-bit checksum
3245 @cindex checksum, 160-bit
3246 @cindex fingerprint, 160-bit
3247 @cindex message-digest, 160-bit
3248
3249 @command{sha1sum} computes a 160-bit checksum for each specified
3250 @var{file}.  The usage and options of this command are precisely the
3251 same as for @command{md5sum}.  @xref{md5sum invocation}.
3252
3253 Note: The SHA-1 digest is more secure than MD5, and no collisions of
3254 it are known (different files having the same fingerprint).  However,
3255 it is known that they can be produced with considerable, but not
3256 unreasonable, resources.  For this reason, it is generally considered
3257 that SHA-1 should be gradually phased out in favor of the more secure
3258 SHA-2 hash algorithms.  @xref{sha2 utilities}.
3259
3260
3261 @node sha2 utilities
3262 @section sha2 utilities: Print or check SHA-2 digests
3263
3264 @pindex sha224sum
3265 @pindex sha256sum
3266 @pindex sha384sum
3267 @pindex sha512sum
3268 @cindex SHA-2
3269 @cindex 224-bit checksum
3270 @cindex 256-bit checksum
3271 @cindex 384-bit checksum
3272 @cindex 512-bit checksum
3273 @cindex checksum, 224-bit
3274 @cindex checksum, 256-bit
3275 @cindex checksum, 384-bit
3276 @cindex checksum, 512-bit
3277 @cindex fingerprint, 224-bit
3278 @cindex fingerprint, 256-bit
3279 @cindex fingerprint, 384-bit
3280 @cindex fingerprint, 512-bit
3281 @cindex message-digest, 224-bit
3282 @cindex message-digest, 256-bit
3283 @cindex message-digest, 384-bit
3284 @cindex message-digest, 512-bit
3285
3286 The commands @command{sha224sum}, @command{sha256sum},
3287 @command{sha384sum} and @command{sha512sum} compute checksums of
3288 various lengths (respectively 224, 256, 384 and 512 bits),
3289 collectively known as the SHA-2 hashes.  The usage and options of
3290 these commands are precisely the same as for @command{md5sum}.
3291 @xref{md5sum invocation}.
3292
3293 Note: The SHA384 and SHA512 digests are considerably slower to
3294 compute, especially on 32-bit computers, than SHA224 or SHA256.
3295
3296
3297 @node Operating on sorted files
3298 @chapter Operating on sorted files
3299
3300 @cindex operating on sorted files
3301 @cindex sorted files, operations on
3302
3303 These commands work with (or produce) sorted files.
3304
3305 @menu
3306 * sort invocation::             Sort text files.
3307 * shuf invocation::             Shuffle text files.
3308 * uniq invocation::             Uniquify files.
3309 * comm invocation::             Compare two sorted files line by line.
3310 * ptx invocation::              Produce a permuted index of file contents.
3311 * tsort invocation::            Topological sort.
3312 * tsort background::            Where tsort came from.
3313 @end menu
3314
3315
3316 @node sort invocation
3317 @section @command{sort}: Sort text files
3318
3319 @pindex sort
3320 @cindex sorting files
3321
3322 @command{sort} sorts, merges, or compares all the lines from the given
3323 files, or standard input if none are given or for a @var{file} of
3324 @samp{-}.  By default, @command{sort} writes the results to standard
3325 output.  Synopsis:
3326
3327 @example
3328 sort [@var{option}]@dots{} [@var{file}]@dots{}
3329 @end example
3330
3331 @command{sort} has three modes of operation: sort (the default), merge,
3332 and check for sortedness.  The following options change the operation
3333 mode:
3334
3335 @table @samp
3336
3337 @item -c
3338 @itemx --check
3339 @opindex -c
3340 @opindex --check
3341 @cindex checking for sortedness
3342 Check whether the given files are already sorted: if they are not all
3343 sorted, print an error message and exit with a status of 1.
3344 Otherwise, exit successfully.
3345
3346 @item -m
3347 @itemx --merge
3348 @opindex -m
3349 @opindex --merge
3350 @cindex merging sorted files
3351 Merge the given files by sorting them as a group.  Each input file must
3352 always be individually sorted.  It always works to sort instead of
3353 merge; merging is provided because it is faster, in the case where it
3354 works.
3355
3356 @end table
3357
3358 @cindex sort stability
3359 @cindex sort's last-resort comparison
3360 A pair of lines is compared as follows:
3361 @command{sort} compares each pair of fields, in the
3362 order specified on the command line, according to the associated
3363 ordering options, until a difference is found or no fields are left.
3364 If no key fields are specified, @command{sort} uses a default key of
3365 the entire line.  Finally, as a last resort when all keys compare
3366 equal, @command{sort} compares entire lines as if no ordering options
3367 other than @option{--reverse} (@option{-r}) were specified.  The
3368 @option{--stable} (@option{-s}) option disables this @dfn{last-resort
3369 comparison} so that lines in which all fields compare equal are left
3370 in their original relative order.  The @option{--unique}
3371 (@option{-u}) option also disables the last-resort comparison.
3372
3373 @vindex LC_ALL
3374 @vindex LC_COLLATE
3375 Unless otherwise specified, all comparisons use the character collating
3376 sequence specified by the @env{LC_COLLATE} locale.@footnote{If you
3377 use a non-@acronym{POSIX} locale (e.g., by setting @env{LC_ALL}
3378 to @samp{en_US}), then @command{sort} may produce output that is sorted
3379 differently than you're accustomed to.  In that case, set the @env{LC_ALL}
3380 environment variable to @samp{C}.  Note that setting only @env{LC_COLLATE}
3381 has two problems.  First, it is ineffective if @env{LC_ALL} is also set.
3382 Second, it has undefined behavior if @env{LC_CTYPE} (or @env{LANG}, if
3383 @env{LC_CTYPE} is unset) is set to an incompatible value.  For example,
3384 you get undefined behavior if @env{LC_CTYPE} is @code{ja_JP.PCK} but
3385 @env{LC_COLLATE} is @code{en_US.UTF-8}.}
3386
3387 @sc{gnu} @command{sort} (as specified for all @sc{gnu} utilities) has no
3388 limit on input line length or restrictions on bytes allowed within lines.
3389 In addition, if the final byte of an input file is not a newline, @sc{gnu}
3390 @command{sort} silently supplies one.  A line's trailing newline is not
3391 part of the line for comparison purposes.
3392
3393 @cindex exit status of @command{sort}
3394 Exit status:
3395
3396 @display
3397 0 if no error occurred
3398 1 if invoked with @option{-c} and the input is not properly sorted
3399 2 if an error occurred
3400 @end display
3401
3402 @vindex TMPDIR
3403 If the environment variable @env{TMPDIR} is set, @command{sort} uses its
3404 value as the directory for temporary files instead of @file{/tmp}.  The
3405 @option{--temporary-directory} (@option{-T}) option in turn overrides
3406 the environment variable.
3407
3408
3409 The following options affect the ordering of output lines.  They may be
3410 specified globally or as part of a specific key field.  If no key
3411 fields are specified, global options apply to comparison of entire
3412 lines; otherwise the global options are inherited by key fields that do
3413 not specify any special options of their own.  In pre-@acronym{POSIX}
3414 versions of @command{sort}, global options affect only later key fields,
3415 so portable shell scripts should specify global options first.
3416
3417 @table @samp
3418
3419 @item -b
3420 @itemx --ignore-leading-blanks
3421 @opindex -b
3422 @opindex --ignore-leading-blanks
3423 @cindex blanks, ignoring leading
3424 @vindex LC_CTYPE
3425 Ignore leading blanks when finding sort keys in each line.
3426 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
3427 can change this.
3428
3429 @item -d
3430 @itemx --dictionary-order
3431 @opindex -d
3432 @opindex --dictionary-order
3433 @cindex dictionary order
3434 @cindex phone directory order
3435 @cindex telephone directory order
3436 @vindex LC_CTYPE
3437 Sort in @dfn{phone directory} order: ignore all characters except
3438 letters, digits and blanks when sorting.
3439 By default letters and digits are those of @acronym{ASCII} and a blank
3440 is a space or a tab, but the @env{LC_CTYPE} locale can change this.
3441
3442 @item -f
3443 @itemx --ignore-case
3444 @opindex -f
3445 @opindex --ignore-case
3446 @cindex ignoring case
3447 @cindex case folding
3448 @vindex LC_CTYPE
3449 Fold lowercase characters into the equivalent uppercase characters when
3450 comparing so that, for example, @samp{b} and @samp{B} sort as equal.
3451 The @env{LC_CTYPE} locale determines character types.
3452
3453 @item -g
3454 @itemx --general-numeric-sort
3455 @opindex -g
3456 @opindex --general-numeric-sort
3457 @cindex general numeric sort
3458 @vindex LC_NUMERIC
3459 Sort numerically, using the standard C function @code{strtod} to convert
3460 a prefix of each line to a double-precision floating point number.
3461 This allows floating point numbers to be specified in scientific notation,
3462 like @code{1.0e-34} and @code{10e100}.
3463 The @env{LC_NUMERIC} locale determines the decimal-point character.
3464 Do not report overflow, underflow, or conversion errors.
3465 Use the following collating sequence:
3466
3467 @itemize @bullet
3468 @item
3469 Lines that do not start with numbers (all considered to be equal).
3470 @item
3471 NaNs (``Not a Number'' values, in IEEE floating point arithmetic)
3472 in a consistent but machine-dependent order.
3473 @item
3474 Minus infinity.
3475 @item
3476 Finite numbers in ascending numeric order (with @math{-0} and @math{+0} equal).
3477 @item
3478 Plus infinity.
3479 @end itemize
3480
3481 Use this option only if there is no alternative; it is much slower than
3482 @option{--numeric-sort} (@option{-n}) and it can lose information when
3483 converting to floating point.
3484
3485 @item -i
3486 @itemx --ignore-nonprinting
3487 @opindex -i
3488 @opindex --ignore-nonprinting
3489 @cindex nonprinting characters, ignoring
3490 @cindex unprintable characters, ignoring
3491 @vindex LC_CTYPE
3492 Ignore nonprinting characters.
3493 The @env{LC_CTYPE} locale determines character types.
3494 This option has no effect if the stronger @option{--dictionary-order}
3495 (@option{-d}) option is also given.
3496
3497 @item -M
3498 @itemx --month-sort
3499 @opindex -M
3500 @opindex --month-sort
3501 @cindex months, sorting by
3502 @vindex LC_TIME
3503 An initial string, consisting of any amount of blanks, followed
3504 by a month name abbreviation, is folded to UPPER case and
3505 compared in the order @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}.
3506 Invalid names compare low to valid names.  The @env{LC_TIME} locale
3507 category determines the month spellings.
3508 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
3509 can change this.
3510
3511 @item -n
3512 @itemx --numeric-sort
3513 @opindex -n
3514 @opindex --numeric-sort
3515 @cindex numeric sort
3516 @vindex LC_NUMERIC
3517 Sort numerically: the number begins each line; specifically, it consists
3518 of optional blanks, an optional @samp{-} sign, and zero or more
3519 digits possibly separated by thousands separators, optionally followed
3520 by a decimal-point character and zero or more digits.  A string of
3521 no digits is interpreted as @samp{0}.  The @env{LC_NUMERIC}
3522 locale specifies the decimal-point character and thousands separator.
3523 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
3524 can change this.
3525
3526 Numeric sort uses what might be considered an unconventional method to
3527 compare strings representing floating point numbers.  Rather than first
3528 converting each string to the C @code{double} type and then comparing
3529 those values, @command{sort} aligns the decimal-point characters in the
3530 two strings and compares the strings a character at a time.  One benefit
3531 of using this approach is its speed.  In practice this is much more
3532 efficient than performing the two corresponding string-to-double (or
3533 even string-to-integer) conversions and then comparing doubles.  In
3534 addition, there is no corresponding loss of precision.  Converting each
3535 string to @code{double} before comparison would limit precision to about
3536 16 digits on most systems.
3537
3538 Neither a leading @samp{+} nor exponential notation is recognized.
3539 To compare such strings numerically, use the
3540 @option{--general-numeric-sort} (@option{-g}) option.
3541
3542 @item -r
3543 @itemx --reverse
3544 @opindex -r
3545 @opindex --reverse
3546 @cindex reverse sorting
3547 Reverse the result of comparison, so that lines with greater key values
3548 appear earlier in the output instead of later.
3549
3550 @item -R
3551 @itemx --random-sort
3552 @opindex -R
3553 @opindex --random-sort
3554 @cindex random sort
3555 Sort by hashing the input keys and then sorting the hash values.
3556 Choose the hash function at random, ensuring that it is free of
3557 collisions so that differing keys have differing hash values.  This is
3558 like a random permutation of the inputs (@pxref{shuf invocation}),
3559 except that keys with the same value sort together.
3560
3561 If multiple random sort fields are specified, the same random hash
3562 function is used for all fields.  To use different random hash
3563 functions for different fields, you can invoke @command{sort} more
3564 than once.
3565
3566 The choice of hash function is affected by the
3567 @option{--random-source} option.
3568
3569 @end table
3570
3571 Other options are:
3572
3573 @table @samp
3574
3575 @item -k @var{pos1}[,@var{pos2}]
3576 @itemx --key=@var{pos1}[,@var{pos2}]
3577 @opindex -k
3578 @opindex --key
3579 @cindex sort field
3580 Specify a sort field that consists of the part of the line between
3581 @var{pos1} and @var{pos2} (or the end of the line, if @var{pos2} is
3582 omitted), @emph{inclusive}.  Fields and character positions are numbered
3583 starting with 1.  So to sort on the second field, you'd use
3584 @option{--key=2,2} (@option{-k 2,2}).  See below for more examples.
3585
3586 @item -o @var{output-file}
3587 @itemx --output=@var{output-file}
3588 @opindex -o
3589 @opindex --output
3590 @cindex overwriting of input, allowed
3591 Write output to @var{output-file} instead of standard output.
3592 Normally, @command{sort} reads all input before opening
3593 @var{output-file}, so you can safely sort a file in place by using
3594 commands like @code{sort -o F F} and @code{cat F | sort -o F}.
3595 However, @command{sort} with @option{--merge} (@option{-m}) can open
3596 the output file before reading all input, so a command like @code{cat
3597 F | sort -m -o F - G} is not safe as @command{sort} might start
3598 writing @file{F} before @command{cat} is done reading it.
3599
3600 @vindex POSIXLY_CORRECT
3601 On newer systems, @option{-o} cannot appear after an input file if
3602 @env{POSIXLY_CORRECT} is set, e.g., @samp{sort F -o F}.  Portable
3603 scripts should specify @option{-o @var{output-file}} before any input
3604 files.
3605
3606 @item --random-source=@var{file}
3607 @opindex --random-source
3608 @cindex random source for sorting
3609 Use @var{file} as a source of random data used to determine which
3610 random hash function to use with the @option{-R} option.  @xref{Random
3611 sources}.
3612
3613 @item -s
3614 @itemx --stable
3615 @opindex -s
3616 @opindex --stable
3617 @cindex sort stability
3618 @cindex sort's last-resort comparison
3619
3620 Make @command{sort} stable by disabling its last-resort comparison.
3621 This option has no effect if no fields or global ordering options
3622 other than @option{--reverse} (@option{-r}) are specified.
3623
3624 @item -S @var{size}
3625 @itemx --buffer-size=@var{size}
3626 @opindex -S
3627 @opindex --buffer-size
3628 @cindex size for main memory sorting
3629 Use a main-memory sort buffer of the given @var{size}.  By default,
3630 @var{size} is in units of 1024 bytes.  Appending @samp{%} causes
3631 @var{size} to be interpreted as a percentage of physical memory.
3632 Appending @samp{K} multiplies @var{size} by 1024 (the default),
3633 @samp{M} by 1,048,576, @samp{G} by 1,073,741,824, and so on for
3634 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.  Appending
3635 @samp{b} causes @var{size} to be interpreted as a byte count, with no
3636 multiplication.
3637
3638 This option can improve the performance of @command{sort} by causing it
3639 to start with a larger or smaller sort buffer than the default.
3640 However, this option affects only the initial buffer size.  The buffer
3641 grows beyond @var{size} if @command{sort} encounters input lines larger
3642 than @var{size}.
3643
3644 @item -t @var{separator}
3645 @itemx --field-separator=@var{separator}
3646 @opindex -t
3647 @opindex --field-separator
3648 @cindex field separator character
3649 Use character @var{separator} as the field separator when finding the
3650 sort keys in each line.  By default, fields are separated by the empty
3651 string between a non-blank character and a blank character.
3652 By default a blank is a space or a tab, but the @env{LC_CTYPE} locale
3653 can change this.
3654
3655 That is, given the input line @w{@samp{ foo bar}}, @command{sort} breaks it
3656 into fields @w{@samp{ foo}} and @w{@samp{ bar}}.  The field separator is
3657 not considered to be part of either the field preceding or the field
3658 following, so with @samp{sort @w{-t " "}} the same input line has
3659 three fields: an empty field, @samp{foo}, and @samp{bar}.
3660 However, fields that extend to the end of the line,
3661 as @option{-k 2}, or fields consisting of a range, as @option{-k 2,3},
3662 retain the field separators present between the endpoints of the range.
3663
3664 To specify a null character (@acronym{ASCII} @sc{nul}) as
3665 the field separator, use the two-character string @samp{\0}, e.g.,
3666 @samp{sort -t '\0'}.
3667
3668 @item -T @var{tempdir}
3669 @itemx --temporary-directory=@var{tempdir}
3670 @opindex -T
3671 @opindex --temporary-directory
3672 @cindex temporary directory
3673 @vindex TMPDIR
3674 Use directory @var{tempdir} to store temporary files, overriding the
3675 @env{TMPDIR} environment variable.  If this option is given more than
3676 once, temporary files are stored in all the directories given.  If you
3677 have a large sort or merge that is I/O-bound, you can often improve
3678 performance by using this option to specify directories on different
3679 disks and controllers.
3680
3681 @item -u
3682 @itemx --unique
3683 @opindex -u
3684 @opindex --unique
3685 @cindex uniquifying output
3686
3687 Normally, output only the first of a sequence of lines that compare
3688 equal.  For the @option{--check} (@option{-c}) option,
3689 check that no pair of consecutive lines compares equal.
3690
3691 This option also disables the default last-resort comparison.
3692
3693 The commands @code{sort -u} and @code{sort | uniq} are equivalent, but
3694 this equivalence does not extend to arbitrary @command{sort} options.
3695 For example, @code{sort -n -u} inspects only the value of the initial
3696 numeric string when checking for uniqueness, whereas @code{sort -n |
3697 uniq} inspects the entire line.  @xref{uniq invocation}.
3698
3699 @item -z
3700 @itemx --zero-terminated
3701 @opindex -z
3702 @opindex --zero-terminated
3703 @cindex sort zero-terminated lines
3704 Treat the input as a set of lines, each terminated by a null character
3705 (@acronym{ASCII} @sc{nul}) instead of a line feed
3706 (@acronym{ASCII} @sc{lf}).
3707 This option can be useful in conjunction with @samp{perl -0} or
3708 @samp{find -print0} and @samp{xargs -0} which do the same in order to
3709 reliably handle arbitrary file names (even those containing blanks
3710 or other special characters).
3711
3712 @end table
3713
3714 Historical (BSD and System V) implementations of @command{sort} have
3715 differed in their interpretation of some options, particularly
3716 @option{-b}, @option{-f}, and @option{-n}.  @sc{gnu} sort follows the @acronym{POSIX}
3717 behavior, which is usually (but not always!) like the System V behavior.
3718 According to @acronym{POSIX}, @option{-n} no longer implies @option{-b}.  For
3719 consistency, @option{-M} has been changed in the same way.  This may
3720 affect the meaning of character positions in field specifications in
3721 obscure cases.  The only fix is to add an explicit @option{-b}.
3722
3723 A position in a sort field specified with the @option{-k}
3724 option has the form @samp{@var{f}.@var{c}}, where @var{f} is the number
3725 of the field to use and @var{c} is the number of the first character
3726 from the beginning of the field.  In a start position, an omitted
3727 @samp{.@var{c}} stands for the field's first character.  In an end
3728 position, an omitted or zero @samp{.@var{c}} stands for the field's
3729 last character.  If the start field falls after the end of the line
3730 or after the end field, the field is empty.  If the
3731 @option{-b} option was specified, the @samp{.@var{c}} part of a field
3732 specification is counted from the first nonblank character of the field.
3733
3734 A sort key position may also have any of the option letters @samp{Mbdfinr}
3735 appended to it, in which case the global ordering options are not used
3736 for that particular field.  The @option{-b} option may be independently
3737 attached to either or both of the start and
3738 end positions of a field specification, and if it is inherited
3739 from the global options it will be attached to both.
3740 If input lines can contain leading or adjacent blanks and @option{-t}
3741 is not used, then @option{-k} is typically combined with @option{-b},
3742 @option{-g}, @option{-M}, or @option{-n}; otherwise the varying
3743 numbers of leading blanks in fields can cause confusing results.
3744
3745 Keys can span multiple fields.
3746
3747 @vindex _POSIX2_VERSION
3748 @vindex POSIXLY_CORRECT
3749 On older systems, @command{sort} supports an obsolete origin-zero
3750 syntax @samp{+@var{pos1} [-@var{pos2}]} for specifying sort keys.
3751 This obsolete behavior can be enabled or disabled with the
3752 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
3753 conformance}); it can also be enabled when @env{POSIXLY_CORRECT} is
3754 not set by using the obsolete syntax with @samp{-@var{pos2}} present.
3755
3756 Scripts intended for use on standard hosts should avoid obsolete
3757 syntax and should use @option{-k} instead.  For example, avoid
3758 @samp{sort +2}, since it might be interpreted as either @samp{sort
3759 ./+2} or @samp{sort -k 3}.  If your script must also run on hosts that
3760 support only the obsolete syntax, it can use a test like @samp{if sort
3761 -k 1 </dev/null >/dev/null 2>&1; then @dots{}} to decide which syntax
3762 to use.
3763
3764 Here are some examples to illustrate various combinations of options.
3765
3766 @itemize @bullet
3767
3768 @item
3769 Sort in descending (reverse) numeric order.
3770
3771 @example
3772 sort -n -r
3773 @end example
3774
3775 @item
3776 Sort alphabetically, omitting the first and second fields
3777 and the blanks at the start of the third field.
3778 This uses a single key composed of the characters beginning
3779 at the start of the first nonblank character in field three
3780 and extending to the end of each line.
3781
3782 @example
3783 sort -k 3b
3784 @end example
3785
3786 @item
3787 Sort numerically on the second field and resolve ties by sorting
3788 alphabetically on the third and fourth characters of field five.
3789 Use @samp{:} as the field delimiter.
3790
3791 @example
3792 sort -t : -k 2,2n -k 5.3,5.4
3793 @end example
3794
3795 Note that if you had written @option{-k 2n} instead of @option{-k 2,2n}
3796 @command{sort} would have used all characters beginning in the second field
3797 and extending to the end of the line as the primary @emph{numeric}
3798 key.  For the large majority of applications, treating keys spanning
3799 more than one field as numeric will not do what you expect.
3800
3801 Also note that the @samp{n} modifier was applied to the field-end
3802 specifier for the first key.  It would have been equivalent to
3803 specify @option{-k 2n,2} or @option{-k 2n,2n}.  All modifiers except
3804 @samp{b} apply to the associated @emph{field}, regardless of whether
3805 the modifier character is attached to the field-start and/or the
3806 field-end part of the key specifier.
3807
3808 @item
3809 Sort the password file on the fifth field and ignore any
3810 leading blanks.  Sort lines with equal values in field five
3811 on the numeric user ID in field three.  Fields are separated
3812 by @samp{:}.
3813
3814 @example
3815 sort -t : -k 5b,5 -k 3,3n /etc/passwd
3816 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
3817 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
3818 @end example
3819
3820 These three commands have equivalent effect.  The first specifies that
3821 the first key's start position ignores leading blanks and the second
3822 key is sorted numerically.  The other two commands rely on global
3823 options being inherited by sort keys that lack modifiers.  The inheritance
3824 works in this case because @option{-k 5b,5b} and @option{-k 5b,5} are
3825 equivalent, as the location of a field-end lacking a @samp{.@var{c}}
3826 character position is not affected by whether initial blanks are
3827 skipped.
3828
3829 @item
3830 Sort a set of log files, primarily by IPv4 address and secondarily by
3831 time stamp.  If two lines' primary and secondary keys are identical,
3832 output the lines in the same order that they were input.  The log
3833 files contain lines that look like this:
3834
3835 @example
3836 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
3837 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
3838 @end example
3839
3840 Fields are separated by exactly one space.  Sort IPv4 addresses
3841 lexicographically, e.g., 212.61.52.2 sorts before 212.129.233.201
3842 because 61 is less than 129.
3843
3844 @example
3845 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
3846 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
3847 @end example
3848
3849 This example cannot be done with a single @command{sort} invocation,
3850 since IPv4 address components are separated by @samp{.} while dates
3851 come just after a space.  So it is broken down into two invocations of
3852 @command{sort}: the first sorts by time stamp and the second by IPv4
3853 address.  The time stamp is sorted by year, then month, then day, and
3854 finally by hour-minute-second field, using @option{-k} to isolate each
3855 field.  Except for hour-minute-second there's no need to specify the
3856 end of each key field, since the @samp{n} and @samp{M} modifiers sort
3857 based on leading prefixes that cannot cross field boundaries.  The
3858 IPv4 addresses are sorted lexicographically.  The second sort uses
3859 @samp{-s} so that ties in the primary key are broken by the secondary
3860 key; the first sort uses @samp{-s} so that the combination of the two
3861 sorts is stable.
3862
3863 @item
3864 Generate a tags file in case-insensitive sorted order.
3865
3866 @smallexample
3867 find src -type f -print0 | sort -z -f | xargs -0 etags --append
3868 @end smallexample
3869
3870 The use of @option{-print0}, @option{-z}, and @option{-0} in this case means
3871 that file names that contain blanks or other special characters are
3872 not broken up
3873 by the sort operation.
3874
3875 @c This example is a bit contrived and needs more explanation.
3876 @c @item
3877 @c Sort records separated by an arbitrary string by using a pipe to convert
3878 @c each record delimiter string to @samp{\0}, then using sort's -z option,
3879 @c and converting each @samp{\0} back to the original record delimiter.
3880 @c
3881 @c @example
3882 @c printf 'c\n\nb\n\na\n'|perl -0pe 's/\n\n/\n\0/g'|sort -z|perl -0pe 's/\0/\n/g'
3883 @c @end example
3884
3885 @item
3886 Shuffle a list of directories, but preserve the order of files within
3887 each directory.  For instance, one could use this to generate a music
3888 playlist in which albums are shuffled but the songs of each album are
3889 played in order.
3890
3891 @example
3892 ls */* | sort -t / -k 1,1R -k 2,2
3893 @end example
3894
3895 @end itemize
3896
3897
3898 @node shuf invocation
3899 @section @command{shuf}: Shuffling text
3900
3901 @pindex shuf
3902 @cindex shuffling files
3903
3904 @command{shuf} shuffles its input by outputting a random permutation
3905 of its input lines.  Each output permutation is equally likely.
3906 Synopses:
3907
3908 @example
3909 shuf [@var{option}]@dots{} [@var{file}]
3910 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
3911 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
3912 @end example
3913
3914 @command{shuf} has three modes of operation that affect where it
3915 obtains its input lines.  By default, it reads lines from standard
3916 input.  The following options change the operation mode:
3917
3918 @table @samp
3919
3920 @item -e
3921 @itemx --echo
3922 @opindex -c
3923 @opindex --echo
3924 @cindex command-line operands to shuffle
3925 Treat each command-line operand as an input line.
3926
3927 @item -i @var{lo}-@var{hi}
3928 @itemx --input-range=@var{lo}-@var{hi}
3929 @opindex -i
3930 @opindex --input-range
3931 @cindex input range to shuffle
3932 Act as if input came from a file containing the range of unsigned
3933 decimal integers @var{lo}@dots{}@var{hi}, one per line.
3934
3935 @end table
3936
3937 @command{shuf}'s other options can affect its behavior in all
3938 operation modes:
3939
3940 @table @samp
3941
3942 @item -n @var{lines}
3943 @itemx --head-lines=@var{lines}
3944 @opindex -n
3945 @opindex --head-lines
3946 @cindex head of output
3947 Output at most @var{lines} lines.  By default, all input lines are
3948 output.
3949
3950 @item -o @var{output-file}
3951 @itemx --output=@var{output-file}
3952 @opindex -o
3953 @opindex --output
3954 @cindex overwriting of input, allowed
3955 Write output to @var{output-file} instead of standard output.
3956 @command{shuf} reads all input before opening
3957 @var{output-file}, so you can safely shuffle a file in place by using
3958 commands like @code{shuf -o F <F} and @code{cat F | shuf -o F}.
3959
3960 @item --random-source=@var{file}
3961 @opindex --random-source
3962 @cindex random source for shuffling
3963 Use @var{file} as a source of random data used to determine which
3964 permutation to generate.  @xref{Random sources}.
3965
3966 @item -z
3967 @itemx --zero-terminated
3968 @opindex -z
3969 @opindex --zero-terminated
3970 @cindex sort zero-terminated lines
3971 Treat the input and output as a set of lines, each terminated by a zero byte
3972 (@acronym{ASCII} @sc{nul} (Null) character) instead of an
3973 @acronym{ASCII} @sc{lf} (Line Feed).
3974 This option can be useful in conjunction with @samp{perl -0} or
3975 @samp{find -print0} and @samp{xargs -0} which do the same in order to
3976 reliably handle arbitrary file names (even those containing blanks
3977 or other special characters).
3978
3979 @end table
3980
3981 For example:
3982
3983 @example
3984 shuf <<EOF
3985 A man,
3986 a plan,
3987 a canal:
3988 Panama!
3989 EOF
3990 @end example
3991
3992 @noindent
3993 might produce the output
3994
3995 @example
3996 Panama!
3997 A man,
3998 a canal:
3999 a plan,
4000 @end example
4001
4002 @noindent
4003 Similarly, the command:
4004
4005 @example
4006 shuf -e clubs hearts diamonds spades
4007 @end example
4008
4009 @noindent
4010 might output:
4011
4012 @example
4013 clubs
4014 diamonds
4015 spades
4016 hearts
4017 @end example
4018
4019 @noindent
4020 and the command @samp{shuf -i 1-4} might output:
4021
4022 @example
4023 4
4024 2
4025 1
4026 3
4027 @end example
4028
4029 @noindent
4030 These examples all have four input lines, so @command{shuf} might
4031 produce any of the twenty-four possible permutations of the input.  In
4032 general, if there are @var{N} input lines, there are @var{N}! (i.e.,
4033 @var{N} factorial, or @var{N} * (@var{N} - 1) * @dots{} * 1) possible
4034 output permutations.
4035
4036 @exitstatus
4037
4038
4039 @node uniq invocation
4040 @section @command{uniq}: Uniquify files
4041
4042 @pindex uniq
4043 @cindex uniquify files
4044
4045 @command{uniq} writes the unique lines in the given @file{input}, or
4046 standard input if nothing is given or for an @var{input} name of
4047 @samp{-}.  Synopsis:
4048
4049 @example
4050 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
4051 @end example
4052
4053 By default, @command{uniq} prints its input lines, except that
4054 it discards all but the first of adjacent repeated lines, so that
4055 no output lines are repeated.  Optionally, it can instead discard
4056 lines that are not repeated, or all repeated lines.
4057
4058 The input need not be sorted, but repeated input lines are detected
4059 only if they are adjacent.  If you want to discard non-adjacent
4060 duplicate lines, perhaps you want to use @code{sort -u}.
4061 @xref{sort invocation}.
4062
4063 @vindex LC_COLLATE
4064 Comparisons use the character collating sequence specified by the
4065 @env{LC_COLLATE} locale category.
4066
4067 If no @var{output} file is specified, @command{uniq} writes to standard
4068 output.
4069
4070 The program accepts the following options.  Also see @ref{Common options}.
4071
4072 @table @samp
4073
4074 @item -f @var{n}
4075 @itemx --skip-fields=@var{n}
4076 @opindex -f
4077 @opindex --skip-fields
4078 Skip @var{n} fields on each line before checking for uniqueness.  Use
4079 a null string for comparison if a line has fewer than @var{n} fields.  Fields
4080 are sequences of non-space non-tab characters that are separated from
4081 each other by at least one space or tab.
4082
4083 For compatibility @command{uniq} supports an obsolete option syntax
4084 @option{-@var{n}}.  New scripts should use @option{-f @var{n}} instead.
4085
4086 @item -s @var{n}
4087 @itemx --skip-chars=@var{n}
4088 @opindex -s
4089 @opindex --skip-chars
4090 Skip @var{n} characters before checking for uniqueness.  Use a null string
4091 for comparison if a line has fewer than @var{n} characters.  If you use both
4092 the field and character skipping options, fields are skipped over first.
4093
4094 @vindex _POSIX2_VERSION
4095 On older systems, @command{uniq} supports an obsolete option syntax
4096 @option{+@var{n}}.
4097 This obsolete behavior can be enabled or disabled with the
4098 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
4099 conformance}), but portable scripts should avoid commands whose
4100 behavior depends on this variable.
4101 For example, use @samp{uniq ./+10} or @samp{uniq -s 10} rather than
4102 the ambiguous @samp{uniq +10}.
4103
4104 @item -c
4105 @itemx --count
4106 @opindex -c
4107 @opindex --count
4108 Print the number of times each line occurred along with the line.
4109
4110 @item -i
4111 @itemx --ignore-case
4112 @opindex -i
4113 @opindex --ignore-case
4114 Ignore differences in case when comparing lines.
4115
4116 @item -d
4117 @itemx --repeated
4118 @opindex -d
4119 @opindex --repeated
4120 @cindex repeated lines, outputting
4121 Discard lines that are not repeated.  When used by itself, this option
4122 causes @command{uniq} to print the first copy of each repeated line,
4123 and nothing else.
4124
4125 @item -D
4126 @itemx --all-repeated[=@var{delimit-method}]
4127 @opindex -D
4128 @opindex --all-repeated
4129 @cindex all repeated lines, outputting
4130 Do not discard the second and subsequent repeated input lines,
4131 but discard lines that are not repeated.
4132 This option is useful mainly in conjunction with other options e.g.,
4133 to ignore case or to compare only selected fields.
4134 The optional @var{delimit-method} tells how to delimit
4135 groups of repeated lines, and must be one of the following:
4136
4137 @table @samp
4138
4139 @item none
4140 Do not delimit groups of repeated lines.
4141 This is equivalent to @option{--all-repeated} (@option{-D}).
4142
4143 @item prepend
4144 Output a newline before each group of repeated lines.
4145
4146 @item separate
4147 Separate groups of repeated lines with a single newline.
4148 This is the same as using @samp{prepend}, except that
4149 there is no newline before the first group, and hence
4150 may be better suited for output direct to users.
4151 @end table
4152
4153 Note that when groups are delimited and the input stream contains
4154 two or more consecutive blank lines, then the output is ambiguous.
4155 To avoid that, filter the input through @samp{tr -s '\n'} to replace
4156 each sequence of consecutive newlines with a single newline.
4157
4158 This is a @sc{gnu} extension.
4159 @c FIXME: give an example showing *how* it's useful
4160
4161 @item -u
4162 @itemx --unique
4163 @opindex -u
4164 @opindex --unique
4165 @cindex unique lines, outputting
4166 Discard the first repeated line.  When used by itself, this option
4167 causes @command{uniq} to print unique lines, and nothing else.
4168
4169 @item -w @var{n}
4170 @itemx --check-chars=@var{n}
4171 @opindex -w
4172 @opindex --check-chars
4173 Compare at most @var{n} characters on each line (after skipping any specified
4174 fields and characters).  By default the entire rest of the lines are
4175 compared.
4176
4177 @end table
4178
4179 @exitstatus
4180
4181
4182 @node comm invocation
4183 @section @command{comm}: Compare two sorted files line by line
4184
4185 @pindex comm
4186 @cindex line-by-line comparison
4187 @cindex comparing sorted files
4188
4189 @command{comm} writes to standard output lines that are common, and lines
4190 that are unique, to two input files; a file name of @samp{-} means
4191 standard input.  Synopsis:
4192
4193 @example
4194 comm [@var{option}]@dots{} @var{file1} @var{file2}
4195 @end example
4196
4197 @vindex LC_COLLATE
4198 Before @command{comm} can be used, the input files must be sorted using the
4199 collating sequence specified by the @env{LC_COLLATE} locale.
4200 If an input file ends in a non-newline
4201 character, a newline is silently appended.  The @command{sort} command with
4202 no options always outputs a file that is suitable input to @command{comm}.
4203
4204 @cindex differing lines
4205 @cindex common lines
4206 With no options, @command{comm} produces three-column output.  Column one
4207 contains lines unique to @var{file1}, column two contains lines unique
4208 to @var{file2}, and column three contains lines common to both files.
4209 Columns are separated by a single TAB character.
4210 @c FIXME: when there's an option to supply an alternative separator
4211 @c string, append `by default' to the above sentence.
4212
4213 @opindex -1
4214 @opindex -2
4215 @opindex -3
4216 The options @option{-1}, @option{-2}, and @option{-3} suppress printing of
4217 the corresponding columns.  Also see @ref{Common options}.
4218
4219 Unlike some other comparison utilities, @command{comm} has an exit
4220 status that does not depend on the result of the comparison.
4221 Upon normal completion @command{comm} produces an exit code of zero.
4222 If there is an error it exits with nonzero status.
4223
4224
4225 @node tsort invocation
4226 @section @command{tsort}: Topological sort
4227
4228 @pindex tsort
4229 @cindex topological sort
4230
4231 @command{tsort} performs a topological sort on the given @var{file}, or
4232 standard input if no input file is given or for a @var{file} of
4233 @samp{-}.  For more details and some history, see @ref{tsort background}.
4234 Synopsis:
4235
4236 @example
4237 tsort [@var{option}] [@var{file}]
4238 @end example
4239
4240 @command{tsort} reads its input as pairs of strings, separated by blanks,
4241 indicating a partial ordering.  The output is a total ordering that
4242 corresponds to the given partial ordering.
4243
4244 For example
4245
4246 @example
4247 tsort <<EOF
4248 a b c
4249 d
4250 e f
4251 b c d e
4252 EOF
4253 @end example
4254
4255 @noindent
4256 will produce the output
4257
4258 @example
4259 a
4260 b
4261 c
4262 d
4263 e
4264 f
4265 @end example
4266
4267 Consider a more realistic example.
4268 You have a large set of functions all in one file, and they may all be
4269 declared static except one.  Currently that one (say @code{main}) is the
4270 first function defined in the file, and the ones it calls directly follow
4271 it, followed by those they call, etc.  Let's say that you are determined
4272 to take advantage of prototypes, so you have to choose between declaring
4273 all of those functions (which means duplicating a lot of information from
4274 the definitions) and rearranging the functions so that as many as possible
4275 are defined before they are used.  One way to automate the latter process
4276 is to get a list for each function of the functions it calls directly.
4277 Many programs can generate such lists.  They describe a call graph.
4278 Consider the following list, in which a given line indicates that the
4279 function on the left calls the one on the right directly.
4280
4281 @example
4282 main parse_options
4283 main tail_file
4284 main tail_forever
4285 tail_file pretty_name
4286 tail_file write_header
4287 tail_file tail
4288 tail_forever recheck
4289 tail_forever pretty_name
4290 tail_forever write_header
4291 tail_forever dump_remainder
4292 tail tail_lines
4293 tail tail_bytes
4294 tail_lines start_lines
4295 tail_lines dump_remainder
4296 tail_lines file_lines
4297 tail_lines pipe_lines
4298 tail_bytes xlseek
4299 tail_bytes start_bytes
4300 tail_bytes dump_remainder
4301 tail_bytes pipe_bytes
4302 file_lines dump_remainder
4303 recheck pretty_name
4304 @end example
4305
4306 then you can use @command{tsort} to produce an ordering of those
4307 functions that satisfies your requirement.
4308
4309 @example
4310 example$ tsort call-graph | tac
4311 dump_remainder
4312 start_lines
4313 file_lines
4314 pipe_lines
4315 xlseek
4316 start_bytes
4317 pipe_bytes
4318 tail_lines
4319 tail_bytes
4320 pretty_name
4321 write_header
4322 tail
4323 recheck
4324 parse_options
4325 tail_file
4326 tail_forever
4327 main
4328 @end example
4329
4330 @command{tsort} detects any cycles in the input and writes the first cycle
4331 encountered to standard error.
4332
4333 Note that for a given partial ordering, generally there is no unique
4334 total ordering.  In the context of the call graph above, the function
4335 @code{parse_options} may be placed anywhere in the list as long as it
4336 precedes @code{main}.
4337
4338 The only options are @option{--help} and @option{--version}.  @xref{Common
4339 options}.
4340
4341 @node tsort background
4342 @section @command{tsort}: Background
4343
4344 @command{tsort} exists because very early versions of the Unix linker processed
4345 an archive file exactly once, and in order.  As @command{ld} read each object
4346 in the archive, it decided whether it was needed in the program based on
4347 whether it defined any symbols which were undefined at that point in
4348 the link.
4349
4350 This meant that dependencies within the archive had to be handled
4351 specially.  For example, @code{scanf} probably calls @code{read}.  That means
4352 that in a single pass through an archive, it was important for @code{scanf.o}
4353 to appear before read.o, because otherwise a program which calls
4354 @code{scanf} but not @code{read} might end up with an unexpected unresolved
4355 reference to @code{read}.
4356
4357 The way to address this problem was to first generate a set of
4358 dependencies of one object file on another.  This was done by a shell
4359 script called @command{lorder}.  The GNU tools don't provide a version of
4360 lorder, as far as I know, but you can still find it in BSD
4361 distributions.
4362
4363 Then you ran @command{tsort} over the @command{lorder} output, and you used the
4364 resulting sort to define the order in which you added objects to the archive.
4365
4366 This whole procedure has been obsolete since about 1980, because
4367 Unix archives now contain a symbol table (traditionally built by
4368 @command{ranlib}, now generally built by @command{ar} itself), and the Unix
4369 linker uses the symbol table to effectively make multiple passes over
4370 an archive file.
4371
4372 Anyhow, that's where tsort came from.  To solve an old problem with
4373 the way the linker handled archive files, which has since been solved
4374 in different ways.
4375
4376 @exitstatus
4377
4378
4379 @node ptx invocation
4380 @section @command{ptx}: Produce permuted indexes
4381
4382 @pindex ptx
4383
4384 @command{ptx} reads a text file and essentially produces a permuted index, with
4385 each keyword in its context.  The calling sketch is either one of:
4386
4387 @example
4388 ptx [@var{option} @dots{}] [@var{file} @dots{}]
4389 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
4390 @end example
4391
4392 The @option{-G} (or its equivalent: @option{--traditional}) option disables
4393 all @sc{gnu} extensions and reverts to traditional mode, thus introducing some
4394 limitations and changing several of the program's default option values.
4395 When @option{-G} is not specified, @sc{gnu} extensions are always enabled.
4396 @sc{gnu} extensions to @command{ptx} are documented wherever appropriate in this
4397 document.  For the full list, see @xref{Compatibility in ptx}.
4398
4399 Individual options are explained in the following sections.
4400
4401 When @sc{gnu} extensions are enabled, there may be zero, one or several
4402 @var{file}s after the options.  If there is no @var{file}, the program
4403 reads the standard input.  If there is one or several @var{file}s, they
4404 give the name of input files which are all read in turn, as if all the
4405 input files were concatenated.  However, there is a full contextual
4406 break between each file and, when automatic referencing is requested,
4407 file names and line numbers refer to individual text input files.  In
4408 all cases, the program outputs the permuted index to the standard
4409 output.
4410
4411 When @sc{gnu} extensions are @emph{not} enabled, that is, when the program
4412 operates in traditional mode, there may be zero, one or two parameters
4413 besides the options.  If there are no parameters, the program reads the
4414 standard input and outputs the permuted index to the standard output.
4415 If there is only one parameter, it names the text @var{input} to be read
4416 instead of the standard input.  If two parameters are given, they give
4417 respectively the name of the @var{input} file to read and the name of
4418 the @var{output} file to produce.  @emph{Be very careful} to note that,
4419 in this case, the contents of file given by the second parameter is
4420 destroyed.  This behavior is dictated by System V @command{ptx}
4421 compatibility; @sc{gnu} Standards normally discourage output parameters not
4422 introduced by an option.
4423
4424 Note that for @emph{any} file named as the value of an option or as an
4425 input text file, a single dash @kbd{-} may be used, in which case
4426 standard input is assumed.  However, it would not make sense to use this
4427 convention more than once per program invocation.
4428
4429 @menu
4430 * General options in ptx::      Options which affect general program behavior.
4431 * Charset selection in ptx::    Underlying character set considerations.
4432 * Input processing in ptx::     Input fields, contexts, and keyword selection.
4433 * Output formatting in ptx::    Types of output format, and sizing the fields.
4434 * Compatibility in ptx::
4435 @end menu
4436
4437
4438 @node General options in ptx
4439 @subsection General options
4440
4441 @table @samp
4442
4443 @item -G
4444 @itemx --traditional
4445 As already explained, this option disables all @sc{gnu} extensions to
4446 @command{ptx} and switches to traditional mode.
4447
4448 @item --help
4449 Print a short help on standard output, then exit without further
4450 processing.
4451
4452 @item --version
4453 Print the program version on standard output, then exit without further
4454 processing.
4455
4456 @end table
4457
4458 @exitstatus
4459
4460
4461 @node Charset selection in ptx
4462 @subsection Charset selection
4463
4464 @c FIXME:  People don't necessarily know what an IBM-PC was these days.
4465 As it is set up now, the program assumes that the input file is coded
4466 using 8-bit @acronym{ISO} 8859-1 code, also known as Latin-1 character set,
4467 @emph{unless} it is compiled for MS-DOS, in which case it uses the
4468 character set of the IBM-PC@.  (@sc{gnu} @command{ptx} is not known to work on
4469 smaller MS-DOS machines anymore.)  Compared to 7-bit @acronym{ASCII}, the set
4470 of characters which are letters is different; this alters the behavior
4471 of regular expression matching.  Thus, the default regular expression
4472 for a keyword allows foreign or diacriticized letters.  Keyword sorting,
4473 however, is still crude; it obeys the underlying character set ordering
4474 quite blindly.
4475
4476 @table @samp
4477
4478 @item -f
4479 @itemx --ignore-case
4480 Fold lower case letters to upper case for sorting.
4481
4482 @end table
4483
4484
4485 @node Input processing in ptx
4486 @subsection Word selection and input processing
4487
4488 @table @samp
4489
4490 @item -b @var{file}
4491 @item --break-file=@var{file}
4492
4493 This option provides an alternative (to @option{-W}) method of describing
4494 which characters make up words.  It introduces the name of a
4495 file which contains a list of characters which can@emph{not} be part of
4496 one word; this file is called the @dfn{Break file}.  Any character which
4497 is not part of the Break file is a word constituent.  If both options
4498 @option{-b} and @option{-W} are specified, then @option{-W} has precedence and
4499 @option{-b} is ignored.
4500
4501 When @sc{gnu} extensions are enabled, the only way to avoid newline as a
4502 break character is to write all the break characters in the file with no
4503 newline at all, not even at the end of the file.  When @sc{gnu} extensions
4504 are disabled, spaces, tabs and newlines are always considered as break
4505 characters even if not included in the Break file.
4506
4507 @item -i @var{file}
4508 @itemx --ignore-file=@var{file}
4509
4510 The file associated with this option contains a list of words which will
4511 never be taken as keywords in concordance output.  It is called the
4512 @dfn{Ignore file}.  The file contains exactly one word in each line; the
4513 end of line separation of words is not subject to the value of the
4514 @option{-S} option.
4515
4516 @item -o @var{file}
4517 @itemx --only-file=@var{file}
4518
4519 The file associated with this option contains a list of words which will
4520 be retained in concordance output; any word not mentioned in this file
4521 is ignored.  The file is called the @dfn{Only file}.  The file contains
4522 exactly one word in each line; the end of line separation of words is
4523 not subject to the value of the @option{-S} option.
4524
4525 There is no default for the Only file.  When both an Only file and an
4526 Ignore file are specified, a word is considered a keyword only
4527 if it is listed in the Only file and not in the Ignore file.
4528
4529 @item -r
4530 @itemx --references
4531
4532 On each input line, the leading sequence of non-white space characters will be
4533 taken to be a reference that has the purpose of identifying this input
4534 line in the resulting permuted index.  For more information about reference
4535 production, see @xref{Output formatting in ptx}.
4536 Using this option changes the default value for option @option{-S}.
4537
4538 Using this option, the program does not try very hard to remove
4539 references from contexts in output, but it succeeds in doing so
4540 @emph{when} the context ends exactly at the newline.  If option
4541 @option{-r} is used with @option{-S} default value, or when @sc{gnu} extensions
4542 are disabled, this condition is always met and references are completely
4543 excluded from the output contexts.
4544
4545 @item -S @var{regexp}
4546 @itemx --sentence-regexp=@var{regexp}
4547
4548 This option selects which regular expression will describe the end of a
4549 line or the end of a sentence.  In fact, this regular expression is not
4550 the only distinction between end of lines or end of sentences, and input
4551 line boundaries have no special significance outside this option.  By
4552 default, when @sc{gnu} extensions are enabled and if @option{-r} option is not
4553 used, end of sentences are used.  In this case, this @var{regex} is
4554 imported from @sc{gnu} Emacs:
4555
4556 @example
4557 [.?!][]\"')@}]*\\($\\|\t\\|  \\)[ \t\n]*
4558 @end example
4559
4560 Whenever @sc{gnu} extensions are disabled or if @option{-r} option is used, end
4561 of lines are used; in this case, the default @var{regexp} is just:
4562
4563 @example
4564 \n
4565 @end example
4566
4567 Using an empty @var{regexp} is equivalent to completely disabling end of
4568 line or end of sentence recognition.  In this case, the whole file is
4569 considered to be a single big line or sentence.  The user might want to
4570 disallow all truncation flag generation as well, through option @option{-F
4571 ""}.  @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
4572 Manual}.
4573
4574 When the keywords happen to be near the beginning of the input line or
4575 sentence, this often creates an unused area at the beginning of the
4576 output context line; when the keywords happen to be near the end of the
4577 input line or sentence, this often creates an unused area at the end of
4578 the output context line.  The program tries to fill those unused areas
4579 by wrapping around context in them; the tail of the input line or
4580 sentence is used to fill the unused area on the left of the output line;
4581 the head of the input line or sentence is used to fill the unused area
4582 on the right of the output line.
4583
4584 As a matter of convenience to the user, many usual backslashed escape
4585 sequences from the C language are recognized and converted to the
4586 corresponding characters by @command{ptx} itself.
4587
4588 @item -W @var{regexp}
4589 @itemx --word-regexp=@var{regexp}
4590
4591 This option selects which regular expression will describe each keyword.
4592 By default, if @sc{gnu} extensions are enabled, a word is a sequence of
4593 letters; the @var{regexp} used is @samp{\w+}.  When @sc{gnu} extensions are
4594 disabled, a word is by default anything which ends with a space, a tab
4595 or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
4596
4597 An empty @var{regexp} is equivalent to not using this option.
4598 @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
4599 Manual}.
4600
4601 As a matter of convenience to the user, many usual backslashed escape
4602 sequences, as found in the C language, are recognized and converted to
4603 the corresponding characters by @command{ptx} itself.
4604
4605 @end table
4606
4607
4608 @node Output formatting in ptx
4609 @subsection Output formatting
4610
4611 Output format is mainly controlled by the @option{-O} and @option{-T} options
4612 described in the table below.  When neither @option{-O} nor @option{-T} are
4613 selected, and if @sc{gnu} extensions are enabled, the program chooses an
4614 output format suitable for a dumb terminal.  Each keyword occurrence is
4615 output to the center of one line, surrounded by its left and right
4616 contexts.  Each field is properly justified, so the concordance output
4617 can be readily observed.  As a special feature, if automatic
4618 references are selected by option @option{-A} and are output before the
4619 left context, that is, if option @option{-R} is @emph{not} selected, then
4620 a colon is added after the reference; this nicely interfaces with @sc{gnu}
4621 Emacs @code{next-error} processing.  In this default output format, each
4622 white space character, like newline and tab, is merely changed to
4623 exactly one space, with no special attempt to compress consecutive
4624 spaces.  This might change in the future.  Except for those white space
4625 characters, every other character of the underlying set of 256
4626 characters is transmitted verbatim.
4627
4628 Output format is further controlled by the following options.
4629
4630 @table @samp
4631
4632 @item -g @var{number}
4633 @itemx --gap-size=@var{number}
4634
4635 Select the size of the minimum white space gap between the fields on the
4636 output line.
4637
4638 @item -w @var{number}
4639 @itemx --width=@var{number}
4640
4641 Select the maximum output width of each final line.  If references are
4642 used, they are included or excluded from the maximum output width
4643 depending on the value of option @option{-R}.  If this option is not
4644 selected, that is, when references are output before the left context,
4645 the maximum output width takes into account the maximum length of all
4646 references.  If this option is selected, that is, when references are
4647 output after the right context, the maximum output width does not take
4648 into account the space taken by references, nor the gap that precedes
4649 them.
4650
4651 @item -A
4652 @itemx --auto-reference
4653
4654 Select automatic references.  Each input line will have an automatic
4655 reference made up of the file name and the line ordinal, with a single
4656 colon between them.  However, the file name will be empty when standard
4657 input is being read.  If both @option{-A} and @option{-r} are selected, then
4658 the input reference is still read and skipped, but the automatic
4659 reference is used at output time, overriding the input reference.
4660
4661 @item -R
4662 @itemx --right-side-refs
4663
4664 In the default output format, when option @option{-R} is not used, any
4665 references produced by the effect of options @option{-r} or @option{-A} are
4666 placed to the far right of output lines, after the right context.  With
4667 default output format, when the @option{-R} option is specified, references
4668 are rather placed at the beginning of each output line, before the left
4669 context.  For any other output format, option @option{-R} is
4670 ignored, with one exception:  with @option{-R} the width of references
4671 is @emph{not} taken into account in total output width given by @option{-w}.
4672
4673 This option is automatically selected whenever @sc{gnu} extensions are
4674 disabled.
4675
4676 @item -F @var{string}
4677 @itemx --flac-truncation=@var{string}
4678
4679 This option will request that any truncation in the output be reported
4680 using the string @var{string}.  Most output fields theoretically extend
4681 towards the beginning or the end of the current line, or current
4682 sentence, as selected with option @option{-S}.  But there is a maximum
4683 allowed output line width, changeable through option @option{-w}, which is
4684 further divided into space for various output fields.  When a field has
4685 to be truncated because it cannot extend beyond the beginning or the end of
4686 the current line to fit in, then a truncation occurs.  By default,
4687 the string used is a single slash, as in @option{-F /}.
4688
4689 @var{string} may have more than one character, as in @option{-F ...}.
4690 Also, in the particular case when @var{string} is empty (@option{-F ""}),
4691 truncation flagging is disabled, and no truncation marks are appended in
4692 this case.
4693
4694 As a matter of convenience to the user, many usual backslashed escape
4695 sequences, as found in the C language, are recognized and converted to
4696 the corresponding characters by @command{ptx} itself.
4697
4698 @item -M @var{string}
4699 @itemx --macro-name=@var{string}
4700
4701 Select another @var{string} to be used instead of @samp{xx}, while
4702 generating output suitable for @command{nroff}, @command{troff} or @TeX{}.
4703
4704 @item -O
4705 @itemx --format=roff
4706
4707 Choose an output format suitable for @command{nroff} or @command{troff}
4708 processing.  Each output line will look like:
4709
4710 @smallexample
4711 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}" "@var{head}" "@var{ref}"
4712 @end smallexample
4713
4714 so it will be possible to write a @samp{.xx} roff macro to take care of
4715 the output typesetting.  This is the default output format when @sc{gnu}
4716 extensions are disabled.  Option @option{-M} can be used to change
4717 @samp{xx} to another macro name.
4718
4719 In this output format, each non-graphical character, like newline and
4720 tab, is merely changed to exactly one space, with no special attempt to
4721 compress consecutive spaces.  Each quote character: @kbd{"} is doubled
4722 so it will be correctly processed by @command{nroff} or @command{troff}.
4723
4724 @item -T
4725 @itemx --format=tex
4726
4727 Choose an output format suitable for @TeX{} processing.  Each output
4728 line will look like:
4729
4730 @smallexample
4731 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@{@var{after}@}@{@var{head}@}@{@var{ref}@}
4732 @end smallexample
4733
4734 @noindent
4735 so it will be possible to write a @code{\xx} definition to take care of
4736 the output typesetting.  Note that when references are not being
4737 produced, that is, neither option @option{-A} nor option @option{-r} is
4738 selected, the last parameter of each @code{\xx} call is inhibited.
4739 Option @option{-M} can be used to change @samp{xx} to another macro
4740 name.
4741
4742 In this output format, some special characters, like @kbd{$}, @kbd{%},
4743 @kbd{&}, @kbd{#} and @kbd{_} are automatically protected with a
4744 backslash.  Curly brackets @kbd{@{}, @kbd{@}} are protected with a
4745 backslash and a pair of dollar signs (to force mathematical mode).  The
4746 backslash itself produces the sequence @code{\backslash@{@}}.
4747 Circumflex and tilde diacritical marks produce the sequence @code{^\@{ @}} and
4748 @code{~\@{ @}} respectively.  Other diacriticized characters of the
4749 underlying character set produce an appropriate @TeX{} sequence as far
4750 as possible.  The other non-graphical characters, like newline and tab,
4751 and all other characters which are not part of @acronym{ASCII}, are merely
4752 changed to exactly one space, with no special attempt to compress
4753 consecutive spaces.  Let me know how to improve this special character
4754 processing for @TeX{}.
4755
4756 @end table
4757
4758
4759 @node Compatibility in ptx
4760 @subsection The @sc{gnu} extensions to @command{ptx}
4761
4762 This version of @command{ptx} contains a few features which do not exist in
4763 System V @command{ptx}.  These extra features are suppressed by using the
4764 @option{-G} command line option, unless overridden by other command line
4765 options.  Some @sc{gnu} extensions cannot be recovered by overriding, so the
4766 simple rule is to avoid @option{-G} if you care about @sc{gnu} extensions.
4767 Here are the differences between this program and System V @command{ptx}.
4768
4769 @itemize @bullet
4770
4771 @item
4772 This program can read many input files at once, it always writes the
4773 resulting concordance on standard output.  On the other hand, System V
4774 @command{ptx} reads only one file and sends the result to standard output
4775 or, if a second @var{file} parameter is given on the command, to that
4776 @var{file}.
4777
4778 Having output parameters not introduced by options is a dangerous
4779 practice which @sc{gnu} avoids as far as possible.  So, for using @command{ptx}
4780 portably between @sc{gnu} and System V, you should always use it with a
4781 single input file, and always expect the result on standard output.  You
4782 might also want to automatically configure in a @option{-G} option to
4783 @command{ptx} calls in products using @command{ptx}, if the configurator finds
4784 that the installed @command{ptx} accepts @option{-G}.
4785
4786 @item
4787 The only options available in System V @command{ptx} are options @option{-b},
4788 @option{-f}, @option{-g}, @option{-i}, @option{-o}, @option{-r}, @option{-t} and
4789 @option{-w}.  All other options are @sc{gnu} extensions and are not repeated in
4790 this enumeration.  Moreover, some options have a slightly different
4791 meaning when @sc{gnu} extensions are enabled, as explained below.
4792
4793 @item
4794 By default, concordance output is not formatted for @command{troff} or
4795 @command{nroff}.  It is rather formatted for a dumb terminal.  @command{troff}
4796 or @command{nroff} output may still be selected through option @option{-O}.
4797
4798 @item
4799 Unless @option{-R} option is used, the maximum reference width is
4800 subtracted from the total output line width.  With @sc{gnu} extensions
4801 disabled, width of references is not taken into account in the output
4802 line width computations.
4803
4804 @item
4805 All 256 bytes, even null bytes, are always read and processed from
4806 input file with no adverse effect, even if @sc{gnu} extensions are disabled.
4807 However, System V @command{ptx} does not accept 8-bit characters, a few
4808 control characters are rejected, and the tilde @kbd{~} is also rejected.
4809
4810 @item
4811 Input line length is only limited by available memory, even if @sc{gnu}
4812 extensions are disabled.  However, System V @command{ptx} processes only
4813 the first 200 characters in each line.
4814
4815 @item
4816 The break (non-word) characters default to be every character except all
4817 letters of the underlying character set, diacriticized or not.  When @sc{gnu}
4818 extensions are disabled, the break characters default to space, tab and
4819 newline only.
4820
4821 @item
4822 The program makes better use of output line width.  If @sc{gnu} extensions
4823 are disabled, the program rather tries to imitate System V @command{ptx},
4824 but still, there are some slight disposition glitches this program does
4825 not completely reproduce.
4826
4827 @item
4828 The user can specify both an Ignore file and an Only file.  This is not
4829 allowed with System V @command{ptx}.
4830
4831 @end itemize
4832
4833
4834 @node Operating on fields within a line
4835 @chapter Operating on fields within a line
4836
4837 @menu
4838 * cut invocation::              Print selected parts of lines.
4839 * paste invocation::            Merge lines of files.
4840 * join invocation::             Join lines on a common field.
4841 @end menu
4842
4843
4844 @node cut invocation
4845 @section @command{cut}: Print selected parts of lines
4846
4847 @pindex cut
4848 @command{cut} writes to standard output selected parts of each line of each
4849 input file, or standard input if no files are given or for a file name of
4850 @samp{-}.  Synopsis:
4851
4852 @example
4853 cut [@var{option}]@dots{} [@var{file}]@dots{}
4854 @end example
4855
4856 In the table which follows, the @var{byte-list}, @var{character-list},
4857 and @var{field-list} are one or more numbers or ranges (two numbers
4858 separated by a dash) separated by commas.  Bytes, characters, and
4859 fields are numbered starting at 1.  Incomplete ranges may be
4860 given: @option{-@var{m}} means @samp{1-@var{m}}; @samp{@var{n}-} means
4861 @samp{@var{n}} through end of line or last field.  The list elements
4862 can be repeated, can overlap, and can be specified in any order; but
4863 the selected input is written in the same order that it is read, and
4864 is written exactly once.
4865
4866 The program accepts the following options.  Also see @ref{Common
4867 options}.
4868
4869 @table @samp
4870
4871 @item -b @var{byte-list}
4872 @itemx --bytes=@var{byte-list}
4873 @opindex -b
4874 @opindex --bytes
4875 Select for printing only the bytes in positions listed in
4876 @var{byte-list}.  Tabs and backspaces are treated like any other
4877 character; they take up 1 byte.  If an output delimiter is specified,
4878 (see the description of @option{--output-delimiter}), then output that
4879 string between ranges of selected bytes.
4880
4881 @item -c @var{character-list}
4882 @itemx --characters=@var{character-list}
4883 @opindex -c
4884 @opindex --characters
4885 Select for printing only the characters in positions listed in
4886 @var{character-list}.  The same as @option{-b} for now, but
4887 internationalization will change that.  Tabs and backspaces are
4888 treated like any other character; they take up 1 character.  If an
4889 output delimiter is specified, (see the description of
4890 @option{--output-delimiter}), then output that string between ranges
4891 of selected bytes.
4892
4893 @item -f @var{field-list}
4894 @itemx --fields=@var{field-list}
4895 @opindex -f
4896 @opindex --fields
4897 Select for printing only the fields listed in @var{field-list}.
4898 Fields are separated by a TAB character by default.  Also print any
4899 line that contains no delimiter character, unless the
4900 @option{--only-delimited} (@option{-s}) option is specified
4901
4902 @item -d @var{input_delim_byte}
4903 @itemx --delimiter=@var{input_delim_byte}
4904 @opindex -d
4905 @opindex --delimiter
4906 With @option{-f}, use the first byte of @var{input_delim_byte} as
4907 the input fields separator (default is TAB).
4908
4909 @item -n
4910 @opindex -n
4911 Do not split multi-byte characters (no-op for now).
4912
4913 @item -s
4914 @itemx --only-delimited
4915 @opindex -s
4916 @opindex --only-delimited
4917 For @option{-f}, do not print lines that do not contain the field separator
4918 character.  Normally, any line without a field separator is printed verbatim.
4919
4920 @item --output-delimiter=@var{output_delim_string}
4921 @opindex --output-delimiter
4922 With @option{-f}, output fields are separated by @var{output_delim_string}.
4923 The default with @option{-f} is to use the input delimiter.
4924 When using @option{-b} or @option{-c} to select ranges of byte or
4925 character offsets (as opposed to ranges of fields),
4926 output @var{output_delim_string} between non-overlapping
4927 ranges of selected bytes.
4928
4929 @item --complement
4930 @opindex --complement
4931 This option is a @acronym{GNU} extension.
4932 Select for printing the complement of the bytes, characters or fields
4933 selected with the @option{-b}, @option{-c} or @option{-f} options.
4934 In other words, do @emph{not} print the bytes, characters or fields
4935 specified via those options.  This option is useful when you have
4936 many fields and want to print all but a few of them.
4937
4938 @end table
4939
4940 @exitstatus
4941
4942
4943 @node paste invocation
4944 @section @command{paste}: Merge lines of files
4945
4946 @pindex paste
4947 @cindex merging files
4948
4949 @command{paste} writes to standard output lines consisting of sequentially
4950 corresponding lines of each given file, separated by a TAB character.
4951 Standard input is used for a file name of @samp{-} or if no input files
4952 are given.
4953
4954 For example:
4955
4956 @example
4957 $ cat num2
4958 1
4959 2
4960 $ cat let3
4961 a
4962 b
4963 c
4964 $ paste num2 let3
4965 1       a
4966 2       b
4967        @ c
4968 @end example
4969
4970 Synopsis:
4971
4972 @example
4973 paste [@var{option}]@dots{} [@var{file}]@dots{}
4974 @end example
4975
4976 The program accepts the following options.  Also see @ref{Common options}.
4977
4978 @table @samp
4979
4980 @item -s
4981 @itemx --serial
4982 @opindex -s
4983 @opindex --serial
4984 Paste the lines of one file at a time rather than one line from each
4985 file.  Using the above example data:
4986
4987 @example
4988 $ paste -s num2 let3
4989 1       2
4990 a       b       c
4991 @end example
4992
4993 @item -d @var{delim-list}
4994 @itemx --delimiters=@var{delim-list}
4995 @opindex -d
4996 @opindex --delimiters
4997 Consecutively use the characters in @var{delim-list} instead of
4998 TAB to separate merged lines.  When @var{delim-list} is
4999 exhausted, start again at its beginning.  Using the above example data:
5000
5001 @example
5002 $ paste -d '%_' num2 let3 num2
5003 1%a_1
5004 2%b_2
5005 %c_
5006 @end example
5007
5008 @end table
5009
5010 @exitstatus
5011
5012
5013 @node join invocation
5014 @section @command{join}: Join lines on a common field
5015
5016 @pindex join
5017 @cindex common field, joining on
5018
5019 @command{join} writes to standard output a line for each pair of input
5020 lines that have identical join fields.  Synopsis:
5021
5022 @example
5023 join [@var{option}]@dots{} @var{file1} @var{file2}
5024 @end example
5025
5026 Either @var{file1} or @var{file2} (but not both) can be @samp{-},
5027 meaning standard input.  @var{file1} and @var{file2} should be
5028 sorted on the join fields.
5029
5030 @vindex LC_COLLATE
5031 Normally, the sort order is that of the
5032 collating sequence specified by the @env{LC_COLLATE} locale.  Unless
5033 the @option{-t} option is given, the sort comparison ignores blanks at
5034 the start of the join field, as in @code{sort -b}.  If the
5035 @option{--ignore-case} option is given, the sort comparison ignores
5036 the case of characters in the join field, as in @code{sort -f}.
5037
5038 The @command{sort} and @command{join} commands should use consistent
5039 locales and options if the output of @command{sort} is fed to
5040 @command{join}.  You can use a command like @samp{sort -k 1b,1} to
5041 sort a file on its default join field, but if you select a non-default
5042 locale, join field, separator, or comparison options, then you should
5043 do so consistently between @command{join} and @command{sort}.
5044
5045 As a @acronym{GNU} extension, if the input has no unpairable lines the
5046 sort order can be any order that considers two fields to be equal if and
5047 only if the sort comparison described above considers them to be equal.
5048 For example:
5049
5050 @example
5051 $ cat file1
5052 a a1
5053 c c1
5054 b b1
5055 $ cat file2
5056 a a2
5057 c c2
5058 b b2
5059 $ join file1 file2
5060 a a1 a2
5061 c c1 c2
5062 b b1 b2
5063 @end example
5064
5065 The defaults are:
5066 @itemize
5067 @item the join field is the first field in each line;
5068 @item fields in the input are separated by one or more blanks, with leading
5069       blanks on the line ignored;
5070 @item fields in the output are separated by a space;
5071 @item each output line consists of the join field, the remaining
5072 fields from @var{file1}, then the remaining fields from @var{file2}.
5073 @end itemize
5074
5075 The program accepts the following options.  Also see @ref{Common options}.
5076
5077 @table @samp
5078
5079 @item -a @var{file-number}
5080 @opindex -a
5081 Print a line for each unpairable line in file @var{file-number} (either
5082 @samp{1} or @samp{2}), in addition to the normal output.
5083
5084 @item -e @var{string}
5085 @opindex -e
5086 Replace those output fields that are missing in the input with
5087 @var{string}.
5088
5089 @item -i
5090 @itemx --ignore-case
5091 @opindex -i
5092 @opindex --ignore-case
5093 Ignore differences in case when comparing keys.
5094 With this option, the lines of the input files must be ordered in the same way.
5095 Use @samp{sort -f} to produce this ordering.
5096
5097 @item -1 @var{field}
5098 @opindex -1
5099 Join on field @var{field} (a positive integer) of file 1.
5100
5101 @item -2 @var{field}
5102 @opindex -2
5103 Join on field @var{field} (a positive integer) of file 2.
5104
5105 @item -j @var{field}
5106 Equivalent to @option{-1 @var{field} -2 @var{field}}.
5107
5108 @item -o @var{field-list}
5109 Construct each output line according to the format in @var{field-list}.
5110 Each element in @var{field-list} is either the single character @samp{0} or
5111 has the form @var{m.n} where the file number, @var{m}, is @samp{1} or
5112 @samp{2} and @var{n} is a positive field number.
5113
5114 A field specification of @samp{0} denotes the join field.
5115 In most cases, the functionality of the @samp{0} field spec
5116 may be reproduced using the explicit @var{m.n} that corresponds
5117 to the join field.  However, when printing unpairable lines
5118 (using either of the @option{-a} or @option{-v} options), there is no way
5119 to specify the join field using @var{m.n} in @var{field-list}
5120 if there are unpairable lines in both files.
5121 To give @command{join} that functionality, @acronym{POSIX} invented the @samp{0}
5122 field specification notation.
5123
5124 The elements in @var{field-list}
5125 are separated by commas or blanks.
5126 Blank separators typically need to be quoted for the shell.  For
5127 example, the commands @samp{join -o 1.2,2.2} and @samp{join -o '1.2
5128 2.2'} are equivalent.
5129
5130 All output lines---including those printed because of any -a or -v
5131 option---are subject to the specified @var{field-list}.
5132
5133 @item -t @var{char}
5134 Use character @var{char} as the input and output field separator.
5135 Treat as significant each occurrence of @var{char} in the input file.
5136 Use @samp{sort -t @var{char}}, without the @option{-b} option of
5137 @samp{sort}, to produce this ordering.
5138
5139 @item -v @var{file-number}
5140 Print a line for each unpairable line in file @var{file-number}
5141 (either @samp{1} or @samp{2}), instead of the normal output.
5142
5143 @end table
5144
5145 @exitstatus
5146
5147
5148 @node Operating on characters
5149 @chapter Operating on characters
5150
5151 @cindex operating on characters
5152
5153 This commands operate on individual characters.
5154
5155 @menu
5156 * tr invocation::               Translate, squeeze, and/or delete characters.
5157 * expand invocation::           Convert tabs to spaces.
5158 * unexpand invocation::         Convert spaces to tabs.
5159 @end menu
5160
5161
5162 @node tr invocation
5163 @section @command{tr}: Translate, squeeze, and/or delete characters
5164
5165 @pindex tr
5166
5167 Synopsis:
5168
5169 @example
5170 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
5171 @end example
5172
5173 @command{tr} copies standard input to standard output, performing
5174 one of the following operations:
5175
5176 @itemize @bullet
5177 @item
5178 translate, and optionally squeeze repeated characters in the result,
5179 @item
5180 squeeze repeated characters,
5181 @item
5182 delete characters,
5183 @item
5184 delete characters, then squeeze repeated characters from the result.
5185 @end itemize
5186
5187 The @var{set1} and (if given) @var{set2} arguments define ordered
5188 sets of characters, referred to below as @var{set1} and @var{set2}.  These
5189 sets are the characters of the input that @command{tr} operates on.
5190 The @option{--complement} (@option{-c}, @option{-C}) option replaces
5191 @var{set1} with its
5192 complement (all of the characters that are not in @var{set1}).
5193
5194 Currently @command{tr} fully supports only single-byte characters.
5195 Eventually it will support multibyte characters; when it does, the
5196 @option{-C} option will cause it to complement the set of characters,
5197 whereas @option{-c} will cause it to complement the set of values.
5198 This distinction will matter only when some values are not characters,
5199 and this is possible only in locales using multibyte encodings when
5200 the input contains encoding errors.
5201
5202 The program accepts the @option{--help} and @option{--version}
5203 options.  @xref{Common options}.  Options must precede operands.
5204
5205 @exitstatus
5206
5207 @menu
5208 * Character sets::              Specifying sets of characters.
5209 * Translating::                 Changing one set of characters to another.
5210 * Squeezing::                   Squeezing repeats and deleting.
5211 @end menu
5212
5213
5214 @node Character sets
5215 @subsection Specifying sets of characters
5216
5217 @cindex specifying sets of characters
5218
5219 The format of the @var{set1} and @var{set2} arguments resembles
5220 the format of regular expressions; however, they are not regular
5221 expressions, only lists of characters.  Most characters simply
5222 represent themselves in these strings, but the strings can contain
5223 the shorthands listed below, for convenience.  Some of them can be
5224 used only in @var{set1} or @var{set2}, as noted below.
5225
5226 @table @asis
5227
5228 @item Backslash escapes
5229 @cindex backslash escapes
5230
5231 The following backslash escape sequences are recognized:
5232
5233 @table @samp
5234 @item \a
5235 Control-G.
5236 @item \b
5237 Control-H.
5238 @item \f
5239 Control-L.
5240 @item \n
5241 Control-J.
5242 @item \r
5243 Control-M.
5244 @item \t
5245 Control-I.
5246 @item \v
5247 Control-K.
5248 @item \@var{ooo}
5249 The character with the value given by @var{ooo}, which is 1 to 3
5250 octal digits,
5251 @item \\
5252 A backslash.
5253 @end table
5254
5255 While a backslash followed by a character not listed above is
5256 interpreted as that character, the backslash also effectively
5257 removes any special significance, so it is useful to escape
5258 @samp{[}, @samp{]}, @samp{*}, and @samp{-}.
5259
5260 @item Ranges
5261 @cindex ranges
5262
5263 The notation @samp{@var{m}-@var{n}} expands to all of the characters
5264 from @var{m} through @var{n}, in ascending order.  @var{m} should
5265 collate before @var{n}; if it doesn't, an error results.  As an example,
5266 @samp{0-9} is the same as @samp{0123456789}.
5267
5268 @sc{gnu} @command{tr} does not support the System V syntax that uses square
5269 brackets to enclose ranges.  Translations specified in that format
5270 sometimes work as expected, since the brackets are often transliterated
5271 to themselves.  However, they should be avoided because they sometimes
5272 behave unexpectedly.  For example, @samp{tr -d '[0-9]'} deletes brackets
5273 as well as digits.
5274
5275 Many historically common and even accepted uses of ranges are not
5276 portable.  For example, on @acronym{EBCDIC} hosts using the @samp{A-Z}
5277 range will not do what most would expect because @samp{A} through @samp{Z}
5278 are not contiguous as they are in @acronym{ASCII}.
5279 If you can rely on a @acronym{POSIX} compliant version of @command{tr}, then
5280 the best way to work around this is to use character classes (see below).
5281 Otherwise, it is most portable (and most ugly) to enumerate the members
5282 of the ranges.
5283
5284 @item Repeated characters
5285 @cindex repeated characters
5286
5287 The notation @samp{[@var{c}*@var{n}]} in @var{set2} expands to @var{n}
5288 copies of character @var{c}.  Thus, @samp{[y*6]} is the same as
5289 @samp{yyyyyy}.  The notation @samp{[@var{c}*]} in @var{string2} expands
5290 to as many copies of @var{c} as are needed to make @var{set2} as long as
5291 @var{set1}.  If @var{n} begins with @samp{0}, it is interpreted in
5292 octal, otherwise in decimal.
5293
5294 @item Character classes
5295 @cindex character classes
5296
5297 The notation @samp{[:@var{class}:]} expands to all of the characters in
5298 the (predefined) class @var{class}.  The characters expand in no
5299 particular order, except for the @code{upper} and @code{lower} classes,
5300 which expand in ascending order.  When the @option{--delete} (@option{-d})
5301 and @option{--squeeze-repeats} (@option{-s}) options are both given, any
5302 character class can be used in @var{set2}.  Otherwise, only the
5303 character classes @code{lower} and @code{upper} are accepted in
5304 @var{set2}, and then only if the corresponding character class
5305 (@code{upper} and @code{lower}, respectively) is specified in the same
5306 relative position in @var{set1}.  Doing this specifies case conversion.
5307 The class names are given below; an error results when an invalid class
5308 name is given.
5309
5310 @table @code
5311 @item alnum
5312 @opindex alnum
5313 Letters and digits.
5314 @item alpha
5315 @opindex alpha
5316 Letters.
5317 @item blank
5318 @opindex blank
5319 Horizontal whitespace.
5320 @item cntrl
5321 @opindex cntrl
5322 Control characters.
5323 @item digit
5324 @opindex digit
5325 Digits.
5326 @item graph
5327 @opindex graph
5328 Printable characters, not including space.
5329 @item lower
5330 @opindex lower
5331 Lowercase letters.
5332 @item print
5333 @opindex print
5334 Printable characters, including space.
5335 @item punct
5336 @opindex punct
5337 Punctuation characters.
5338 @item space
5339 @opindex space
5340 Horizontal or vertical whitespace.
5341 @item upper
5342 @opindex upper
5343 Uppercase letters.
5344 @item xdigit
5345 @opindex xdigit
5346 Hexadecimal digits.
5347 @end table
5348
5349 @item Equivalence classes
5350 @cindex equivalence classes
5351
5352 The syntax @samp{[=@var{c}=]} expands to all of the characters that are
5353 equivalent to @var{c}, in no particular order.  Equivalence classes are
5354 a relatively recent invention intended to support non-English alphabets.
5355 But there seems to be no standard way to define them or determine their
5356 contents.  Therefore, they are not fully implemented in @sc{gnu} @command{tr};
5357 each character's equivalence class consists only of that character,
5358 which is of no particular use.
5359
5360 @end table
5361
5362
5363 @node Translating
5364 @subsection Translating
5365
5366 @cindex translating characters
5367
5368 @command{tr} performs translation when @var{set1} and @var{set2} are
5369 both given and the @option{--delete} (@option{-d}) option is not given.
5370 @command{tr} translates each character of its input that is in @var{set1}
5371 to the corresponding character in @var{set2}.  Characters not in
5372 @var{set1} are passed through unchanged.  When a character appears more
5373 than once in @var{set1} and the corresponding characters in @var{set2}
5374 are not all the same, only the final one is used.  For example, these
5375 two commands are equivalent:
5376
5377 @example
5378 tr aaa xyz
5379 tr a z
5380 @end example
5381
5382 A common use of @command{tr} is to convert lowercase characters to
5383 uppercase.  This can be done in many ways.  Here are three of them:
5384
5385 @example
5386 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
5387 tr a-z A-Z
5388 tr '[:lower:]' '[:upper:]'
5389 @end example
5390
5391 @noindent
5392 But note that using ranges like @code{a-z} above is not portable.
5393
5394 When @command{tr} is performing translation, @var{set1} and @var{set2}
5395 typically have the same length.  If @var{set1} is shorter than
5396 @var{set2}, the extra characters at the end of @var{set2} are ignored.
5397
5398 On the other hand, making @var{set1} longer than @var{set2} is not
5399 portable; @acronym{POSIX} says that the result is undefined.  In this situation,
5400 BSD @command{tr} pads @var{set2} to the length of @var{set1} by repeating
5401 the last character of @var{set2} as many times as necessary.  System V
5402 @command{tr} truncates @var{set1} to the length of @var{set2}.
5403
5404 By default, @sc{gnu} @command{tr} handles this case like BSD @command{tr}.
5405 When the @option{--truncate-set1} (@option{-t}) option is given,
5406 @sc{gnu} @command{tr} handles this case like the System V @command{tr}
5407 instead.  This option is ignored for operations other than translation.
5408
5409 Acting like System V @command{tr} in this case breaks the relatively common
5410 BSD idiom:
5411
5412 @example
5413 tr -cs A-Za-z0-9 '\012'
5414 @end example
5415
5416 @noindent
5417 because it converts only zero bytes (the first element in the
5418 complement of @var{set1}), rather than all non-alphanumerics, to
5419 newlines.
5420
5421 @noindent
5422 By the way, the above idiom is not portable because it uses ranges, and
5423 it assumes that the octal code for newline is 012.
5424 Assuming a @acronym{POSIX} compliant @command{tr}, here is a better way to write it:
5425
5426 @example
5427 tr -cs '[:alnum:]' '[\n*]'
5428 @end example
5429
5430
5431 @node Squeezing
5432 @subsection Squeezing repeats and deleting
5433
5434 @cindex squeezing repeat characters
5435 @cindex deleting characters
5436
5437 When given just the @option{--delete} (@option{-d}) option, @command{tr}
5438 removes any input characters that are in @var{set1}.
5439
5440 When given just the @option{--squeeze-repeats} (@option{-s}) option,
5441 @command{tr} replaces each input sequence of a repeated character that
5442 is in @var{set1} with a single occurrence of that character.
5443
5444 When given both @option{--delete} and @option{--squeeze-repeats}, @command{tr}
5445 first performs any deletions using @var{set1}, then squeezes repeats
5446 from any remaining characters using @var{set2}.
5447
5448 The @option{--squeeze-repeats} option may also be used when translating,
5449 in which case @command{tr} first performs translation, then squeezes
5450 repeats from any remaining characters using @var{set2}.
5451
5452 Here are some examples to illustrate various combinations of options:
5453
5454 @itemize @bullet
5455
5456 @item
5457 Remove all zero bytes:
5458
5459 @example
5460 tr -d '\0'
5461 @end example
5462
5463 @item
5464 Put all words on lines by themselves.  This converts all
5465 non-alphanumeric characters to newlines, then squeezes each string
5466 of repeated newlines into a single newline:
5467
5468 @example
5469 tr -cs '[:alnum:]' '[\n*]'
5470 @end example
5471
5472 @item
5473 Convert each sequence of repeated newlines to a single newline:
5474
5475 @example
5476 tr -s '\n'
5477 @end example
5478
5479 @item
5480 Find doubled occurrences of words in a document.
5481 @c Separate the following two "the"s, so typo checkers don't complain.
5482 For example, people often write ``the @w{}the'' with the repeated words
5483 separated by a newline.  The Bourne shell script below works first
5484 by converting each sequence of punctuation and blank characters to a
5485 single newline.  That puts each ``word'' on a line by itself.
5486 Next it maps all uppercase characters to lower case, and finally it
5487 runs @command{uniq} with the @option{-d} option to print out only the words
5488 that were repeated.
5489
5490 @example
5491 #!/bin/sh
5492 cat -- "$@@" \
5493   | tr -s '[:punct:][:blank:]' '[\n*]' \
5494   | tr '[:upper:]' '[:lower:]' \
5495   | uniq -d
5496 @end example
5497
5498 @item
5499 Deleting a small set of characters is usually straightforward.  For example,
5500 to remove all @samp{a}s, @samp{x}s, and @samp{M}s you would do this:
5501
5502 @example
5503 tr -d axM
5504 @end example
5505
5506 However, when @samp{-} is one of those characters, it can be tricky because
5507 @samp{-} has special meanings.  Performing the same task as above but also
5508 removing all @samp{-} characters, we might try @code{tr -d -axM}, but
5509 that would fail because @command{tr} would try to interpret @option{-a} as
5510 a command-line option.  Alternatively, we could try putting the hyphen
5511 inside the string, @code{tr -d a-xM}, but that wouldn't work either because
5512 it would make @command{tr} interpret @code{a-x} as the range of characters
5513 @samp{a}@dots{}@samp{x} rather than the three.
5514 One way to solve the problem is to put the hyphen at the end of the list
5515 of characters:
5516
5517 @example
5518 tr -d axM-
5519 @end example
5520
5521 Or you can use @samp{--} to terminate option processing:
5522
5523 @example
5524 tr -d -- -axM
5525 @end example
5526
5527 More generally, use the character class notation @code{[=c=]}
5528 with @samp{-} (or any other character) in place of the @samp{c}:
5529
5530 @example
5531 tr -d '[=-=]axM'
5532 @end example
5533
5534 Note how single quotes are used in the above example to protect the
5535 square brackets from interpretation by a shell.
5536
5537 @end itemize
5538
5539
5540 @node expand invocation
5541 @section @command{expand}: Convert tabs to spaces
5542
5543 @pindex expand
5544 @cindex tabs to spaces, converting
5545 @cindex converting tabs to spaces
5546
5547 @command{expand} writes the contents of each given @var{file}, or standard
5548 input if none are given or for a @var{file} of @samp{-}, to standard
5549 output, with tab characters converted to the appropriate number of
5550 spaces.  Synopsis:
5551
5552 @example
5553 expand [@var{option}]@dots{} [@var{file}]@dots{}
5554 @end example
5555
5556 By default, @command{expand} converts all tabs to spaces.  It preserves
5557 backspace characters in the output; they decrement the column count for
5558 tab calculations.  The default action is equivalent to @option{-t 8} (set
5559 tabs every 8 columns).
5560
5561 The program accepts the following options.  Also see @ref{Common options}.
5562
5563 @table @samp
5564
5565 @item -t @var{tab1}[,@var{tab2}]@dots{}
5566 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
5567 @opindex -t
5568 @opindex --tabs
5569 @cindex tab stops, setting
5570 If only one tab stop is given, set the tabs @var{tab1} spaces apart
5571 (default is 8).  Otherwise, set the tabs at columns @var{tab1},
5572 @var{tab2}, @dots{} (numbered from 0), and replace any tabs beyond the
5573 last tab stop given with single spaces.  Tab stops can be separated by
5574 blanks as well as by commas.
5575
5576 For compatibility, GNU @command{expand} also accepts the obsolete
5577 option syntax, @option{-@var{t1}[,@var{t2}]@dots{}}.  New scripts
5578 should use @option{-t @var{t1}[,@var{t2}]@dots{}} instead.
5579
5580 @item -i
5581 @itemx --initial
5582 @opindex -i
5583 @opindex --initial
5584 @cindex initial tabs, converting
5585 Only convert initial tabs (those that precede all non-space or non-tab
5586 characters) on each line to spaces.
5587
5588 @end table
5589
5590 @exitstatus
5591
5592
5593 @node unexpand invocation
5594 @section @command{unexpand}: Convert spaces to tabs
5595
5596 @pindex unexpand
5597
5598 @command{unexpand} writes the contents of each given @var{file}, or
5599 standard input if none are given or for a @var{file} of @samp{-}, to
5600 standard output, converting blanks at the beginning of each line into
5601 as many tab characters as needed.  In the default @acronym{POSIX}
5602 locale, a @dfn{blank} is a space or a tab; other locales may specify
5603 additional blank characters.  Synopsis:
5604
5605 @example
5606 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
5607 @end example
5608
5609 By default, @command{unexpand} converts only initial blanks (those
5610 that precede all non-blank characters) on each line.  It
5611 preserves backspace characters in the output; they decrement the column
5612 count for tab calculations.  By default, tabs are set at every 8th
5613 column.
5614
5615 The program accepts the following options.  Also see @ref{Common options}.
5616
5617 @table @samp
5618
5619 @item -t @var{tab1}[,@var{tab2}]@dots{}
5620 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
5621 @opindex -t
5622 @opindex --tabs
5623 If only one tab stop is given, set the tabs @var{tab1} columns apart
5624 instead of the default 8.  Otherwise, set the tabs at columns
5625 @var{tab1}, @var{tab2}, @dots{} (numbered from 0), and leave blanks
5626 beyond the tab stops given unchanged.  Tab stops can be separated by
5627 blanks as well as by commas.  This option implies the @option{-a} option.
5628
5629 For compatibility, GNU @command{unexpand} supports the obsolete option syntax,
5630 @option{-@var{tab1}[,@var{tab2}]@dots{}}, where tab stops must be
5631 separated by commas.  (Unlike @option{-t}, this obsolete option does
5632 not imply @option{-a}.)  New scripts should use @option{--first-only -t
5633 @var{tab1}[,@var{tab2}]@dots{}} instead.
5634
5635 @item -a
5636 @itemx --all
5637 @opindex -a
5638 @opindex --all
5639 Also convert all sequences of two or more blanks just before a tab stop,
5640 even if they occur after non-blank characters in a line.
5641
5642 @end table
5643
5644 @exitstatus
5645
5646
5647 @node Directory listing
5648 @chapter Directory listing
5649
5650 This chapter describes the @command{ls} command and its variants @command{dir}
5651 and @command{vdir}, which list information about files.
5652
5653 @menu
5654 * ls invocation::               List directory contents.
5655 * dir invocation::              Briefly ls.
5656 * vdir invocation::             Verbosely ls.
5657 * dircolors invocation::        Color setup for ls, etc.
5658 @end menu
5659
5660
5661 @node ls invocation
5662 @section @command{ls}: List directory contents
5663
5664 @pindex ls
5665 @cindex directory listing
5666
5667 The @command{ls} program lists information about files (of any type,
5668 including directories).  Options and file arguments can be intermixed
5669 arbitrarily, as usual.
5670
5671 For non-option command-line arguments that are directories, by default
5672 @command{ls} lists the contents of directories, not recursively, and
5673 omitting files with names beginning with @samp{.}.  For other non-option
5674 arguments, by default @command{ls} lists just the file name.  If no
5675 non-option argument is specified, @command{ls} operates on the current
5676 directory, acting as if it had been invoked with a single argument of @samp{.}.
5677
5678 @vindex LC_ALL
5679 By default, the output is sorted alphabetically, according to the locale
5680 settings in effect.@footnote{If you use a non-@acronym{POSIX}
5681 locale (e.g., by setting @env{LC_ALL} to @samp{en_US}), then @command{ls} may
5682 produce output that is sorted differently than you're accustomed to.
5683 In that case, set the @env{LC_ALL} environment variable to @samp{C}.}
5684 If standard output is
5685 a terminal, the output is in columns (sorted vertically) and control
5686 characters are output as question marks; otherwise, the output is listed
5687 one per line and control characters are output as-is.
5688
5689 Because @command{ls} is such a fundamental program, it has accumulated many
5690 options over the years.  They are described in the subsections below;
5691 within each section, options are listed alphabetically (ignoring case).
5692 The division of options into the subsections is not absolute, since some
5693 options affect more than one aspect of @command{ls}'s operation.
5694
5695 @cindex exit status of @command{ls}
5696 Exit status:
5697
5698 @display
5699 0 success
5700 1 minor problems (e.g., a subdirectory was not found)
5701 2 serious trouble (e.g., memory exhausted)
5702 @end display
5703
5704 Also see @ref{Common options}.
5705
5706 @menu
5707 * Which files are listed::
5708 * What information is listed::
5709 * Sorting the output::
5710 * More details about version sort::
5711 * General output formatting::
5712 * Formatting file timestamps::
5713 * Formatting the file names::
5714 @end menu
5715
5716
5717 @node Which files are listed
5718 @subsection Which files are listed
5719
5720 These options determine which files @command{ls} lists information for.
5721 By default, @command{ls} lists files and the contents of any
5722 directories on the command line, except that in directories it ignores
5723 files whose names start with @samp{.}.
5724
5725 @table @samp
5726
5727 @item -a
5728 @itemx --all
5729 @opindex -a
5730 @opindex --all
5731 In directories, do not ignore file names that start with @samp{.}.
5732
5733 @item -A
5734 @itemx --almost-all
5735 @opindex -A
5736 @opindex --almost-all
5737 In directories, do not ignore all file names that start with @samp{.};
5738 ignore only @file{.} and @file{..}.  The @option{--all} (@option{-a})
5739 option overrides this option.
5740
5741 @item -B
5742 @itemx --ignore-backups
5743 @opindex -B
5744 @opindex --ignore-backups
5745 @cindex backup files, ignoring
5746 In directories, ignore files that end with @samp{~}.  This option is
5747 equivalent to @samp{--ignore='*~' --ignore='.*~'}.
5748
5749 @item -d
5750 @itemx --directory
5751 @opindex -d
5752 @opindex --directory
5753 List just the names of directories, as with other types of files, rather
5754 than listing their contents.
5755 @c The following sentence is the same as the one for -F.
5756 Do not follow symbolic links listed on the
5757 command line unless the @option{--dereference-command-line} (@option{-H}),
5758 @option{--dereference} (@option{-L}), or
5759 @option{--dereference-command-line-symlink-to-dir} options are specified.
5760
5761 @item -H
5762 @itemx --dereference-command-line
5763 @opindex -H
5764 @opindex --dereference-command-line
5765 @cindex symbolic links, dereferencing
5766 If a command line argument specifies a symbolic link, show information
5767 for the file the link references rather than for the link itself.
5768
5769 @itemx --dereference-command-line-symlink-to-dir
5770 @opindex --dereference-command-line-symlink-to-dir
5771 @cindex symbolic links, dereferencing
5772 Do not dereference symbolic links, with one exception:
5773 if a command line argument specifies a symbolic link that refers to
5774 a directory, show information for that directory rather than for the
5775 link itself.
5776 This is the default behavior when no other dereferencing-related
5777 option has been specified (@option{--classify} (@option{-F}),
5778 @option{--directory} (@option{-d}),
5779 (@option{-l}),
5780 @option{--dereference} (@option{-L}), or
5781 @option{--dereference-command-line} (@option{-H})).
5782
5783 @item --group-directories-first
5784 @opindex --group-directories-first
5785 Group all the directories before the files and then sort the
5786 directories and the files separately using the selected sort key
5787 (see --sort option).
5788 That is, this option specifies a primary sort key,
5789 and the --sort option specifies a secondary key.
5790
5791 @item --hide=PATTERN
5792 @opindex --hide=@var{pattern}
5793 In directories, ignore files whose names match the shell pattern
5794 @var{pattern}, unless the @option{--all} (@option{-a}) or
5795 @option{--almost-all} (@option{-A}) is also given.  This
5796 option acts like @option{--ignore=@var{pattern}} except that it has no
5797 effect if @option{--all} (@option{-a}) or @option{--almost-all}
5798 (@option{-A}) is also given.
5799
5800 This option can be useful in shell aliases.  For example, if
5801 @command{lx} is an alias for @samp{ls --hide='*~'} and @command{ly} is
5802 an alias for @samp{ls --ignore='*~'}, then the command @samp{lx -A}
5803 lists the file @file{README~} even though @samp{ly -A} would not.
5804
5805 @item -I @var{pattern}
5806 @itemx --ignore=@var{pattern}
5807 @opindex -I
5808 @opindex --ignore=@var{pattern}
5809 In directories, ignore files whose names match the shell pattern
5810 (not regular expression) @var{pattern}.  As
5811 in the shell, an initial @samp{.} in a file name does not match a
5812 wildcard at the start of @var{pattern}.  Sometimes it is useful
5813 to give this option several times.  For example,
5814
5815 @smallexample
5816 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
5817 @end smallexample
5818
5819 The first option ignores names of length 3 or more that start with @samp{.},
5820 the second ignores all two-character names that start with @samp{.}
5821 except @samp{..}, and the third ignores names that start with @samp{#}.
5822
5823 @item -L
5824 @itemx --dereference
5825 @opindex -L
5826 @opindex --dereference
5827 @cindex symbolic links, dereferencing
5828 When showing file information for a symbolic link, show information
5829 for the file the link references rather than the link itself.
5830 However, even with this option, @command{ls} still prints the name
5831 of the link itself, not the name of the file that the link points to.
5832
5833 @item -R
5834 @itemx --recursive
5835 @opindex -R
5836 @opindex --recursive
5837 @cindex recursive directory listing
5838 @cindex directory listing, recursive
5839 List the contents of all directories recursively.
5840
5841 @end table
5842
5843
5844 @node What information is listed
5845 @subsection What information is listed
5846
5847 These options affect the information that @command{ls} displays.  By
5848 default, only file names are shown.
5849
5850 @table @samp
5851
5852 @item --author
5853 @opindex --author
5854 @cindex hurd, author, printing
5855 List each file's author when producing long format directory listings.
5856 In GNU/Hurd, file authors can differ from their owners, but in other
5857 operating systems the two are the same.
5858
5859 @item -D
5860 @itemx --dired
5861 @opindex -D
5862 @opindex --dired
5863 @cindex dired Emacs mode support
5864 With the long listing (@option{-l}) format, print an additional line after
5865 the main output:
5866
5867 @example
5868 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
5869 @end example
5870
5871 @noindent
5872 The @var{begN} and @var{endN} are unsigned integers that record the
5873 byte position of the beginning and end of each file name in the output.
5874 This makes it easy for Emacs to find the names, even when they contain
5875 unusual characters such as space or newline, without fancy searching.
5876
5877 If directories are being listed recursively (@option{-R}), output a similar
5878 line with offsets for each subdirectory name:
5879
5880 @example
5881 //SUBDIRED// @var{beg1} @var{end1} @dots{}
5882 @end example
5883
5884 Finally, output a line of the form:
5885
5886 @example
5887 //DIRED-OPTIONS// --quoting-style=@var{word}
5888 @end example
5889
5890 @noindent
5891 where @var{word} is the quoting style (@pxref{Formatting the file names}).
5892
5893 Here is an actual example:
5894
5895 @example
5896 $ mkdir -p a/sub/deeper a/sub2
5897 $ touch a/f1 a/f2
5898 $ touch a/sub/deeper/file
5899 $ ls -gloRF --dired a
5900   a:
5901   total 8
5902   -rw-r--r-- 1    0 Jun 10 12:27 f1
5903   -rw-r--r-- 1    0 Jun 10 12:27 f2
5904   drwxr-xr-x 3 4096 Jun 10 12:27 sub/
5905   drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
5906
5907   a/sub:
5908   total 4
5909   drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
5910
5911   a/sub/deeper:
5912   total 0
5913   -rw-r--r-- 1 0 Jun 10 12:27 file
5914
5915   a/sub2:
5916   total 0
5917 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
5918 //SUBDIRED// 2 3 167 172 228 240 290 296
5919 //DIRED-OPTIONS// --quoting-style=literal
5920 @end example
5921
5922 Note that the pairs of offsets on the @samp{//DIRED//} line above delimit
5923 these names: @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper},
5924 @file{file}.
5925 The offsets on the @samp{//SUBDIRED//} line delimit the following
5926 directory names: @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}.
5927
5928 Here is an example of how to extract the fifth entry name, @samp{deeper},
5929 corresponding to the pair of offsets, 222 and 228:
5930
5931 @example
5932 $ ls -gloRF --dired a > out
5933 $ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo
5934 deeper
5935 @end example
5936
5937 Note that although the listing above includes a trailing slash
5938 for the @samp{deeper} entry, the offsets select the name without
5939 the trailing slash.  However, if you invoke @command{ls} with @option{--dired}
5940 along with an option like @option{--escape} (aka @option{-b}) and operate
5941 on a file whose name contains special characters, notice that the backslash
5942 @emph{is} included:
5943
5944 @example
5945 $ touch 'a b'
5946 $ ls -blog --dired 'a b'
5947   -rw-r--r-- 1 0 Jun 10 12:28 a\ b
5948 //DIRED// 30 34
5949 //DIRED-OPTIONS// --quoting-style=escape
5950 @end example
5951
5952 If you use a quoting style that adds quote marks
5953 (e.g., @option{--quoting-style=c}), then the offsets include the quote marks.
5954 So beware that the user may select the quoting style via the environment
5955 variable @env{QUOTING_STYLE}.  Hence, applications using @option{--dired}
5956 should either specify an explicit @option{--quoting-style=literal} option
5957 (aka @option{-N} or @option{--literal}) on the command line, or else be
5958 prepared to parse the escaped names.
5959
5960 @item --full-time
5961 @opindex --full-time
5962 Produce long format directory listings, and list times in full.  It is
5963 equivalent to using @option{--format=long} with
5964 @option{--time-style=full-iso} (@pxref{Formatting file timestamps}).
5965
5966 @item -g
5967 @opindex -g
5968 Produce long format directory listings, but don't display owner information.
5969
5970 @item -G
5971 @itemx --no-group
5972 @opindex -G
5973 @opindex --no-group
5974 Inhibit display of group information in a long format directory listing.
5975 (This is the default in some non-@sc{gnu} versions of @command{ls}, so we
5976 provide this option for compatibility.)
5977
5978 @optHumanReadable
5979
5980 @item -i
5981 @itemx --inode
5982 @opindex -i
5983 @opindex --inode
5984 @cindex inode number, printing
5985 Print the inode number (also called the file serial number and index
5986 number) of each file to the left of the file name.  (This number
5987 uniquely identifies each file within a particular file system.)
5988
5989 @item -l
5990 @itemx --format=long
5991 @itemx --format=verbose
5992 @opindex -l
5993 @opindex --format
5994 @opindex long ls @r{format}
5995 @opindex verbose ls @r{format}
5996 In addition to the name of each file, print the file type, file mode bits,
5997 number of hard links, owner name, group name, size, and
5998 timestamp (@pxref{Formatting file timestamps}), normally
5999 the modification time.  Print question marks for information that
6000 cannot be determined.
6001
6002 Normally the size is printed as a byte count without punctuation, but
6003 this can be overridden (@pxref{Block size}).  For example, @option{-h}
6004 prints an abbreviated, human-readable count, and
6005 @samp{--block-size="'1"} prints a byte count with the thousands
6006 separator of the current locale.
6007
6008 For each directory that is listed, preface the files with a line
6009 @samp{total @var{blocks}}, where @var{blocks} is the total disk allocation
6010 for all files in that directory.  The block size currently defaults to 1024
6011 bytes, but this can be overridden (@pxref{Block size}).
6012 The @var{blocks} computed counts each hard link separately;
6013 this is arguably a deficiency.
6014
6015 The file type is one of the following characters:
6016
6017 @c The commented-out entries are ones we're not sure about.
6018
6019 @table @samp
6020 @item -
6021 regular file
6022 @item b
6023 block special file
6024 @item c
6025 character special file
6026 @item C
6027 high performance (``contiguous data'') file
6028 @item d
6029 directory
6030 @item D
6031 door (Solaris 2.5 and up)
6032 @c @item F
6033 @c semaphore, if this is a distinct file type
6034 @item l
6035 symbolic link
6036 @c @item m
6037 @c multiplexed file (7th edition Unix; obsolete)
6038 @item M
6039 off-line (``migrated'') file (Cray DMF)
6040 @item n
6041 network special file (HP-UX)
6042 @item p
6043 FIFO (named pipe)
6044 @item P
6045 port (Solaris 10 and up)
6046 @c @item Q
6047 @c message queue, if this is a distinct file type
6048 @item s
6049 socket
6050 @c @item S
6051 @c shared memory object, if this is a distinct file type
6052 @c @item T
6053 @c typed memory object, if this is a distinct file type
6054 @c @item w
6055 @c whiteout (4.4BSD; not implemented)
6056 @item ?
6057 some other file type
6058 @end table
6059
6060 @cindex permissions, output by @command{ls}
6061 The file mode bits listed are similar to symbolic mode specifications
6062 (@pxref{Symbolic Modes}).  But @command{ls} combines multiple bits into the
6063 third character of each set of permissions as follows:
6064
6065 @table @samp
6066 @item s
6067 If the set-user-ID or set-group-ID bit and the corresponding executable bit
6068 are both set.
6069
6070 @item S
6071 If the set-user-ID or set-group-ID bit is set but the corresponding
6072 executable bit is not set.
6073
6074 @item t
6075 If the restricted deletion flag or sticky bit, and the
6076 other-executable bit, are both set.  The restricted deletion flag is
6077 another name for the sticky bit.  @xref{Mode Structure}.
6078
6079 @item T
6080 If the restricted deletion flag or sticky bit is set but the
6081 other-executable bit is not set.
6082
6083 @item x
6084 If the executable bit is set and none of the above apply.
6085
6086 @item -
6087 Otherwise.
6088 @end table
6089
6090 Following the file mode bits is a single character that specifies
6091 whether an alternate access method such as an access control list
6092 applies to the file.  When the character following the file mode bits is a
6093 space, there is no alternate access method.  When it is a printing
6094 character, then there is such a method.
6095
6096 For a file with an extended access control list, a @samp{+} character is
6097 listed.  Basic access control lists are equivalent to the permissions
6098 listed, and are not considered an alternate access method.
6099
6100 @item -n
6101 @itemx --numeric-uid-gid
6102 @opindex -n
6103 @opindex --numeric-uid-gid
6104 @cindex numeric uid and gid
6105 @cindex numeric user and group IDs
6106 Produce long format directory listings, but
6107 display numeric user and group IDs instead of the owner and group names.
6108
6109 @item -o
6110 @opindex -o
6111 Produce long format directory listings, but don't display group information.
6112 It is equivalent to using @option{--format=long} with @option{--no-group} .
6113
6114 @item -s
6115 @itemx --size
6116 @opindex -s
6117 @opindex --size
6118 @cindex disk allocation
6119 @cindex size of files, reporting
6120 Print the disk allocation of each file to the left of the file name.
6121 This is the amount of disk space used by the file, which is usually a
6122 bit more than the file's size, but it can be less if the file has holes.
6123
6124 Normally the disk allocation is printed in units of
6125 1024 bytes, but this can be overridden (@pxref{Block size}).
6126
6127 @cindex NFS mounts from BSD to HP-UX
6128 For files that are NFS-mounted from an HP-UX system to a BSD system,
6129 this option reports sizes that are half the correct values.  On HP-UX
6130 systems, it reports sizes that are twice the correct values for files
6131 that are NFS-mounted from BSD systems.  This is due to a flaw in HP-UX;
6132 it also affects the HP-UX @command{ls} program.
6133
6134 @optSi
6135
6136 @end table
6137
6138
6139 @node Sorting the output
6140 @subsection Sorting the output
6141
6142 @cindex sorting @command{ls} output
6143 These options change the order in which @command{ls} sorts the information
6144 it outputs.  By default, sorting is done by character code
6145 (e.g., @acronym{ASCII} order).
6146
6147 @table @samp
6148
6149 @item -c
6150 @itemx --time=ctime
6151 @itemx --time=status
6152 @opindex -c
6153 @opindex --time
6154 @opindex ctime@r{, printing or sorting by}
6155 @opindex status time@r{, printing or sorting by}
6156 @opindex use time@r{, printing or sorting files by}
6157 If the long listing format (e.g., @option{-l}, @option{-o}) is being used,
6158 print the status change time (the @samp{ctime} in the inode) instead of
6159 the modification time.
6160 When explicitly sorting by time (@option{--sort=time} or @option{-t})
6161 or when not using a long listing format,
6162 sort according to the status change time.
6163
6164 @item -f
6165 @opindex -f
6166 @cindex unsorted directory listing
6167 @cindex directory order, listing by
6168 Primarily, like @option{-U}---do not sort; list the files in whatever
6169 order they are stored in the directory.  But also enable @option{-a} (list
6170 all files) and disable @option{-l}, @option{--color}, and @option{-s} (if they
6171 were specified before the @option{-f}).
6172
6173 @item -r
6174 @itemx --reverse
6175 @opindex -r
6176 @opindex --reverse
6177 @cindex reverse sorting
6178 Reverse whatever the sorting method is---e.g., list files in reverse
6179 alphabetical order, youngest first, smallest first, or whatever.
6180
6181 @item -S
6182 @itemx --sort=size
6183 @opindex -S
6184 @opindex --sort
6185 @opindex size of files@r{, sorting files by}
6186 Sort by file size, largest first.
6187
6188 @item -t
6189 @itemx --sort=time
6190 @opindex -t
6191 @opindex --sort
6192 @opindex modification time@r{, sorting files by}
6193 Sort by modification time (the @samp{mtime} in the inode), newest first.
6194
6195 @item -u
6196 @itemx --time=atime
6197 @itemx --time=access
6198 @itemx --time=use
6199 @opindex -u
6200 @opindex --time
6201 @opindex use time@r{, printing or sorting files by}
6202 @opindex atime@r{, printing or sorting files by}
6203 @opindex access time@r{, printing or sorting files by}
6204 If the long listing format (e.g., @option{--format=long}) is being used,
6205 print the last access time (the @samp{atime} in the inode).
6206 When explicitly sorting by time (@option{--sort=time} or @option{-t})
6207 or when not using a long listing format, sort according to the access time.
6208
6209 @item -U
6210 @itemx --sort=none
6211 @opindex -U
6212 @opindex --sort
6213 @opindex none@r{, sorting option for @command{ls}}
6214 Do not sort; list the files in whatever order they are
6215 stored in the directory.  (Do not do any of the other unrelated things
6216 that @option{-f} does.)  This is especially useful when listing very large
6217 directories, since not doing any sorting can be noticeably faster.
6218
6219 @item -v
6220 @itemx --sort=version
6221 @opindex -v
6222 @opindex --sort
6223 @opindex version@r{, sorting option for @command{ls}}
6224 Sort by version name and number, lowest first.  It behaves like a default
6225 sort, except that each sequence of decimal digits is treated numerically
6226 as an index/version number.  (@xref{More details about version sort}.)
6227
6228 @item -X
6229 @itemx --sort=extension
6230 @opindex -X
6231 @opindex --sort
6232 @opindex extension@r{, sorting files by}
6233 Sort directory contents alphabetically by file extension (characters
6234 after the last @samp{.}); files with no extension are sorted first.
6235
6236 @end table
6237
6238
6239 @node More details about version sort
6240 @subsection More details about version sort
6241
6242 The version sort takes into account the fact that file names frequently include
6243 indices or version numbers.  Standard sorting functions usually do not produce
6244 the ordering that people expect because comparisons are made on a
6245 character-by-character basis.  The version
6246 sort addresses this problem, and is especially useful when browsing
6247 directories that contain many files with indices/version numbers in their
6248 names:
6249
6250 @example
6251 $ ls -1            $ ls -1v
6252 foo.zml-1.gz       foo.zml-1.gz
6253 foo.zml-100.gz     foo.zml-2.gz
6254 foo.zml-12.gz      foo.zml-6.gz
6255 foo.zml-13.gz      foo.zml-12.gz
6256 foo.zml-2.gz       foo.zml-13.gz
6257 foo.zml-25.gz      foo.zml-25.gz
6258 foo.zml-6.gz       foo.zml-100.gz
6259 @end example
6260
6261 Note also that numeric parts with leading zeros are considered as
6262 fractional one:
6263
6264 @example
6265 $ ls -1            $ ls -1v
6266 abc-1.007.tgz      abc-1.007.tgz
6267 abc-1.012b.tgz     abc-1.01a.tgz
6268 abc-1.01a.tgz      abc-1.012b.tgz
6269 @end example
6270
6271 This functionality is implemented using the @code{strverscmp} function.
6272 @xref{String/Array Comparison, , , libc, The GNU C Library Reference Manual}.
6273 One result of that implementation decision is that @code{ls -v} does not
6274 use the locale category, @env{LC_COLLATE}.  As a result, non-numeric prefixes
6275 are sorted as if @env{LC_COLLATE} were set to @code{C}.
6276
6277 @node General output formatting
6278 @subsection General output formatting
6279
6280 These options affect the appearance of the overall output.
6281
6282 @table @samp
6283
6284 @item -1
6285 @itemx --format=single-column
6286 @opindex -1
6287 @opindex --format
6288 @opindex single-column @r{output of files}
6289 List one file per line.  This is the default for @command{ls} when standard
6290 output is not a terminal.
6291
6292 @item -C
6293 @itemx --format=vertical
6294 @opindex -C
6295 @opindex --format
6296 @opindex vertical @r{sorted files in columns}
6297 List files in columns, sorted vertically.  This is the default for
6298 @command{ls} if standard output is a terminal.  It is always the default
6299 for the @command{dir} program.
6300 @sc{gnu} @command{ls} uses variable width columns to display as many files as
6301 possible in the fewest lines.
6302
6303 @item --color [=@var{when}]
6304 @opindex --color
6305 @cindex color, distinguishing file types with
6306 Specify whether to use color for distinguishing file types.  @var{when}
6307 may be omitted, or one of:
6308 @itemize @bullet
6309 @item none
6310 @vindex none @r{color option}
6311 - Do not use color at all.  This is the default.
6312 @item auto
6313 @vindex auto @r{color option}
6314 @cindex terminal, using color iff
6315 - Only use color if standard output is a terminal.
6316 @item always
6317 @vindex always @r{color option}
6318 - Always use color.
6319 @end itemize
6320 Specifying @option{--color} and no @var{when} is equivalent to
6321 @option{--color=always}.
6322 Piping a colorized listing through a pager like @command{more} or
6323 @command{less} usually produces unreadable results.  However, using
6324 @code{more -f} does seem to work.
6325
6326 @item -F
6327 @itemx --classify
6328 @itemx --indicator-style=classify
6329 @opindex -F
6330 @opindex --classify
6331 @opindex --indicator-style
6332 @cindex file type and executables, marking
6333 @cindex executables and file type, marking
6334 Append a character to each file name indicating the file type.  Also,
6335 for regular files that are executable, append @samp{*}.  The file type
6336 indicators are @samp{/} for directories, @samp{@@} for symbolic links,
6337 @samp{|} for FIFOs, @samp{=} for sockets, @samp{>} for doors,
6338 and nothing for regular files.
6339 @c The following sentence is the same as the one for -d.
6340 Do not follow symbolic links listed on the
6341 command line unless the @option{--dereference-command-line} (@option{-H}),
6342 @option{--dereference} (@option{-L}), or
6343 @option{--dereference-command-line-symlink-to-dir} options are specified.
6344
6345 @item --file-type
6346 @itemx --indicator-style=file-type
6347 @opindex --file-type
6348 @opindex --indicator-style
6349 @cindex file type, marking
6350 Append a character to each file name indicating the file type.  This is
6351 like @option{-F}, except that executables are not marked.
6352
6353 @item --indicator-style=@var{word}
6354 @opindex --indicator-style
6355 Append a character indicator with style @var{word} to entry names,
6356 as follows:
6357
6358 @table @samp
6359 @item none
6360 Do not append any character indicator; this is the default.
6361 @item slash
6362 Append @samp{/} for directories.  This is the same as the @option{-p}
6363 option.
6364 @item file-type
6365 Append @samp{/} for directories, @samp{@@} for symbolic links, @samp{|}
6366 for FIFOs, @samp{=} for sockets, and nothing for regular files.  This is
6367 the same as the @option{--file-type} option.
6368 @item classify
6369 Append @samp{*} for executable regular files, otherwise behave as for
6370 @samp{file-type}.  This is the same as the @option{-F} or
6371 @option{--classify} option.
6372 @end table
6373
6374 @item -k
6375 @opindex -k
6376 Print file sizes in 1024-byte blocks, overriding the default block
6377 size (@pxref{Block size}).
6378 This option is equivalent to @option{--block-size=1K}.
6379
6380 @item -m
6381 @itemx --format=commas
6382 @opindex -m
6383 @opindex --format
6384 @opindex commas@r{, outputting between files}
6385 List files horizontally, with as many as will fit on each line,
6386 separated by @samp{, } (a comma and a space).
6387
6388 @item -p
6389 @itemx --indicator-style=slash
6390 @opindex -p
6391 @opindex --indicator-style
6392 @cindex file type, marking
6393 Append a @samp{/} to directory names.
6394
6395 @item -x
6396 @itemx --format=across
6397 @itemx --format=horizontal
6398 @opindex -x
6399 @opindex --format
6400 @opindex across@r{, listing files}
6401 @opindex horizontal@r{, listing files}
6402 List the files in columns, sorted horizontally.
6403
6404 @item -T @var{cols}
6405 @itemx --tabsize=@var{cols}
6406 @opindex -T
6407 @opindex --tabsize
6408 Assume that each tab stop is @var{cols} columns wide.  The default is 8.
6409 @command{ls} uses tabs where possible in the output, for efficiency.  If
6410 @var{cols} is zero, do not use tabs at all.
6411
6412 @item -w
6413 @itemx --width=@var{cols}
6414 @opindex -w
6415 @opindex --width
6416 @vindex COLUMNS
6417 Assume the screen is @var{cols} columns wide.  The default is taken
6418 from the terminal settings if possible; otherwise the environment
6419 variable @env{COLUMNS} is used if it is set; otherwise the default
6420 is 80.
6421
6422 @end table
6423
6424
6425 @node Formatting file timestamps
6426 @subsection Formatting file timestamps
6427
6428 By default, file timestamps are listed in abbreviated form.  Most
6429 locales use a timestamp like @samp{2002-03-30 23:45}.  However, the
6430 default @acronym{POSIX} locale uses a date like @samp{Mar 30@ @ 2002}
6431 for non-recent timestamps, and a date-without-year and time like
6432 @samp{Mar 30 23:45} for recent timestamps.
6433
6434 A timestamp is considered to be @dfn{recent} if it is less than six
6435 months old, and is not dated in the future.  If a timestamp dated
6436 today is not listed in recent form, the timestamp is in the future,
6437 which means you probably have clock skew problems which may break
6438 programs like @command{make} that rely on file timestamps.
6439
6440 @vindex TZ
6441 Time stamps are listed according to the time zone rules specified by
6442 the @env{TZ} environment variable, or by the system default rules if
6443 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
6444 with @env{TZ}, libc, The GNU C Library}.
6445
6446 The following option changes how file timestamps are printed.
6447
6448 @table @samp
6449 @item --time-style=@var{style}
6450 @opindex --time-style
6451 @cindex time style
6452 List timestamps in style @var{style}.  The @var{style} should
6453 be one of the following:
6454
6455 @table @samp
6456 @item +@var{format}
6457 @vindex LC_TIME
6458 List timestamps using @var{format}, where @var{format} is interpreted
6459 like the format argument of @command{date} (@pxref{date invocation}).
6460 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
6461 @command{ls} to list timestamps like @samp{2002-03-30 23:45:56}.  As
6462 with @command{date}, @var{format}'s interpretation is affected by the
6463 @env{LC_TIME} locale category.
6464
6465 If @var{format} contains two format strings separated by a newline,
6466 the former is used for non-recent files and the latter for recent
6467 files; if you want output columns to line up, you may need to insert
6468 spaces in one of the two formats.
6469
6470 @item full-iso
6471 List timestamps in full using @acronym{ISO} 8601 date, time, and time zone
6472 format with nanosecond precision, e.g., @samp{2002-03-30
6473 23:45:56.477817180 -0700}.  This style is equivalent to
6474 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
6475
6476 This is useful because the time output includes all the information that
6477 is available from the operating system.  For example, this can help
6478 explain @command{make}'s behavior, since @acronym{GNU} @command{make}
6479 uses the full timestamp to determine whether a file is out of date.
6480
6481 @item long-iso
6482 List @acronym{ISO} 8601 date and time in minutes, e.g.,
6483 @samp{2002-03-30 23:45}.  These timestamps are shorter than
6484 @samp{full-iso} timestamps, and are usually good enough for everyday
6485 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
6486
6487 @item iso
6488 List @acronym{ISO} 8601 dates for non-recent timestamps (e.g.,
6489 @samp{2002-03-30@ }), and @acronym{ISO} 8601 month, day, hour, and
6490 minute for recent timestamps (e.g., @samp{03-30 23:45}).  These
6491 timestamps are uglier than @samp{long-iso} timestamps, but they carry
6492 nearly the same information in a smaller space and their brevity helps
6493 @command{ls} output fit within traditional 80-column output lines.
6494 The following two @command{ls} invocations are equivalent:
6495
6496 @example
6497 newline='
6498 '
6499 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
6500 ls -l --time-style="iso"
6501 @end example
6502
6503 @item locale
6504 @vindex LC_TIME
6505 List timestamps in a locale-dependent form.  For example, a Finnish
6506 locale might list non-recent timestamps like @samp{maalis 30@ @ 2002}
6507 and recent timestamps like @samp{maalis 30 23:45}.  Locale-dependent
6508 timestamps typically consume more space than @samp{iso} timestamps and
6509 are harder for programs to parse because locale conventions vary so
6510 widely, but they are easier for many people to read.
6511
6512 The @env{LC_TIME} locale category specifies the timestamp format.  The
6513 default @acronym{POSIX} locale uses timestamps like @samp{Mar 30@
6514 @ 2002} and @samp{Mar 30 23:45}; in this locale, the following two
6515 @command{ls} invocations are equivalent:
6516
6517 @example
6518 newline='
6519 '
6520 ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
6521 ls -l --time-style="locale"
6522 @end example
6523
6524 Other locales behave differently.  For example, in a German locale,
6525 @option{--time-style="locale"} might be equivalent to
6526 @option{--time-style="+%e. %b %Y $newline%e. %b %H:%M"}
6527 and might generate timestamps like @samp{30. M@"ar 2002@ } and
6528 @samp{30. M@"ar 23:45}.
6529
6530 @item posix-@var{style}
6531 @vindex LC_TIME
6532 List @acronym{POSIX}-locale timestamps if the @env{LC_TIME} locale
6533 category is @acronym{POSIX}, @var{style} timestamps otherwise.  For
6534 example, the @samp{posix-long-iso} style lists
6535 timestamps like @samp{Mar 30@ @ 2002} and @samp{Mar 30 23:45} when in
6536 the @acronym{POSIX} locale, and like @samp{2002-03-30 23:45} otherwise.
6537 @end table
6538 @end table
6539
6540 @vindex TIME_STYLE
6541 You can specify the default value of the @option{--time-style} option
6542 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
6543 the default style is @samp{locale}.  @acronym{GNU} Emacs 21.3 and
6544 later use the @option{--dired} option and therefore can parse any date
6545 format, but if you are using Emacs 21.1 or 21.2 and specify a
6546 non-@acronym{POSIX} locale you may need to set
6547 @samp{TIME_STYLE="posix-long-iso"}.
6548
6549 To avoid certain denial-of-service attacks, timestamps that would be
6550 longer than 1000 bytes may be treated as errors.
6551
6552
6553 @node Formatting the file names
6554 @subsection Formatting the file names
6555
6556 These options change how file names themselves are printed.
6557
6558 @table @samp
6559
6560 @item -b
6561 @itemx --escape
6562 @itemx --quoting-style=escape
6563 @opindex -b
6564 @opindex --escape
6565 @opindex --quoting-style
6566 @cindex backslash sequences for file names
6567 Quote nongraphic characters in file names using alphabetic and octal
6568 backslash sequences like those used in C.
6569
6570 @item -N
6571 @itemx --literal
6572 @itemx --quoting-style=literal
6573 @opindex -N
6574 @opindex --literal
6575 @opindex --quoting-style
6576 Do not quote file names.  However, with @command{ls} nongraphic
6577 characters are still printed as question marks if the output is a
6578 terminal and you do not specify the @option{--show-control-chars}
6579 option.
6580
6581 @item -q
6582 @itemx --hide-control-chars
6583 @opindex -q
6584 @opindex --hide-control-chars
6585 Print question marks instead of nongraphic characters in file names.
6586 This is the default if the output is a terminal and the program is
6587 @command{ls}.
6588
6589 @item -Q
6590 @itemx --quote-name
6591 @itemx --quoting-style=c
6592 @opindex -Q
6593 @opindex --quote-name
6594 @opindex --quoting-style
6595 Enclose file names in double quotes and quote nongraphic characters as
6596 in C.
6597
6598 @item --quoting-style=@var{word}
6599 @opindex --quoting-style
6600 @cindex quoting style
6601 Use style @var{word} to quote file names and other strings that may
6602 contain arbitrary characters.  The @var{word} should
6603 be one of the following:
6604
6605 @table @samp
6606 @item literal
6607 Output strings as-is; this is the same as the @option{-N} or
6608 @option{--literal} option.
6609 @item shell
6610 Quote strings for the shell if they contain shell metacharacters or would
6611 cause ambiguous output.
6612 The quoting is suitable for @acronym{POSIX}-compatible shells like
6613 @command{bash}, but it does not always work for incompatible shells
6614 like @command{csh}.
6615 @item shell-always
6616 Quote strings for the shell, even if they would normally not require quoting.
6617 @item c
6618 Quote strings as for C character string literals, including the
6619 surrounding double-quote characters; this is the same as the
6620 @option{-Q} or @option{--quote-name} option.
6621 @item escape
6622 Quote strings as for C character string literals, except omit the
6623 surrounding double-quote
6624 characters; this is the same as the @option{-b} or @option{--escape} option.
6625 @item clocale
6626 Quote strings as for C character string literals, except use
6627 surrounding quotation marks appropriate for the
6628 locale.
6629 @item locale
6630 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
6631 Quote strings as for C character string literals, except use
6632 surrounding quotation marks appropriate for the locale, and quote
6633 @t{`like this'} instead of @t{"like
6634 this"} in the default C locale.  This looks nicer on many displays.
6635 @end table
6636
6637 You can specify the default value of the @option{--quoting-style} option
6638 with the environment variable @env{QUOTING_STYLE}.  If that environment
6639 variable is not set, the default value is @samp{literal}, but this
6640 default may change to @samp{shell} in a future version of this package.
6641
6642 @item --show-control-chars
6643 @opindex --show-control-chars
6644 Print nongraphic characters as-is in file names.
6645 This is the default unless the output is a terminal and the program is
6646 @command{ls}.
6647
6648 @end table
6649
6650
6651 @node dir invocation
6652 @section @command{dir}: Briefly list directory contents
6653
6654 @pindex dir
6655 @cindex directory listing, brief
6656
6657 @command{dir} is equivalent to @code{ls -C
6658 -b}; that is, by default files are listed in columns, sorted vertically,
6659 and special characters are represented by backslash escape sequences.
6660
6661 @xref{ls invocation, @command{ls}}.
6662
6663
6664 @node vdir invocation
6665 @section @command{vdir}: Verbosely list directory contents
6666
6667 @pindex vdir
6668 @cindex directory listing, verbose
6669
6670 @command{vdir} is equivalent to @code{ls -l
6671 -b}; that is, by default files are listed in long format and special
6672 characters are represented by backslash escape sequences.
6673
6674 @node dircolors invocation
6675 @section @command{dircolors}: Color setup for @command{ls}
6676
6677 @pindex dircolors
6678 @cindex color setup
6679 @cindex setup for color
6680
6681 @command{dircolors} outputs a sequence of shell commands to set up the
6682 terminal for color output from @command{ls} (and @command{dir}, etc.).
6683 Typical usage:
6684
6685 @example
6686 eval "`dircolors [@var{option}]@dots{} [@var{file}]`"
6687 @end example
6688
6689 If @var{file} is specified, @command{dircolors} reads it to determine which
6690 colors to use for which file types and extensions.  Otherwise, a
6691 precompiled database is used.  For details on the format of these files,
6692 run @samp{dircolors --print-database}.
6693
6694 @vindex LS_COLORS
6695 @vindex SHELL @r{environment variable, and color}
6696 The output is a shell command to set the @env{LS_COLORS} environment
6697 variable.  You can specify the shell syntax to use on the command line,
6698 or @command{dircolors} will guess it from the value of the @env{SHELL}
6699 environment variable.
6700
6701 The program accepts the following options.  Also see @ref{Common options}.
6702
6703 @table @samp
6704 @item -b
6705 @itemx --sh
6706 @itemx --bourne-shell
6707 @opindex -b
6708 @opindex --sh
6709 @opindex --bourne-shell
6710 @cindex Bourne shell syntax for color setup
6711 @cindex @command{sh} syntax for color setup
6712 Output Bourne shell commands.  This is the default if the @env{SHELL}
6713 environment variable is set and does not end with @samp{csh} or
6714 @samp{tcsh}.
6715
6716 @item -c
6717 @itemx --csh
6718 @itemx --c-shell
6719 @opindex -c
6720 @opindex --csh
6721 @opindex --c-shell
6722 @cindex C shell syntax for color setup
6723 @cindex @command{csh} syntax for color setup
6724 Output C shell commands.  This is the default if @code{SHELL} ends with
6725 @command{csh} or @command{tcsh}.
6726
6727 @item -p
6728 @itemx --print-database
6729 @opindex -p
6730 @opindex --print-database
6731 @cindex color database, printing
6732 @cindex database for color setup, printing
6733 @cindex printing color database
6734 Print the (compiled-in) default color configuration database.  This
6735 output is itself a valid configuration file, and is fairly descriptive
6736 of the possibilities.
6737
6738 @end table
6739
6740 @exitstatus
6741
6742
6743 @node Basic operations
6744 @chapter Basic operations
6745
6746 @cindex manipulating files
6747
6748 This chapter describes the commands for basic file manipulation:
6749 copying, moving (renaming), and deleting (removing).
6750
6751 @menu
6752 * cp invocation::               Copy files.
6753 * dd invocation::               Convert and copy a file.
6754 * install invocation::          Copy files and set attributes.
6755 * mv invocation::               Move (rename) files.
6756 * rm invocation::               Remove files or directories.
6757 * shred invocation::            Remove files more securely.
6758 @end menu
6759
6760
6761 @node cp invocation
6762 @section @command{cp}: Copy files and directories
6763
6764 @pindex cp
6765 @cindex copying files and directories
6766 @cindex files, copying
6767 @cindex directories, copying
6768
6769 @command{cp} copies files (or, optionally, directories).  The copy is
6770 completely independent of the original.  You can either copy one file to
6771 another, or copy arbitrarily many files to a destination directory.
6772 Synopses:
6773
6774 @example
6775 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
6776 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
6777 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
6778 @end example
6779
6780 @itemize @bullet
6781 @item
6782 If two file names are given, @command{cp} copies the first file to the
6783 second.
6784
6785 @item
6786 If the @option{--target-directory} (@option{-t}) option is given, or
6787 failing that if the last file is a directory and the
6788 @option{--no-target-directory} (@option{-T}) option is not given,
6789 @command{cp} copies each @var{source} file to the specified directory,
6790 using the @var{source}s' names.
6791 @end itemize
6792
6793 Generally, files are written just as they are read.  For exceptions,
6794 see the @option{--sparse} option below.
6795
6796 By default, @command{cp} does not copy directories.  However, the
6797 @option{-R}, @option{-a}, and @option{-r} options cause @command{cp} to
6798 copy recursively by descending into source directories and copying files
6799 to corresponding destination directories.
6800
6801 By default, @command{cp} follows symbolic links only when not copying
6802 recursively.  This default can be overridden with the
6803 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
6804 (@option{-L}), @option{--no-dereference} (@option{-P}), and
6805 @option{-H} options.  If more than one of these options is specified,
6806 the last one silently overrides the others.
6807
6808 By default, @command{cp} copies the contents of special files only
6809 when not copying recursively.  This default can be overridden with the
6810 @option{--copy-contents} option.
6811
6812 @cindex self-backups
6813 @cindex backups, making only
6814 @command{cp} generally refuses to copy a file onto itself, with the
6815 following exception: if @option{--force --backup} is specified with
6816 @var{source} and @var{dest} identical, and referring to a regular file,
6817 @command{cp} will make a backup file, either regular or numbered, as
6818 specified in the usual ways (@pxref{Backup options}).  This is useful when
6819 you simply want to make a backup of an existing file before changing it.
6820
6821 The program accepts the following options.  Also see @ref{Common options}.
6822
6823 @table @samp
6824 @item -a
6825 @itemx --archive
6826 @opindex -a
6827 @opindex --archive
6828 Preserve as much as possible of the structure and attributes of the
6829 original files in the copy (but do not attempt to preserve internal
6830 directory structure; i.e., @samp{ls -U} may list the entries in a copied
6831 directory in a different order).
6832 Equivalent to @option{-dpPR}.
6833
6834 @item -b
6835 @itemx @w{@kbd{--backup}[=@var{method}]}
6836 @opindex -b
6837 @opindex --backup
6838 @vindex VERSION_CONTROL
6839 @cindex backups, making
6840 @xref{Backup options}.
6841 Make a backup of each file that would otherwise be overwritten or removed.
6842 As a special case, @command{cp} makes a backup of @var{source} when the force
6843 and backup options are given and @var{source} and @var{dest} are the same
6844 name for an existing, regular file.  One useful application of this
6845 combination of options is this tiny Bourne shell script:
6846
6847 @example
6848 #!/bin/sh
6849 # Usage: backup FILE...
6850 # Create a @sc{gnu}-style backup of each listed FILE.
6851 for i; do
6852   cp --backup --force -- "$i" "$i"
6853 done
6854 @end example
6855
6856 @item --copy-contents
6857 @cindex directories, copying recursively
6858 @cindex copying directories recursively
6859 @cindex recursively copying directories
6860 @cindex non-directories, copying as special files
6861 If copying recursively, copy the contents of any special files (e.g.,
6862 FIFOs and device files) as if they were regular files.  This means
6863 trying to read the data in each source file and writing it to the
6864 destination.  It is usually a mistake to use this option, as it
6865 normally has undesirable effects on special files like FIFOs and the
6866 ones typically found in the @file{/dev} directory.  In most cases,
6867 @code{cp -R --copy-contents} will hang indefinitely trying to read
6868 from FIFOs and special files like @file{/dev/console}, and it will
6869 fill up your destination disk if you use it to copy @file{/dev/zero}.
6870 This option has no effect unless copying recursively, and it does not
6871 affect the copying of symbolic links.
6872
6873 @item -d
6874 @opindex -d
6875 @cindex symbolic links, copying
6876 @cindex hard links, preserving
6877 Copy symbolic links as symbolic links rather than copying the files that
6878 they point to, and preserve hard links between source files in the copies.
6879 Equivalent to @option{--no-dereference --preserve=links}.
6880
6881 @item -f
6882 @itemx --force
6883 @opindex -f
6884 @opindex --force
6885 When copying without this option and an existing destination file cannot
6886 be opened for writing, the copy fails.  However, with @option{--force}),
6887 when a destination file cannot be opened, @command{cp} then unlinks it and
6888 tries to open it again.  Contrast this behavior with that enabled by
6889 @option{--link} and @option{--symbolic-link}, whereby the destination file
6890 is never opened but rather is unlinked unconditionally.  Also see the
6891 description of @option{--remove-destination}.
6892
6893 @item -H
6894 @opindex -H
6895 If a command line argument specifies a symbolic link, then copy the
6896 file it points to rather than the symbolic link itself.  However,
6897 copy (preserving its nature) any symbolic link that is encountered
6898 via recursive traversal.
6899
6900 @item -i
6901 @itemx --interactive
6902 @opindex -i
6903 @opindex --interactive
6904 Prompt whether to overwrite existing regular destination files.
6905
6906 @item -l
6907 @itemx --link
6908 @opindex -l
6909 @opindex --link
6910 Make hard links instead of copies of non-directories.
6911
6912 @item -L
6913 @itemx --dereference
6914 @opindex -L
6915 @opindex --dereference
6916 Always follow symbolic links.
6917
6918 @item -P
6919 @itemx --no-dereference
6920 @opindex -P
6921 @opindex --no-dereference
6922 @cindex symbolic links, copying
6923 Copy symbolic links as symbolic links rather than copying the files that
6924 they point to.
6925
6926 @item -p
6927 @itemx @w{@kbd{--preserve}[=@var{attribute_list}]}
6928 @opindex -p
6929 @opindex --preserve
6930 @cindex file information, preserving
6931 Preserve the specified attributes of the original files.
6932 If specified, the @var{attribute_list} must be a comma-separated list
6933 of one or more of the following strings:
6934
6935 @table @samp
6936 @itemx mode
6937 Preserve the file mode bits and access control lists.
6938 @itemx ownership
6939 Preserve the owner and group.  On most modern systems,
6940 only users with appropriate privileges may change the owner of a file,
6941 and ordinary users
6942 may preserve the group ownership of a file only if they happen to be
6943 a member of the desired group.
6944 @itemx timestamps
6945 Preserve the times of last access and last modification.
6946 @itemx links
6947 Preserve in the destination files
6948 any links between corresponding source files.
6949 @c Give examples illustrating how hard links are preserved.
6950 @c Also, show how soft links map to hard links with -L and -H.
6951 @itemx all
6952 Preserve all file attributes.
6953 Equivalent to specifying all of the above.
6954 @end table
6955
6956 Using @option{--preserve} with no @var{attribute_list} is equivalent
6957 to @option{--preserve=mode,ownership,timestamps}.
6958
6959 In the absence of this option, each destination file is created with the
6960 mode bits of the corresponding source file, minus the bits set in the
6961 umask and minus the set-user-ID and set-group-ID bits.
6962 @xref{File permissions}.
6963
6964 @itemx @w{@kbd{--no-preserve}=@var{attribute_list}}
6965 @cindex file information, preserving
6966 Do not preserve the specified attributes.  The @var{attribute_list}
6967 has the same form as for @option{--preserve}.
6968
6969 @itemx --parents
6970 @opindex --parents
6971 @cindex parent directories and @command{cp}
6972 Form the name of each destination file by appending to the target
6973 directory a slash and the specified name of the source file.  The last
6974 argument given to @command{cp} must be the name of an existing directory.
6975 For example, the command:
6976
6977 @example
6978 cp --parents a/b/c existing_dir
6979 @end example
6980
6981 @noindent
6982 copies the file @file{a/b/c} to @file{existing_dir/a/b/c}, creating
6983 any missing intermediate directories.
6984
6985 @itemx @w{@kbd{--reply}=@var{how}}
6986 @opindex --reply
6987 @cindex interactivity
6988 @c FIXME: remove in 2008
6989 @strong{Deprecated: to be removed in 2008.}@*
6990 Using @option{--reply=yes} makes @command{cp} act as if @samp{yes} were
6991 given as a response to every prompt about a destination file.  That effectively
6992 cancels any preceding @option{--interactive} or @option{-i} option.
6993 Specify @option{--reply=no} to make @command{cp} act as if @samp{no} were
6994 given as a response to every prompt about a destination file.
6995 Specify @option{--reply=query} to make @command{cp} prompt the user
6996 about each existing destination file.
6997
6998 @item -R
6999 @itemx -r
7000 @itemx --recursive
7001 @opindex -R
7002 @opindex -r
7003 @opindex --recursive
7004 @cindex directories, copying recursively
7005 @cindex copying directories recursively
7006 @cindex recursively copying directories
7007 @cindex non-directories, copying as special files
7008 Copy directories recursively.  Symbolic links are not followed by
7009 default; see the @option{--archive} (@option{-a}), @option{-d},
7010 @option{--dereference} (@option{-L}), @option{--no-dereference}
7011 (@option{-P}), and @option{-H} options.  Special files are copied by
7012 creating a destination file of the same type as the source; see the
7013 @option{--copy-contents} option.  It is not portable to use
7014 @option{-r} to copy symbolic links or special files.  On some
7015 non-@sc{gnu} systems, @option{-r} implies the equivalent of
7016 @option{-L} and @option{--copy-contents} for historical reasons.
7017 Also, it is not portable to use @option{-R} to copy symbolic links
7018 unless you also specify @option{-P}, as @acronym{POSIX} allows
7019 implementations that dereference symbolic links by default.
7020
7021 @item --remove-destination
7022 @opindex --remove-destination
7023 Remove each existing destination file before attempting to open it
7024 (contrast with @option{-f} above).
7025
7026 @item --sparse=@var{when}
7027 @opindex --sparse=@var{when}
7028 @cindex sparse files, copying
7029 @cindex holes, copying files with
7030 @findex read @r{system call, and holes}
7031 A @dfn{sparse file} contains @dfn{holes}---a sequence of zero bytes that
7032 does not occupy any physical disk blocks; the @samp{read} system call
7033 reads these as zeros.  This can both save considerable disk space and
7034 increase speed, since many binary files contain lots of consecutive zero
7035 bytes.  By default, @command{cp} detects holes in input source files via a crude
7036 heuristic and makes the corresponding output file sparse as well.
7037 Only regular files may be sparse.
7038
7039 The @var{when} value can be one of the following:
7040
7041 @table @samp
7042 @item auto
7043 The default behavior: if the input file is sparse, attempt to make
7044 the output file sparse, too.  However, if an output file exists but
7045 refers to a non-regular file, then do not attempt to make it sparse.
7046
7047 @item always
7048 For each sufficiently long sequence of zero bytes in the input file,
7049 attempt to create a corresponding hole in the output file, even if the
7050 input file does not appear to be sparse.
7051 This is useful when the input file resides on a file system
7052 that does not support sparse files
7053 (for example,  @samp{efs} file systems in SGI IRIX 5.3 and earlier),
7054 but the output file is on a type of file system that does support them.
7055 Holes may be created only in regular files, so if the destination file
7056 is of some other type, @command{cp} does not even try to make it sparse.
7057
7058 @item never
7059 Never make the output file sparse.
7060 This is useful in creating a file for use with the @command{mkswap} command,
7061 since such a file must not have any holes.
7062 @end table
7063
7064 @optStripTrailingSlashes
7065
7066 @item -s
7067 @itemx --symbolic-link
7068 @opindex -s
7069 @opindex --symbolic-link
7070 @cindex symbolic links, copying with
7071 Make symbolic links instead of copies of non-directories.  All source
7072 file names must be absolute (starting with @samp{/}) unless the
7073 destination files are in the current directory.  This option merely
7074 results in an error message on systems that do not support symbolic links.
7075
7076 @optBackupSuffix
7077
7078 @optTargetDirectory
7079
7080 @optNoTargetDirectory
7081
7082 @item -u
7083 @itemx --update
7084 @opindex -u
7085 @opindex --update
7086 @cindex newer files, copying only
7087 Do not copy a non-directory that has an existing destination with the
7088 same or newer modification time.  If time stamps are being preserved,
7089 the comparison is to the source time stamp truncated to the
7090 resolutions of the destination file system and of the system calls
7091 used to update time stamps; this avoids duplicate work if several
7092 @samp{cp -pu} commands are executed with the same source and
7093 destination.
7094
7095 @item -v
7096 @itemx --verbose
7097 @opindex -v
7098 @opindex --verbose
7099 Print the name of each file before copying it.
7100
7101 @item -x
7102 @itemx --one-file-system
7103 @opindex -x
7104 @opindex --one-file-system
7105 @cindex file systems, omitting copying to different
7106 Skip subdirectories that are on different file systems from the one that
7107 the copy started on.
7108 However, mount point directories @emph{are} copied.
7109
7110 @end table
7111
7112 @exitstatus
7113
7114
7115 @node dd invocation
7116 @section @command{dd}: Convert and copy a file
7117
7118 @pindex dd
7119 @cindex converting while copying a file
7120
7121 @command{dd} copies a file (from standard input to standard output, by
7122 default) with a changeable I/O block size, while optionally performing
7123 conversions on it.  Synopses:
7124
7125 @example
7126 dd [@var{operand}]@dots{}
7127 dd @var{option}
7128 @end example
7129
7130 The only options are @option{--help} and @option{--version}.
7131 @xref{Common options}.  @command{dd} accepts the following operands.
7132
7133 @table @samp
7134
7135 @item if=@var{file}
7136 @opindex if
7137 Read from @var{file} instead of standard input.
7138
7139 @item of=@var{file}
7140 @opindex of
7141 Write to @var{file} instead of standard output.  Unless
7142 @samp{conv=notrunc} is given, @command{dd} truncates @var{file} to zero
7143 bytes (or the size specified with @samp{seek=}).
7144
7145 @item ibs=@var{bytes}
7146 @opindex ibs
7147 @cindex block size of input
7148 @cindex input block size
7149 Read @var{bytes} bytes at a time.
7150
7151 @item obs=@var{bytes}
7152 @opindex obs
7153 @cindex block size of output
7154 @cindex output block size
7155 Write @var{bytes} bytes at a time.
7156
7157 @item bs=@var{bytes}
7158 @opindex bs
7159 @cindex block size
7160 Both read and write @var{bytes} bytes at a time.  This overrides
7161 @samp{ibs} and @samp{obs}.
7162
7163 @item cbs=@var{bytes}
7164 @opindex cbs
7165 @cindex block size of conversion
7166 @cindex conversion block size
7167 Convert @var{bytes} bytes at a time.
7168
7169 @item skip=@var{blocks}
7170 @opindex skip
7171 Skip @var{blocks} @samp{ibs}-byte blocks in the input file before copying.
7172
7173 @item seek=@var{blocks}
7174 @opindex seek
7175 Skip @var{blocks} @samp{obs}-byte blocks in the output file before copying.
7176
7177 @item count=@var{blocks}
7178 @opindex count
7179 Copy @var{blocks} @samp{ibs}-byte blocks from the input file, instead
7180 of everything until the end of the file.
7181
7182 @item conv=@var{conversion}[,@var{conversion}]@dots{}
7183 @opindex conv
7184 Convert the file as specified by the @var{conversion} argument(s).
7185 (No spaces around any comma(s).)
7186
7187 Conversions:
7188
7189 @table @samp
7190
7191 @item ascii
7192 @opindex ascii@r{, converting to}
7193 Convert @acronym{EBCDIC} to @acronym{ASCII},
7194 using the conversion table specified by @acronym{POSIX}.
7195 This provides a 1:1 translation for all 256 bytes.
7196
7197 @item ebcdic
7198 @opindex ebcdic@r{, converting to}
7199 Convert @acronym{ASCII} to @acronym{EBCDIC}.
7200 This is the inverse of the @samp{ascii} conversion.
7201
7202 @item ibm
7203 @opindex alternate ebcdic@r{, converting to}
7204 Convert @acronym{ASCII} to alternate @acronym{EBCDIC},
7205 using the alternate conversion table specified by @acronym{POSIX}.
7206 This is not a 1:1 translation, but reflects common historical practice
7207 for @samp{~}, @samp{[}, and @samp{]}.
7208
7209 The @samp{ascii}, @samp{ebcdic}, and @samp{ibm} conversions are
7210 mutually exclusive.
7211
7212 @item block
7213 @opindex block @r{(space-padding)}
7214 For each line in the input, output @samp{cbs} bytes, replacing the
7215 input newline with a space and padding with spaces as necessary.
7216
7217 @item unblock
7218 @opindex unblock
7219 Replace trailing spaces in each @samp{cbs}-sized input block with a
7220 newline.
7221
7222 The @samp{block} and @samp{unblock} conversions are mutually exclusive.
7223
7224 @item lcase
7225 @opindex lcase@r{, converting to}
7226 Change uppercase letters to lowercase.
7227
7228 @item ucase
7229 @opindex ucase@r{, converting to}
7230 Change lowercase letters to uppercase.
7231
7232 The @samp{lcase} and @samp{ucase} conversions are mutually exclusive.
7233
7234 @item swab
7235 @opindex swab @r{(byte-swapping)}
7236 @cindex byte-swapping
7237 Swap every pair of input bytes.  @sc{gnu} @command{dd}, unlike others, works
7238 when an odd number of bytes are read---the last byte is simply copied
7239 (since there is nothing to swap it with).
7240
7241 @item noerror
7242 @opindex noerror
7243 @cindex read errors, ignoring
7244 Continue after read errors.
7245
7246 @item nocreat
7247 @opindex nocreat
7248 @cindex creating output file, avoiding
7249 Do not create the output file; the output file must already exist.
7250
7251 @item excl
7252 @opindex excl
7253 @cindex creating output file, requiring
7254 Fail if the output file already exists; @command{dd} must create the
7255 output file itself.
7256
7257 The @samp{excl} and @samp{nocreat} conversions are mutually exclusive.
7258
7259 @item notrunc
7260 @opindex notrunc
7261 @cindex truncating output file, avoiding
7262 Do not truncate the output file.
7263
7264 @item sync
7265 @opindex sync @r{(padding with nulls)}
7266 Pad every input block to size of @samp{ibs} with trailing zero bytes.
7267 When used with @samp{block} or @samp{unblock}, pad with spaces instead of
7268 zero bytes.
7269
7270 @item fdatasync
7271 @opindex fdatasync
7272 @cindex synchronized data writes, before finishing
7273 Synchronize output data just before finishing.  This forces a physical
7274 write of output data.
7275
7276 @item fsync
7277 @opindex fsync
7278 @cindex synchronized data and metadata writes, before finishing
7279 Synchronize output data and metadata just before finishing.  This
7280 forces a physical write of output data and metadata.
7281
7282 @end table
7283
7284 @item iflag=@var{flag}[,@var{flag}]@dots{}
7285 @opindex iflag
7286 Access the input file using the flags specified by the @var{flag}
7287 argument(s).  (No spaces around any comma(s).)
7288
7289 @item oflag=@var{flag}[,@var{flag}]@dots{}
7290 @opindex oflag
7291 Access the output file using the flags specified by the @var{flag}
7292 argument(s).  (No spaces around any comma(s).)
7293
7294 Here are the flags.  Not every flag is supported on every operating
7295 system.
7296
7297 @table @samp
7298
7299 @item append
7300 @opindex append
7301 @cindex appending to the output file
7302 Write in append mode, so that even if some other process is writing to
7303 this file, every @command{dd} write will append to the current
7304 contents of the file.  This flag makes sense only for output.
7305 If you combine this flag with the @samp{of=@var{file}} operand,
7306 you should also specify @samp{conv=notrunc} unless you want the
7307 output file to be truncated before being appended to.
7308
7309 @item direct
7310 @opindex direct
7311 @cindex direct I/O
7312 Use direct I/O for data, avoiding the buffer cache.
7313
7314 @item directory
7315 @opindex directory
7316 @cindex directory I/O
7317
7318 Fail unless the file is a directory.  Most operating systems do not
7319 allow I/O to a directory, so this flag has limited utility.
7320
7321 @item dsync
7322 @opindex dsync
7323 @cindex synchronized data reads
7324 Use synchronized I/O for data.  For the output file, this forces a
7325 physical write of output data on each write.  For the input file,
7326 this flag can matter when reading from a remote file that has been
7327 written to synchronously by some other process.  Metadata (e.g.,
7328 last-access and last-modified time) is not necessarily synchronized.
7329
7330 @item sync
7331 @opindex sync
7332 @cindex synchronized data and metadata I/O
7333 Use synchronized I/O for both data and metadata.
7334
7335 @item nonblock
7336 @opindex nonblock
7337 @cindex nonblocking I/O
7338 Use non-blocking I/O.
7339
7340 @item noatime
7341 @opindex noatime
7342 @cindex access time
7343 Do not update the file's access time.
7344
7345 @item noctty
7346 @opindex noctty
7347 @cindex controlling terminal
7348 Do not assign the file to be a controlling terminal for @command{dd}.
7349 This has no effect when the file is not a terminal.
7350 On many hosts (e.g., @acronym{GNU}/Linux hosts), this option has no effect
7351 at all.
7352
7353 @item nofollow
7354 @opindex nofollow
7355 @cindex symbolic links, following
7356 Do not follow symbolic links.
7357
7358 @item nolinks
7359 @opindex nolinks
7360 @cindex hard links
7361 Fail if the file has multiple hard links.
7362
7363 @item binary
7364 @opindex binary
7365 @cindex binary I/O
7366 Use binary I/O.  This option has an effect only on nonstandard
7367 platforms that distinguish binary from text I/O.
7368
7369 @item text
7370 @opindex text
7371 @cindex text I/O
7372 Use text I/O.  Like @samp{binary}, this option has no effect on
7373 standard platforms.
7374
7375 @end table
7376
7377 These flags are not supported on all systems, and @samp{dd} rejects
7378 attempts to use them when they are not supported.  When reading from
7379 standard input or writing to standard output, the @samp{nofollow} and
7380 @samp{noctty} flags should not be specified, and the other flags
7381 (e.g., @samp{nonblock}) can affect how other processes behave with the
7382 affected file descriptors, even after @command{dd} exits.
7383
7384 @end table
7385
7386 @cindex multipliers after numbers
7387 The numeric-valued strings above (@var{bytes} and @var{blocks}) can be
7388 followed by a multiplier: @samp{b}=512, @samp{c}=1,
7389 @samp{w}=2, @samp{x@var{m}}=@var{m}, or any of the
7390 standard block size suffixes like @samp{k}=1024 (@pxref{Block size}).
7391
7392 Use different @command{dd} invocations to use different block sizes for
7393 skipping and I/O@.  For example, the following shell commands copy data
7394 in 512 KiB blocks between a disk and a tape, but do not save or restore a
7395 4 KiB label at the start of the disk:
7396
7397 @example
7398 disk=/dev/rdsk/c0t1d0s2
7399 tape=/dev/rmt/0
7400
7401 # Copy all but the label from disk to tape.
7402 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
7403
7404 # Copy from tape back to disk, but leave the disk label alone.
7405 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
7406 @end example
7407
7408 Sending an @samp{INFO} signal to a running @command{dd}
7409 process makes it print I/O statistics to standard error
7410 and then resume copying.  In the example below,
7411 @command{dd} is run in the background to copy 10 million blocks.
7412 The @command{kill} command makes it output intermediate I/O statistics,
7413 and when @command{dd} completes, it outputs the final statistics.
7414
7415 @example
7416 $ dd if=/dev/zero of=/dev/null count=10MB & pid=$!
7417 $ kill -s INFO $pid; wait $pid
7418 3385223+0 records in
7419 3385223+0 records out
7420 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
7421 10000000+0 records in
7422 10000000+0 records out
7423 5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s
7424 @end example
7425
7426 @vindex POSIXLY_CORRECT
7427 On systems lacking the @samp{INFO} signal @command{dd} responds to the
7428 @samp{USR1} signal instead, unless the @env{POSIXLY_CORRECT}
7429 environment variable is set.
7430
7431 @exitstatus
7432
7433
7434 @node install invocation
7435 @section @command{install}: Copy files and set attributes
7436
7437 @pindex install
7438 @cindex copying files and setting attributes
7439
7440 @command{install} copies files while setting their file mode bits and, if
7441 possible, their owner and group.  Synopses:
7442
7443 @example
7444 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
7445 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
7446 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
7447 install [@var{option}]@dots{} -d @var{directory}@dots{}
7448 @end example
7449
7450 @itemize @bullet
7451 @item
7452 If two file names are given, @command{install} copies the first file to the
7453 second.
7454
7455 @item
7456 If the @option{--target-directory} (@option{-t}) option is given, or
7457 failing that if the last file is a directory and the
7458 @option{--no-target-directory} (@option{-T}) option is not given,
7459 @command{install} copies each @var{source} file to the specified
7460 directory, using the @var{source}s' names.
7461
7462 @item
7463 If the @option{--directory} (@option{-d}) option is given,
7464 @command{install} creates each @var{directory} and any missing parent
7465 directories.  Parent directories are created with mode
7466 @samp{u=rwx,go=rx} (755), regardless of the @option{-m} option or the
7467 current umask.  @xref{Directory Setuid and Setgid}, for how the
7468 set-user-ID and set-group-ID bits of parent directories are inherited.
7469 @end itemize
7470
7471 @cindex Makefiles, installing programs in
7472 @command{install} is similar to @command{cp}, but allows you to control the
7473 attributes of destination files.  It is typically used in Makefiles to
7474 copy programs into their destination directories.  It refuses to copy
7475 files onto themselves.
7476
7477 The program accepts the following options.  Also see @ref{Common options}.
7478
7479 @table @samp
7480
7481 @optBackup
7482
7483 @item -c
7484 @opindex -c
7485 Ignored; for compatibility with old Unix versions of @command{install}.
7486
7487 @item -d
7488 @itemx --directory
7489 @opindex -d
7490 @opindex --directory
7491 @cindex directories, creating with given attributes
7492 @cindex parent directories, creating missing
7493 @cindex leading directories, creating missing
7494 Create any missing parent directories, giving them the default
7495 attributes.  Then create each given directory, setting their owner,
7496 group and mode as given on the command line or to the defaults.
7497
7498 @item -g @var{group}
7499 @itemx --group=@var{group}
7500 @opindex -g
7501 @opindex --group
7502 @cindex group ownership of installed files, setting
7503 Set the group ownership of installed files or directories to
7504 @var{group}.  The default is the process's current group.  @var{group}
7505 may be either a group name or a numeric group ID.
7506
7507 @item -m @var{mode}
7508 @itemx --mode=@var{mode}
7509 @opindex -m
7510 @opindex --mode
7511 @cindex permissions of installed files, setting
7512 Set the file mode bits for the installed file or directory to @var{mode},
7513 which can be either an octal number, or a symbolic mode as in
7514 @command{chmod}, with @samp{a=} (no access allowed to anyone) as the
7515 point of departure (@pxref{File permissions}).
7516 The default mode is @samp{u=rwx,go=rx,a-s}---read, write, and
7517 execute for the owner, read and execute for group and other, and with
7518 set-user-ID and set-group-ID disabled.
7519 This default is not quite the same as @samp{755}, since it disables
7520 instead of preserving set-user-ID and set-group-ID on directories.
7521 @xref{Directory Setuid and Setgid}.
7522
7523 @item -o @var{owner}
7524 @itemx --owner=@var{owner}
7525 @opindex -o
7526 @opindex --owner
7527 @cindex ownership of installed files, setting
7528 @cindex appropriate privileges
7529 @vindex root @r{as default owner}
7530 If @command{install} has appropriate privileges (is run as root), set the
7531 ownership of installed files or directories to @var{owner}.  The default
7532 is @code{root}.  @var{owner} may be either a user name or a numeric user
7533 ID.
7534
7535 @item -p
7536 @itemx --preserve-timestamps
7537 @opindex -p
7538 @opindex --preserve-timestamps
7539 @cindex timestamps of installed files, preserving
7540 Set the time of last access and the time of last modification of each
7541 installed file to match those of each corresponding original file.
7542 When a file is installed without this option, its last access and
7543 last modification times are both set to the time of installation.
7544 This option is useful if you want to use the last modification times
7545 of installed files to keep track of when they were last built as opposed
7546 to when they were last installed.
7547
7548 @item -s
7549 @itemx --strip
7550 @opindex -s
7551 @opindex --strip
7552 @cindex symbol table information, stripping
7553 @cindex stripping symbol table information
7554 Strip the symbol tables from installed binary executables.
7555
7556 @optBackupSuffix
7557
7558 @optTargetDirectory
7559
7560 @optNoTargetDirectory
7561
7562 @item -v
7563 @itemx --verbose
7564 @opindex -v
7565 @opindex --verbose
7566 Print the name of each file before copying it.
7567
7568 @end table
7569
7570 @exitstatus
7571
7572
7573 @node mv invocation
7574 @section @command{mv}: Move (rename) files
7575
7576 @pindex mv
7577
7578 @command{mv} moves or renames files (or directories).  Synopses:
7579
7580 @example
7581 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
7582 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
7583 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
7584 @end example
7585
7586 @itemize @bullet
7587 @item
7588 If two file names are given, @command{mv} moves the first file to the
7589 second.
7590
7591 @item
7592 If the @option{--target-directory} (@option{-t}) option is given, or
7593 failing that if the last file is a directory and the
7594 @option{--no-target-directory} (@option{-T}) option is not given,
7595 @command{mv} moves each @var{source} file to the specified
7596 directory, using the @var{source}s' names.
7597 @end itemize
7598
7599 @command{mv} can move any type of file from one file system to another.
7600 Prior to version @code{4.0} of the fileutils,
7601 @command{mv} could move only regular files between file systems.
7602 For example, now @command{mv} can move an entire directory hierarchy
7603 including special device files from one partition to another.  It first
7604 uses some of the same code that's used by @code{cp -a} to copy the
7605 requested directories and files, then (assuming the copy succeeded)
7606 it removes the originals.  If the copy fails, then the part that was
7607 copied to the destination partition is removed.  If you were to copy
7608 three directories from one partition to another and the copy of the first
7609 directory succeeded, but the second didn't, the first would be left on
7610 the destination partition and the second and third would be left on the
7611 original partition.
7612
7613 @cindex prompting, and @command{mv}
7614 If a destination file exists but is normally unwritable, standard input
7615 is a terminal, and the @option{-f} or @option{--force} option is not given,
7616 @command{mv} prompts the user for whether to replace the file.  (You might
7617 own the file, or have write permission on its directory.)  If the
7618 response is not affirmative, the file is skipped.
7619
7620 @emph{Warning}: If you try to move a symlink that points to a directory,
7621 and you specify the symlink with a trailing slash, then @command{mv}
7622 doesn't move the symlink but instead moves the directory referenced
7623 by the symlink.  @xref{Trailing slashes}.
7624
7625 The program accepts the following options.  Also see @ref{Common options}.
7626
7627 @table @samp
7628
7629 @optBackup
7630
7631 @item -f
7632 @itemx --force
7633 @opindex -f
7634 @opindex --force
7635 @cindex prompts, omitting
7636 Do not prompt the user before removing a destination file.
7637
7638 @item -i
7639 @itemx --interactive
7640 @opindex -i
7641 @opindex --interactive
7642 @cindex prompts, forcing
7643 Prompt whether to overwrite each existing destination file, regardless
7644 of its permissions.
7645 If the response is not affirmative, the file is skipped.
7646
7647 @itemx @w{@kbd{--reply}=@var{how}}
7648 @opindex --reply
7649 @cindex interactivity
7650 @c FIXME: remove in 2008
7651 @strong{Deprecated: to be removed in 2008.}@*
7652 Specifying @option{--reply=yes} is equivalent to using @option{--force}.
7653 Specify @option{--reply=no} to make @command{mv} act as if @samp{no} were
7654 given as a response to every prompt about a destination file.
7655 Specify @option{--reply=query} to make @command{mv} prompt the user
7656 about each existing destination file.
7657 Note that @option{--reply=no} has an effect only when @command{mv} would prompt
7658 without @option{-i} or equivalent, i.e., when a destination file exists and is
7659 not writable, standard input is a terminal, and no @option{-f} (or equivalent)
7660 option is specified.
7661
7662 @item -u
7663 @itemx --update
7664 @opindex -u
7665 @opindex --update
7666 @cindex newer files, moving only
7667 Do not move a non-directory that has an existing destination with the
7668 same or newer modification time.
7669 If the move is across file system boundaries, the comparison is to the
7670 source time stamp truncated to the resolutions of the destination file
7671 system and of the system calls used to update time stamps; this avoids
7672 duplicate work if several @samp{mv -u} commands are executed with the
7673 same source and destination.
7674
7675 @item -v
7676 @itemx --verbose
7677 @opindex -v
7678 @opindex --verbose
7679 Print the name of each file before moving it.
7680
7681 @optStripTrailingSlashes
7682
7683 @optBackupSuffix
7684
7685 @optTargetDirectory
7686
7687 @optNoTargetDirectory
7688
7689 @end table
7690
7691 @exitstatus
7692
7693
7694 @node rm invocation
7695 @section @command{rm}: Remove files or directories
7696
7697 @pindex rm
7698 @cindex removing files or directories
7699
7700 @command{rm} removes each given @var{file}.  By default, it does not remove
7701 directories.  Synopsis:
7702
7703 @example
7704 rm [@var{option}]@dots{} [@var{file}]@dots{}
7705 @end example
7706
7707 @cindex prompting, and @command{rm}
7708 If the @option{-I} or @option{--interactive=once} option is given,
7709 and there are more than three files or the @option{-r}, @option{-R},
7710 or @option{--recursive} are given, then @command{rm} prompts the user
7711 for whether to proceed with the entire operation.  If the response is
7712 not affirmative, the entire command is aborted.
7713
7714 Otherwise, if a file is unwritable, standard input is a terminal, and
7715 the @option{-f} or @option{--force} option is not given, or the
7716 @option{-i} or @option{--interactive=always} option @emph{is} given,
7717 @command{rm} prompts the user for whether to remove the file.
7718 If the response is not affirmative, the file is skipped.
7719
7720 @emph{Warning}: If you use @command{rm} to remove a file, it is usually
7721 possible to recover the contents of that file.  If you want more assurance
7722 that the contents are truly unrecoverable, consider using @command{shred}.
7723
7724 The program accepts the following options.  Also see @ref{Common options}.
7725
7726 @table @samp
7727
7728 @item -f
7729 @itemx --force
7730 @opindex -f
7731 @opindex --force
7732 Ignore nonexistent files and never prompt the user.
7733 Ignore any previous @option{--interactive} (@option{-i}) option.
7734
7735 @item -i
7736 @opindex -i
7737 Prompt whether to remove each file.
7738 If the response is not affirmative, the file is skipped.
7739 Ignore any previous @option{--force} (@option{-f}) option.
7740 Equivalent to @option{--interactive=always}.
7741
7742 @item -I
7743 @opindex -I
7744 Prompt once whether to proceed with the command, if more than three
7745 files are named or if a recursive removal is requested.  Ignore any
7746 previous @option{--force} (@option{-f}) option.  Equivalent to
7747 @option{--interactive=once}.
7748
7749 @itemx --interactive [=@var{when}]
7750 @opindex --interactive
7751 Specify when to issue an interactive prompt.  @var{when} may be
7752 omitted, or one of:
7753 @itemize @bullet
7754 @item never
7755 @vindex never @r{interactive option}
7756 - Do not prompt at all.
7757 @item once
7758 @vindex once @r{interactive option}
7759 - Prompt once if more than three files are named or if a recursive
7760 removal is requested.  Equivalent to @option{-I}.
7761 @item always
7762 @vindex always @r{interactive option}
7763 - Prompt for every file being removed.  Equivalent to @option{-i}.
7764 @end itemize
7765 Specifying @option{--interactive} and no @var{when} is equivalent to
7766 @option{--interactive=always}.
7767
7768 @itemx --preserve-root
7769 @opindex --preserve-root
7770 @cindex root directory, disallow recursive destruction
7771 Fail upon any attempt to remove the file system root, @file{/},
7772 when used with the @option{--recursive} option.
7773 Without @option{--recursive}, this option has no effect.
7774 @xref{Treating / specially}.
7775
7776 @itemx --no-preserve-root
7777 @opindex --no-preserve-root
7778 @cindex root directory, allow recursive destruction
7779 Cancel the effect of any preceding @option{--preserve-root} option.
7780 @xref{Treating / specially}.
7781
7782 @item -r
7783 @itemx -R
7784 @itemx --recursive
7785 @opindex -r
7786 @opindex -R
7787 @opindex --recursive
7788 @cindex directories, removing (recursively)
7789 Remove the listed directories and their contents recursively.
7790
7791 @item -v
7792 @itemx --verbose
7793 @opindex -v
7794 @opindex --verbose
7795 Print the name of each file before removing it.
7796
7797 @end table
7798
7799 @cindex files beginning with @samp{-}, removing
7800 @cindex @samp{-}, removing files beginning with
7801 One common question is how to remove files whose names begin with a
7802 @samp{-}.  @sc{gnu} @command{rm}, like every program that uses the @code{getopt}
7803 function to parse its arguments, lets you use the @samp{--} option to
7804 indicate that all following arguments are non-options.  To remove a file
7805 called @file{-f} in the current directory, you could type either:
7806
7807 @example
7808 rm -- -f
7809 @end example
7810
7811 @noindent
7812 or:
7813
7814 @example
7815 rm ./-f
7816 @end example
7817
7818 @opindex - @r{and Unix @command{rm}}
7819 The Unix @command{rm} program's use of a single @samp{-} for this purpose
7820 predates the development of the getopt standard syntax.
7821
7822 @exitstatus
7823
7824
7825 @node shred invocation
7826 @section @command{shred}: Remove files more securely
7827
7828 @pindex shred
7829 @cindex data, erasing
7830 @cindex erasing data
7831
7832 @command{shred} overwrites devices or files, to help prevent even
7833 very expensive hardware from recovering the data.
7834
7835 Ordinarily when you remove a file (@pxref{rm invocation}), the data is
7836 not actually destroyed.  Only the index listing where the file is
7837 stored is destroyed, and the storage is made available for reuse.
7838 There are undelete utilities that will attempt to reconstruct the index
7839 and can bring the file back if the parts were not reused.
7840
7841 On a busy system with a nearly-full drive, space can get reused in a few
7842 seconds.  But there is no way to know for sure.  If you have sensitive
7843 data, you may want to be sure that recovery is not possible by actually
7844 overwriting the file with non-sensitive data.
7845
7846 However, even after doing that, it is possible to take the disk back
7847 to a laboratory and use a lot of sensitive (and expensive) equipment
7848 to look for the faint ``echoes'' of the original data underneath the
7849 overwritten data.  If the data has only been overwritten once, it's not
7850 even that hard.
7851
7852 The best way to remove something irretrievably is to destroy the media
7853 it's on with acid, melt it down, or the like.  For cheap removable media
7854 like floppy disks, this is the preferred method.  However, hard drives
7855 are expensive and hard to melt, so the @command{shred} utility tries
7856 to achieve a similar effect non-destructively.
7857
7858 This uses many overwrite passes, with the data patterns chosen to
7859 maximize the damage they do to the old data.  While this will work on
7860 floppies, the patterns are designed for best effect on hard drives.
7861 For more details, see the source code and Peter Gutmann's paper
7862 @uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
7863 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}},
7864 from the proceedings of the Sixth @acronym{USENIX} Security Symposium (San Jose,
7865 California, July 22--25, 1996).
7866
7867 @strong{Please note} that @command{shred} relies on a very important assumption:
7868 that the file system overwrites data in place.  This is the traditional
7869 way to do things, but many modern file system designs do not satisfy this
7870 assumption.  Exceptions include:
7871
7872 @itemize @bullet
7873
7874 @item
7875 Log-structured or journaled file systems, such as those supplied with
7876 AIX and Solaris, and JFS, ReiserFS, XFS, Ext3 (in @code{data=journal} mode),
7877 BFS, NTFS, etc.@: when they are configured to journal @emph{data}.
7878
7879 @item
7880 File systems that write redundant data and carry on even if some writes
7881 fail, such as RAID-based file systems.
7882
7883 @item
7884 File systems that make snapshots, such as Network Appliance's NFS server.
7885
7886 @item
7887 File systems that cache in temporary locations, such as NFS version 3
7888 clients.
7889
7890 @item
7891 Compressed file systems.
7892 @end itemize
7893
7894 In the particular case of ext3 file systems, the above disclaimer applies (and
7895 @command{shred} is thus of limited effectiveness) only in @code{data=journal}
7896 mode, which journals file data in addition to just metadata. In both
7897 the @code{data=ordered} (default) and @code{data=writeback} modes,
7898 @command{shred} works as usual.  Ext3 journaling modes can be changed
7899 by adding the @code{data=something} option to the mount options for a
7900 particular file system in the @file{/etc/fstab} file, as documented in
7901 the mount man page (man mount).
7902
7903 If you are not sure how your file system operates, then you should assume
7904 that it does not overwrite data in place, which means that shred cannot
7905 reliably operate on regular files in your file system.
7906
7907 Generally speaking, it is more reliable to shred a device than a file,
7908 since this bypasses the problem of file system design mentioned above.
7909 However, even shredding devices is not always completely reliable.  For
7910 example, most disks map out bad sectors invisibly to the application; if
7911 the bad sectors contain sensitive data, @command{shred} won't be able to
7912 destroy it.
7913
7914 @command{shred} makes no attempt to detect or report this problem, just as
7915 it makes no attempt to do anything about backups.  However, since it is
7916 more reliable to shred devices than files, @command{shred} by default does
7917 not truncate or remove the output file.  This default is more suitable
7918 for devices, which typically cannot be truncated and should not be
7919 removed.
7920
7921 Finally, consider the risk of backups and mirrors.
7922 File system backups and remote mirrors may contain copies of the
7923 file that cannot be removed, and that will allow a shredded file
7924 to be recovered later.  So if you keep any data you may later want
7925 to destroy using @command{shred}, be sure that it is not backed up or mirrored.
7926
7927 @example
7928 shred [@var{option}]@dots{} @var{file}[@dots{}]
7929 @end example
7930
7931 The program accepts the following options.  Also see @ref{Common options}.
7932
7933 @table @samp
7934
7935 @item -f
7936 @itemx --force
7937 @opindex -f
7938 @opindex --force
7939 @cindex force deletion
7940 Override file permissions if necessary to allow overwriting.
7941
7942 @item -@var{NUMBER}
7943 @itemx -n @var{NUMBER}
7944 @itemx --iterations=@var{NUMBER}
7945 @opindex -n @var{NUMBER}
7946 @opindex --iterations=@var{NUMBER}
7947 @cindex iterations, selecting the number of
7948 By default, @command{shred} uses 25 passes of overwrite.  This is enough
7949 for all of the useful overwrite patterns to be used at least once.
7950 You can reduce this to save time, or increase it if you have a lot of
7951 time to waste.
7952
7953 @item --random-source=@var{file}
7954 @opindex --random-source
7955 @cindex random source for shredding
7956 Use @var{file} as a source of random data used to overwrite and to
7957 choose pass ordering.  @xref{Random sources}.
7958
7959 @item -s @var{BYTES}
7960 @itemx --size=@var{BYTES}
7961 @opindex -s @var{BYTES}
7962 @opindex --size=@var{BYTES}
7963 @cindex size of file to shred
7964 Shred the first @var{BYTES} bytes of the file.  The default is to shred
7965 the whole file.  @var{BYTES} can be followed by a size specification like
7966 @samp{K}, @samp{M}, or @samp{G} to specify a multiple.  @xref{Block size}.
7967
7968 @item -u
7969 @itemx --remove
7970 @opindex -u
7971 @opindex --remove
7972 @cindex removing files after shredding
7973 After shredding a file, truncate it (if possible) and then remove it.
7974 If a file has multiple links, only the named links will be removed.
7975
7976 @item -v
7977 @itemx --verbose
7978 @opindex -v
7979 @opindex --verbose
7980 Display status updates as sterilization proceeds.
7981
7982 @item -x
7983 @itemx --exact
7984 @opindex -x
7985 @opindex --exact
7986 By default, @command{shred} rounds the size of a regular file up to the next
7987 multiple of the file system block size to fully erase the last block of the file.
7988 Use @option{--exact} to suppress that behavior.
7989 Thus, by default if you shred a 10-byte regular file on a system with 512-byte
7990 blocks, the resulting file will be 512 bytes long.  With this option,
7991 shred does not increase the apparent size of the file.
7992
7993 @item -z
7994 @itemx --zero
7995 @opindex -z
7996 @opindex --zero
7997 Normally, the last pass that @command{shred} writes is made up of
7998 random data.  If this would be conspicuous on your hard drive (for
7999 example, because it looks like encrypted data), or you just think
8000 it's tidier, the @option{--zero} option adds an additional overwrite pass with
8001 all zero bits.  This is in addition to the number of passes specified
8002 by the @option{--iterations} option.
8003
8004 @end table
8005
8006 You might use the following command to erase all trace of the
8007 file system you'd created on the floppy disk in your first drive.
8008 That command takes about 20 minutes to erase a ``1.44MB'' (actually
8009 1440 KiB) floppy.
8010
8011 @example
8012 shred --verbose /dev/fd0
8013 @end example
8014
8015 Similarly, to erase all data on a selected partition of
8016 your hard disk, you could give a command like this:
8017
8018 @example
8019 shred --verbose /dev/sda5
8020 @end example
8021
8022 A @var{file} of @samp{-} denotes standard output.
8023 The intended use of this is to shred a removed temporary file.
8024 For example:
8025
8026 @example
8027 i=`tempfile -m 0600`
8028 exec 3<>"$i"
8029 rm -- "$i"
8030 echo "Hello, world" >&3
8031 shred - >&3
8032 exec 3>-
8033 @end example
8034
8035 However, the command @samp{shred - >file} does not shred the contents
8036 of @var{file}, since the shell truncates @var{file} before invoking
8037 @command{shred}.  Use the command @samp{shred file} or (if using a
8038 Bourne-compatible shell) the command @samp{shred - 1<>file} instead.
8039
8040 @exitstatus
8041
8042
8043 @node Special file types
8044 @chapter Special file types
8045
8046 @cindex special file types
8047 @cindex file types, special
8048
8049 This chapter describes commands which create special types of files (and
8050 @command{rmdir}, which removes directories, one special file type).
8051
8052 @cindex special file types
8053 @cindex file types
8054 Although Unix-like operating systems have markedly fewer special file
8055 types than others, not @emph{everything} can be treated only as the
8056 undifferentiated byte stream of @dfn{normal files}.  For example, when a
8057 file is created or removed, the system must record this information,
8058 which it does in a @dfn{directory}---a special type of file.  Although
8059 you can read directories as normal files, if you're curious, in order
8060 for the system to do its job it must impose a structure, a certain
8061 order, on the bytes of the file.  Thus it is a ``special'' type of file.
8062
8063 Besides directories, other special file types include named pipes
8064 (FIFOs), symbolic links, sockets, and so-called @dfn{special files}.
8065
8066 @menu
8067 * link invocation::             Make a hard link via the link syscall
8068 * ln invocation::               Make links between files.
8069 * mkdir invocation::            Make directories.
8070 * mkfifo invocation::           Make FIFOs (named pipes).
8071 * mknod invocation::            Make block or character special files.
8072 * readlink invocation::         Print the referent of a symbolic link.
8073 * rmdir invocation::            Remove empty directories.
8074 * unlink invocation::           Remove files via the unlink syscall
8075 @end menu
8076
8077
8078 @node link invocation
8079 @section @command{link}: Make a hard link via the link syscall
8080
8081 @pindex link
8082 @cindex links, creating
8083 @cindex hard links, creating
8084 @cindex creating links (hard only)
8085
8086 @command{link} creates a single hard link at a time.
8087 It is a minimalist interface to the system-provided
8088 @code{link} function.  @xref{Hard Links, , , libc,
8089 The GNU C Library Reference Manual}.
8090 It avoids the bells and whistles of the more commonly-used
8091 @command{ln} command (@pxref{ln invocation}).
8092 Synopsis:
8093
8094 @example
8095 link @var{filename} @var{linkname}
8096 @end example
8097
8098 @var{filename} must specify an existing file, and @var{linkname}
8099 must specify a nonexistent entry in an existing directory.
8100 @command{link} simply calls @code{link (@var{filename}, @var{linkname})}
8101 to create the link.
8102
8103 On a @acronym{GNU} system, this command acts like @samp{ln --directory
8104 --no-target-directory @var{filename} @var{linkname}}.  However, the
8105 @option{--directory} and @option{--no-target-directory} options are
8106 not specified by @acronym{POSIX}, and the @command{link} command is
8107 more portable in practice.
8108
8109 @exitstatus
8110
8111
8112 @node ln invocation
8113 @section @command{ln}: Make links between files
8114
8115 @pindex ln
8116 @cindex links, creating
8117 @cindex hard links, creating
8118 @cindex symbolic (soft) links, creating
8119 @cindex creating links (hard or soft)
8120
8121 @cindex file systems and hard links
8122 @command{ln} makes links between files.  By default, it makes hard links;
8123 with the @option{-s} option, it makes symbolic (or @dfn{soft}) links.
8124 Synopses:
8125
8126 @example
8127 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
8128 ln [@var{option}]@dots{} @var{target}
8129 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
8130 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
8131 @end example
8132
8133 @itemize @bullet
8134
8135 @item
8136 If two file names are given, @command{ln} creates a link to the first
8137 file from the second.
8138
8139 @item
8140 If one @var{target} is given, @command{ln} creates a link to that file
8141 in the current directory.
8142
8143 @item
8144 If the @option{--target-directory} (@option{-t}) option is given, or
8145 failing that if the last file is a directory and the
8146 @option{--no-target-directory} (@option{-T}) option is not given,
8147 @command{ln} creates a link to each @var{target} file in the specified
8148 directory, using the @var{target}s' names.
8149
8150 @end itemize
8151
8152 Normally @command{ln} does not remove existing files.  Use the
8153 @option{--force} (@option{-f}) option to remove them unconditionally,
8154 the @option{--interactive} (@option{-i}) option to remove them
8155 conditionally, and the @option{--backup} (@option{-b}) option to
8156 rename them.
8157
8158 @cindex hard link, defined
8159 @cindex inode, and hard links
8160 A @dfn{hard link} is another name for an existing file; the link and the
8161 original are indistinguishable.  Technically speaking, they share the
8162 same inode, and the inode contains all the information about a
8163 file---indeed, it is not incorrect to say that the inode @emph{is} the
8164 file.  On all existing implementations, you cannot make a hard link to
8165 a directory, and hard links cannot cross file system boundaries.  (These
8166 restrictions are not mandated by @acronym{POSIX}, however.)
8167
8168 @cindex dereferencing symbolic links
8169 @cindex symbolic link, defined
8170 @dfn{Symbolic links} (@dfn{symlinks} for short), on the other hand, are
8171 a special file type (which not all kernels support: System V release 3
8172 (and older) systems lack symlinks) in which the link file actually
8173 refers to a different file, by name.  When most operations (opening,
8174 reading, writing, and so on) are passed the symbolic link file, the
8175 kernel automatically @dfn{dereferences} the link and operates on the
8176 target of the link.  But some operations (e.g., removing) work on the
8177 link file itself, rather than on its target.  @xref{Symbolic Links,,,
8178 libc, The GNU C Library Reference Manual}.
8179
8180 The program accepts the following options.  Also see @ref{Common options}.
8181
8182 @table @samp
8183
8184 @optBackup
8185
8186 @item -d
8187 @itemx -F
8188 @itemx --directory
8189 @opindex -d
8190 @opindex -F
8191 @opindex --directory
8192 @cindex hard links to directories
8193 Allow users with appropriate privileges to attempt to make hard links
8194 to directories.
8195 However, note that this will probably fail due to
8196 system restrictions, even for the super-user.
8197
8198 @item -f
8199 @itemx --force
8200 @opindex -f
8201 @opindex --force
8202 Remove existing destination files.
8203
8204 @item -i
8205 @itemx --interactive
8206 @opindex -i
8207 @opindex --interactive
8208 @cindex prompting, and @command{ln}
8209 Prompt whether to remove existing destination files.
8210
8211 @item -n
8212 @itemx --no-dereference
8213 @opindex -n
8214 @opindex --no-dereference
8215 Do not treat the last operand specially when it is a symbolic link to
8216 a directory.  Instead, treat it as if it were a normal file.
8217
8218 When the destination is an actual directory (not a symlink to one),
8219 there is no ambiguity.  The link is created in that directory.
8220 But when the specified destination is a symlink to a directory,
8221 there are two ways to treat the user's request.  @command{ln} can
8222 treat the destination just as it would a normal directory and create
8223 the link in it.  On the other hand, the destination can be viewed as a
8224 non-directory---as the symlink itself.  In that case, @command{ln}
8225 must delete or backup that symlink before creating the new link.
8226 The default is to treat a destination that is a symlink to a directory
8227 just like a directory.
8228
8229 This option is weaker than the @option{--no-target-directory}
8230 (@option{-T}) option, so it has no effect if both options are given.
8231
8232 @item -s
8233 @itemx --symbolic
8234 @opindex -s
8235 @opindex --symbolic
8236 Make symbolic links instead of hard links.  This option merely produces
8237 an error message on systems that do not support symbolic links.
8238
8239 @optBackupSuffix
8240
8241 @optTargetDirectory
8242
8243 @optNoTargetDirectory
8244
8245 @item -v
8246 @itemx --verbose
8247 @opindex -v
8248 @opindex --verbose
8249 Print the name of each file after linking it successfully.
8250
8251 @end table
8252
8253 @exitstatus
8254
8255 Examples:
8256
8257 @smallexample
8258 Bad Example:
8259
8260 # Create link ../a pointing to a in that directory.
8261 # Not really useful because it points to itself.
8262 ln -s a ..
8263
8264 Better Example:
8265
8266 # Change to the target before creating symlinks to avoid being confused.
8267 cd ..
8268 ln -s adir/a .
8269
8270 Bad Example:
8271
8272 # Hard coded file names don't move well.
8273 ln -s $(pwd)/a /some/dir/
8274
8275 Better Example:
8276
8277 # Relative file names survive directory moves and also
8278 # work across networked file systems.
8279 ln -s afile anotherfile
8280 ln -s ../adir/afile yetanotherfile
8281 @end smallexample
8282
8283
8284 @node mkdir invocation
8285 @section @command{mkdir}: Make directories
8286
8287 @pindex mkdir
8288 @cindex directories, creating
8289 @cindex creating directories
8290
8291 @command{mkdir} creates directories with the specified names.  Synopsis:
8292
8293 @example
8294 mkdir [@var{option}]@dots{} @var{name}@dots{}
8295 @end example
8296
8297 @command{mkdir} creates each directory @var{name} in the order given.
8298 It reports an error if @var{name} already exists, unless the
8299 @option{-p} option is given and @var{name} is a directory.
8300
8301 The program accepts the following options.  Also see @ref{Common options}.
8302
8303 @table @samp
8304
8305 @item -m @var{mode}
8306 @itemx --mode=@var{mode}
8307 @opindex -m
8308 @opindex --mode
8309 @cindex modes of created directories, setting
8310 Set the file permission bits of created directories to @var{mode},
8311 which uses the same syntax as
8312 in @command{chmod} and uses @samp{a=rwx} (read, write and execute allowed for
8313 everyone) for the point of the departure.  @xref{File permissions}.
8314
8315 Normally the directory has the desired file mode bits at the moment it
8316 is created.  As a @acronym{GNU} extension, @var{mode} may also mention
8317 special mode bits, but in this case there may be a temporary window
8318 during which the directory exists but its special mode bits are
8319 incorrect.  @xref{Directory Setuid and Setgid}, for how the
8320 set-user-ID and set-group-ID bits of directories are inherited unless
8321 overridden in this way.
8322
8323 @item -p
8324 @itemx --parents
8325 @opindex -p
8326 @opindex --parents
8327 @cindex parent directories, creating
8328 Make any missing parent directories for each argument.  The file permission
8329 bits of parent directories are set to the umask modified by @samp{u+wx}.
8330 @xref{Directory Setuid and Setgid}, for how the set-user-ID and
8331 set-group-ID bits of parent directories are inherited.
8332 Ignore arguments corresponding to existing directories, and do not
8333 change their file mode bits.
8334
8335 @item -v
8336 @item --verbose
8337 @opindex -v
8338 @opindex --verbose
8339 Print a message for each created directory.  This is most useful with
8340 @option{--parents}.
8341 @end table
8342
8343 @exitstatus
8344
8345
8346 @node mkfifo invocation
8347 @section @command{mkfifo}: Make FIFOs (named pipes)
8348
8349 @pindex mkfifo
8350 @cindex FIFOs, creating
8351 @cindex named pipes, creating
8352 @cindex creating FIFOs (named pipes)
8353
8354 @command{mkfifo} creates FIFOs (also called @dfn{named pipes}) with the
8355 specified names.  Synopsis:
8356
8357 @example
8358 mkfifo [@var{option}] @var{name}@dots{}
8359 @end example
8360
8361 A @dfn{FIFO} is a special file type that permits independent processes
8362 to communicate.  One process opens the FIFO file for writing, and
8363 another for reading, after which data can flow as with the usual
8364 anonymous pipe in shells or elsewhere.
8365
8366 The program accepts the following option.  Also see @ref{Common options}.
8367
8368 @table @samp
8369
8370 @item -m @var{mode}
8371 @itemx --mode=@var{mode}
8372 @opindex -m
8373 @opindex --mode
8374 @cindex modes of created FIFOs, setting
8375 Set the mode of created FIFOs to @var{mode}, which is symbolic as in
8376 @command{chmod} and uses @samp{a=rw} (read and write allowed for everyone)
8377 for the point of departure.  @var{mode} should specify only file
8378 permission bits.  @xref{File permissions}.
8379
8380 @end table
8381
8382 @exitstatus
8383
8384
8385 @node mknod invocation
8386 @section @command{mknod}: Make block or character special files
8387
8388 @pindex mknod
8389 @cindex block special files, creating
8390 @cindex character special files, creating
8391
8392 @command{mknod} creates a FIFO, character special file, or block special
8393 file with the specified name.  Synopsis:
8394
8395 @example
8396 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
8397 @end example
8398
8399 @cindex special files
8400 @cindex block special files
8401 @cindex character special files
8402 Unlike the phrase ``special file type'' above, the term @dfn{special
8403 file} has a technical meaning on Unix: something that can generate or
8404 receive data.  Usually this corresponds to a physical piece of hardware,
8405 e.g., a printer or a disk.  (These files are typically created at
8406 system-configuration time.)  The @command{mknod} command is what creates
8407 files of this type.  Such devices can be read either a character at a
8408 time or a ``block'' (many characters) at a time, hence we say there are
8409 @dfn{block special} files and @dfn{character special} files.
8410
8411 The arguments after @var{name} specify the type of file to make:
8412
8413 @table @samp
8414
8415 @item p
8416 @opindex p @r{for FIFO file}
8417 for a FIFO
8418
8419 @item b
8420 @opindex b @r{for block special file}
8421 for a block special file
8422
8423 @item c
8424 @c Don't document the `u' option -- it's just a synonym for `c'.
8425 @c Do *any* versions of mknod still use it?
8426 @c @itemx u
8427 @opindex c @r{for character special file}
8428 @c @opindex u @r{for character special file}
8429 for a character special file
8430
8431 @end table
8432
8433 When making a block or character special file, the major and minor
8434 device numbers must be given after the file type.
8435 If a major or minor device number begins with @samp{0x} or @samp{0X},
8436 it is interpreted as hexadecimal; otherwise, if it begins with @samp{0},
8437 as octal; otherwise, as decimal.
8438
8439 The program accepts the following option.  Also see @ref{Common options}.
8440
8441 @table @samp
8442
8443 @item -m @var{mode}
8444 @itemx --mode=@var{mode}
8445 @opindex -m
8446 @opindex --mode
8447 Set the mode of created files to @var{mode}, which is symbolic as in
8448 @command{chmod} and uses @samp{a=rw} as the point of departure.
8449 @var{mode} should specify only file permission bits.
8450 @xref{File permissions}.
8451
8452 @end table
8453
8454 @exitstatus
8455
8456
8457 @node readlink invocation
8458 @section @command{readlink}: Print the referent of a symbolic link
8459
8460 @pindex readlink
8461 @cindex displaying value of a symbolic link
8462
8463 @command{readlink} may work in one of two supported modes:
8464
8465 @table @samp
8466
8467 @item Readlink mode
8468
8469 @command{readlink} outputs the value of the given symbolic link.
8470 If @command{readlink} is invoked with an argument other than the name
8471 of a symbolic link, it produces no output and exits with a nonzero exit code.
8472
8473 @item Canonicalize mode
8474
8475 @command{readlink} outputs the absolute name of the given file which contains
8476 no @file{.}, @file{..} components nor any repeated separators
8477 (@file{/}) or symbolic links.
8478
8479 @end table
8480
8481 @example
8482 readlink [@var{option}] @var{file}
8483 @end example
8484
8485 By default, @command{readlink} operates in readlink mode.
8486
8487 The program accepts the following options.  Also see @ref{Common options}.
8488
8489 @table @samp
8490
8491 @item -f
8492 @itemx --canonicalize
8493 @opindex -f
8494 @opindex --canonicalize
8495 Activate canonicalize mode.
8496 If any component of the file name except the last one is missing or unavailable,
8497 @command{readlink} produces no output and exits with a nonzero exit code.
8498
8499 @item -e
8500 @itemx --canonicalize-existing
8501 @opindex -e
8502 @opindex --canonicalize-existing
8503 Activate canonicalize mode.
8504 If any component is missing or unavailable, @command{readlink} produces
8505 no output and exits with a nonzero exit code.
8506
8507 @item -m
8508 @itemx --canonicalize-missing
8509 @opindex -m
8510 @opindex --canonicalize-missing
8511 Activate canonicalize mode.
8512 If any component is missing or unavailable, @command{readlink} treats it
8513 as a directory.
8514
8515 @item -n
8516 @itemx --no-newline
8517 @opindex -n
8518 @opindex --no-newline
8519 Do not output the trailing newline.
8520
8521 @item -s
8522 @itemx -q
8523 @itemx --silent
8524 @itemx --quiet
8525 @opindex -s
8526 @opindex -q
8527 @opindex --silent
8528 @opindex --quiet
8529 Suppress most error messages.
8530
8531 @item -v
8532 @itemx --verbose
8533 @opindex -v
8534 @opindex --verbose
8535 Report error messages.
8536
8537 @end table
8538
8539 The @command{readlink} utility first appeared in OpenBSD 2.1.
8540
8541 @exitstatus
8542
8543
8544 @node rmdir invocation
8545 @section @command{rmdir}: Remove empty directories
8546
8547 @pindex rmdir
8548 @cindex removing empty directories
8549 @cindex directories, removing empty
8550
8551 @command{rmdir} removes empty directories.  Synopsis:
8552
8553 @example
8554 rmdir [@var{option}]@dots{} @var{directory}@dots{}
8555 @end example
8556
8557 If any @var{directory} argument does not refer to an existing empty
8558 directory, it is an error.
8559
8560 The program accepts the following option.  Also see @ref{Common options}.
8561
8562 @table @samp
8563
8564 @item --ignore-fail-on-non-empty
8565 @opindex --ignore-fail-on-non-empty
8566 @cindex directory deletion, ignoring failures
8567 Ignore each failure to remove a directory that is solely because
8568 the directory is non-empty.
8569
8570 @item -p
8571 @itemx --parents
8572 @opindex -p
8573 @opindex --parents
8574 @cindex parent directories, removing
8575 Remove @var{directory}, then try to remove each component of @var{directory}.
8576 So, for example, @samp{rmdir -p a/b/c} is similar to @samp{rmdir a/b/c a/b a}.
8577 As such, it fails if any of those directories turns out not to be empty.
8578 Use the @option{--ignore-fail-on-non-empty} option to make it so such
8579 a failure does not evoke a diagnostic and does not cause @command{rmdir} to
8580 exit unsuccessfully.
8581
8582 @item -v
8583 @item --verbose
8584 @opindex -v
8585 @opindex --verbose
8586 @cindex directory deletion, reporting
8587 Give a diagnostic for each successful removal.
8588 @var{directory} is removed.
8589
8590 @end table
8591
8592 @xref{rm invocation}, for how to remove non-empty directories (recursively).
8593
8594 @exitstatus
8595
8596
8597 @node unlink invocation
8598 @section @command{unlink}: Remove files via the unlink syscall
8599
8600 @pindex unlink
8601 @cindex removing files or directories (via the unlink syscall)
8602
8603 @command{unlink} deletes a single specified file name.
8604 It is a minimalist interface to the system-provided
8605 @code{unlink} function.  @xref{Deleting Files, , , libc,
8606 The GNU C Library Reference Manual}.  Synopsis:
8607 It avoids the bells and whistles of the more commonly-used
8608 @command{rm} command (@pxref{rm invocation}).
8609
8610 @example
8611 unlink @var{filename}
8612 @end example
8613
8614 On some systems @code{unlink} can be used to delete the name of a
8615 directory.  On others, it can be used that way only by a privileged user.
8616 In the GNU system @code{unlink} can never delete the name of a directory.
8617
8618 The @command{unlink} command honors the @option{--help} and
8619 @option{--version} options.  To remove a file whose name begins with
8620 @samp{-}, prefix the name with @samp{./}, e.g., @samp{unlink ./--help}.
8621
8622 @exitstatus
8623
8624
8625 @node Changing file attributes
8626 @chapter Changing file attributes
8627
8628 @cindex changing file attributes
8629 @cindex file attributes, changing
8630 @cindex attributes, file
8631
8632 A file is not merely its contents, a name, and a file type
8633 (@pxref{Special file types}).  A file also has an owner (a user ID), a
8634 group (a group ID), permissions (what the owner can do with the file,
8635 what people in the group can do, and what everyone else can do), various
8636 timestamps, and other information.  Collectively, we call these a file's
8637 @dfn{attributes}.
8638
8639 These commands change file attributes.
8640
8641 @menu
8642 * chgrp invocation::            Change file groups.
8643 * chmod invocation::            Change access permissions.
8644 * chown invocation::            Change file owners and groups.
8645 * touch invocation::            Change file timestamps.
8646 @end menu
8647
8648
8649 @node chown invocation
8650 @section @command{chown}: Change file owner and group
8651
8652 @pindex chown
8653 @cindex file ownership, changing
8654 @cindex group ownership, changing
8655 @cindex changing file ownership
8656 @cindex changing group ownership
8657
8658 @command{chown} changes the user and/or group ownership of each given @var{file}
8659 to @var{new-owner} or to the user and group of an existing reference file.
8660 Synopsis:
8661
8662 @example
8663 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@} @var{file}@dots{}
8664 @end example
8665
8666 If used, @var{new-owner} specifies the new owner and/or group as follows
8667 (with no embedded white space):
8668
8669 @example
8670 [@var{owner}] [ : [@var{group}] ]
8671 @end example
8672
8673 Specifically:
8674
8675 @table @var
8676 @item owner
8677 If only an @var{owner} (a user name or numeric user ID) is given, that
8678 user is made the owner of each given file, and the files' group is not
8679 changed.
8680
8681 @item owner@samp{:}group
8682 If the @var{owner} is followed by a colon and a @var{group} (a
8683 group name or numeric group ID), with no spaces between them, the group
8684 ownership of the files is changed as well (to @var{group}).
8685
8686 @item owner@samp{:}
8687 If a colon but no group name follows @var{owner}, that user is
8688 made the owner of the files and the group of the files is changed to
8689 @var{owner}'s login group.
8690
8691 @item @samp{:}group
8692 If the colon and following @var{group} are given, but the owner
8693 is omitted, only the group of the files is changed; in this case,
8694 @command{chown} performs the same function as @command{chgrp}.
8695
8696 @item @samp{:}
8697 If only a colon is given, or if @var{new-owner} is empty, neither the
8698 owner nor the group is changed.
8699
8700 @end table
8701
8702 Some older scripts may still use @samp{.} in place of the @samp{:} separator.
8703 @acronym{POSIX} 1003.1-2001 (@pxref{Standards conformance}) does not
8704 require support for that, but for backward compatibility @acronym{GNU}
8705 @command{chown} supports @samp{.} so long as no ambiguity results.
8706 New scripts should avoid the use of @samp{.} because it is not
8707 portable, and because it has undesirable results if the entire
8708 @var{owner@samp{.}group} happens to identify a user whose name
8709 contains @samp{.}.
8710
8711 The @command{chown} command sometimes clears the set-user-ID or
8712 set-group-ID permission bits.  This behavior depends on the policy and
8713 functionality of the underlying @code{chown} system call, which may
8714 make system-dependent file mode modifications outside the control of
8715 the @command{chown} command.  For example, the @command{chown} command
8716 might not affect those bits when invoked by a user with appropriate
8717 privileges, or when the
8718 bits signify some function other than executable permission (e.g.,
8719 mandatory locking).
8720 When in doubt, check the underlying system behavior.
8721
8722 The program accepts the following options.  Also see @ref{Common options}.
8723
8724 @table @samp
8725
8726 @item -c
8727 @itemx --changes
8728 @opindex -c
8729 @opindex --changes
8730 @cindex changed owners, verbosely describing
8731 Verbosely describe the action for each @var{file} whose ownership
8732 actually changes.
8733
8734 @item -f
8735 @itemx --silent
8736 @itemx --quiet
8737 @opindex -f
8738 @opindex --silent
8739 @opindex --quiet
8740 @cindex error messages, omitting
8741 Do not print error messages about files whose ownership cannot be
8742 changed.
8743
8744 @itemx @w{@kbd{--from}=@var{old-owner}}
8745 @opindex --from
8746 @cindex symbolic links, changing owner
8747 Change a @var{file}'s ownership only if it has current attributes specified
8748 by @var{old-owner}.  @var{old-owner} has the same form as @var{new-owner}
8749 described above.
8750 This option is useful primarily from a security standpoint in that
8751 it narrows considerably the window of potential abuse.
8752 For example, to reflect a user ID numbering change for one user's files
8753 without an option like this, @code{root} might run
8754
8755 @smallexample
8756 find / -owner OLDUSER -print0 | xargs -0 chown -h NEWUSER
8757 @end smallexample
8758
8759 But that is dangerous because the interval between when the @command{find}
8760 tests the existing file's owner and when the @command{chown} is actually run
8761 may be quite large.
8762 One way to narrow the gap would be to invoke chown for each file
8763 as it is found:
8764
8765 @example
8766 find / -owner OLDUSER -exec chown -h NEWUSER @{@} \;
8767 @end example
8768
8769 But that is very slow if there are many affected files.
8770 With this option, it is safer (the gap is narrower still)
8771 though still not perfect:
8772
8773 @example
8774 chown -h -R --from=OLDUSER NEWUSER /
8775 @end example
8776
8777 @item --dereference
8778 @opindex --dereference
8779 @cindex symbolic links, changing owner
8780 @findex lchown
8781 Do not act on symbolic links themselves but rather on what they point to.
8782 This is the default.
8783
8784 @item -h
8785 @itemx --no-dereference
8786 @opindex -h
8787 @opindex --no-dereference
8788 @cindex symbolic links, changing owner
8789 @findex lchown
8790 Act on symbolic links themselves instead of what they point to.
8791 This mode relies on the @code{lchown} system call.
8792 On systems that do not provide the @code{lchown} system call,
8793 @command{chown} fails when a file specified on the command line
8794 is a symbolic link.
8795 By default, no diagnostic is issued for symbolic links encountered
8796 during a recursive traversal, but see @option{--verbose}.
8797
8798 @itemx --preserve-root
8799 @opindex --preserve-root
8800 @cindex root directory, disallow recursive modification
8801 Fail upon any attempt to recursively change the file system root, @file{/}.
8802 Without @option{--recursive}, this option has no effect.
8803 @xref{Treating / specially}.
8804
8805 @itemx --no-preserve-root
8806 @opindex --no-preserve-root
8807 @cindex root directory, allow recursive modification
8808 Cancel the effect of any preceding @option{--preserve-root} option.
8809 @xref{Treating / specially}.
8810
8811 @item --reference=@var{ref_file}
8812 @opindex --reference
8813 Change the user and group of each @var{file} to be the same as those of
8814 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
8815 user and group of the symbolic link, but rather those of the file it
8816 refers to.
8817
8818 @item -v
8819 @itemx --verbose
8820 @opindex -v
8821 @opindex --verbose
8822 Output a diagnostic for every file processed.
8823 If a symbolic link is encountered during a recursive traversal
8824 on a system without the @code{lchown} system call, and @option{--no-dereference}
8825 is in effect, then issue a diagnostic saying neither the symbolic link nor
8826 its referent is being changed.
8827
8828 @item -R
8829 @itemx --recursive
8830 @opindex -R
8831 @opindex --recursive
8832 @cindex recursively changing file ownership
8833 Recursively change ownership of directories and their contents.
8834
8835 @choptH
8836 @xref{Traversing symlinks}.
8837
8838 @choptL
8839 @xref{Traversing symlinks}.
8840
8841 @choptP
8842 @xref{Traversing symlinks}.
8843
8844 @end table
8845
8846 @exitstatus
8847
8848 Examples:
8849
8850 @smallexample
8851 # Change the owner of /u to "root".
8852 chown root /u
8853
8854 # Likewise, but also change its group to "staff".
8855 chown root:staff /u
8856
8857 # Change the owner of /u and subfiles to "root".
8858 chown -hR root /u
8859 @end smallexample
8860
8861
8862 @node chgrp invocation
8863 @section @command{chgrp}: Change group ownership
8864
8865 @pindex chgrp
8866 @cindex group ownership, changing
8867 @cindex changing group ownership
8868
8869 @command{chgrp} changes the group ownership of each given @var{file}
8870 to @var{group} (which can be either a group name or a numeric group ID)
8871 or to the group of an existing reference file.  Synopsis:
8872
8873 @example
8874 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@} @var{file}@dots{}
8875 @end example
8876
8877 The program accepts the following options.  Also see @ref{Common options}.
8878
8879 @table @samp
8880
8881 @item -c
8882 @itemx --changes
8883 @opindex -c
8884 @opindex --changes
8885 @cindex changed files, verbosely describing
8886 Verbosely describe the action for each @var{file} whose group actually
8887 changes.
8888
8889 @item -f
8890 @itemx --silent
8891 @itemx --quiet
8892 @opindex -f
8893 @opindex --silent
8894 @opindex --quiet
8895 @cindex error messages, omitting
8896 Do not print error messages about files whose group cannot be
8897 changed.
8898
8899 @item --dereference
8900 @opindex --dereference
8901 @cindex symbolic links, changing owner
8902 @findex lchown
8903 Do not act on symbolic links themselves but rather on what they point to.
8904 This is the default.
8905
8906 @item -h
8907 @itemx --no-dereference
8908 @opindex -h
8909 @opindex --no-dereference
8910 @cindex symbolic links, changing group
8911 @findex lchown
8912 Act on symbolic links themselves instead of what they point to.
8913 This mode relies on the @code{lchown} system call.
8914 On systems that do not provide the @code{lchown} system call,
8915 @command{chgrp} fails when a file specified on the command line
8916 is a symbolic link.
8917 By default, no diagnostic is issued for symbolic links encountered
8918 during a recursive traversal, but see @option{--verbose}.
8919
8920 @itemx --preserve-root
8921 @opindex --preserve-root
8922 @cindex root directory, disallow recursive modification
8923 Fail upon any attempt to recursively change the file system root, @file{/}.
8924 Without @option{--recursive}, this option has no effect.
8925 @xref{Treating / specially}.
8926
8927 @itemx --no-preserve-root
8928 @opindex --no-preserve-root
8929 @cindex root directory, allow recursive modification
8930 Cancel the effect of any preceding @option{--preserve-root} option.
8931 @xref{Treating / specially}.
8932
8933 @item --reference=@var{ref_file}
8934 @opindex --reference
8935 Change the group of each @var{file} to be the same as that of
8936 @var{ref_file}.  If @var{ref_file} is a symbolic link, do not use the
8937 group of the symbolic link, but rather that of the file it refers to.
8938
8939 @item -v
8940 @itemx --verbose
8941 @opindex -v
8942 @opindex --verbose
8943 Output a diagnostic for every file processed.
8944 If a symbolic link is encountered during a recursive traversal
8945 on a system without the @code{lchown} system call, and @option{--no-dereference}
8946 is in effect, then issue a diagnostic saying neither the symbolic link nor
8947 its referent is being changed.
8948
8949 @item -R
8950 @itemx --recursive
8951 @opindex -R
8952 @opindex --recursive
8953 @cindex recursively changing group ownership
8954 Recursively change the group ownership of directories and their contents.
8955
8956 @choptH
8957 @xref{Traversing symlinks}.
8958
8959 @choptL
8960 @xref{Traversing symlinks}.
8961
8962 @choptP
8963 @xref{Traversing symlinks}.
8964
8965 @end table
8966
8967 @exitstatus
8968
8969 Examples:
8970
8971 @smallexample
8972 # Change the group of /u to "staff".
8973 chgrp staff /u
8974
8975 # Change the group of /u and subfiles to "staff".
8976 chgrp -hR staff /u
8977 @end smallexample
8978
8979
8980 @node chmod invocation
8981 @section @command{chmod}: Change access permissions
8982
8983 @pindex chmod
8984 @cindex changing access permissions
8985 @cindex access permissions, changing
8986 @cindex permissions, changing access
8987
8988 @command{chmod} changes the access permissions of the named files.  Synopsis:
8989
8990 @example
8991 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@} @var{file}@dots{}
8992 @end example
8993
8994 @cindex symbolic links, permissions of
8995 @command{chmod} never changes the permissions of symbolic links, since
8996 the @command{chmod} system call cannot change their permissions.
8997 This is not a problem since the permissions of symbolic links are
8998 never used.  However, for each symbolic link listed on the command
8999 line, @command{chmod} changes the permissions of the pointed-to file.
9000 In contrast, @command{chmod} ignores symbolic links encountered during
9001 recursive directory traversals.
9002
9003 A successful use of @command{chmod} clears the set-group-ID bit of a
9004 regular file if the file's group ID does not match the user's
9005 effective group ID or one of the user's supplementary group IDs,
9006 unless the user has appropriate privileges.  Additional restrictions
9007 may cause the set-user-ID and set-group-ID bits of @var{mode} or
9008 @var{ref_file} to be ignored.  This behavior depends on the policy and
9009 functionality of the underlying @code{chmod} system call.  When in
9010 doubt, check the underlying system behavior.
9011
9012 If used, @var{mode} specifies the new file mode bits.
9013 For details, see the section on @ref{File permissions}.
9014 If you really want @var{mode} to have a leading @samp{-}, you should
9015 use @option{--} first, e.g., @samp{chmod -- -w file}.  Typically,
9016 though, @samp{chmod a-w file} is preferable, and @command{chmod -w
9017 file} (without the @option{--}) complains if it behaves differently
9018 from what @samp{chmod a-w file} would do.
9019
9020 The program accepts the following options.  Also see @ref{Common options}.
9021
9022 @table @samp
9023
9024 @item -c
9025 @itemx --changes
9026 @opindex -c
9027 @opindex --changes
9028 Verbosely describe the action for each @var{file} whose permissions
9029 actually changes.
9030
9031 @item -f
9032 @itemx --silent
9033 @itemx --quiet
9034 @opindex -f
9035 @opindex --silent
9036 @opindex --quiet
9037 @cindex error messages, omitting
9038 Do not print error messages about files whose permissions cannot be
9039 changed.
9040
9041 @itemx --preserve-root
9042 @opindex --preserve-root
9043 @cindex root directory, disallow recursive modification
9044 Fail upon any attempt to recursively change the file system root, @file{/}.
9045 Without @option{--recursive}, this option has no effect.
9046 @xref{Treating / specially}.
9047
9048 @itemx --no-preserve-root
9049 @opindex --no-preserve-root
9050 @cindex root directory, allow recursive modification
9051 Cancel the effect of any preceding @option{--preserve-root} option.
9052 @xref{Treating / specially}.
9053
9054 @item -v
9055 @itemx --verbose
9056 @opindex -v
9057 @opindex --verbose
9058 Verbosely describe the action or non-action taken for every @var{file}.
9059
9060 @item --reference=@var{ref_file}
9061 @opindex --reference
9062 Change the mode of each @var{file} to be the same as that of @var{ref_file}.
9063 @xref{File permissions}.
9064 If @var{ref_file} is a symbolic link, do not use the mode
9065 of the symbolic link, but rather that of the file it refers to.
9066
9067 @item -R
9068 @itemx --recursive
9069 @opindex -R
9070 @opindex --recursive
9071 @cindex recursively changing access permissions
9072 Recursively change permissions of directories and their contents.
9073
9074 @end table
9075
9076 @exitstatus
9077
9078
9079 @node touch invocation
9080 @section @command{touch}: Change file timestamps
9081
9082 @pindex touch
9083 @cindex changing file timestamps
9084 @cindex file timestamps, changing
9085 @cindex timestamps, changing file
9086
9087 @command{touch} changes the access and/or modification times of the
9088 specified files.  Synopsis:
9089
9090 @example
9091 touch [@var{option}]@dots{} @var{file}@dots{}
9092 @end example
9093
9094 @cindex empty files, creating
9095 Any @var{file} that does not exist is created empty.
9096
9097 A @var{file} of @samp{-} causes @command{touch} to change the
9098 times of the file associated with standard output.
9099
9100 @cindex permissions, for changing file timestamps
9101 If changing both the access and modification times to the current
9102 time, @command{touch} can change the timestamps for files that the user
9103 running it does not own but has write permission for.  Otherwise, the
9104 user must own the files.
9105
9106 Although @command{touch} provides options for changing two of the times---the
9107 times of last access and modification---of a file, there is actually
9108 a third one as well: the inode change time.  This is often referred to
9109 as a file's @code{ctime}.
9110 The inode change time represents the time when the file's meta-information
9111 last changed.  One common example of this is when the permissions of a
9112 file change.  Changing the permissions doesn't access the file, so
9113 the atime doesn't change, nor does it modify the file, so the mtime
9114 doesn't change.  Yet, something about the file itself has changed,
9115 and this must be noted somewhere.  This is the job of the ctime field.
9116 This is necessary, so that, for example, a backup program can make a
9117 fresh copy of the file, including the new permissions value.
9118 Another operation that modifies a file's ctime without affecting
9119 the others is renaming.  In any case, it is not possible, in normal
9120 operations, for a user to change the ctime field to a user-specified value.
9121
9122 @vindex TZ
9123 Time stamps assume the time zone rules specified by the @env{TZ}
9124 environment variable, or by the system default rules if @env{TZ} is
9125 not set.  @xref{TZ Variable,, Specifying the Time Zone with @env{TZ},
9126 libc, The GNU C Library}.  You can avoid avoid ambiguities during
9127 daylight saving transitions by using @sc{utc} time stamps.
9128
9129 The program accepts the following options.  Also see @ref{Common options}.
9130
9131 @table @samp
9132
9133 @item -a
9134 @itemx --time=atime
9135 @itemx --time=access
9136 @itemx --time=use
9137 @opindex -a
9138 @opindex --time
9139 @opindex atime@r{, changing}
9140 @opindex access @r{time, changing}
9141 @opindex use @r{time, changing}
9142 Change the access time only.
9143
9144 @item -c
9145 @itemx --no-create
9146 @opindex -c
9147 @opindex --no-create
9148 Do not create files that do not exist.
9149
9150 @item -d
9151 @itemx --date=@var{time}
9152 @opindex -d
9153 @opindex --date
9154 @opindex time
9155 Use @var{time} instead of the current time.  It can contain month names,
9156 time zones, @samp{am} and @samp{pm}, @samp{yesterday}, etc.  For
9157 example, @option{--date="2004-02-27 14:19:13.489392193 +0530"}
9158 specifies the instant of time that is 489,392,193 nanoseconds after
9159 February 27, 2004 at 2:19:13 PM in a time zone that is 5 hours and 30
9160 minutes east of @acronym{UTC}.  @xref{Date input formats}.
9161 File systems that do not support high-resolution time stamps
9162 silently ignore any excess precision here.
9163
9164 @item -f
9165 @opindex -f
9166 @cindex BSD @command{touch} compatibility
9167 Ignored; for compatibility with BSD versions of @command{touch}.
9168
9169 @item -m
9170 @itemx --time=mtime
9171 @itemx --time=modify
9172 @opindex -m
9173 @opindex --time
9174 @opindex mtime@r{, changing}
9175 @opindex modify @r{time, changing}
9176 Change the modification time only.
9177
9178 @item -r @var{file}
9179 @itemx --reference=@var{file}
9180 @opindex -r
9181 @opindex --reference
9182 Use the times of the reference @var{file} instead of the current time.
9183 If this option is combined with the @option{--date=@var{time}}
9184 (@option{-d @var{time}}) option, the reference @var{file}'s time is
9185 the origin for any relative @var{time}s given, but is otherwise ignored.
9186 For example, @samp{-r foo -d '-5 seconds'} specifies a time stamp
9187 equal to five seconds before the corresponding time stamp for @file{foo}.
9188
9189 @item -t [[@var{CC}]@var{YY}]@var{MMDDhhmm}[.@var{ss}]
9190 Use the argument (optional four-digit or two-digit years, months,
9191 days, hours, minutes, optional seconds) instead of the current time.
9192 If the year is specified with only two digits, then @var{CC}
9193 is 20 for years in the range 0 @dots{} 68, and 19 for years in
9194 69 @dots{} 99.  If no digits of the year are specified,
9195 the argument is interpreted as a date in the current year.
9196
9197 @end table
9198
9199 @vindex _POSIX2_VERSION
9200 On older systems, @command{touch} supports an obsolete syntax, as follows.
9201 If no timestamp is given with any of the @option{-d}, @option{-r}, or
9202 @option{-t} options, and if there are two or more @var{file}s and the
9203 first @var{file} is of the form @samp{@var{MMDDhhmm}[@var{YY}]} and this
9204 would be a valid argument to the @option{-t} option (if the @var{YY}, if
9205 any, were moved to the front), and if the represented year
9206 is in the range 1969--1999, that argument is interpreted as the time
9207 for the other files instead of as a file name.
9208 This obsolete behavior can be enabled or disabled with the
9209 @env{_POSIX2_VERSION} environment variable (@pxref{Standards
9210 conformance}), but portable scripts should avoid commands whose
9211 behavior depends on this variable.
9212 For example, use @samp{touch ./12312359 main.c} or @samp{touch -t
9213 12312359 main.c} rather than the ambiguous @samp{touch 12312359 main.c}.
9214
9215 @exitstatus
9216
9217
9218 @node Disk usage
9219 @chapter Disk usage
9220
9221 @cindex disk usage
9222
9223 No disk can hold an infinite amount of data.  These commands report on
9224 how much disk storage is in use or available.  (This has nothing much to
9225 do with how much @emph{main memory}, i.e., RAM, a program is using when
9226 it runs; for that, you want @command{ps} or @command{pstat} or @command{swap}
9227 or some such command.)
9228
9229 @menu
9230 * df invocation::               Report file system disk space usage.
9231 * du invocation::               Estimate file space usage.
9232 * stat invocation::             Report file or file system status.
9233 * sync invocation::             Synchronize memory and disk.
9234 @end menu
9235
9236
9237 @node df invocation
9238 @section @command{df}: Report file system disk space usage
9239
9240 @pindex df
9241 @cindex file system disk usage
9242 @cindex disk usage by file system
9243
9244 @command{df} reports the amount of disk space used and available on
9245 file systems.  Synopsis:
9246
9247 @example
9248 df [@var{option}]@dots{} [@var{file}]@dots{}
9249 @end example
9250
9251 With no arguments, @command{df} reports the space used and available on all
9252 currently mounted file systems (of all types).  Otherwise, @command{df}
9253 reports on the file system containing each argument @var{file}.
9254
9255 Normally the disk space is printed in units of
9256 1024 bytes, but this can be overridden (@pxref{Block size}).
9257 Non-integer quantities are rounded up to the next higher unit.
9258
9259 @cindex disk device file
9260 @cindex device file, disk
9261 If an argument @var{file} is a disk device file containing a mounted
9262 file system, @command{df} shows the space available on that file system
9263 rather than on the file system containing the device node (i.e., the root
9264 file system).  @sc{gnu} @command{df} does not attempt to determine the disk usage
9265 on unmounted file systems, because on most kinds of systems doing so
9266 requires extremely nonportable intimate knowledge of file system
9267 structures.
9268
9269 The program accepts the following options.  Also see @ref{Common options}.
9270
9271 @table @samp
9272
9273 @item -a
9274 @itemx --all
9275 @opindex -a
9276 @opindex --all
9277 @cindex automounter file systems
9278 @cindex ignore file systems
9279 Include in the listing dummy file systems, which
9280 are omitted by default.  Such file systems are typically special-purpose
9281 pseudo-file-systems, such as automounter entries.
9282
9283 @item -B @var{size}
9284 @itemx --block-size=@var{size}
9285 @opindex -B
9286 @opindex --block-size
9287 @cindex file system sizes
9288 Scale sizes by @var{size} before printing them (@pxref{Block size}).
9289 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
9290
9291 @optHumanReadable
9292
9293 @item -H
9294 @opindex -H
9295 Equivalent to @option{--si}.
9296
9297 @item -i
9298 @itemx --inodes
9299 @opindex -i
9300 @opindex --inodes
9301 @cindex inode usage
9302 List inode usage information instead of block usage.  An inode (short
9303 for index node) contains information about a file such as its owner,
9304 permissions, timestamps, and location on the disk.
9305
9306 @item -k
9307 @opindex -k
9308 @cindex kibibytes for file system sizes
9309 Print sizes in 1024-byte blocks, overriding the default block size
9310 (@pxref{Block size}).
9311 This option is equivalent to @option{--block-size=1K}.
9312
9313 @item -l
9314 @itemx --local
9315 @opindex -l
9316 @opindex --local
9317 @cindex file system types, limiting output to certain
9318 Limit the listing to local file systems.  By default, remote file systems
9319 are also listed.
9320
9321 @item --no-sync
9322 @opindex --no-sync
9323 @cindex file system space, retrieving old data more quickly
9324 Do not invoke the @code{sync} system call before getting any usage data.
9325 This may make @command{df} run significantly faster on systems with many
9326 disks, but on some systems (notably SunOS) the results may be slightly
9327 out of date.  This is the default.
9328
9329 @item -P
9330 @itemx --portability
9331 @opindex -P
9332 @opindex --portability
9333 @cindex one-line output format
9334 @cindex @acronym{POSIX} output format
9335 @cindex portable output format
9336 @cindex output format, portable
9337 Use the @acronym{POSIX} output format.  This is like the default format except
9338 for the following:
9339
9340 @enumerate
9341 @item
9342 The information about each file system is always printed on exactly
9343 one line; a mount device is never put on a line by itself.  This means
9344 that if the mount device name is more than 20 characters long (e.g., for
9345 some network mounts), the columns are misaligned.
9346
9347 @item
9348 The labels in the header output line are changed to conform to @acronym{POSIX}.
9349 @end enumerate
9350
9351 @optSi
9352
9353 @item --sync
9354 @opindex --sync
9355 @cindex file system space, retrieving current data more slowly
9356 Invoke the @code{sync} system call before getting any usage data.  On
9357 some systems (notably SunOS), doing this yields more up to date results,
9358 but in general this option makes @command{df} much slower, especially when
9359 there are many or very busy file systems.
9360
9361 @item -t @var{fstype}
9362 @itemx --type=@var{fstype}
9363 @opindex -t
9364 @opindex --type
9365 @cindex file system types, limiting output to certain
9366 Limit the listing to file systems of type @var{fstype}.  Multiple
9367 file system types can be specified by giving multiple @option{-t} options.
9368 By default, nothing is omitted.
9369
9370 @item -T
9371 @itemx --print-type
9372 @opindex -T
9373 @opindex --print-type
9374 @cindex file system types, printing
9375 Print each file system's type.  The types printed here are the same ones
9376 you can include or exclude with @option{-t} and @option{-x}.  The particular
9377 types printed are whatever is supported by the system.  Here are some of
9378 the common names (this list is certainly not exhaustive):
9379
9380 @table @samp
9381
9382 @item nfs
9383 @cindex @acronym{NFS} file system type
9384 An @acronym{NFS} file system, i.e., one mounted over a network from another
9385 machine.  This is the one type name which seems to be used uniformly by
9386 all systems.
9387
9388 @item 4.2@r{, }ufs@r{, }efs@dots{}
9389 @cindex Linux file system types
9390 @cindex local file system types
9391 @opindex 4.2 @r{file system type}
9392 @opindex ufs @r{file system type}
9393 @opindex efs @r{file system type}
9394 A file system on a locally-mounted hard disk.  (The system might even
9395 support more than one type here; Linux does.)
9396
9397 @item hsfs@r{, }cdfs
9398 @cindex CD-ROM file system type
9399 @cindex High Sierra file system
9400 @opindex hsfs @r{file system type}
9401 @opindex cdfs @r{file system type}
9402 A file system on a CD-ROM drive.  HP-UX uses @samp{cdfs}, most other
9403 systems use @samp{hsfs} (@samp{hs} for ``High Sierra'').
9404
9405 @item pcfs
9406 @cindex PC file system
9407 @cindex DOS file system
9408 @cindex MS-DOS file system
9409 @cindex diskette file system
9410 @opindex pcfs
9411 An MS-DOS file system, usually on a diskette.
9412
9413 @end table
9414
9415 @item -x @var{fstype}
9416 @itemx --exclude-type=@var{fstype}
9417 @opindex -x
9418 @opindex --exclude-type
9419 Limit the listing to file systems not of type @var{fstype}.
9420 Multiple file system types can be eliminated by giving multiple
9421 @option{-x} options.  By default, no file system types are omitted.
9422
9423 @item -v
9424 Ignored; for compatibility with System V versions of @command{df}.
9425
9426 @end table
9427
9428 @exitstatus
9429 Failure includes the case where no output is generated, so you can
9430 inspect the exit status of a command like @samp{df -t ext3 -t reiserfs
9431 @var{dir}} to test whether @var{dir} is on a file system of type
9432 @samp{ext3} or @samp{reiserfs}.
9433
9434
9435 @node du invocation
9436 @section @command{du}: Estimate file space usage
9437
9438 @pindex du
9439 @cindex file space usage
9440 @cindex disk usage for files
9441
9442 @command{du} reports the amount of disk space used by the specified files
9443 and for each subdirectory (of directory arguments).  Synopsis:
9444
9445 @example
9446 du [@var{option}]@dots{} [@var{file}]@dots{}
9447 @end example
9448
9449 With no arguments, @command{du} reports the disk space for the current
9450 directory.  Normally the disk space is printed in units of
9451 1024 bytes, but this can be overridden (@pxref{Block size}).
9452 Non-integer quantities are rounded up to the next higher unit.
9453
9454 The program accepts the following options.  Also see @ref{Common options}.
9455
9456 @table @samp
9457
9458 @item -a
9459 @itemx --all
9460 @opindex -a
9461 @opindex --all
9462 Show counts for all files, not just directories.
9463
9464 @itemx --apparent-size
9465 @opindex --apparent-size
9466 Print apparent sizes, rather than disk usage.  The apparent size of a
9467 file is the number of bytes reported by @code{wc -c} on regular files,
9468 or more generally, @code{ls -l --block-size=1} or @code{stat --format=%s}.
9469 For example, a file containing the word @samp{zoo} with no newline would,
9470 of course, have an apparent size of 3.  Such a small file may require
9471 anywhere from 0 to 16 KiB or more of disk space, depending on
9472 the type and configuration of the file system on which the file resides.
9473 However, a sparse file created with this command:
9474
9475 @example
9476 dd bs=1 seek=2GiB if=/dev/null of=big
9477 @end example
9478
9479 @noindent
9480 has an apparent size of 2 GiB, yet on most modern
9481 systems, it actually uses almost no disk space.
9482
9483 @item -b
9484 @itemx --bytes
9485 @opindex -b
9486 @opindex --bytes
9487 Equivalent to @code{--apparent-size --block-size=1}.
9488
9489 @item -B @var{size}
9490 @itemx --block-size=@var{size}
9491 @opindex -B
9492 @opindex --block-size
9493 @cindex file sizes
9494 Scale sizes by @var{size} before printing them (@pxref{Block size}).
9495 For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
9496
9497 @item -c
9498 @itemx --total
9499 @opindex -c
9500 @opindex --total
9501 @cindex grand total of disk space
9502 Print a grand total of all arguments after all arguments have
9503 been processed.  This can be used to find out the total disk usage of
9504 a given set of files or directories.
9505
9506 @item -D
9507 @itemx --dereference-args
9508 @opindex -D
9509 @opindex --dereference-args
9510 Dereference symbolic links that are command line arguments.
9511 Does not affect other symbolic links.  This is helpful for finding
9512 out the disk usage of directories, such as @file{/usr/tmp}, which
9513 are often symbolic links.
9514
9515 @itemx --files0-from=@var{FILE}
9516 @opindex --files0-from=@var{FILE}
9517 @cindex including files from @command{du}
9518 Rather than processing files named on the command line, process those
9519 named in file @var{FILE}; each name is terminated by a null byte.
9520 This is useful with the @option{--total} (@option{-c}) option when
9521 the list of file names is so long that it may exceed a command line
9522 length limitation.
9523 In such cases, running @command{du} via @command{xargs} is undesirable
9524 because it splits the list into pieces and makes @command{du} print a
9525 total for each sublist rather than for the entire list.
9526 One way to produce a list of null-byte-terminated file names is with @sc{gnu}
9527 @command{find}, using its @option{-print0} predicate.
9528 Do not specify any @var{FILE} on the command line when using this option.
9529
9530 @optHumanReadable
9531
9532 @item -H
9533 @opindex -H
9534 Currently, @option{-H} is the same as @option{--si},
9535 except that @option{-H} evokes a warning.
9536 This option will be changed to be equivalent to
9537 @option{--dereference-args} (@option{-D}).
9538
9539 @item -k
9540 @opindex -k
9541 @cindex kibibytes for file sizes
9542 Print sizes in 1024-byte blocks, overriding the default block size
9543 (@pxref{Block size}).
9544 This option is equivalent to @option{--block-size=1K}.
9545
9546 @item -l
9547 @itemx --count-links
9548 @opindex -l
9549 @opindex --count-links
9550 @cindex hard links, counting in @command{du}
9551 Count the size of all files, even if they have appeared already (as a
9552 hard link).
9553
9554 @item -L
9555 @itemx --dereference
9556 @opindex -L
9557 @opindex --dereference
9558 @cindex symbolic links, dereferencing in @command{du}
9559 Dereference symbolic links (show the disk space used by the file
9560 or directory that the link points to instead of the space used by
9561 the link).
9562
9563 @item -m
9564 @opindex -m
9565 @cindex mebibytes for file sizes
9566 Print sizes in 1,048,576-byte blocks, overriding the default block size
9567 (@pxref{Block size}).
9568 This option is equivalent to @option{--block-size=1M}.
9569
9570 @item -P
9571 @itemx --no-dereference
9572 @opindex -P
9573 @opindex --no-dereference
9574 @cindex symbolic links, dereferencing in @command{du}
9575 For each symbolic links encountered by @command{du},
9576 consider the disk space used by the symbolic link.
9577
9578 @item --max-depth=@var{DEPTH}
9579 @opindex --max-depth=@var{DEPTH}
9580 @cindex limiting output of @command{du}
9581 Show the total for each directory (and file if --all) that is at
9582 most MAX_DEPTH levels down from the root of the hierarchy.  The root
9583 is at level 0, so @code{du --max-depth=0} is equivalent to @code{du -s}.
9584
9585 @item -0
9586 @opindex -0
9587 @itemx --null
9588 @opindex --null
9589 @cindex output null-byte-terminated lines
9590 Output a null byte at the end of each line, rather than a newline.
9591 This option enables other programs to parse the output of @command{du}
9592 even when that output would contain file names with embedded newlines.
9593
9594 @itemx --si
9595 @opindex --si
9596 @cindex SI output
9597 Append an SI-style abbreviation to each size, such as @samp{MB} for
9598 megabytes.  Powers of 1000 are used, not 1024; @samp{MB} stands for
9599 1,000,000 bytes.  Use the @option{-h} or @option{--human-readable} option if
9600 you prefer powers of 1024.
9601
9602 @item -s
9603 @itemx --summarize
9604 @opindex -s
9605 @opindex --summarize
9606 Display only a total for each argument.
9607
9608 @item -S
9609 @itemx --separate-dirs
9610 @opindex -S
9611 @opindex --separate-dirs
9612 Report the size of each directory separately, not including the sizes
9613 of subdirectories.
9614
9615 @itemx --time
9616 @opindex --time
9617 @cindex last modified dates, displaying in @command{du}
9618 Show time of the most recent modification of any file in the directory,
9619 or any of its subdirectories.
9620
9621 @itemx --time=ctime
9622 @itemx --time=status
9623 @itemx --time=use
9624 @opindex --time
9625 @opindex ctime@r{, show the most recent}
9626 @opindex status time@r{, show the most recent}
9627 @opindex use time@r{, show the most recent}
9628 Show the most recent status change time (the @samp{ctime} in the inode) of
9629 any file in the directory, instead of the modification time.
9630
9631 @itemx --time=atime
9632 @itemx --time=access
9633 @opindex --time
9634 @opindex atime@r{, show the most recent}
9635 @opindex access time@r{, show the most recent}
9636 Show the most recent access time (the @samp{atime} in the inode) of
9637 any file in the directory, instead of the modification time.
9638
9639 @item --time-style=@var{style}
9640 @opindex --time-style
9641 @cindex time style
9642 List timestamps in style @var{style}.  This option has an effect only if
9643 the @option{--time} option is also specified.  The @var{style} should
9644 be one of the following:
9645
9646 @table @samp
9647 @item +@var{format}
9648 @vindex LC_TIME
9649 List timestamps using @var{format}, where @var{format} is interpreted
9650 like the format argument of @command{date} (@pxref{date invocation}).
9651 For example, @option{--time-style="+%Y-%m-%d %H:%M:%S"} causes
9652 @command{du} to list timestamps like @samp{2002-03-30 23:45:56}.  As
9653 with @command{date}, @var{format}'s interpretation is affected by the
9654 @env{LC_TIME} locale category.
9655
9656 @item full-iso
9657 List timestamps in full using @acronym{ISO} 8601 date, time, and time zone
9658 format with nanosecond precision, e.g., @samp{2002-03-30
9659 23:45:56.477817180 -0700}.  This style is equivalent to
9660 @samp{+%Y-%m-%d %H:%M:%S.%N %z}.
9661
9662 @item long-iso
9663 List @acronym{ISO} 8601 date and time in minutes, e.g.,
9664 @samp{2002-03-30 23:45}.  These timestamps are shorter than
9665 @samp{full-iso} timestamps, and are usually good enough for everyday
9666 work.  This style is equivalent to @samp{+%Y-%m-%d %H:%M}.
9667
9668 @item iso
9669 List @acronym{ISO} 8601 dates for timestamps, e.g., @samp{2002-03-30}.
9670 This style is equivalent to @samp{+%Y-%m-%d}.
9671 @end table
9672
9673 @vindex TIME_STYLE
9674 You can specify the default value of the @option{--time-style} option
9675 with the environment variable @env{TIME_STYLE}; if @env{TIME_STYLE} is not set
9676 the default style is @samp{long-iso}.  For compatibility with @command{ls},
9677 if @env{TIME_STYLE} begins with @samp{+} and contains a newline,
9678 the newline and any later characters are ignored; if @env{TIME_STYLE}
9679 begins with @samp{posix-} the @samp{posix-} is ignored; and if
9680 @env{TIME_STYLE} is @samp{locale} it is ignored.
9681
9682 @item -x
9683 @itemx --one-file-system
9684 @opindex -x
9685 @opindex --one-file-system
9686 @cindex one file system, restricting @command{du} to
9687 Skip directories that are on different file systems from the one that
9688 the argument being processed is on.
9689
9690 @item --exclude=@var{PATTERN}
9691 @opindex --exclude=@var{PATTERN}
9692 @cindex excluding files from @command{du}
9693 When recursing, skip subdirectories or files matching @var{PATTERN}.
9694 For example, @code{du --exclude='*.o'} excludes files whose names
9695 end in @samp{.o}.
9696
9697 @item -X @var{FILE}
9698 @itemx --exclude-from=@var{FILE}
9699 @opindex -X @var{FILE}
9700 @opindex --exclude-from=@var{FILE}
9701 @cindex excluding files from @command{du}
9702 Like @option{--exclude}, except take the patterns to exclude from @var{FILE},
9703 one per line.  If @var{FILE} is @samp{-}, take the patterns from standard
9704 input.
9705
9706 @end table
9707
9708 @cindex NFS mounts from BSD to HP-UX
9709 On BSD systems, @command{du} reports sizes that are half the correct
9710 values for files that are NFS-mounted from HP-UX systems.  On HP-UX
9711 systems, it reports sizes that are twice the correct values for
9712 files that are NFS-mounted from BSD systems.  This is due to a flaw
9713 in HP-UX; it also affects the HP-UX @command{du} program.
9714
9715 @exitstatus
9716
9717
9718 @node stat invocation
9719 @section @command{stat}: Report file or file system status
9720
9721 @pindex stat
9722 @cindex file status
9723 @cindex file system status
9724
9725 @command{stat} displays information about the specified file(s).  Synopsis:
9726
9727 @example
9728 stat [@var{option}]@dots{} [@var{file}]@dots{}
9729 @end example
9730
9731 With no option, @command{stat} reports all information about the given files.
9732 But it also can be used to report the information of the file systems the
9733 given files are located on.  If the files are links, @command{stat} can
9734 also give information about the files the links point to.
9735
9736
9737 @table @samp
9738
9739 @item -L
9740 @itemx --dereference
9741 @opindex -L
9742 @opindex --dereference
9743 @cindex symbolic links, dereferencing in @command{stat}
9744 Change how @command{stat} treats symbolic links.
9745 With this option, @command{stat} acts on the file referenced
9746 by each symbolic link argument.
9747 Without it, @command{stat} acts on any symbolic link argument directly.
9748
9749 @item -f
9750 @itemx --file-system
9751 @opindex -f
9752 @opindex --file-system
9753 @cindex file systems
9754 Report information about the file systems where the given files are located
9755 instead of information about the files themselves.
9756
9757 @item -c
9758 @itemx --format=@var{format}
9759 @opindex -c
9760 @opindex --format=@var{format}
9761 @cindex output format
9762 Use @var{format} rather than the default format.
9763 @var{format} is automatically newline-terminated, so
9764 running a command like the following with two or more @var{file}
9765 operands produces a line of output for each operand:
9766 @example
9767 $ stat --format=%d:%i / /usr
9768 2050:2
9769 2057:2
9770 @end example
9771
9772 @itemx --printf=@var{format}
9773 @opindex --printf=@var{format}
9774 @cindex output format
9775 Use @var{format} rather than the default format.
9776 Like like @option{--format}, but interpret backslash escapes,
9777 and do not output a mandatory trailing newline.
9778 If you want a newline, include @samp{\n} in the @var{format}.
9779 Here's how you would use @option{--printf} to print the device
9780 and inode numbers of @file{/} and @file{/usr}:
9781 @example
9782 $ stat --printf='%d:%i\n' / /usr
9783 2050:2
9784 2057:2
9785 @end example
9786
9787 @item -t
9788 @itemx --terse
9789 @opindex -t
9790 @opindex --terse
9791 @cindex terse output
9792 Print the information in terse form, suitable for parsing by other programs.
9793
9794 The valid format sequences for files are:
9795
9796 @itemize @bullet
9797 @item %a - Access rights in octal
9798 @item %A - Access rights in human readable form
9799 @item %b - Number of blocks allocated (see @samp{%B})
9800 @item %B - The size in bytes of each block reported by @samp{%b}
9801 @item %d - Device number in decimal
9802 @item %D - Device number in hex
9803 @item %f - Raw mode in hex
9804 @item %F - File type
9805 @item %g - Group ID of owner
9806 @item %G - Group name of owner
9807 @item %h - Number of hard links
9808 @item %i - Inode number
9809 @item %n - File name
9810 @item %N - Quoted file name with dereference if symbolic link
9811 @item %o - I/O block size
9812 @item %s - Total size, in bytes
9813 @item %t - Major device type in hex
9814 @item %T - Minor device type in hex
9815 @item %u - User ID of owner
9816 @item %U - User name of owner
9817 @item %x - Time of last access
9818 @item %X - Time of last access as seconds since Epoch
9819 @item %y - Time of last modification
9820 @item %Y - Time of last modification as seconds since Epoch
9821 @item %z - Time of last change
9822 @item %Z - Time of last change as seconds since Epoch
9823 @end itemize
9824
9825 The valid format sequences for file systems are:
9826
9827 @itemize @bullet
9828 @item %a - Free blocks available to non-super-user
9829 @item %b - Total data blocks in file system
9830 @item %c - Total file nodes in file system
9831 @item %d - Free file nodes in file system
9832 @item %f - Free blocks in file system
9833 @item %i - File System ID in hex
9834 @item %l - Maximum length of file names
9835 @item %n - File name
9836 @item %s - Block size (for faster transfers)
9837 @item %S - Fundamental block size (for block counts)
9838 @item %t - Type in hex
9839 @item %T - Type in human readable form
9840 @end itemize
9841
9842 @vindex TZ
9843 Time stamps are listed according to the time zone rules specified by
9844 the @env{TZ} environment variable, or by the system default rules if
9845 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
9846 with @env{TZ}, libc, The GNU C Library}.
9847 @end table
9848
9849 @exitstatus
9850
9851
9852 @node sync invocation
9853 @section @command{sync}: Synchronize data on disk with memory
9854
9855 @pindex sync
9856 @cindex synchronize disk and memory
9857
9858 @cindex superblock, writing
9859 @cindex inodes, written buffered
9860 @command{sync} writes any data buffered in memory out to disk.  This can
9861 include (but is not limited to) modified superblocks, modified inodes,
9862 and delayed reads and writes.  This must be implemented by the kernel;
9863 The @command{sync} program does nothing but exercise the @code{sync} system
9864 call.
9865
9866 @cindex crashes and corruption
9867 The kernel keeps data in memory to avoid doing (relatively slow) disk
9868 reads and writes.  This improves performance, but if the computer
9869 crashes, data may be lost or the file system corrupted as a
9870 result.  The @command{sync} command ensures everything in memory
9871 is written to disk.
9872
9873 Any arguments are ignored, except for a lone @option{--help} or
9874 @option{--version} (@pxref{Common options}).
9875
9876 @exitstatus
9877
9878
9879 @node Printing text
9880 @chapter Printing text
9881
9882 @cindex printing text, commands for
9883 @cindex commands for printing text
9884
9885 This section describes commands that display text strings.
9886
9887 @menu
9888 * echo invocation::             Print a line of text.
9889 * printf invocation::           Format and print data.
9890 * yes invocation::              Print a string until interrupted.
9891 @end menu
9892
9893
9894 @node echo invocation
9895 @section @command{echo}: Print a line of text
9896
9897 @pindex echo
9898 @cindex displaying text
9899 @cindex printing text
9900 @cindex text, displaying
9901 @cindex arbitrary text, displaying
9902
9903 @command{echo} writes each given @var{string} to standard output, with a
9904 space between each and a newline after the last one.  Synopsis:
9905
9906 @example
9907 echo [@var{option}]@dots{} [@var{string}]@dots{}
9908 @end example
9909
9910 The program accepts the following options.  Also see @ref{Common options}.
9911 Options must precede operands, and the normally-special argument
9912 @samp{--} has no special meaning and is treated like any other
9913 @var{string}.
9914
9915 @table @samp
9916 @item -n
9917 @opindex -n
9918 Do not output the trailing newline.
9919
9920 @item -e
9921 @opindex -e
9922 @cindex backslash escapes
9923 Enable interpretation of the following backslash-escaped characters in
9924 each @var{string}:
9925
9926 @table @samp
9927 @item \a
9928 alert (bell)
9929 @item \b
9930 backspace
9931 @item \c
9932 suppress trailing newline
9933 @item \f
9934 form feed
9935 @item \n
9936 new line
9937 @item \r
9938 carriage return
9939 @item \t
9940 horizontal tab
9941 @item \v
9942 vertical tab
9943 @item \\
9944 backslash
9945 @item \0@var{nnn}
9946 the eight-bit value that is the octal number @var{nnn}
9947 (zero to three octal digits)
9948 @item \@var{nnn}
9949 the eight-bit value that is the octal number @var{nnn}
9950 (one to three octal digits)
9951 @item \x@var{hh}
9952 the eight-bit value that is the hexadecimal number @var{hh}
9953 (one or two hexadecimal digits)
9954 @end table
9955
9956 @item -E
9957 @opindex -E
9958 @cindex backslash escapes
9959 Disable interpretation of backslash escapes in each @var{string}.
9960 This is the default.  If @option{-e} and @option{-E} are both
9961 specified, the last one given takes effect.
9962
9963 @end table
9964
9965 @vindex POSIXLY_CORRECT
9966 If the @env{POSIXLY_CORRECT} environment variable is set, then when
9967 @command{echo}'s first argument is not @option{-n} it outputs
9968 option-like arguments instead of treating them as options.  For
9969 example, @code{echo -ne hello} outputs @samp{-ne hello} instead of
9970 plain @samp{hello}.
9971
9972 @acronym{POSIX} does not require support for any options, and says
9973 that the behavior of @command{echo} is implementation-defined if any
9974 @var{string} contains a backslash or if the first argument is
9975 @option{-n}.  Portable programs can use the @command{printf} command
9976 if they need to omit trailing newlines or output control characters or
9977 backslashes.  @xref{printf invocation}.
9978
9979 @exitstatus
9980
9981
9982 @node printf invocation
9983 @section @command{printf}: Format and print data
9984
9985 @pindex printf
9986 @command{printf} does formatted printing of text.  Synopsis:
9987
9988 @example
9989 printf @var{format} [@var{argument}]@dots{}
9990 @end example
9991
9992 @command{printf} prints the @var{format} string, interpreting @samp{%}
9993 directives and @samp{\} escapes to format numeric and string arguments
9994 in a way that is mostly similar to the C @samp{printf} function.  The
9995 differences are as follows:
9996
9997 @itemize @bullet
9998
9999 @item
10000 The @var{format} argument is reused as necessary to convert all the
10001 given @var{argument}s.  For example, the command @samp{printf %s a b}
10002 outputs @samp{ab}.
10003
10004 @item
10005 Missing @var{argument}s are treated as null strings or as zeros,
10006 depending on whether the context expects a string or a number.  For
10007 example, the command @samp{printf %sx%d} prints @samp{x0}.
10008
10009 @item
10010 @kindex \c
10011 An additional escape, @samp{\c}, causes @command{printf} to produce no
10012 further output.  For example, the command @samp{printf 'A%sC\cD%sF' B
10013 E} prints @samp{ABC}.
10014
10015 @item
10016 The hexadecimal escape sequence @samp{\x@var{hh}} has at most two
10017 digits, as opposed to C where it can have an unlimited number of
10018 digits.  For example, the command @samp{printf '\x07e'} prints two
10019 bytes, whereas the C statement @samp{printf ("\x07e")} prints just
10020 one.
10021
10022 @item
10023 @kindex %b
10024 @command{printf} has an additional directive, @samp{%b}, which prints its
10025 argument string with @samp{\} escapes interpreted in the same way as in
10026 the @var{format} string, except that octal escapes are of the form
10027 @samp{\0@var{ooo}} where @var{ooo} is 0 to 3 octal digits.
10028 If a precision is also given, it limits the number of bytes printed
10029 from the converted string.
10030
10031 @item
10032 Numeric arguments must be single C constants, possibly with leading
10033 @samp{+} or @samp{-}.  For example, @samp{printf %.4d -3} outputs
10034 @samp{-0003}.
10035
10036 @item
10037 @vindex POSIXLY_CORRECT
10038 If the leading character of a numeric argument is @samp{"} or @samp{'}
10039 then its value is the numeric value of the immediately following
10040 character.  Any remaining characters are silently ignored if the
10041 @env{POSIXLY_CORRECT} environment variable is set; otherwise, a
10042 warning is printed.  For example, @samp{printf "%d" "'a"} outputs
10043 @samp{97} on hosts that use the @acronym{ASCII} character set, since
10044 @samp{a} has the numeric value 97 in @acronym{ASCII}.
10045
10046 @end itemize
10047
10048 @vindex LC_NUMERIC
10049 A floating-point argument must use a period before any fractional
10050 digits, but is printed according to the @env{LC_NUMERIC} category of the
10051 current locale.  For example, in a locale whose radix character is a
10052 comma, the command @samp{printf %g 3.14} outputs @samp{3,14} whereas
10053 the command @samp{printf %g 3,14} is an error.
10054
10055 @kindex \@var{ooo}
10056 @kindex \x@var{hh}
10057 @command{printf} interprets @samp{\@var{ooo}} in @var{format} as an octal number
10058 (if @var{ooo} is 1 to 3 octal digits) specifying a character to print,
10059 and @samp{\x@var{hh}} as a hexadecimal number (if @var{hh} is 1 to 2 hex
10060 digits) specifying a character to print.
10061
10062 @kindex \uhhhh
10063 @kindex \Uhhhhhhhh
10064 @cindex Unicode
10065 @cindex ISO/IEC 10646
10066 @vindex LC_CTYPE
10067 @command{printf} interprets two character syntaxes introduced in
10068 @acronym{ISO} C 99:
10069 @samp{\u} for 16-bit Unicode (@acronym{ISO}/@acronym{IEC} 10646)
10070 characters, specified as
10071 four hexadecimal digits @var{hhhh}, and @samp{\U} for 32-bit Unicode
10072 characters, specified as eight hexadecimal digits @var{hhhhhhhh}.
10073 @command{printf} outputs the Unicode characters
10074 according to the @env{LC_CTYPE} locale.
10075
10076 The processing of @samp{\u} and @samp{\U} requires a full-featured
10077 @code{iconv} facility.  It is activated on systems with glibc 2.2 (or newer),
10078 or when @code{libiconv} is installed prior to this package.  Otherwise
10079 @samp{\u} and @samp{\U} will print as-is.
10080
10081 The only options are a lone @option{--help} or
10082 @option{--version}.  @xref{Common options}.
10083 Options must precede operands.
10084
10085 The Unicode character syntaxes are useful for writing strings in a locale
10086 independent way.  For example, a string containing the Euro currency symbol
10087
10088 @example
10089 $ /usr/local/bin/printf '\u20AC 14.95'
10090 @end example
10091
10092 @noindent
10093 will be output correctly in all locales supporting the Euro symbol
10094 (@acronym{ISO}-8859-15, UTF-8, and others).  Similarly, a Chinese string
10095
10096 @example
10097 $ /usr/local/bin/printf '\u4e2d\u6587'
10098 @end example
10099
10100 @noindent
10101 will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc).
10102
10103 Note that in these examples, the full name of @command{printf} has been
10104 given, to distinguish it from the GNU @code{bash} built-in function
10105 @command{printf}.
10106
10107 For larger strings, you don't need to look up the hexadecimal code
10108 values of each character one by one.  @acronym{ASCII} characters mixed with \u
10109 escape sequences is also known as the JAVA source file encoding.  You can
10110 use GNU recode 3.5c (or newer) to convert strings to this encoding.  Here
10111 is how to convert a piece of text into a shell script which will output
10112 this text in a locale-independent way:
10113
10114 @smallexample
10115 $ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \
10116     '\u4e2d\u6587\n' > sample.txt
10117 $ recode BIG5..JAVA < sample.txt \
10118     | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
10119     > sample.sh
10120 @end smallexample
10121
10122 @exitstatus
10123
10124
10125 @node yes invocation
10126 @section @command{yes}: Print a string until interrupted
10127
10128 @pindex yes
10129 @cindex repeated output of a string
10130
10131 @command{yes} prints the command line arguments, separated by spaces and
10132 followed by a newline, forever until it is killed.  If no arguments are
10133 given, it prints @samp{y} followed by a newline forever until killed.
10134
10135 Upon a write error, @command{yes} exits with status @samp{1}.
10136
10137 The only options are a lone @option{--help} or @option{--version}.
10138 To output an argument that begins with
10139 @samp{-}, precede it with @option{--}, e.g., @samp{yes -- --help}.
10140 @xref{Common options}.
10141
10142
10143 @node Conditions
10144 @chapter Conditions
10145
10146 @cindex conditions
10147 @cindex commands for exit status
10148 @cindex exit status commands
10149
10150 This section describes commands that are primarily useful for their exit
10151 status, rather than their output.  Thus, they are often used as the
10152 condition of shell @code{if} statements, or as the last command in a
10153 pipeline.
10154
10155 @menu
10156 * false invocation::            Do nothing, unsuccessfully.
10157 * true invocation::             Do nothing, successfully.
10158 * test invocation::             Check file types and compare values.
10159 * expr invocation::             Evaluate expressions.
10160 @end menu
10161
10162
10163 @node false invocation
10164 @section @command{false}: Do nothing, unsuccessfully
10165
10166 @pindex false
10167 @cindex do nothing, unsuccessfully
10168 @cindex failure exit status
10169 @cindex exit status of @command{false}
10170
10171 @command{false} does nothing except return an exit status of 1, meaning
10172 @dfn{failure}.  It can be used as a place holder in shell scripts
10173 where an unsuccessful command is needed.
10174 In most modern shells, @command{false} is a built-in command, so when
10175 you use @samp{false} in a script, you're probably using the built-in
10176 command, not the one documented here.
10177
10178 @command{false} honors the @option{--help} and @option{--version} options.
10179
10180 This version of @command{false} is implemented as a C program, and is thus
10181 more secure and faster than a shell script implementation, and may safely
10182 be used as a dummy shell for the purpose of disabling accounts.
10183
10184 Note that @command{false} (unlike all other programs documented herein)
10185 exits unsuccessfully, even when invoked with
10186 @option{--help} or @option{--version}.
10187
10188 Portable programs should not assume that the exit status of
10189 @command{false} is 1, as it is greater than 1 on some
10190 non-@acronym{GNU} hosts.
10191
10192
10193 @node true invocation
10194 @section @command{true}: Do nothing, successfully
10195
10196 @pindex true
10197 @cindex do nothing, successfully
10198 @cindex no-op
10199 @cindex successful exit
10200 @cindex exit status of @command{true}
10201
10202 @command{true} does nothing except return an exit status of 0, meaning
10203 @dfn{success}.  It can be used as a place holder in shell scripts
10204 where a successful command is needed, although the shell built-in
10205 command @code{:} (colon) may do the same thing faster.
10206 In most modern shells, @command{true} is a built-in command, so when
10207 you use @samp{true} in a script, you're probably using the built-in
10208 command, not the one documented here.
10209
10210 @command{true} honors the @option{--help} and @option{--version} options.
10211
10212 Note, however, that it is possible to cause @command{true}
10213 to exit with nonzero status: with the @option{--help} or @option{--version}
10214 option, and with standard
10215 output already closed or redirected to a file that evokes an I/O error.
10216 For example, using a Bourne-compatible shell:
10217
10218 @example
10219 $ ./true --version >&-
10220 ./true: write error: Bad file number
10221 $ ./true --version > /dev/full
10222 ./true: write error: No space left on device
10223 @end example
10224
10225 This version of @command{true} is implemented as a C program, and is thus
10226 more secure and faster than a shell script implementation, and may safely
10227 be used as a dummy shell for the purpose of disabling accounts.
10228
10229 @node test invocation
10230 @section @command{test}: Check file types and compare values
10231
10232 @pindex test
10233 @cindex check file types
10234 @cindex compare values
10235 @cindex expression evaluation
10236
10237 @command{test} returns a status of 0 (true) or 1 (false) depending on the
10238 evaluation of the conditional expression @var{expr}.  Each part of the
10239 expression must be a separate argument.
10240
10241 @command{test} has file status checks, string operators, and numeric
10242 comparison operators.
10243
10244 @command{test} has an alternate form that uses opening and closing
10245 square brackets instead a leading @samp{test}.  For example, instead
10246 of @samp{test -d /}, you can write @samp{[ -d / ]}.  The square
10247 brackets must be separate arguments; for example, @samp{[-d /]} does
10248 not have the desired effect.  Since @samp{test @var{expr}} and @samp{[
10249 @var{expr} ]} have the same meaning, only the former form is discussed
10250 below.
10251
10252 Synopses:
10253
10254 @example
10255 test @var{expression}
10256 test
10257 [ @var{expression} ]
10258 [ ]
10259 [ @var{option}
10260 @end example
10261
10262 @cindex conflicts with shell built-ins
10263 @cindex built-in shell commands, conflicts with
10264 Because most shells have a built-in @command{test} command, using an
10265 unadorned @command{test} in a script or interactively may get you
10266 different functionality than that described here.
10267
10268 If @var{expression} is omitted, @command{test} returns false.
10269 If @var{expression} is a single argument,
10270 @command{test} returns false if the argument is null and true otherwise.  The argument
10271 can be any string, including strings like @samp{-d}, @samp{-1},
10272 @samp{--}, @samp{--help}, and @samp{--version} that most other
10273 programs would treat as options.  To get help and version information,
10274 invoke the commands @samp{[ --help} and @samp{[ --version}, without
10275 the usual closing brackets.  @xref{Common options}.
10276
10277 @cindex exit status of @command{test}
10278 Exit status:
10279
10280 @display
10281 0 if the expression is true,
10282 1 if the expression is false,
10283 2 if an error occurred.
10284 @end display
10285
10286 @menu
10287 * File type tests::             -[bcdfhLpSt]
10288 * Access permission tests::     -[gkruwxOG]
10289 * File characteristic tests::   -e -s -nt -ot -ef
10290 * String tests::                -z -n = !=
10291 * Numeric tests::               -eq -ne -lt -le -gt -ge
10292 * Connectives for test::        ! -a -o
10293 @end menu
10294
10295
10296 @node File type tests
10297 @subsection File type tests
10298
10299 @cindex file type tests
10300
10301 These options test for particular types of files.  (Everything's a file,
10302 but not all files are the same!)
10303
10304 @table @samp
10305
10306 @item -b @var{file}
10307 @opindex -b
10308 @cindex block special check
10309 True if @var{file} exists and is a block special device.
10310
10311 @item -c @var{file}
10312 @opindex -c
10313 @cindex character special check
10314 True if @var{file} exists and is a character special device.
10315
10316 @item -d @var{file}
10317 @opindex -d
10318 @cindex directory check
10319 True if @var{file} exists and is a directory.
10320
10321 @item -f @var{file}
10322 @opindex -f
10323 @cindex regular file check
10324 True if @var{file} exists and is a regular file.
10325
10326 @item -h @var{file}
10327 @itemx -L @var{file}
10328 @opindex -L
10329 @opindex -h
10330 @cindex symbolic link check
10331 True if @var{file} exists and is a symbolic link.
10332 Unlike all other file-related tests, this test does not dereference
10333 @var{file} if it is a symbolic link.
10334
10335 @item -p @var{file}
10336 @opindex -p
10337 @cindex named pipe check
10338 True if @var{file} exists and is a named pipe.
10339
10340 @item -S @var{file}
10341 @opindex -S
10342 @cindex socket check
10343 True if @var{file} exists and is a socket.
10344
10345 @item -t @var{fd}
10346 @opindex -t
10347 @cindex terminal check
10348 True if @var{fd} is a file descriptor that is associated with a
10349 terminal.
10350
10351 @end table
10352
10353
10354 @node Access permission tests
10355 @subsection Access permission tests
10356
10357 @cindex access permission tests
10358 @cindex permission tests
10359
10360 These options test for particular access permissions.
10361
10362 @table @samp
10363
10364 @item -g @var{file}
10365 @opindex -g
10366 @cindex set-group-ID check
10367 True if @var{file} exists and has its set-group-ID bit set.
10368
10369 @item -k @var{file}
10370 @opindex -k
10371 @cindex sticky bit check
10372 True if @var{file} exists and has its @dfn{sticky} bit set.
10373
10374 @item -r @var{file}
10375 @opindex -r
10376 @cindex readable file check
10377 True if @var{file} exists and read permission is granted.
10378
10379 @item -u @var{file}
10380 @opindex -u
10381 @cindex set-user-ID check
10382 True if @var{file} exists and has its set-user-ID bit set.
10383
10384 @item -w @var{file}
10385 @opindex -w
10386 @cindex writable file check
10387 True if @var{file} exists and write permission is granted.
10388
10389 @item -x @var{file}
10390 @opindex -x
10391 @cindex executable file check
10392 True if @var{file} exists and execute permission is granted
10393 (or search permission, if it is a directory).
10394
10395 @item -O @var{file}
10396 @opindex -O
10397 @cindex owned by effective user ID check
10398 True if @var{file} exists and is owned by the current effective user ID.
10399
10400 @item -G @var{file}
10401 @opindex -G
10402 @cindex owned by effective group ID check
10403 True if @var{file} exists and is owned by the current effective group ID.
10404
10405 @end table
10406
10407 @node File characteristic tests
10408 @subsection File characteristic tests
10409
10410 @cindex file characteristic tests
10411
10412 These options test other file characteristics.
10413
10414 @table @samp
10415
10416 @item -e @var{file}
10417 @opindex -e
10418 @cindex existence-of-file check
10419 True if @var{file} exists.
10420
10421 @item -s @var{file}
10422 @opindex -s
10423 @cindex nonempty file check
10424 True if @var{file} exists and has a size greater than zero.
10425
10426 @item @var{file1} -nt @var{file2}
10427 @opindex -nt
10428 @cindex newer-than file check
10429 True if @var{file1} is newer (according to modification date) than
10430 @var{file2}, or if @var{file1} exists and @var{file2} does not.
10431
10432 @item @var{file1} -ot @var{file2}
10433 @opindex -ot
10434 @cindex older-than file check
10435 True if @var{file1} is older (according to modification date) than
10436 @var{file2}, or if @var{file2} exists and @var{file1} does not.
10437
10438 @item @var{file1} -ef @var{file2}
10439 @opindex -ef
10440 @cindex same file check
10441 @cindex hard link check
10442 True if @var{file1} and @var{file2} have the same device and inode
10443 numbers, i.e., if they are hard links to each other.
10444
10445 @end table
10446
10447
10448 @node String tests
10449 @subsection String tests
10450
10451 @cindex string tests
10452
10453 These options test string characteristics.  You may need to quote
10454 @var{string} arguments for the shell.  For example:
10455
10456 @example
10457 test -n "$V"
10458 @end example
10459
10460 The quotes here prevent the wrong arguments from being passed to
10461 @command{test} if @samp{$V} is empty or contains special characters.
10462
10463 @table @samp
10464
10465 @item -z @var{string}
10466 @opindex -z
10467 @cindex zero-length string check
10468 True if the length of @var{string} is zero.
10469
10470 @item -n @var{string}
10471 @itemx @var{string}
10472 @opindex -n
10473 @cindex nonzero-length string check
10474 True if the length of @var{string} is nonzero.
10475
10476 @item @var{string1} = @var{string2}
10477 @opindex =
10478 @cindex equal string check
10479 True if the strings are equal.
10480
10481 @item @var{string1} != @var{string2}
10482 @opindex !=
10483 @cindex not-equal string check
10484 True if the strings are not equal.
10485
10486 @end table
10487
10488
10489 @node Numeric tests
10490 @subsection Numeric tests
10491
10492 @cindex numeric tests
10493 @cindex arithmetic tests
10494
10495 Numeric relationals.  The arguments must be entirely numeric (possibly
10496 negative), or the special expression @w{@code{-l @var{string}}}, which
10497 evaluates to the length of @var{string}.
10498
10499 @table @samp
10500
10501 @item @var{arg1} -eq @var{arg2}
10502 @itemx @var{arg1} -ne @var{arg2}
10503 @itemx @var{arg1} -lt @var{arg2}
10504 @itemx @var{arg1} -le @var{arg2}
10505 @itemx @var{arg1} -gt @var{arg2}
10506 @itemx @var{arg1} -ge @var{arg2}
10507 @opindex -eq
10508 @opindex -ne
10509 @opindex -lt
10510 @opindex -le
10511 @opindex -gt
10512 @opindex -ge
10513 These arithmetic binary operators return true if @var{arg1} is equal,
10514 not-equal, less-than, less-than-or-equal, greater-than, or
10515 greater-than-or-equal than @var{arg2}, respectively.
10516
10517 @end table
10518
10519 For example:
10520
10521 @example
10522 test -1 -gt -2 && echo yes
10523 @result{} yes
10524 test -l abc -gt 1 && echo yes
10525 @result{} yes
10526 test 0x100 -eq 1
10527 @error{} test: integer expression expected before -eq
10528 @end example
10529
10530
10531 @node Connectives for test
10532 @subsection Connectives for @command{test}
10533
10534 @cindex logical connectives
10535 @cindex connectives, logical
10536
10537 The usual logical connectives.
10538
10539 @table @samp
10540
10541 @item ! @var{expr}
10542 @opindex !
10543 True if @var{expr} is false.
10544
10545 @item @var{expr1} -a @var{expr2}
10546 @opindex -a
10547 @cindex logical and operator
10548 @cindex and operator
10549 True if both @var{expr1} and @var{expr2} are true.
10550
10551 @item @var{expr1} -o @var{expr2}
10552 @opindex -o
10553 @cindex logical or operator
10554 @cindex or operator
10555 True if either @var{expr1} or @var{expr2} is true.
10556
10557 @end table
10558
10559
10560 @node expr invocation
10561 @section @command{expr}: Evaluate expressions
10562
10563 @pindex expr
10564 @cindex expression evaluation
10565 @cindex evaluation of expressions
10566
10567 @command{expr} evaluates an expression and writes the result on standard
10568 output.  Each token of the expression must be a separate argument.
10569
10570 Operands are either integers or strings.  Integers consist of one or
10571 more decimal digits, with an optional leading @samp{-}.
10572 @command{expr} converts
10573 anything appearing in an operand position to an integer or a string
10574 depending on the operation being applied to it.
10575
10576 Strings are not quoted for @command{expr} itself, though you may need to
10577 quote them to protect characters with special meaning to the shell,
10578 e.g., spaces.  However, regardless of whether it is quoted, a string
10579 operand should not be a parenthesis or any of @command{expr}'s
10580 operators like @code{+}, so you cannot safely pass an arbitrary string
10581 @code{$str} to expr merely by quoting it to the shell.  One way to
10582 work around this is to use the @sc{gnu} extension @code{+},
10583 (e.g., @code{+ "$str" = foo}); a more portable way is to use
10584 @code{@w{" $str"}} and to adjust the rest of the expression to take
10585 the leading space into account (e.g., @code{@w{" $str" = " foo"}}).
10586
10587 You should not pass a negative integer or a string with leading
10588 @samp{-} as @command{expr}'s first argument, as it might be
10589 misinterpreted as an option; this can be avoided by parenthesization.
10590 Also, portable scripts should not use a string operand that happens to
10591 take the form of an integer; this can be worked around by inserting
10592 leading spaces as mentioned above.
10593
10594 @cindex parentheses for grouping
10595 Operators may be given as infix symbols or prefix keywords.  Parentheses
10596 may be used for grouping in the usual manner.  You must quote
10597 parentheses and many operators to avoid the shell evaluating them,
10598 however.
10599
10600 The only options are @option{--help} and @option{--version}.  @xref{Common
10601 options}.  Options must precede operands.
10602
10603 @cindex exit status of @command{expr}
10604 Exit status:
10605
10606 @display
10607 0 if the expression is neither null nor 0,
10608 1 if the expression is null or 0,
10609 2 if the expression is invalid,
10610 3 if an internal error occurred (e.g., arithmetic overflow).
10611 @end display
10612
10613 @menu
10614 * String expressions::          + : match substr index length
10615 * Numeric expressions::         + - * / %
10616 * Relations for expr::          | & < <= = == != >= >
10617 * Examples of expr::            Examples.
10618 @end menu
10619
10620
10621 @node String expressions
10622 @subsection String expressions
10623
10624 @cindex string expressions
10625 @cindex expressions, string
10626
10627 @command{expr} supports pattern matching and other string operators.  These
10628 have lower precedence than both the numeric and relational operators (in
10629 the next sections).
10630
10631 @table @samp
10632
10633 @item @var{string} : @var{regex}
10634 @cindex pattern matching
10635 @cindex regular expression matching
10636 @cindex matching patterns
10637 Perform pattern matching.  The arguments are converted to strings and the
10638 second is considered to be a (basic, a la GNU @code{grep}) regular
10639 expression, with a @code{^} implicitly prepended.  The first argument is
10640 then matched against this regular expression.
10641
10642 If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the
10643 @code{:} expression returns the part of @var{string} that matched the
10644 subexpression; otherwise, it returns the number of characters matched.
10645
10646 If the match fails, the @code{:} operator returns the null string if
10647 @samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0.
10648
10649 @kindex \( @r{regexp operator}
10650 Only the first @samp{\( @dots{} \)} pair is relevant to the return
10651 value; additional pairs are meaningful only for grouping the regular
10652 expression operators.
10653
10654 @kindex \+ @r{regexp operator}
10655 @kindex \? @r{regexp operator}
10656 @kindex \| @r{regexp operator}
10657 In the regular expression, @code{\+}, @code{\?}, and @code{\|} are
10658 operators which respectively match one or more, zero or one, or separate
10659 alternatives.  SunOS and other @command{expr}'s treat these as regular
10660 characters.  (@acronym{POSIX} allows either behavior.)
10661 @xref{Top, , Regular Expression Library, regex, Regex}, for details of
10662 regular expression syntax.  Some examples are in @ref{Examples of expr}.
10663
10664 @item match @var{string} @var{regex}
10665 @findex match
10666 An alternative way to do pattern matching.  This is the same as
10667 @w{@samp{@var{string} : @var{regex}}}.
10668
10669 @item substr @var{string} @var{position} @var{length}
10670 @findex substr
10671 Returns the substring of @var{string} beginning at @var{position}
10672 with length at most @var{length}.  If either @var{position} or
10673 @var{length} is negative, zero, or non-numeric, returns the null string.
10674
10675 @item index @var{string} @var{charset}
10676 @findex index
10677 Returns the first position in @var{string} where the first character in
10678 @var{charset} was found.  If no character in @var{charset} is found in
10679 @var{string}, return 0.
10680
10681 @item length @var{string}
10682 @findex length
10683 Returns the length of @var{string}.
10684
10685 @item + @var{token}
10686 @kindex +
10687 Interpret @var{token} as a string, even if it is a keyword like @var{match}
10688 or an operator like @code{/}.
10689 This makes it possible to test @code{expr length + "$x"} or
10690 @code{expr + "$x" : '.*/\(.\)'} and have it do the right thing even if
10691 the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
10692 This operator is a @acronym{GNU} extension.  Portable shell scripts should use
10693 @code{@w{" $token"} : @w{' \(.*\)'}} instead of @code{+ "$token"}.
10694
10695 @end table
10696
10697 To make @command{expr} interpret keywords as strings, you must use the
10698 @code{quote} operator.
10699
10700
10701 @node Numeric expressions
10702 @subsection Numeric expressions
10703
10704 @cindex numeric expressions
10705 @cindex expressions, numeric
10706
10707 @command{expr} supports the usual numeric operators, in order of increasing
10708 precedence.  The string operators (previous section) have lower precedence,
10709 the connectives (next section) have higher.
10710
10711 @table @samp
10712
10713 @item + -
10714 @kindex +
10715 @kindex -
10716 @cindex addition
10717 @cindex subtraction
10718 Addition and subtraction.  Both arguments are converted to integers;
10719 an error occurs if this cannot be done.
10720
10721 @item * / %
10722 @kindex *
10723 @kindex /
10724 @kindex %
10725 @cindex multiplication
10726 @cindex division
10727 @cindex remainder
10728 Multiplication, division, remainder.  Both arguments are converted to
10729 integers; an error occurs if this cannot be done.
10730
10731 @end table
10732
10733
10734 @node Relations for expr
10735 @subsection Relations for @command{expr}
10736
10737 @cindex connectives, logical
10738 @cindex logical connectives
10739 @cindex relations, numeric or string
10740
10741 @command{expr} supports the usual logical connectives and relations.  These
10742 are higher precedence than either the string or numeric operators
10743 (previous sections).  Here is the list, lowest-precedence operator first.
10744
10745 @table @samp
10746
10747 @item |
10748 @kindex |
10749 @cindex logical or operator
10750 @cindex or operator
10751 Returns its first argument if that is neither null nor zero, otherwise
10752 its second argument if it is neither null nor zero, otherwise 0.  It
10753 does not evaluate its second argument if its first argument is neither
10754 null nor zero.
10755
10756 @item &
10757 @kindex &
10758 @cindex logical and operator
10759 @cindex and operator
10760 Return its first argument if neither argument is null or zero, otherwise
10761 0.  It does not evaluate its second argument if its first argument is
10762 null or zero.
10763
10764 @item < <= = == != >= >
10765 @kindex <
10766 @kindex <=
10767 @kindex =
10768 @kindex ==
10769 @kindex >
10770 @kindex >=
10771 @cindex comparison operators
10772 @vindex LC_COLLATE
10773 Compare the arguments and return 1 if the relation is true, 0 otherwise.
10774 @code{==} is a synonym for @code{=}.  @command{expr} first tries to convert
10775 both arguments to integers and do a numeric comparison; if either
10776 conversion fails, it does a lexicographic comparison using the character
10777 collating sequence specified by the @env{LC_COLLATE} locale.
10778
10779 @end table
10780
10781
10782 @node Examples of expr
10783 @subsection Examples of using @command{expr}
10784
10785 @cindex examples of @command{expr}
10786 Here are a few examples, including quoting for shell metacharacters.
10787
10788 To add 1 to the shell variable @code{foo}, in Bourne-compatible shells:
10789
10790 @example
10791 foo=`expr $foo + 1`
10792 @end example
10793
10794 To print the non-directory part of the file name stored in
10795 @code{$fname}, which need not contain a @code{/}:
10796
10797 @example
10798 expr $fname : '.*/\(.*\)' '|' $fname
10799 @end example
10800
10801 An example showing that @code{\+} is an operator:
10802
10803 @example
10804 expr aaa : 'a\+'
10805 @result{} 3
10806 @end example
10807
10808 @example
10809 expr abc : 'a\(.\)c'
10810 @result{} b
10811 expr index abcdef cz
10812 @result{} 3
10813 expr index index a
10814 @error{} expr: syntax error
10815 expr index quote index a
10816 @result{} 0
10817 @end example
10818
10819
10820 @node Redirection
10821 @chapter Redirection
10822
10823 @cindex redirection
10824 @cindex commands for redirection
10825
10826 Unix shells commonly provide several forms of @dfn{redirection}---ways
10827 to change the input source or output destination of a command.  But one
10828 useful redirection is performed by a separate command, not by the shell;
10829 it's described here.
10830
10831 @menu
10832 * tee invocation::              Redirect output to multiple files.
10833 @end menu
10834
10835
10836 @node tee invocation
10837 @section @command{tee}: Redirect output to multiple files
10838
10839 @pindex tee
10840 @cindex pipe fitting
10841 @cindex destinations, multiple output
10842 @cindex read from stdin and write to stdout and files
10843
10844 The @command{tee} command copies standard input to standard output and also
10845 to any files given as arguments.  This is useful when you want not only
10846 to send some data down a pipe, but also to save a copy.  Synopsis:
10847
10848 @example
10849 tee [@var{option}]@dots{} [@var{file}]@dots{}
10850 @end example
10851
10852 If a file being written to does not already exist, it is created.  If a
10853 file being written to already exists, the data it previously contained
10854 is overwritten unless the @option{-a} option is used.
10855
10856 A @var{file} of @samp{-} causes @command{tee} to send another copy of
10857 input to standard output, but this is typically not that useful as the
10858 copies are interleaved.
10859
10860 The program accepts the following options.  Also see @ref{Common options}.
10861
10862 @table @samp
10863 @item -a
10864 @itemx --append
10865 @opindex -a
10866 @opindex --append
10867 Append standard input to the given files rather than overwriting
10868 them.
10869
10870 @item -i
10871 @itemx --ignore-interrupts
10872 @opindex -i
10873 @opindex --ignore-interrupts
10874 Ignore interrupt signals.
10875
10876 @end table
10877
10878 @exitstatus
10879
10880
10881 @node File name manipulation
10882 @chapter File name manipulation
10883
10884 @cindex file name manipulation
10885 @cindex manipulation of file names
10886 @cindex commands for file name manipulation
10887
10888 This section describes commands that manipulate file names.
10889
10890 @menu
10891 * basename invocation::         Strip directory and suffix from a file name.
10892 * dirname invocation::          Strip non-directory suffix from a file name.
10893 * pathchk invocation::          Check file name portability.
10894 @end menu
10895
10896
10897 @node basename invocation
10898 @section @command{basename}: Strip directory and suffix from a file name
10899
10900 @pindex basename
10901 @cindex strip directory and suffix from file names
10902 @cindex directory, stripping from file names
10903 @cindex suffix, stripping from file names
10904 @cindex file names, stripping directory and suffix
10905 @cindex leading directory components, stripping
10906
10907 @command{basename} removes any leading directory components from
10908 @var{name}.  Synopsis:
10909
10910 @example
10911 basename @var{name} [@var{suffix}]
10912 @end example
10913
10914 If @var{suffix} is specified and is identical to the end of @var{name},
10915 it is removed from @var{name} as well.  Note that since trailing slashes
10916 are removed prior to suffix matching, @var{suffix} will do nothing if it
10917 contains slashes.  @command{basename} prints the result on standard
10918 output.
10919
10920 @c This test is used both here and in the section on dirname.
10921 @macro basenameAndDirname
10922 Together, @command{basename} and @command{dirname} are designed such
10923 that if @samp{ls "$name"} succeeds, then the command sequence @samp{cd
10924 "$(dirname "$name")"; ls "$(basename "$name")"} will, too.  This works
10925 for everything except file names containing a trailing newline.
10926 @end macro
10927 @basenameAndDirname
10928
10929 @acronym{POSIX} allows the implementation to define the results if
10930 @var{name} is empty or @samp{//}.  In the former case, @acronym{GNU}
10931 @command{basename} returns the empty string.  In the latter case, the
10932 result is @samp{//} on platforms where @var{//} is distinct from
10933 @var{/}, and @samp{/} on platforms where there is no difference.
10934
10935 The only options are @option{--help} and @option{--version}.  @xref{Common
10936 options}.  Options must precede operands.
10937
10938 @exitstatus
10939
10940 Examples:
10941
10942 @smallexample
10943 # Output "sort".
10944 basename /usr/bin/sort
10945
10946 # Output "stdio".
10947 basename include/stdio.h .h
10948 @end smallexample
10949
10950
10951 @node dirname invocation
10952 @section @command{dirname}: Strip non-directory suffix from a file name
10953
10954 @pindex dirname
10955 @cindex directory components, printing
10956 @cindex stripping non-directory suffix
10957 @cindex non-directory suffix, stripping
10958
10959 @command{dirname} prints all but the final slash-delimited component of
10960 a string (presumably a file name).  Synopsis:
10961
10962 @example
10963 dirname @var{name}
10964 @end example
10965
10966 If @var{name} is a single component, @command{dirname} prints @samp{.}
10967 (meaning the current directory).
10968
10969 @basenameAndDirname
10970
10971 @acronym{POSIX} allows the implementation to define the results if
10972 @var{name} is @samp{//}.  With @acronym{GNU} @command{dirname}, the
10973 result is @samp{//} on platforms where @var{//} is distinct from
10974 @var{/}, and @samp{/} on platforms where there is no difference.
10975
10976 The only options are @option{--help} and @option{--version}.  @xref{Common
10977 options}.
10978
10979 @exitstatus
10980
10981 Examples:
10982
10983 @smallexample
10984 # Output "/usr/bin".
10985 dirname /usr/bin/sort
10986
10987 # Output ".".
10988 dirname stdio.h
10989 @end smallexample
10990
10991
10992 @node pathchk invocation
10993 @section @command{pathchk}: Check file name portability
10994
10995 @pindex pathchk
10996 @cindex file names, checking validity and portability
10997 @cindex valid file names, checking for
10998 @cindex portable file names, checking for
10999
11000 @command{pathchk} checks portability of file names.  Synopsis:
11001
11002 @example
11003 pathchk [@var{option}]@dots{} @var{name}@dots{}
11004 @end example
11005
11006 For each @var{name}, @command{pathchk} prints a message if any of
11007 these conditions is true:
11008
11009 @enumerate
11010 @item
11011 One of the existing directories in @var{name} does not have search
11012 (execute) permission,
11013 @item
11014 The length of @var{name} is larger than the maximum supported by the
11015 operating system.
11016 @item
11017 The length of one component of @var{name} is longer than
11018 its file system's maximum.
11019 @end enumerate
11020
11021 A nonexistent @var{name} is not an error, so long a file with that
11022 name could be created under the above conditions.
11023
11024 The program accepts the following options.  Also see @ref{Common options}.
11025 Options must precede operands.
11026
11027 @table @samp
11028
11029 @item -p
11030 @opindex -p
11031 Instead of performing checks based on the underlying file system,
11032 print a message if any of these conditions is true:
11033
11034 @enumerate
11035 @item
11036 A file name is empty.
11037
11038 @item
11039 The length of a file name or one of its components exceeds the
11040 @acronym{POSIX} minimum limits for portability.
11041
11042 @item
11043 A file name contains a character outside the portable file name
11044 character set, namely, the ASCII letters and digits, @samp{-},
11045 @samp{.}, @samp{/}, and @samp{_}.
11046 @end enumerate
11047
11048 @item -P
11049 @opindex -P
11050 Print a message if a file name is empty, or if it contains a component
11051 that begins with @samp{-}.
11052
11053 @item --portability
11054 @opindex --portability
11055 Print a message if a file name is not portable to all @acronym{POSIX}
11056 hosts.  This option is equivalent to @samp{-p -P}.
11057
11058 @end table
11059
11060 @cindex exit status of @command{pathchk}
11061 Exit status:
11062
11063 @display
11064 0 if all specified file names passed all checks,
11065 1 otherwise.
11066 @end display
11067
11068
11069 @node Working context
11070 @chapter Working context
11071
11072 @cindex working context
11073 @cindex commands for printing the working context
11074
11075 This section describes commands that display or alter the context in
11076 which you are working: the current directory, the terminal settings, and
11077 so forth.  See also the user-related commands in the next section.
11078
11079 @menu
11080 * pwd invocation::              Print working directory.
11081 * stty invocation::             Print or change terminal characteristics.
11082 * printenv invocation::         Print environment variables.
11083 * tty invocation::              Print file name of terminal on standard input.
11084 @end menu
11085
11086
11087 @node pwd invocation
11088 @section @command{pwd}: Print working directory
11089
11090 @pindex pwd
11091 @cindex print name of current directory
11092 @cindex current working directory, printing
11093 @cindex working directory, printing
11094
11095 @cindex symbolic links and @command{pwd}
11096 @command{pwd} prints the fully resolved name of the current directory.
11097 That is, all components of the printed name will be actual directory
11098 names---none will be symbolic links.
11099
11100 @cindex conflicts with shell built-ins
11101 @cindex built-in shell commands, conflicts with
11102 Because most shells have a built-in @command{pwd} command, using an
11103 unadorned @command{pwd} in a script or interactively may get you
11104 different functionality than that described here.
11105
11106 The only options are a lone @option{--help} or
11107 @option{--version}.  @xref{Common options}.
11108
11109 @exitstatus
11110
11111
11112 @node stty invocation
11113 @section @command{stty}: Print or change terminal characteristics
11114
11115 @pindex stty
11116 @cindex change or print terminal settings
11117 @cindex terminal settings
11118 @cindex line settings of terminal
11119
11120 @command{stty} prints or changes terminal characteristics, such as baud rate.
11121 Synopses:
11122
11123 @example
11124 stty [@var{option}] [@var{setting}]@dots{}
11125 stty [@var{option}]
11126 @end example
11127
11128 If given no line settings, @command{stty} prints the baud rate, line
11129 discipline number (on systems that support it), and line settings
11130 that have been changed from the values set by @samp{stty sane}.
11131 By default, mode reading and setting are performed on the tty line
11132 connected to standard input, although this can be modified by the
11133 @option{--file} option.
11134
11135 @command{stty} accepts many non-option arguments that change aspects of
11136 the terminal line operation, as described below.
11137
11138 The program accepts the following options.  Also see @ref{Common options}.
11139
11140 @table @samp
11141 @item -a
11142 @itemx --all
11143 @opindex -a
11144 @opindex --all
11145 Print all current settings in human-readable form.  This option may not
11146 be used in combination with any line settings.
11147
11148 @item -F @var{device}
11149 @itemx --file=@var{device}
11150 @opindex -F
11151 @opindex --file
11152 Set the line opened by the file name specified in @var{device} instead of
11153 the tty line connected to standard input.  This option is necessary
11154 because opening a @acronym{POSIX} tty requires use of the @code{O_NONDELAY} flag to
11155 prevent a @acronym{POSIX} tty from blocking until the carrier detect line is high if
11156 the @code{clocal} flag is not set.  Hence, it is not always possible
11157 to allow the shell to open the device in the traditional manner.
11158
11159 @item -g
11160 @itemx --save
11161 @opindex -g
11162 @opindex --save
11163 @cindex machine-readable @command{stty} output
11164 Print all current settings in a form that can be used as an argument to
11165 another @command{stty} command to restore the current settings.  This option
11166 may not be used in combination with any line settings.
11167
11168 @end table
11169
11170 Many settings can be turned off by preceding them with a @samp{-}.
11171 Such arguments are marked below with ``May be negated'' in their
11172 description.  The descriptions themselves refer to the positive
11173 case, that is, when @emph{not} negated (unless stated otherwise,
11174 of course).
11175
11176 Some settings are not available on all @acronym{POSIX} systems, since they use
11177 extensions.  Such arguments are marked below with ``Non-@acronym{POSIX}'' in their
11178 description.  On non-@acronym{POSIX} systems, those or other settings also may not
11179 be available, but it's not feasible to document all the variations: just
11180 try it and see.
11181
11182 @exitstatus
11183
11184 @menu
11185 * Control::                     Control settings
11186 * Input::                       Input settings
11187 * Output::                      Output settings
11188 * Local::                       Local settings
11189 * Combination::                 Combination settings
11190 * Characters::                  Special characters
11191 * Special::                     Special settings
11192 @end menu
11193
11194
11195 @node Control
11196 @subsection Control settings
11197
11198 @cindex control settings
11199 Control settings:
11200
11201 @table @samp
11202 @item parenb
11203 @opindex parenb
11204 @cindex two-way parity
11205 Generate parity bit in output and expect parity bit in input.
11206 May be negated.
11207
11208 @item parodd
11209 @opindex parodd
11210 @cindex odd parity
11211 @cindex even parity
11212 Set odd parity (even if negated).  May be negated.
11213
11214 @item cs5
11215 @itemx cs6
11216 @itemx cs7
11217 @itemx cs8
11218 @opindex cs@var{n}
11219 @cindex character size
11220 @cindex eight-bit characters
11221 Set character size to 5, 6, 7, or 8 bits.
11222
11223 @item hup
11224 @itemx hupcl
11225 @opindex hup[cl]
11226 Send a hangup signal when the last process closes the tty.  May be
11227 negated.
11228
11229 @item cstopb
11230 @opindex cstopb
11231 @cindex stop bits
11232 Use two stop bits per character (one if negated).  May be negated.
11233
11234 @item cread
11235 @opindex cread
11236 Allow input to be received.  May be negated.
11237
11238 @item clocal
11239 @opindex clocal
11240 @cindex modem control
11241 Disable modem control signals.  May be negated.
11242
11243 @item crtscts
11244 @opindex crtscts
11245 @cindex hardware flow control
11246 @cindex flow control, hardware
11247 @cindex RTS/CTS flow control
11248 Enable RTS/CTS flow control.  Non-@acronym{POSIX}.  May be negated.
11249 @end table
11250
11251
11252 @node Input
11253 @subsection Input settings
11254
11255 @cindex input settings
11256
11257 @table @samp
11258 @item ignbrk
11259 @opindex ignbrk
11260 @cindex breaks, ignoring
11261 Ignore break characters.  May be negated.
11262
11263 @item brkint
11264 @opindex brkint
11265 @cindex breaks, cause interrupts
11266 Make breaks cause an interrupt signal.  May be negated.
11267
11268 @item ignpar
11269 @opindex ignpar
11270 @cindex parity, ignoring
11271 Ignore characters with parity errors.  May be negated.
11272
11273 @item parmrk
11274 @opindex parmrk
11275 @cindex parity errors, marking
11276 Mark parity errors (with a 255-0-character sequence).  May be negated.
11277
11278 @item inpck
11279 @opindex inpck
11280 Enable input parity checking.  May be negated.
11281
11282 @item istrip
11283 @opindex istrip
11284 @cindex eight-bit input
11285 Clear high (8th) bit of input characters.  May be negated.
11286
11287 @item inlcr
11288 @opindex inlcr
11289 @cindex newline, translating to return
11290 Translate newline to carriage return.  May be negated.
11291
11292 @item igncr
11293 @opindex igncr
11294 @cindex return, ignoring
11295 Ignore carriage return.  May be negated.
11296
11297 @item icrnl
11298 @opindex icrnl
11299 @cindex return, translating to newline
11300 Translate carriage return to newline.  May be negated.
11301
11302 @item iutf8
11303 @opindex iutf8
11304 @cindex input encoding, UTF-8
11305 Assume input characters are UTF-8 encoded.  May be negated.
11306
11307 @item ixon
11308 @opindex ixon
11309 @kindex C-s/C-q flow control
11310 @cindex XON/XOFF flow control
11311 Enable XON/XOFF flow control (that is, @kbd{CTRL-S}/@kbd{CTRL-Q}).  May
11312 be negated.
11313
11314 @item ixoff
11315 @itemx tandem
11316 @opindex ixoff
11317 @opindex tandem
11318 @cindex software flow control
11319 @cindex flow control, software
11320 Enable sending of @code{stop} character when the system input buffer
11321 is almost full, and @code{start} character when it becomes almost
11322 empty again.  May be negated.
11323
11324 @item iuclc
11325 @opindex iuclc
11326 @cindex uppercase, translating to lowercase
11327 Translate uppercase characters to lowercase.  Non-@acronym{POSIX}.  May be
11328 negated.
11329
11330 @item ixany
11331 @opindex ixany
11332 Allow any character to restart output (only the start character
11333 if negated).  Non-@acronym{POSIX}.  May be negated.
11334
11335 @item imaxbel
11336 @opindex imaxbel
11337 @cindex beeping at input buffer full
11338 Enable beeping and not flushing input buffer if a character arrives
11339 when the input buffer is full.  Non-@acronym{POSIX}.  May be negated.
11340 @end table
11341
11342
11343 @node Output
11344 @subsection Output settings
11345
11346 @cindex output settings
11347 These arguments specify output-related operations.
11348
11349 @table @samp
11350 @item opost
11351 @opindex opost
11352 Postprocess output.  May be negated.
11353
11354 @item olcuc
11355 @opindex olcuc
11356 @cindex lowercase, translating to output
11357 Translate lowercase characters to uppercase.  Non-@acronym{POSIX}.  May be
11358 negated.
11359
11360 @item ocrnl
11361 @opindex ocrnl
11362 @cindex return, translating to newline
11363 Translate carriage return to newline.  Non-@acronym{POSIX}.  May be negated.
11364
11365 @item onlcr
11366 @opindex onlcr
11367 @cindex newline, translating to crlf
11368 Translate newline to carriage return-newline.  Non-@acronym{POSIX}.  May be
11369 negated.
11370
11371 @item onocr
11372 @opindex onocr
11373 Do not print carriage returns in the first column.  Non-@acronym{POSIX}.
11374 May be negated.
11375
11376 @item onlret
11377 @opindex onlret
11378 Newline performs a carriage return.  Non-@acronym{POSIX}.  May be negated.
11379
11380 @item ofill
11381 @opindex ofill
11382 @cindex pad instead of timing for delaying
11383 Use fill (padding) characters instead of timing for delays.  Non-@acronym{POSIX}.
11384 May be negated.
11385
11386 @item ofdel
11387 @opindex ofdel
11388 @cindex pad character
11389 Use delete characters for fill instead of null characters.  Non-@acronym{POSIX}.
11390 May be negated.
11391
11392 @item nl1
11393 @itemx nl0
11394 @opindex nl@var{n}
11395 Newline delay style.  Non-@acronym{POSIX}.
11396
11397 @item cr3
11398 @itemx cr2
11399 @itemx cr1
11400 @itemx cr0
11401 @opindex cr@var{n}
11402 Carriage return delay style.  Non-@acronym{POSIX}.
11403
11404 @item tab3
11405 @itemx tab2
11406 @itemx tab1
11407 @itemx tab0
11408 @opindex tab@var{n}
11409 Horizontal tab delay style.  Non-@acronym{POSIX}.
11410
11411 @item bs1
11412 @itemx bs0
11413 @opindex bs@var{n}
11414 Backspace delay style.  Non-@acronym{POSIX}.
11415
11416 @item vt1
11417 @itemx vt0
11418 @opindex vt@var{n}
11419 Vertical tab delay style.  Non-@acronym{POSIX}.
11420
11421 @item ff1
11422 @itemx ff0
11423 @opindex ff@var{n}
11424 Form feed delay style.  Non-@acronym{POSIX}.
11425 @end table
11426
11427
11428 @node Local
11429 @subsection Local settings
11430
11431 @cindex local settings
11432
11433 @table @samp
11434 @item isig
11435 @opindex isig
11436 Enable @code{interrupt}, @code{quit}, and @code{suspend} special
11437 characters.  May be negated.
11438
11439 @item icanon
11440 @opindex icanon
11441 Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt}
11442 special characters.  May be negated.
11443
11444 @item iexten
11445 @opindex iexten
11446 Enable non-@acronym{POSIX} special characters.  May be negated.
11447
11448 @item echo
11449 @opindex echo
11450 Echo input characters.  May be negated.
11451
11452 @item echoe
11453 @itemx crterase
11454 @opindex echoe
11455 @opindex crterase
11456 Echo @code{erase} characters as backspace-space-backspace.  May be
11457 negated.
11458
11459 @item echok
11460 @opindex echok
11461 @cindex newline echoing after @code{kill}
11462 Echo a newline after a @code{kill} character.  May be negated.
11463
11464 @item echonl
11465 @opindex echonl
11466 @cindex newline, echoing
11467 Echo newline even if not echoing other characters.  May be negated.
11468
11469 @item noflsh
11470 @opindex noflsh
11471 @cindex flushing, disabling
11472 Disable flushing after @code{interrupt} and @code{quit} special
11473 characters.  May be negated.
11474
11475 @item xcase
11476 @opindex xcase
11477 @cindex case translation
11478 Enable input and output of uppercase characters by preceding their
11479 lowercase equivalents with @samp{\}, when @code{icanon} is set.
11480 Non-@acronym{POSIX}.  May be negated.
11481
11482 @item tostop
11483 @opindex tostop
11484 @cindex background jobs, stopping at terminal write
11485 Stop background jobs that try to write to the terminal.  Non-@acronym{POSIX}.
11486 May be negated.
11487
11488 @item echoprt
11489 @itemx prterase
11490 @opindex echoprt
11491 @opindex prterase
11492 Echo erased characters backward, between @samp{\} and @samp{/}.
11493 Non-@acronym{POSIX}.  May be negated.
11494
11495 @item echoctl
11496 @itemx ctlecho
11497 @opindex echoctl
11498 @opindex ctlecho
11499 @cindex control characters, using @samp{^@var{c}}
11500 @cindex hat notation for control characters
11501 Echo control characters in hat notation (@samp{^@var{c}}) instead
11502 of literally.  Non-@acronym{POSIX}.  May be negated.
11503
11504 @item echoke
11505 @itemx crtkill
11506 @opindex echoke
11507 @opindex crtkill
11508 Echo the @code{kill} special character by erasing each character on
11509 the line as indicated by the @code{echoprt} and @code{echoe} settings,
11510 instead of by the @code{echoctl} and @code{echok} settings.  Non-@acronym{POSIX}.
11511 May be negated.
11512 @end table
11513
11514
11515 @node Combination
11516 @subsection Combination settings
11517
11518 @cindex combination settings
11519 Combination settings:
11520
11521 @table @samp
11522 @item evenp
11523 @opindex evenp
11524 @itemx parity
11525 @opindex parity
11526 Same as @code{parenb -parodd cs7}.  May be negated.  If negated, same
11527 as @code{-parenb cs8}.
11528
11529 @item oddp
11530 @opindex oddp
11531 Same as @code{parenb parodd cs7}.  May be negated.  If negated, same
11532 as @code{-parenb cs8}.
11533
11534 @item nl
11535 @opindex nl
11536 Same as @code{-icrnl -onlcr}.  May be negated.  If negated, same as
11537 @code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}.
11538
11539 @item ek
11540 @opindex ek
11541 Reset the @code{erase} and @code{kill} special characters to their default
11542 values.
11543
11544 @item sane
11545 @opindex sane
11546 Same as:
11547
11548 @c This is too long to write inline.
11549 @example
11550 cread -ignbrk brkint -inlcr -igncr icrnl -ixoff
11551 -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr
11552 -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
11553 ff0 isig icanon iexten echo echoe echok -echonl
11554 -noflsh -xcase -tostop -echoprt echoctl echoke
11555 @end example
11556
11557 @noindent
11558 and also sets all special characters to their default values.
11559
11560 @item cooked
11561 @opindex cooked
11562 Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus
11563 sets the @code{eof} and @code{eol} characters to their default values
11564 if they are the same as the @code{min} and @code{time} characters.
11565 May be negated.  If negated, same as @code{raw}.
11566
11567 @item raw
11568 @opindex raw
11569 Same as:
11570
11571 @example
11572 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
11573 -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
11574 -imaxbel -opost -isig -icanon -xcase min 1 time 0
11575 @end example
11576
11577 @noindent
11578 May be negated.  If negated, same as @code{cooked}.
11579
11580 @item cbreak
11581 @opindex cbreak
11582 Same as @option{-icanon}.  May be negated.  If negated, same as
11583 @code{icanon}.
11584
11585 @item pass8
11586 @opindex pass8
11587 @cindex eight-bit characters
11588 Same as @code{-parenb -istrip cs8}.  May be negated.  If negated,
11589 same as @code{parenb istrip cs7}.
11590
11591 @item litout
11592 @opindex litout
11593 Same as @option{-parenb -istrip -opost cs8}.  May be negated.
11594 If negated, same as @code{parenb istrip opost cs7}.
11595
11596 @item decctlq
11597 @opindex decctlq
11598 Same as @option{-ixany}.  Non-@acronym{POSIX}.  May be negated.
11599
11600 @item tabs
11601 @opindex tabs
11602 Same as @code{tab0}.  Non-@acronym{POSIX}.  May be negated.  If negated, same
11603 as @code{tab3}.
11604
11605 @item lcase
11606 @itemx LCASE
11607 @opindex lcase
11608 @opindex LCASE
11609 Same as @code{xcase iuclc olcuc}.  Non-@acronym{POSIX}.  May be negated.
11610
11611 @item crt
11612 @opindex crt
11613 Same as @code{echoe echoctl echoke}.
11614
11615 @item dec
11616 @opindex dec
11617 Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}.
11618 @end table
11619
11620
11621 @node Characters
11622 @subsection Special characters
11623
11624 @cindex special characters
11625 @cindex characters, special
11626
11627 The special characters' default values vary from system to system.
11628 They are set with the syntax @samp{name value}, where the names are
11629 listed below and the value can be given either literally, in hat
11630 notation (@samp{^@var{c}}), or as an integer which may start with
11631 @samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or
11632 any other digit to indicate decimal.
11633
11634 @cindex disabling special characters
11635 @kindex u@r{, and disabling special characters}
11636 For GNU stty, giving a value of @code{^-} or @code{undef} disables that
11637 special character.  (This is incompatible with Ultrix @command{stty},
11638 which uses  a value of @samp{u} to disable a special character.  GNU
11639 @command{stty} treats a value @samp{u} like any other, namely to set that
11640 special character to @key{U}.)
11641
11642 @table @samp
11643
11644 @item intr
11645 @opindex intr
11646 Send an interrupt signal.
11647
11648 @item quit
11649 @opindex quit
11650 Send a quit signal.
11651
11652 @item erase
11653 @opindex erase
11654 Erase the last character typed.
11655
11656 @item kill
11657 @opindex kill
11658 Erase the current line.
11659
11660 @item eof
11661 @opindex eof
11662 Send an end of file (terminate the input).
11663
11664 @item eol
11665 @opindex eol
11666 End the line.
11667
11668 @item eol2
11669 @opindex eol2
11670 Alternate character to end the line.  Non-@acronym{POSIX}.
11671
11672 @item swtch
11673 @opindex swtch
11674 Switch to a different shell layer.  Non-@acronym{POSIX}.
11675
11676 @item start
11677 @opindex start
11678 Restart the output after stopping it.
11679
11680 @item stop
11681 @opindex stop
11682 Stop the output.
11683
11684 @item susp
11685 @opindex susp
11686 Send a terminal stop signal.
11687
11688 @item dsusp
11689 @opindex dsusp
11690 Send a terminal stop signal after flushing the input.  Non-@acronym{POSIX}.
11691
11692 @item rprnt
11693 @opindex rprnt
11694 Redraw the current line.  Non-@acronym{POSIX}.
11695
11696 @item werase
11697 @opindex werase
11698 Erase the last word typed.  Non-@acronym{POSIX}.
11699
11700 @item lnext
11701 @opindex lnext
11702 Enter the next character typed literally, even if it is a special
11703 character.  Non-@acronym{POSIX}.
11704 @end table
11705
11706
11707 @node Special
11708 @subsection Special settings
11709
11710 @cindex special settings
11711
11712 @table @samp
11713 @item min @var{n}
11714 @opindex min
11715 Set the minimum number of characters that will satisfy a read until
11716 the time value has expired, when @option{-icanon} is set.
11717
11718 @item time @var{n}
11719 @opindex time
11720 Set the number of tenths of a second before reads time out if the minimum
11721 number of characters have not been read, when @option{-icanon} is set.
11722
11723 @item ispeed @var{n}
11724 @opindex ispeed
11725 Set the input speed to @var{n}.
11726
11727 @item ospeed @var{n}
11728 @opindex ospeed
11729 Set the output speed to @var{n}.
11730
11731 @item rows @var{n}
11732 @opindex rows
11733 Tell the tty kernel driver that the terminal has @var{n} rows.  Non-@acronym{POSIX}.
11734
11735 @item cols @var{n}
11736 @itemx columns @var{n}
11737 @opindex cols
11738 @opindex columns
11739 Tell the kernel that the terminal has @var{n} columns.  Non-@acronym{POSIX}.
11740
11741 @item size
11742 @opindex size
11743 @vindex LINES
11744 @vindex COLUMNS
11745 Print the number of rows and columns that the kernel thinks the
11746 terminal has.  (Systems that don't support rows and columns in the kernel
11747 typically use the environment variables @env{LINES} and @env{COLUMNS}
11748 instead; however, GNU @command{stty} does not know anything about them.)
11749 Non-@acronym{POSIX}.
11750
11751 @item line @var{n}
11752 @opindex line
11753 Use line discipline @var{n}.  Non-@acronym{POSIX}.
11754
11755 @item speed
11756 @opindex speed
11757 Print the terminal speed.
11758
11759 @item @var{n}
11760 @cindex baud rate, setting
11761 @c FIXME: Is this still true that the baud rate can't be set
11762 @c higher than 38400?
11763 Set the input and output speeds to @var{n}.  @var{n} can be one
11764 of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600
11765 19200 38400 @code{exta} @code{extb}.  @code{exta} is the same as
11766 19200; @code{extb} is the same as 38400.  0 hangs up the line if
11767 @option{-clocal} is set.
11768 @end table
11769
11770
11771 @node printenv invocation
11772 @section @command{printenv}: Print all or some environment variables
11773
11774 @pindex printenv
11775 @cindex printing all or some environment variables
11776 @cindex environment variables, printing
11777
11778 @command{printenv} prints environment variable values.  Synopsis:
11779
11780 @example
11781 printenv [@var{option}] [@var{variable}]@dots{}
11782 @end example
11783
11784 If no @var{variable}s are specified, @command{printenv} prints the value of
11785 every environment variable.  Otherwise, it prints the value of each
11786 @var{variable} that is set, and nothing for those that are not set.
11787
11788 The only options are a lone @option{--help} or @option{--version}.
11789 @xref{Common options}.
11790
11791 @cindex exit status of @command{printenv}
11792 Exit status:
11793
11794 @display
11795 0 if all variables specified were found
11796 1 if at least one specified variable was not found
11797 2 if a write error occurred
11798 @end display
11799
11800
11801 @node tty invocation
11802 @section @command{tty}: Print file name of terminal on standard input
11803
11804 @pindex tty
11805 @cindex print terminal file name
11806 @cindex terminal file name, printing
11807
11808 @command{tty} prints the file name of the terminal connected to its standard
11809 input.  It prints @samp{not a tty} if standard input is not a terminal.
11810 Synopsis:
11811
11812 @example
11813 tty [@var{option}]@dots{}
11814 @end example
11815
11816 The program accepts the following option.  Also see @ref{Common options}.
11817
11818 @table @samp
11819
11820 @item -s
11821 @itemx --silent
11822 @itemx --quiet
11823 @opindex -s
11824 @opindex --silent
11825 @opindex --quiet
11826 Print nothing; only return an exit status.
11827
11828 @end table
11829
11830 @cindex exit status of @command{tty}
11831 Exit status:
11832
11833 @display
11834 0 if standard input is a terminal
11835 1 if standard input is not a terminal
11836 2 if given incorrect arguments
11837 3 if a write error occurs
11838 @end display
11839
11840
11841 @node User information
11842 @chapter User information
11843
11844 @cindex user information, commands for
11845 @cindex commands for printing user information
11846
11847 This section describes commands that print user-related information:
11848 logins, groups, and so forth.
11849
11850 @menu
11851 * id invocation::               Print user identity.
11852 * logname invocation::          Print current login name.
11853 * whoami invocation::           Print effective user ID.
11854 * groups invocation::           Print group names a user is in.
11855 * users invocation::            Print login names of users currently logged in.
11856 * who invocation::              Print who is currently logged in.
11857 @end menu
11858
11859
11860 @node id invocation
11861 @section @command{id}: Print user identity
11862
11863 @pindex id
11864 @cindex real user and group IDs, printing
11865 @cindex effective user and group IDs, printing
11866 @cindex printing real and effective user and group IDs
11867
11868 @command{id} prints information about the given user, or the process
11869 running it if no user is specified.  Synopsis:
11870
11871 @example
11872 id [@var{option}]@dots{} [@var{username}]
11873 @end example
11874
11875 By default, it prints the real user ID, real group ID, effective user ID
11876 if different from the real user ID, effective group ID if different from
11877 the real group ID, and supplemental group IDs.
11878
11879 Each of these numeric values is preceded by an identifying string and
11880 followed by the corresponding user or group name in parentheses.
11881
11882 The options cause @command{id} to print only part of the above information.
11883 Also see @ref{Common options}.
11884
11885 @table @samp
11886 @item -g
11887 @itemx --group
11888 @opindex -g
11889 @opindex --group
11890 Print only the group ID.
11891
11892 @item -G
11893 @itemx --groups
11894 @opindex -G
11895 @opindex --groups
11896 Print only the group ID and the supplementary groups.
11897
11898 @item -n
11899 @itemx --name
11900 @opindex -n
11901 @opindex --name
11902 Print the user or group name instead of the ID number.  Requires
11903 @option{-u}, @option{-g}, or @option{-G}.
11904
11905 @item -r
11906 @itemx --real
11907 @opindex -r
11908 @opindex --real
11909 Print the real, instead of effective, user or group ID.  Requires
11910 @option{-u}, @option{-g}, or @option{-G}.
11911
11912 @item -u
11913 @itemx --user
11914 @opindex -u
11915 @opindex --user
11916 Print only the user ID.
11917
11918 @end table
11919
11920 @exitstatus
11921
11922
11923 @node logname invocation
11924 @section @command{logname}: Print current login name
11925
11926 @pindex logname
11927 @cindex printing user's login name
11928 @cindex login name, printing
11929 @cindex user name, printing
11930
11931 @flindex utmp
11932 @command{logname} prints the calling user's name, as found in a
11933 system-maintained file (often @file{/var/run/utmp} or
11934 @file{/etc/utmp}), and exits with a status of 0.  If there is no entry
11935 for the calling process, @command{logname} prints
11936 an error message and exits with a status of 1.
11937
11938 The only options are @option{--help} and @option{--version}.  @xref{Common
11939 options}.
11940
11941 @exitstatus
11942
11943
11944 @node whoami invocation
11945 @section @command{whoami}: Print effective user ID
11946
11947 @pindex whoami
11948 @cindex effective user ID, printing
11949 @cindex printing the effective user ID
11950
11951 @command{whoami} prints the user name associated with the current
11952 effective user ID.  It is equivalent to the command @samp{id -un}.
11953
11954 The only options are @option{--help} and @option{--version}.  @xref{Common
11955 options}.
11956
11957 @exitstatus
11958
11959
11960 @node groups invocation
11961 @section @command{groups}: Print group names a user is in
11962
11963 @pindex groups
11964 @cindex printing groups a user is in
11965 @cindex supplementary groups, printing
11966
11967 @command{groups} prints the names of the primary and any supplementary
11968 groups for each given @var{username}, or the current process if no names
11969 are given.  If names are given, the name of each user is printed before
11970 the list of that user's groups.  Synopsis:
11971
11972 @example
11973 groups [@var{username}]@dots{}
11974 @end example
11975
11976 The group lists are equivalent to the output of the command @samp{id -Gn}.
11977
11978 The only options are @option{--help} and @option{--version}.  @xref{Common
11979 options}.
11980
11981 @exitstatus
11982
11983
11984 @node users invocation
11985 @section @command{users}: Print login names of users currently logged in
11986
11987 @pindex users
11988 @cindex printing current usernames
11989 @cindex usernames, printing current
11990
11991 @cindex login sessions, printing users with
11992 @command{users} prints on a single line a blank-separated list of user
11993 names of users currently logged in to the current host.  Each user name
11994 corresponds to a login session, so if a user has more than one login
11995 session, that user's name will appear the same number of times in the
11996 output.  Synopsis:
11997
11998 @example
11999 users [@var{file}]
12000 @end example
12001
12002 @flindex utmp
12003 @flindex wtmp
12004 With no @var{file} argument, @command{users} extracts its information from
12005 a system-maintained file (often @file{/var/run/utmp} or
12006 @file{/etc/utmp}).  If a file argument is given, @command{users} uses
12007 that file instead.  A common choice is @file{/var/log/wtmp}.
12008
12009 The only options are @option{--help} and @option{--version}.  @xref{Common
12010 options}.
12011
12012 @exitstatus
12013
12014
12015 @node who invocation
12016 @section @command{who}: Print who is currently logged in
12017
12018 @pindex who
12019 @cindex printing current user information
12020 @cindex information, about current users
12021
12022 @command{who} prints information about users who are currently logged on.
12023 Synopsis:
12024
12025 @example
12026 @command{who} [@var{option}] [@var{file}] [am i]
12027 @end example
12028
12029 @cindex terminal lines, currently used
12030 @cindex login time
12031 @cindex remote hostname
12032 If given no non-option arguments, @command{who} prints the following
12033 information for each user currently logged on: login name, terminal
12034 line, login time, and remote hostname or X display.
12035
12036 @flindex utmp
12037 @flindex wtmp
12038 If given one non-option argument, @command{who} uses that instead of
12039 a default system-maintained file (often @file{/var/run/utmp} or
12040 @file{/etc/utmp}) as the name of the file containing the record of
12041 users logged on.  @file{/var/log/wtmp} is commonly given as an argument
12042 to @command{who} to look at who has previously logged on.
12043
12044 @opindex am i
12045 @opindex who am i
12046 If given two non-option arguments, @command{who} prints only the entry
12047 for the user running it (determined from its standard input), preceded
12048 by the hostname.  Traditionally, the two arguments given are @samp{am
12049 i}, as in @samp{who am i}.
12050
12051 @vindex TZ
12052 Time stamps are listed according to the time zone rules specified by
12053 the @env{TZ} environment variable, or by the system default rules if
12054 @env{TZ} is not set.  @xref{TZ Variable,, Specifying the Time Zone
12055 with @env{TZ}, libc, The GNU C Library}.
12056
12057 The program accepts the following options.  Also see @ref{Common options}.
12058
12059 @table @samp
12060
12061 @item -a
12062 @itemx --all
12063 @opindex -a
12064 @opindex --all
12065 Same as @samp{-b -d --login -p -r -t -T -u}.
12066
12067 @item -b
12068 @itemx --boot
12069 @opindex -b
12070 @opindex --boot
12071 Print the date and time of last system boot.
12072
12073 @item -d
12074 @itemx --dead
12075 @opindex -d
12076 @opindex --dead
12077 Print information corresponding to dead processes.
12078
12079 @item -H
12080 @itemx --heading
12081 @opindex -H
12082 @opindex --heading
12083 Print column headings.
12084
12085 @item -m
12086 @opindex -m
12087 Same as @samp{who am i}.
12088
12089 @item -q
12090 @itemx --count
12091 @opindex -q
12092 @opindex --count
12093 Print only the login names and the number of users logged on.
12094 Overrides all other options.
12095
12096 @item -s
12097 @opindex -s
12098 Ignored; for compatibility with other versions of @command{who}.
12099
12100 @itemx -u
12101 @opindex -u
12102 @cindex idle time
12103 After the login time, print the number of hours and minutes that the
12104 user has been idle.  @samp{.} means the user was active in the last minute.
12105 @samp{old} means the user has been idle for more than 24 hours.
12106
12107 @item -l
12108 @itemx --login
12109 @opindex -l
12110 @opindex --login
12111 List only the entries that correspond to processes via which the
12112 system is waiting for a user to login.  The user name is always @samp{LOGIN}.
12113
12114 @itemx --lookup
12115 @opindex --lookup
12116 Attempt to canonicalize hostnames found in utmp through a DNS lookup.  This
12117 is not the default because it can cause significant delays on systems with
12118 automatic dial-up internet access.
12119
12120 @item -H
12121 @itemx --heading
12122 @opindex -H
12123 @opindex --heading
12124 Print a line of column headings.
12125
12126 @item -w
12127 @itemx -T
12128 @itemx --mesg
12129 @itemx --message
12130 @itemx --writable
12131 @opindex -w
12132 @opindex -T
12133 @opindex --mesg
12134 @opindex --message
12135 @opindex --writable
12136 @cindex message status
12137 @pindex write@r{, allowed}
12138 After each login name print a character indicating the user's message status:
12139
12140 @display
12141 @samp{+} allowing @code{write} messages
12142 @samp{-} disallowing @code{write} messages
12143 @samp{?} cannot find terminal device
12144 @end display
12145
12146 @end table
12147
12148 @exitstatus
12149
12150
12151 @node System context
12152 @chapter System context
12153
12154 @cindex system context
12155 @cindex context, system
12156 @cindex commands for system context
12157
12158 This section describes commands that print or change system-wide
12159 information.
12160
12161 @menu
12162 * date invocation::             Print or set system date and time.
12163 * uname invocation::            Print system information.
12164 * hostname invocation::         Print or set system name.
12165 * hostid invocation::           Print numeric host identifier.
12166 @end menu
12167
12168
12169 @node date invocation
12170 @section @command{date}: Print or set system date and time
12171
12172 @pindex date
12173 @cindex time, printing or setting
12174 @cindex printing the current time
12175
12176 Synopses:
12177
12178 @example
12179 date [@var{option}]@dots{} [+@var{format}]
12180 date [-u|--utc|--universal] @c this avoids a newline in the output
12181 [ MMDDhhmm[[CC]YY][.ss] ]
12182 @end example
12183
12184 @vindex LC_TIME
12185 Invoking @command{date} with no @var{format} argument is equivalent to invoking
12186 it with a default format that depends on the @env{LC_TIME} locale category.
12187 In the default C locale, this format is @samp{'+%a %b %e %H:%M:%S %Z %Y'},
12188 so the output looks like @samp{Thu Mar @ 3 13:47:51 PST 2005}.
12189
12190 @vindex TZ
12191 Normally, @command{date} uses the time zone rules indicated by the
12192 @env{TZ} environment variable, or the system default rules if @env{TZ}
12193 is not set.  @xref{TZ Variable,, Specifying the Time Zone with
12194 @env{TZ}, libc, The GNU C Library}.
12195
12196 @findex strftime @r{and @command{date}}
12197 @cindex time formats
12198 @cindex formatting times
12199 If given an argument that starts with a @samp{+}, @command{date} prints the
12200 current date and time (or the date and time specified by the
12201 @option{--date} option, see below) in the format defined by that argument,
12202 which is similar to that of the @code{strftime} function.  Except for
12203 conversion specifiers, which start with @samp{%}, characters in the
12204 format string are printed unchanged.  The conversion specifiers are
12205 described below.
12206
12207 @exitstatus
12208
12209 @menu
12210 * Time conversion specifiers::     %[HIklMNpPrRsSTXzZ]
12211 * Date conversion specifiers::     %[aAbBcCdDeFgGhjmuUVwWxyY]
12212 * Literal conversion specifiers::  %[%nt]
12213 * Padding and other flags::        Pad with zeros, spaces, etc.
12214 * Setting the time::               Changing the system clock.
12215 * Options for date::               Instead of the current time.
12216 * Examples of date::               Examples.
12217 @end menu
12218
12219 @node Time conversion specifiers
12220 @subsection Time conversion specifiers
12221
12222 @cindex time conversion specifiers
12223 @cindex conversion specifiers, time
12224
12225 @command{date} conversion specifiers related to times.
12226
12227 @table @samp
12228 @item %H
12229 hour (@samp{00}@dots{}@samp{23})
12230 @item %I
12231 hour (@samp{01}@dots{}@samp{12})
12232 @item %k
12233 hour (@samp{ 0}@dots{}@samp{23}).
12234 This is a @acronym{GNU} extension.
12235 @item %l
12236 hour (@samp{ 1}@dots{}@samp{12}).
12237 This is a @acronym{GNU} extension.
12238 @item %M
12239 minute (@samp{00}@dots{}@samp{59})
12240 @item %N
12241 nanoseconds (@samp{000000000}@dots{}@samp{999999999}).
12242 This is a @acronym{GNU} extension.
12243 @item %p
12244 locale's equivalent of either @samp{AM} or @samp{PM};
12245 blank in many locales.
12246 Noon is treated as @samp{PM} and midnight as @samp{AM}.
12247 @item %P
12248 like @samp{%p}, except lower case.
12249 This is a @acronym{GNU} extension.
12250 @item %r
12251 locale's 12-hour clock time (e.g., @samp{11:11:04 PM})
12252 @item %R
12253 24-hour hour and minute.  Same as @samp{%H:%M}.
12254 This is a @acronym{GNU} extension.
12255 @item %s
12256 @cindex epoch, seconds since
12257 @cindex seconds since the epoch
12258 @cindex beginning of time
12259 seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
12260 Leap seconds are not counted unless leap second support is available.
12261 @xref{%s-examples}, for examples.
12262 This is a @acronym{GNU} extension.
12263 @item %S
12264 second (@samp{00}@dots{}@samp{60}).
12265 This may be @samp{60} if leap seconds are supported.
12266 @item %T
12267 24-hour hour, minute, and second.  Same as @samp{%H:%M:%S}.
12268 @item %X
12269 locale's time representation (e.g., @samp{23:13:48})
12270 @item %z
12271 @w{@acronym{RFC} 2822/@acronym{ISO} 8601} style numeric time zone
12272 (e.g., @samp{-0600} or @samp{+0530}), or nothing if no
12273 time zone is determinable.  This value reflects the numeric time zone
12274 appropriate for the current time, using the time zone rules specified
12275 by the @env{TZ} environment variable.
12276 The time (and optionally, the time zone rules) can be overridden
12277 by the @option{--date} option.
12278 This is a @acronym{GNU} extension.
12279 @item %:z
12280 @w{@acronym{RFC} 3339/@acronym{ISO} 8601} style numeric time zone with
12281 @samp{:} (e.g., @samp{-06:00} or @samp{+05:30}), or nothing if no time
12282 zone is determinable.
12283 This is a @acronym{GNU} extension.
12284 @item %::z
12285 Numeric time zone to the nearest second with @samp{:} (e.g.,
12286 @samp{-06:00:00} or @samp{+05:30:00}), or nothing if no time zone is
12287 determinable.
12288 This is a @acronym{GNU} extension.
12289 @item %:::z
12290 Numeric time zone with @samp{:} using the minimum necessary precision
12291 (e.g., @samp{-06}, @samp{+05:30}, or @samp{-04:56:02}), or nothing if
12292 no time zone is determinable.
12293 This is a @acronym{GNU} extension.
12294 @item %Z
12295 alphabetic time zone abbreviation (e.g., @samp{EDT}), or nothing if no
12296 time zone is determinable.  See @samp{%z} for how it is determined.
12297 @end table
12298
12299
12300 @node Date conversion specifiers
12301 @subsection Date conversion specifiers
12302
12303 @cindex date conversion specifiers
12304 @cindex conversion specifiers, date
12305
12306 @command{date} conversion specifiers related to dates.
12307
12308 @table @samp
12309 @item %a
12310 locale's abbreviated weekday name (e.g., @samp{Sun})
12311 @item %A
12312 locale's full weekday name, variable length (e.g., @samp{Sunday})
12313 @item %b
12314 locale's abbreviated month name (e.g., @samp{Jan})
12315 @item %B
12316 locale's full month name, variable length (e.g., @samp{January})
12317 @item %c
12318 locale's date and time (e.g., @samp{Thu Mar @ 3 23:05:25 2005})
12319 @item %C
12320 century.  This is like @samp{%Y}, except the last two digits are omitted.
12321 For example, it is @samp{20} if @samp{%Y} is @samp{2000},
12322 and is @samp{-0} if @samp{%Y} is @samp{-001}.
12323 It is normally at least two characters, but it may be more.
12324 @item %d
12325 day of month (e.g., @samp{01})
12326 @item %D
12327 date; same as @samp{%m/%d/%y}
12328 @item %e
12329 day of month, space padded; same as @samp{%_d}
12330 @item %F
12331 full date in @acronym{ISO} 8601 format; same as @samp{%Y-%m-%d}.
12332 This is a good choice for a date format, as it is standard and
12333 is easy to sort in the usual case where years are in the range
12334 0000@dots{}9999.
12335 This is a @acronym{GNU} extension.
12336 @item %g
12337 year corresponding to the @acronym{ISO} week number, but without the century
12338 (range @samp{00} through @samp{99}).  This has the same format and value
12339 as @samp{%y}, except that if the @acronym{ISO} week number (see
12340 @samp{%V}) belongs
12341 to the previous or next year, that year is used instead.
12342 This is a @acronym{GNU} extension.
12343 @item %G
12344 year corresponding to the @acronym{ISO} week number.  This has the
12345 same format and value as @samp{%Y}, except that if the @acronym{ISO}
12346 week number (see
12347 @samp{%V}) belongs to the previous or next year, that year is used
12348 instead.
12349 It is normally useful only if @samp{%V} is also used;
12350 for example, the format @samp{%G-%m-%d} is probably a mistake,
12351 since it combines the ISO week number year with the conventional month and day.
12352 This is a @acronym{GNU} extension.
12353 @item %h
12354 same as @samp{%b}
12355 @item %j
12356 day of year (@samp{001}@dots{}@samp{366})
12357 @item %m
12358 month (@samp{01}@dots{}@samp{12})
12359 @item %u
12360 day of week (@samp{1}@dots{}@samp{7}) with @samp{1} corresponding to Monday
12361 @item %U
12362 week number of year, with Sunday as the first day of the week
12363 (@samp{00}@dots{}@samp{53}).
12364 Days in a new year preceding the first Sunday are in week zero.
12365 @item %V
12366 @acronym{ISO} week number, that is, the
12367 week number of year, with Monday as the first day of the week
12368 (@samp{01}@dots{}@samp{53}).
12369 If the week containing January 1 has four or more days in
12370 the new year, then it is considered week 1; otherwise, it is week 53 of
12371 the previous year, and the next week is week 1.  (See the @acronym{ISO} 8601
12372 standard.)
12373 @item %w
12374 day of week (@samp{0}@dots{}@samp{6}) with 0 corresponding to Sunday
12375 @item %W
12376 week number of year, with Monday as first day of week
12377 (@samp{00}@dots{}@samp{53}).
12378 Days in a new year preceding the first Monday are in week zero.
12379 @item %x
12380 locale's date representation (e.g., @samp{12/31/99})
12381 @item %y
12382 last two digits of year (@samp{00}@dots{}@samp{99})
12383 @item %Y
12384 year.  This is normally at least four characters, but it may be more.
12385 Year @samp{0000} precedes year @samp{0001}, and year @samp{-001}
12386 precedes year @samp{0000}.
12387 @end table
12388
12389
12390 @node Literal conversion specifiers
12391 @subsection Literal conversion specifiers
12392
12393 @cindex literal conversion specifiers
12394 @cindex conversion specifiers, literal
12395
12396 @command{date} conversion specifiers that produce literal strings.
12397
12398 @table @samp
12399 @item %%
12400 a literal %
12401 @item %n
12402 a newline
12403 @item %t
12404 a horizontal tab
12405 @end table
12406
12407
12408 @node Padding and other flags
12409 @subsection Padding and other flags
12410
12411 @cindex numeric field padding
12412 @cindex padding of numeric fields
12413 @cindex fields, padding numeric
12414
12415 Unless otherwise specified, @command{date} normally pads numeric fields
12416 with zeros, so that, for
12417 example, numeric months are always output as two digits.
12418 Seconds since the epoch are not padded, though,
12419 since there is no natural width for them.
12420
12421 As a @acronym{GNU} extension, @command{date} recognizes any of the
12422 following optional flags after the @samp{%}:
12423
12424 @table @samp
12425 @item -
12426 (hyphen) Do not pad the field; useful if the output is intended for
12427 human consumption.
12428 @item _
12429 (underscore) Pad with spaces; useful if you need a fixed
12430 number of characters in the output, but zeros are too distracting.
12431 @item 0
12432 (zero) Pad with zeros even if the conversion specifier
12433 would normally pad with spaces.
12434 @item ^
12435 Use upper case characters if possible.
12436 @item #
12437 Use opposite case characters if possible.
12438 A field that is normally upper case becomes lower case, and vice versa.
12439 @end table
12440
12441 @noindent
12442 Here are some examples of padding:
12443
12444 @example
12445 date +%d/%m -d "Feb 1"
12446 @result{} 01/02
12447 date +%-d/%-m -d "Feb 1"
12448 @result{} 1/2
12449 date +%_d/%_m -d "Feb 1"
12450 @result{}  1/ 2
12451 @end example
12452
12453 As a @acronym{GNU} extension, you can specify the field width
12454 (after any flag, if present) as a decimal number.  If the natural size of the
12455 output is of the field has less than the specified number of characters,
12456 the result is written right adjusted and padded to the given
12457 size.  For example, @samp{%9B} prints the right adjusted month name in
12458 a field of width 9.
12459
12460 An optional modifier can follow the optional flag and width
12461 specification.  The modifiers are:
12462
12463 @table @samp
12464 @item E
12465 Use the locale's alternate representation for date and time.  This
12466 modifier applies to the @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X},
12467 @samp{%y} and @samp{%Y} conversion specifiers.  In a Japanese locale, for
12468 example, @samp{%Ex} might yield a date format based on the Japanese
12469 Emperors' reigns.
12470
12471 @item O
12472 Use the locale's alternate numeric symbols for numbers.  This modifier
12473 applies only to numeric conversion specifiers.
12474 @end table
12475
12476 If the format supports the modifier but no alternate representation
12477 is available, it is ignored.
12478
12479
12480 @node Setting the time
12481 @subsection Setting the time
12482
12483 @cindex setting the time
12484 @cindex time setting
12485 @cindex appropriate privileges
12486
12487 If given an argument that does not start with @samp{+}, @command{date} sets
12488 the system clock to the date and time specified by that argument (as
12489 described below).  You must have appropriate privileges to set the
12490 system clock.  The @option{--date} and @option{--set} options may not be
12491 used with such an argument.  The @option{--universal} option may be used
12492 with such an argument to indicate that the specified date and time are
12493 relative to Coordinated Universal Time rather than to the local time
12494 zone.
12495
12496 The argument must consist entirely of digits, which have the following
12497 meaning:
12498
12499 @table @samp
12500 @item MM
12501 month
12502 @item DD
12503 day within month
12504 @item hh
12505 hour
12506 @item mm
12507 minute
12508 @item CC
12509 first two digits of year (optional)
12510 @item YY
12511 last two digits of year (optional)
12512 @item ss
12513 second (optional)
12514 @end table
12515
12516 The @option{--set} option also sets the system clock; see the next section.
12517
12518
12519 @node Options for date
12520 @subsection Options for @command{date}
12521
12522 @cindex @command{date} options
12523 @cindex options for @command{date}
12524
12525 The program accepts the following options.  Also see @ref{Common options}.
12526
12527 @table @samp
12528
12529 @item -d @var{datestr}
12530 @itemx --date=@var{datestr}
12531 @opindex -d
12532 @opindex --date
12533 @cindex parsing date strings
12534 @cindex date strings, parsing
12535 @cindex arbitrary date strings, parsing
12536 @opindex yesterday
12537 @opindex tomorrow
12538 @opindex next @var{day}
12539 @opindex last @var{day}
12540 Display the date and time specified in @var{datestr} instead of the
12541 current date and time.  @var{datestr} can be in almost any common
12542 format.  It can contain month names, time zones, @samp{am} and @samp{pm},
12543 @samp{yesterday}, etc.  For example, @option{--date="2004-02-27
12544 14:19:13.489392193 +0530"} specifies the instant of time that is
12545 489,392,193 nanoseconds after February 27, 2004 at 2:19:13 PM in a
12546 time zone that is 5 hours and 30 minutes east of @acronym{UTC}.
12547 @xref{Date input formats}.
12548
12549 @item -f @var{datefile}
12550 @itemx --file=@var{datefile}
12551 @opindex -f
12552 @opindex --file
12553 Parse each line in @var{datefile} as with @option{-d} and display the
12554 resulting date and time.  If @var{datefile} is @samp{-}, use standard
12555 input.  This is useful when you have many dates to process, because the
12556 system overhead of starting up the @command{date} executable many times can
12557 be considerable.
12558
12559 @item -r @var{file}
12560 @itemx --reference=@var{file}
12561 @opindex -r
12562 @opindex --reference
12563 Display the date and time of the last modification of @var{file},
12564 instead of the current date and time.
12565
12566 @item -R
12567 @itemx --rfc-822
12568 @itemx --rfc-2822
12569 @opindex -R
12570 @opindex --rfc-822
12571 @opindex --rfc-2822
12572 Display the date and time using the format @samp{%a, %d %b %Y %H:%M:%S
12573 %z}, evaluated in the C locale so abbreviations are always in English.
12574 For example:
12575
12576 @example
12577 Fri, 09 Sep 2005 13:51:39 -0700
12578 @end example
12579
12580 This format conforms to
12581 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet
12582 @acronym{RFCs} 2822} and
12583 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, 822}, the
12584 current and previous standards for Internet email.
12585
12586 @item --rfc-3339=@var{timespec}
12587 @opindex --rfc-3339=@var{timespec}
12588 Display the date using a format specified by
12589 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet
12590 @acronym{RFC} 3339}.  This is a subset of the @acronym{ISO} 8601
12591 format, except that it also permits applications to use a space rather
12592 than a @samp{T} to separate dates from times.  Unlike the other
12593 standard formats, @acronym{RFC} 3339 format is always suitable as
12594 input for the @option{--date} (@option{-d}) and @option{--file}
12595 (@option{-f}) options, regardless of the current locale.
12596
12597 The argument @var{timespec} specifies how much of the time to include.
12598 It can be one of the following:
12599
12600 @table @samp
12601 @item date
12602 Print just the full-date, e.g., @samp{2005-09-14}.
12603 This is equivalent to the format @samp{%Y-%m-%d}.
12604
12605 @item seconds
12606 Print the full-date and full-time separated by a space, e.g.,
12607 @samp{2005-09-14 00:56:06+05:30}.  The output ends with a numeric
12608 time-offset; here the @samp{+05:30} means that local time is five
12609 hours and thirty minutes east of @acronym{UTC}.  This is equivalent to
12610 the format @samp{%Y-%m-%d %H:%M:%S%:z}.
12611
12612 @item ns
12613 Like @samp{seconds}, but also print nanoseconds, e.g.,
12614 @samp{2005-09-14 00:56:06.998458565+05:30}.
12615 This is equivalent to the format @samp{%Y-%m-%d %H:%M:%S.%N%:z}.
12616
12617 @end table
12618
12619 @item -s @var{datestr}
12620 @itemx --set=@var{datestr}
12621 @opindex -s
12622 @opindex --set
12623 Set the date and time to @var{datestr}.  See @option{-d} above.
12624
12625 @item -u
12626 @itemx --utc
12627 @itemx --universal
12628 @opindex -u
12629 @opindex --utc
12630 @opindex --universal
12631 @cindex Coordinated Universal Time
12632 @cindex UTC
12633 @cindex Greenwich Mean Time
12634 @cindex GMT
12635 @vindex TZ
12636 Use Coordinated Universal Time (@acronym{UTC}) by operating as if the
12637 @env{TZ} environment variable were set to the string @samp{UTC0}.
12638 Coordinated
12639 Universal Time is often called ``Greenwich Mean Time'' (@sc{gmt}) for
12640 historical reasons.
12641 @end table
12642
12643
12644 @node Examples of date
12645 @subsection Examples of @command{date}
12646
12647 @cindex examples of @command{date}
12648
12649 Here are a few examples.  Also see the documentation for the @option{-d}
12650 option in the previous section.
12651
12652 @itemize @bullet
12653
12654 @item
12655 To print the date of the day before yesterday:
12656
12657 @example
12658 date --date='2 days ago'
12659 @end example
12660
12661 @item
12662 To print the date of the day three months and one day hence:
12663
12664 @example
12665 date --date='3 months 1 day'
12666 @end example
12667
12668 @item
12669 To print the day of year of Christmas in the current year:
12670
12671 @example
12672 date --date='25 Dec' +%j
12673 @end example
12674
12675 @item
12676 To print the current full month name and the day of the month:
12677
12678 @example
12679 date '+%B %d'
12680 @end example
12681
12682 But this may not be what you want because for the first nine days of
12683 the month, the @samp{%d} expands to a zero-padded two-digit field,
12684 for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}.
12685
12686 @item
12687 To print a date without the leading zero for one-digit days
12688 of the month, you can use the (@acronym{GNU} extension)
12689 @samp{-} flag to suppress
12690 the padding altogether:
12691
12692 @example
12693 date -d 1may '+%B %-d
12694 @end example
12695
12696 @item
12697 To print the current date and time in the format required by many
12698 non-@acronym{GNU} versions of @command{date} when setting the system clock:
12699
12700 @example
12701 date +%m%d%H%M%Y.%S
12702 @end example
12703
12704 @item
12705 To set the system clock forward by two minutes:
12706
12707 @example
12708 date --set='+2 minutes'
12709 @end example
12710
12711 @item
12712 To print the date in @acronym{RFC} 2822 format,
12713 use @samp{date --rfc-2822}.  Here is some example output:
12714
12715 @example
12716 Fri, 09 Sep 2005 13:51:39 -0700
12717 @end example
12718
12719 @anchor{%s-examples}
12720 @item
12721 To convert a date string to the number of seconds since the epoch
12722 (which is 1970-01-01 00:00:00 UTC), use the @option{--date} option with
12723 the @samp{%s} format.  That can be useful in sorting and/or graphing
12724 and/or comparing data by date.  The following command outputs the
12725 number of the seconds since the epoch for the time two minutes after the
12726 epoch:
12727
12728 @example
12729 date --date='1970-01-01 00:02:00 +0000' +%s
12730 120
12731 @end example
12732
12733 If you do not specify time zone information in the date string,
12734 @command{date} uses your computer's idea of the time zone when
12735 interpreting the string.  For example, if your computer's time zone is
12736 that of Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000
12737 seconds) behind UTC:
12738
12739 @example
12740 # local time zone used
12741 date --date='1970-01-01 00:02:00' +%s
12742 18120
12743 @end example
12744
12745 @item
12746 If you're sorting or graphing dated data, your raw date values may be
12747 represented as seconds since the epoch.  But few people can look at
12748 the date @samp{946684800} and casually note ``Oh, that's the first second
12749 of the year 2000 in Greenwich, England.''
12750
12751 @example
12752 date --date='2000-01-01 UTC' +%s
12753 946684800
12754 @end example
12755
12756 An alternative is to use the @option{--utc} (@option{-u}) option.
12757 Then you may omit @samp{UTC} from the date string.  Although this
12758 produces the same result for @samp{%s} and many other format sequences,
12759 with a time zone offset different from zero, it would give a different
12760 result for zone-dependent formats like @samp{%z}.
12761
12762 @example
12763 date -u --date=2000-01-01 +%s
12764 946684800
12765 @end example
12766
12767 To convert such an unwieldy number of seconds back to
12768 a more readable form, use a command like this:
12769
12770 @smallexample
12771 # local time zone used
12772 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
12773 1999-12-31 19:00:00 -0500
12774 @end smallexample
12775
12776 Or if you do not mind depending on the @samp{@@} feature present since
12777 coreutils 5.3.0, you could shorten this to:
12778
12779 @smallexample
12780 date -d @@946684800 +"%F %T %z"
12781 1999-12-31 19:00:00 -0500
12782 @end smallexample
12783
12784 Often it is better to output UTC-relative date and time:
12785
12786 @smallexample
12787 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
12788 2000-01-01 00:00:00 +0000
12789 @end smallexample
12790
12791 @end itemize
12792
12793
12794 @node uname invocation
12795 @section @command{uname}: Print system information
12796
12797 @pindex uname
12798 @cindex print system information
12799 @cindex system information, printing
12800
12801 @command{uname} prints information about the machine and operating system
12802 it is run on.  If no options are given, @command{uname} acts as if the
12803 @option{-s} option were given.  Synopsis:
12804
12805 @example
12806 uname [@var{option}]@dots{}
12807 @end example
12808
12809 If multiple options or @option{-a} are given, the selected information is
12810 printed in this order:
12811
12812 @example
12813 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
12814 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
12815 @end example
12816
12817 The information may contain internal spaces, so such output cannot be
12818 parsed reliably.  In the following example, @var{release} is
12819 @samp{2.2.18ss.e820-bda652a #4 SMP Tue Jun 5 11:24:08 PDT 2001}:
12820
12821 @smallexample
12822 uname -a
12823 @result{} Linux dum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686 unknown unknown GNU/Linux
12824 @end smallexample
12825
12826
12827 The program accepts the following options.  Also see @ref{Common options}.
12828
12829 @table @samp
12830
12831 @item -a
12832 @itemx --all
12833 @opindex -a
12834 @opindex --all
12835 Print all of the below information, except omit the processor type
12836 and the hardware platform name if they are unknown.
12837
12838 @item -i
12839 @itemx --hardware-platform
12840 @opindex -i
12841 @opindex --hardware-platform
12842 @cindex implementation, hardware
12843 @cindex hardware platform
12844 @cindex platform, hardware
12845 Print the hardware platform name
12846 (sometimes called the hardware implementation).
12847 Print @samp{unknown} if the kernel does not make this information
12848 easily available, as is the case with Linux kernels.
12849
12850 @item -m
12851 @itemx --machine
12852 @opindex -m
12853 @opindex --machine
12854 @cindex machine type
12855 @cindex hardware class
12856 @cindex hardware type
12857 Print the machine hardware name (sometimes called the hardware class
12858 or hardware type).
12859
12860 @item -n
12861 @itemx --nodename
12862 @opindex -n
12863 @opindex --nodename
12864 @cindex hostname
12865 @cindex node name
12866 @cindex network node name
12867 Print the network node hostname.
12868
12869 @item -p
12870 @itemx --processor
12871 @opindex -p
12872 @opindex --processor
12873 @cindex host processor type
12874 Print the processor type (sometimes called the instruction set
12875 architecture or ISA).
12876 Print @samp{unknown} if the kernel does not make this information
12877 easily available, as is the case with Linux kernels.
12878
12879 @item -o
12880 @itemx --operating-system
12881 @opindex -o
12882 @opindex --operating-system
12883 @cindex operating system name
12884 Print the name of the operating system.
12885
12886 @item -r
12887 @itemx --kernel-release
12888 @opindex -r
12889 @opindex --kernel-release
12890 @cindex kernel release
12891 @cindex release of kernel
12892 Print the kernel release.
12893
12894 @item -s
12895 @itemx --kernel-name
12896 @opindex -s
12897 @opindex --kernel-name
12898 @cindex kernel name
12899 @cindex name of kernel
12900 Print the kernel name.
12901 @acronym{POSIX} 1003.1-2001 (@pxref{Standards conformance}) calls this
12902 ``the implementation of the operating system'', because the
12903 @acronym{POSIX} specification itself has no notion of ``kernel''.
12904 The kernel name might be the same as the operating system name printed
12905 by the @option{-o} or @option{--operating-system} option, but it might
12906 differ.  Some operating systems (e.g., FreeBSD, HP-UX) have the same
12907 name as their underlying kernels; others (e.g., GNU/Linux, Solaris)
12908 do not.
12909
12910 @item -v
12911 @itemx --kernel-version
12912 @opindex -v
12913 @opindex --kernel-version
12914 @cindex kernel version
12915 @cindex version of kernel
12916 Print the kernel version.
12917
12918 @end table
12919
12920 @exitstatus
12921
12922
12923 @node hostname invocation
12924 @section @command{hostname}: Print or set system name
12925
12926 @pindex hostname
12927 @cindex setting the hostname
12928 @cindex printing the hostname
12929 @cindex system name, printing
12930 @cindex appropriate privileges
12931
12932 With no arguments, @command{hostname} prints the name of the current host
12933 system.  With one argument, it sets the current host name to the
12934 specified string.  You must have appropriate privileges to set the host
12935 name.  Synopsis:
12936
12937 @example
12938 hostname [@var{name}]
12939 @end example
12940
12941 The only options are @option{--help} and @option{--version}.  @xref{Common
12942 options}.
12943
12944 @exitstatus
12945
12946
12947 @node hostid invocation
12948 @section @command{hostid}: Print numeric host identifier.
12949
12950 @pindex hostid
12951 @cindex printing the host identifier
12952
12953 @command{hostid} prints the numeric identifier of the current host
12954 in hexadecimal.  This command accepts no arguments.
12955 The only options are @option{--help} and @option{--version}.
12956 @xref{Common options}.
12957
12958 For example, here's what it prints on one system I use:
12959
12960 @example
12961 $ hostid
12962 1bac013d
12963 @end example
12964
12965 On that system, the 32-bit quantity happens to be closely
12966 related to the system's Internet address, but that isn't always
12967 the case.
12968
12969 @exitstatus
12970
12971
12972 @node Modified command invocation
12973 @chapter Modified command invocation
12974
12975 @cindex modified command invocation
12976 @cindex invocation of commands, modified
12977 @cindex commands for invoking other commands
12978
12979 This section describes commands that run other commands in some context
12980 different than the current one: a modified environment, as a different
12981 user, etc.
12982
12983 @menu
12984 * chroot invocation::           Modify the root directory.
12985 * env invocation::              Modify environment variables.
12986 * nice invocation::             Modify niceness.
12987 * nohup invocation::            Immunize to hangups.
12988 * su invocation::               Modify user and group ID.
12989 @end menu
12990
12991
12992 @node chroot invocation
12993 @section @command{chroot}: Run a command with a different root directory
12994
12995 @pindex chroot
12996 @cindex running a program in a specified root directory
12997 @cindex root directory, running a program in a specified
12998
12999 @command{chroot} runs a command with a specified root directory.
13000 On many systems, only the super-user can do this.
13001 Synopses:
13002
13003 @example
13004 chroot @var{newroot} [@var{command} [@var{args}]@dots{}]
13005 chroot @var{option}
13006 @end example
13007
13008 Ordinarily, file names are looked up starting at the root of the
13009 directory structure, i.e., @file{/}.  @command{chroot} changes the root to
13010 the directory @var{newroot} (which must exist) and then runs
13011 @var{command} with optional @var{args}.  If @var{command} is not
13012 specified, the default is the value of the @env{SHELL} environment
13013 variable or @command{/bin/sh} if not set, invoked with the @option{-i} option.
13014 @var{command} must not be a special built-in utility
13015 (@pxref{Special built-in utilities}).
13016
13017 The only options are @option{--help} and @option{--version}.  @xref{Common
13018 options}.  Options must precede operands.
13019
13020 Here are a few tips to help avoid common problems in using chroot.
13021 To start with a simple example, make @var{command} refer to a statically
13022 linked binary.  If you were to use a dynamically linked executable, then
13023 you'd have to arrange to have the shared libraries in the right place under
13024 your new root directory.
13025
13026 For example, if you create a statically linked @command{ls} executable,
13027 and put it in @file{/tmp/empty}, you can run this command as root:
13028
13029 @example
13030 $ chroot /tmp/empty /ls -Rl /
13031 @end example
13032
13033 Then you'll see output like this:
13034
13035 @example
13036 /:
13037 total 1023
13038 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
13039 @end example
13040
13041 If you want to use a dynamically linked executable, say @command{bash},
13042 then first run @samp{ldd bash} to see what shared objects it needs.
13043 Then, in addition to copying the actual binary, also copy the listed
13044 files to the required positions under your intended new root directory.
13045 Finally, if the executable requires any other files (e.g., data, state,
13046 device files), copy them into place, too.
13047
13048 @cindex exit status of @command{chroot}
13049 Exit status:
13050
13051 @display
13052 1   if @command{chroot} itself fails
13053 126 if @var{command} is found but cannot be invoked
13054 127 if @var{command} cannot be found
13055 the exit status of @var{command} otherwise
13056 @end display
13057
13058
13059 @node env invocation
13060 @section @command{env}: Run a command in a modified environment
13061
13062 @pindex env
13063 @cindex environment, running a program in a modified
13064 @cindex modified environment, running a program in a
13065 @cindex running a program in a modified environment
13066
13067 @command{env} runs a command with a modified environment.  Synopses:
13068
13069 @example
13070 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
13071 [@var{command} [@var{args}]@dots{}]
13072 env
13073 @end example
13074
13075 Operands of the form @samp{@var{variable}=@var{value}} set
13076 the environment variable @var{variable} to value @var{value}.
13077 @var{value} may be empty (@samp{@var{variable}=}).  Setting a variable
13078 to an empty value is different from unsetting it.
13079 These operands are evaluated left-to-right, so if two operands
13080 mention the same variable the earlier is ignored.
13081
13082 Environment variable names can be empty, and can contain any
13083 characters other than @samp{=} and the null character (@acronym{ASCII}
13084 @sc{nul}).  However, it is wise to limit yourself to names that
13085 consist solely of underscores, digits, and @acronym{ASCII} letters,
13086 and that begin with a non-digit, as applications like the shell do not
13087 work well with other names.
13088
13089 @vindex PATH
13090 The first operand that does not contain the character @samp{=}
13091 specifies the program to invoke; it is
13092 searched for according to the @env{PATH} environment variable.  Any
13093 remaining arguments are passed as arguments to that program.
13094 The program should not be a special built-in utility
13095 (@pxref{Special built-in utilities}).
13096
13097 @cindex environment, printing
13098
13099 If no command name is specified following the environment
13100 specifications, the resulting environment is printed.  This is like
13101 specifying the @command{printenv} program.
13102
13103 The program accepts the following options.  Also see @ref{Common options}.
13104 Options must precede operands.
13105
13106 @table @samp
13107
13108 @item -u @var{name}
13109 @itemx --unset=@var{name}
13110 @opindex -u
13111 @opindex --unset
13112 Remove variable @var{name} from the environment, if it was in the
13113 environment.
13114
13115 @item -
13116 @itemx -i
13117 @itemx --ignore-environment
13118 @opindex -
13119 @opindex -i
13120 @opindex --ignore-environment
13121 Start with an empty environment, ignoring the inherited environment.
13122
13123 @end table
13124
13125 @cindex exit status of @command{env}
13126 Exit status:
13127
13128 @display
13129 0   if no @var{command} is specified and the environment is output
13130 1   if @command{env} itself fails
13131 126 if @var{command} is found but cannot be invoked
13132 127 if @var{command} cannot be found
13133 the exit status of @var{command} otherwise
13134 @end display
13135
13136
13137 @node nice invocation
13138 @section @command{nice}: Run a command with modified niceness
13139
13140 @pindex nice
13141 @cindex niceness
13142 @cindex scheduling, affecting
13143 @cindex appropriate privileges
13144
13145 @command{nice} prints or modifies a process's @dfn{niceness},
13146 a parameter that affects whether the process is scheduled favorably.
13147 Synopsis:
13148
13149 @example
13150 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
13151 @end example
13152
13153 If no arguments are given, @command{nice} prints the current niceness.
13154 Otherwise, @command{nice} runs the given @var{command} with its
13155 niceness adjusted.  By default, its niceness is incremented by 10.
13156
13157 Nicenesses range at least from @minus{}20 (resulting in the most
13158 favorable scheduling) through 19 (the least favorable).  Some systems
13159 may have a wider range of nicenesses; conversely, other systems may
13160 enforce more restrictive limits.  An attempt to set the niceness
13161 outside the supported range is treated as an attempt to use the
13162 minimum or maximum supported value.
13163
13164 A niceness should not be confused with a scheduling priority, which
13165 lets applications determine the order in which threads are scheduled
13166 to run.  Unlike a priority, a niceness is merely advice to the
13167 scheduler, which the scheduler is free to ignore.  Also, as a point of
13168 terminology, @acronym{POSIX} defines the behavior of @command{nice} in
13169 terms of a @dfn{nice value}, which is the nonnegative difference
13170 between a niceness and the minimum niceness.  Though @command{nice}
13171 conforms to @acronym{POSIX}, its documentation and diagnostics use the
13172 term ``niceness'' for compatibility with historical practice.
13173
13174 @var{command} must not be a special built-in utility (@pxref{Special
13175 built-in utilities}).
13176
13177 @cindex conflicts with shell built-ins
13178 @cindex built-in shell commands, conflicts with
13179 Because many shells have a built-in @command{nice} command, using an
13180 unadorned @command{nice} in a script or interactively may get you
13181 different functionality than that described here.
13182
13183 The program accepts the following option.  Also see @ref{Common options}.
13184 Options must precede operands.
13185
13186 @table @samp
13187 @item -n @var{adjustment}
13188 @itemx --adjustment=@var{adjustment}
13189 @opindex -n
13190 @opindex --adjustment
13191 Add @var{adjustment} instead of 10 to the command's niceness.  If
13192 @var{adjustment} is negative and you lack appropriate privileges,
13193 @command{nice} issues a warning but otherwise acts as if you specified
13194 a zero adjustment.
13195
13196 For compatibility @command{nice} also supports an obsolete
13197 option syntax @option{-@var{adjustment}}.  New scripts should use
13198 @option{-n @var{adjustment}} instead.
13199
13200 @end table
13201
13202 @cindex exit status of @command{nice}
13203 Exit status:
13204
13205 @display
13206 0   if no @var{command} is specified and the niceness is output
13207 1   if @command{nice} itself fails
13208 126 if @var{command} is found but cannot be invoked
13209 127 if @var{command} cannot be found
13210 the exit status of @var{command} otherwise
13211 @end display
13212
13213 It is sometimes useful to run a non-interactive program with reduced niceness.
13214
13215 @example
13216 $ nice factor 4611686018427387903
13217 @end example
13218
13219 Since @command{nice} prints the current niceness,
13220 you can invoke it through itself to demonstrate how it works.
13221
13222 The default behavior is to increase the niceness by @samp{10}:
13223
13224 @example
13225 $ nice
13226 0
13227 $ nice nice
13228 10
13229 $ nice -n 10 nice
13230 10
13231 @end example
13232
13233 The @var{adjustment} is relative to the current niceness.  In the
13234 next example, the first @command{nice} invocation runs the second one
13235 with niceness 10, and it in turn runs the final one with a niceness
13236 that is 3 more:
13237
13238 @example
13239 $ nice nice -n 3 nice
13240 13
13241 @end example
13242
13243 Specifying a niceness larger than the supported range
13244 is the same as specifying the maximum supported value:
13245
13246 @example
13247 $ nice -n 10000000000 nice
13248 19
13249 @end example
13250
13251 Only a privileged user may run a process with lower niceness:
13252
13253 @example
13254 $ nice -n -1 nice
13255 nice: cannot set niceness: Permission denied
13256 0
13257 $ sudo nice -n -1 nice
13258 -1
13259 @end example
13260
13261
13262 @node nohup invocation
13263 @section @command{nohup}: Run a command immune to hangups
13264
13265 @pindex nohup
13266 @cindex hangups, immunity to
13267 @cindex immunity to hangups
13268 @cindex logging out and continuing to run
13269
13270 @flindex nohup.out
13271 @command{nohup} runs the given @var{command} with hangup signals ignored,
13272 so that the command can continue running in the background after you log
13273 out.  Synopsis:
13274
13275 @example
13276 nohup @var{command} [@var{arg}]@dots{}
13277 @end example
13278
13279 If standard input is a terminal, it is redirected from
13280 @file{/dev/null} so that terminal sessions do not mistakenly consider
13281 the terminal to be used by the command.  This is a @acronym{GNU}
13282 extension; programs intended to be portable to non-@acronym{GNU} hosts
13283 should use @samp{nohup @var{command} [@var{arg}]@dots{} </dev/null}
13284 instead.
13285
13286 @flindex nohup.out
13287 If standard output is a terminal, the command's standard output is appended
13288 to the file @file{nohup.out}; if that cannot be written to, it is appended
13289 to the file @file{$HOME/nohup.out}; and if that cannot be written to, the
13290 command is not run.
13291 Any @file{nohup.out} or @file{$HOME/nohup.out} file created by
13292 @command{nohup} is made readable and writable only to the user,
13293 regardless of the current umask settings.
13294
13295 If standard error is a terminal, it is normally redirected to the same file
13296 descriptor as the (possibly-redirected) standard output.
13297 However, if standard output is closed, standard error terminal output
13298 is instead appended to the file @file{nohup.out} or
13299 @file{$HOME/nohup.out} as above.
13300
13301 @command{nohup} does not automatically put the command it runs in the
13302 background; you must do that explicitly, by ending the command line
13303 with an @samp{&}.  Also, @command{nohup} does not alter the
13304 niceness of @var{command}; use @command{nice} for that,
13305 e.g., @samp{nohup nice @var{command}}.
13306
13307 @var{command} must not be a special built-in utility (@pxref{Special
13308 built-in utilities}).
13309
13310 The only options are @option{--help} and @option{--version}.  @xref{Common
13311 options}.  Options must precede operands.
13312
13313 @cindex exit status of @command{nohup}
13314 Exit status:
13315
13316 @display
13317 126 if @var{command} is found but cannot be invoked
13318 127 if @command{nohup} itself fails or if @var{command} cannot be found
13319 the exit status of @var{command} otherwise
13320 @end display
13321
13322
13323 @node su invocation
13324 @section @command{su}: Run a command with substitute user and group ID
13325
13326 @pindex su
13327 @cindex substitute user and group IDs
13328 @cindex user ID, switching
13329 @cindex super-user, becoming
13330 @cindex root, becoming
13331
13332 @command{su} allows one user to temporarily become another user.  It runs a
13333 command (often an interactive shell) with the real and effective user
13334 ID, group ID, and supplemental groups of a given @var{user}.  Synopsis:
13335
13336 @example
13337 su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}]
13338 @end example
13339
13340 @cindex passwd entry, and @command{su} shell
13341 @flindex /bin/sh
13342 @flindex /etc/passwd
13343 If no @var{user} is given, the default is @code{root}, the super-user.
13344 The shell to use is taken from @var{user}'s @code{passwd} entry, or
13345 @file{/bin/sh} if none is specified there.  If @var{user} has a
13346 password, @command{su} prompts for the password unless run by a user with
13347 effective user ID of zero (the super-user).
13348
13349 @vindex HOME
13350 @vindex SHELL
13351 @vindex USER
13352 @vindex LOGNAME
13353 @cindex login shell
13354 By default, @command{su} does not change the current directory.
13355 It sets the environment variables @env{HOME} and @env{SHELL}
13356 from the password entry for @var{user}, and if @var{user} is not
13357 the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}.
13358 By default, the shell is not a login shell.
13359
13360 Any additional @var{arg}s are passed as additional arguments to the
13361 shell.
13362
13363 @cindex @option{-su}
13364 GNU @command{su} does not treat @file{/bin/sh} or any other shells specially
13365 (e.g., by setting @code{argv[0]} to @option{-su}, passing @option{-c} only
13366 to certain shells, etc.).
13367
13368 @findex syslog
13369 @command{su} can optionally be compiled to use @code{syslog} to report
13370 failed, and optionally successful, @command{su} attempts.  (If the system
13371 supports @code{syslog}.)  However, GNU @command{su} does not check if the
13372 user is a member of the @code{wheel} group; see below.
13373
13374 The program accepts the following options.  Also see @ref{Common options}.
13375
13376 @table @samp
13377 @item -c @var{command}
13378 @itemx --command=@var{command}
13379 @opindex -c
13380 @opindex --command
13381 Pass @var{command}, a single command line to run, to the shell with
13382 a @option{-c} option instead of starting an interactive shell.
13383
13384 @item -f
13385 @itemx --fast
13386 @opindex -f
13387 @opindex --fast
13388 @flindex .cshrc
13389 @cindex file name pattern expansion, disabled
13390 @cindex globbing, disabled
13391 Pass the @option{-f} option to the shell.  This probably only makes sense
13392 if the shell run is @command{csh} or @command{tcsh}, for which the @option{-f}
13393 option prevents reading the startup file (@file{.cshrc}).  With
13394 Bourne-like shells, the @option{-f} option disables file name pattern
13395 expansion (globbing), which is not likely to be useful.
13396
13397 @item -
13398 @itemx -l
13399 @itemx --login
13400 @opindex -
13401 @opindex -l
13402 @opindex --login
13403 @c other variables already indexed above
13404 @vindex TERM
13405 @vindex PATH
13406 @cindex login shell, creating
13407 Make the shell a login shell.  This means the following.  Unset all
13408 environment variables except @env{TERM}, @env{HOME}, and @env{SHELL}
13409 (which are set as described above), and @env{USER} and @env{LOGNAME}
13410 (which are set, even for the super-user, as described above), and set
13411 @env{PATH} to a compiled-in default value.  Change to @var{user}'s home
13412 directory.  Prepend @samp{-} to the shell's name, intended to make it
13413 read its login startup file(s).
13414
13415 @item -m
13416 @itemx -p
13417 @itemx --preserve-environment
13418 @opindex -m
13419 @opindex -p
13420 @opindex --preserve-environment
13421 @cindex environment, preserving
13422 @flindex /etc/shells
13423 @cindex restricted shell
13424 Do not change the environment variables @env{HOME}, @env{USER},
13425 @env{LOGNAME}, or @env{SHELL}.  Run the shell given in the environment
13426 variable @env{SHELL} instead of the shell from @var{user}'s passwd
13427 entry, unless the user running @command{su} is not the super-user and
13428 @var{user}'s shell is restricted.  A @dfn{restricted shell} is one that
13429 is not listed in the file @file{/etc/shells}, or in a compiled-in list
13430 if that file does not exist.  Parts of what this option does can be
13431 overridden by @option{--login} and @option{--shell}.
13432
13433 @item -s @var{shell}
13434 @itemx --shell=@var{shell}
13435 @opindex -s
13436 @opindex --shell
13437 Run @var{shell} instead of the shell from @var{user}'s passwd entry,
13438 unless the user running @command{su} is not the super-user and @var{user}'s
13439 shell is restricted (see @option{-m} just above).
13440
13441 @end table
13442
13443 @cindex exit status of @command{su}
13444 Exit status:
13445
13446 @display
13447 1   if @command{su} itself fails
13448 126 if subshell is found but cannot be invoked
13449 127 if subshell cannot be found
13450 the exit status of the subshell otherwise
13451 @end display
13452
13453 @cindex wheel group, not supported
13454 @cindex group wheel, not supported
13455 @cindex fascism
13456 @subsection Why GNU @command{su} does not support the @samp{wheel} group
13457
13458 (This section is by Richard Stallman.)
13459
13460 @cindex Twenex
13461 @cindex MIT AI lab
13462 Sometimes a few of the users try to hold total power over all the
13463 rest.  For example, in 1984, a few users at the MIT AI lab decided to
13464 seize power by changing the operator password on the Twenex system and
13465 keeping it secret from everyone else.  (I was able to thwart this coup
13466 and give power back to the users by patching the kernel, but I
13467 wouldn't know how to do that in Unix.)
13468
13469 However, occasionally the rulers do tell someone.  Under the usual
13470 @command{su} mechanism, once someone learns the root password who
13471 sympathizes with the ordinary users, he or she can tell the rest.  The
13472 ``wheel group'' feature would make this impossible, and thus cement the
13473 power of the rulers.
13474
13475 I'm on the side of the masses, not that of the rulers.  If you are
13476 used to supporting the bosses and sysadmins in whatever they do, you
13477 might find this idea strange at first.
13478
13479
13480 @node Process control
13481 @chapter Process control
13482
13483 @cindex processes, commands for controlling
13484 @cindex commands for controlling processes
13485
13486 @menu
13487 * kill invocation::             Sending a signal to processes.
13488 @end menu
13489
13490
13491 @node kill invocation
13492 @section @command{kill}: Send a signal to processes
13493
13494 @pindex kill
13495 @cindex send a signal to processes
13496
13497 The @command{kill} command sends a signal to processes, causing them
13498 to terminate or otherwise act upon receiving the signal in some way.
13499 Alternatively, it lists information about signals.  Synopses:
13500
13501 @example
13502 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
13503 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
13504 @end example
13505
13506 The first form of the @command{kill} command sends a signal to all
13507 @var{pid} arguments.  The default signal to send if none is specified
13508 is @samp{TERM}.  The special signal number @samp{0} does not denote a
13509 valid signal, but can be used to test whether the @var{pid} arguments
13510 specify processes to which a signal could be sent.
13511
13512 If @var{pid} is positive, the signal is sent to the process with the
13513 process ID @var{pid}.  If @var{pid} is zero, the signal is sent to all
13514 processes in the process group of the current process.  If @var{pid}
13515 is @minus{}1, the signal is sent to all processes for which the user has
13516 permission to send a signal.  If @var{pid} is less than @minus{}1, the signal
13517 is sent to all processes in the process group that equals the absolute
13518 value of @var{pid}.
13519
13520 If @var{pid} is not positive, a system-dependent set of system
13521 processes is excluded from the list of processes to which the signal
13522 is sent.
13523
13524 If a negative @var{PID} argument is desired as the first one, it
13525 should be preceded by @option{--}.  However, as a common extension to
13526 @acronym{POSIX}, @option{--} is not required with @samp{kill
13527 -@var{signal} -@var{pid}}.  The following commands are equivalent:
13528
13529 @example
13530 kill -15 -1
13531 kill -TERM -1
13532 kill -s TERM -- -1
13533 kill -- -1
13534 @end example
13535
13536 The first form of the @command{kill} command succeeds if every @var{pid}
13537 argument specifies at least one process that the signal was sent to.
13538
13539 The second form of the @command{kill} command lists signal information.
13540 Either the @option{-l} or @option{--list} option, or the @option{-t}
13541 or @option{--table} option must be specified.  Without any
13542 @var{signal} argument, all supported signals are listed.  The output
13543 of @option{-l} or @option{--list} is a list of the signal names, one
13544 per line; if @var{signal} is already a name, the signal number is
13545 printed instead.  The output of @option{-t} or @option{--table} is a
13546 table of signal numbers, names, and descriptions.  This form of the
13547 @command{kill} command succeeds if all @var{signal} arguments are valid
13548 and if there is no output error.
13549
13550 The @command{kill} command also supports the @option{--help} and
13551 @option{--version} options.  @xref{Common options}.
13552
13553 A @var{signal} may be a signal name like @samp{HUP}, or a signal
13554 number like @samp{1}, or an exit status of a process terminated by the
13555 signal.  A signal name can be given in canonical form or prefixed by
13556 @samp{SIG}.  The case of the letters is ignored, except for the
13557 @option{-@var{signal}} option which must use upper case to avoid
13558 ambiguity with lower case option letters.  The following signal names
13559 and numbers are supported on all @acronym{POSIX} compliant systems:
13560
13561 @table @samp
13562 @item HUP
13563 1.  Hangup.
13564 @item INT
13565 2.  Terminal interrupt.
13566 @item QUIT
13567 3.  Terminal quit.
13568 @item ABRT
13569 6.  Process abort.
13570 @item KILL
13571 9.  Kill (cannot be caught or ignored).
13572 @item ALRM
13573 14.  Alarm Clock.
13574 @item TERM
13575 15.  Termination.
13576 @end table
13577
13578 @noindent
13579 Other supported signal names have system-dependent corresponding
13580 numbers.  All systems conforming to @acronym{POSIX} 1003.1-2001 also
13581 support the following signals:
13582
13583 @table @samp
13584 @item BUS
13585 Access to an undefined portion of a memory object.
13586 @item CHLD
13587 Child process terminated, stopped, or continued.
13588 @item CONT
13589 Continue executing, if stopped.
13590 @item FPE
13591 Erroneous arithmetic operation.
13592 @item ILL
13593 Illegal Instruction.
13594 @item PIPE
13595 Write on a pipe with no one to read it.
13596 @item SEGV
13597 Invalid memory reference.
13598 @item STOP
13599 Stop executing (cannot be caught or ignored).
13600 @item TSTP
13601 Terminal stop.
13602 @item TTIN
13603 Background process attempting read.
13604 @item TTOU
13605 Background process attempting write.
13606 @item URG
13607 High bandwidth data is available at a socket.
13608 @item USR1
13609 User-defined signal 1.
13610 @item USR2
13611 User-defined signal 2.
13612 @end table
13613
13614 @noindent
13615 @acronym{POSIX} 1003.1-2001 systems that support the @acronym{XSI} extension
13616 also support the following signals:
13617
13618 @table @samp
13619 @item POLL
13620 Pollable event.
13621 @item PROF
13622 Profiling timer expired.
13623 @item SYS
13624 Bad system call.
13625 @item TRAP
13626 Trace/breakpoint trap.
13627 @item VTALRM
13628 Virtual timer expired.
13629 @item XCPU
13630 CPU time limit exceeded.
13631 @item XFSZ
13632 File size limit exceeded.
13633 @end table
13634
13635 @noindent
13636 @acronym{POSIX} 1003.1-2001 systems that support the @acronym{XRT} extension
13637 also support at least eight real-time signals called @samp{RTMIN},
13638 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX}.
13639
13640
13641 @node Delaying
13642 @chapter Delaying
13643
13644 @cindex delaying commands
13645 @cindex commands for delaying
13646
13647 @c Perhaps @command{wait} or other commands should be described here also?
13648
13649 @menu
13650 * sleep invocation::            Delay for a specified time.
13651 @end menu
13652
13653
13654 @node sleep invocation
13655 @section @command{sleep}: Delay for a specified time
13656
13657 @pindex sleep
13658 @cindex delay for a specified time
13659
13660 @command{sleep} pauses for an amount of time specified by the sum of
13661 the values of the command line arguments.
13662 Synopsis:
13663
13664 @example
13665 sleep @var{number}[smhd]@dots{}
13666 @end example
13667
13668 @cindex time units
13669 Each argument is a number followed by an optional unit; the default
13670 is seconds.  The units are:
13671
13672 @table @samp
13673 @item s
13674 seconds
13675 @item m
13676 minutes
13677 @item h
13678 hours
13679 @item d
13680 days
13681 @end table
13682
13683 Historical implementations of @command{sleep} have required that
13684 @var{number} be an integer, and only accepted a single argument
13685 without a suffix.  However, GNU @command{sleep} accepts
13686 arbitrary floating point numbers (using a period before any fractional
13687 digits).
13688
13689 The only options are @option{--help} and @option{--version}.  @xref{Common
13690 options}.
13691
13692 @exitstatus
13693
13694
13695 @node Numeric operations
13696 @chapter Numeric operations
13697
13698 @cindex numeric operations
13699 These programs do numerically-related operations.
13700
13701 @menu
13702 * factor invocation::              Show factors of numbers.
13703 * seq invocation::                 Print sequences of numbers.
13704 @end menu
13705
13706
13707 @node factor invocation
13708 @section @command{factor}: Print prime factors
13709
13710 @pindex factor
13711 @cindex prime factors
13712
13713 @command{factor} prints prime factors.  Synopses:
13714
13715 @example
13716 factor [@var{number}]@dots{}
13717 factor @var{option}
13718 @end example
13719
13720 If no @var{number} is specified on the command line, @command{factor} reads
13721 numbers from standard input, delimited by newlines, tabs, or spaces.
13722
13723 The only options are @option{--help} and @option{--version}.  @xref{Common
13724 options}.
13725
13726 The algorithm it uses is not very sophisticated, so for some inputs
13727 @command{factor} runs for a long time.  The hardest numbers to factor are
13728 the products of large primes.  Factoring the product of the two largest 32-bit
13729 prime numbers takes about 80 seconds of CPU time on a 1.6 GHz Athlon.
13730
13731 @example
13732 $ p=`echo '4294967279 * 4294967291'|bc`
13733 $ factor $p
13734 18446743979220271189: 4294967279 4294967291
13735 @end example
13736
13737 Similarly, it takes about 80 seconds for GNU factor (from coreutils-5.1.2)
13738 to ``factor'' the largest 64-bit prime:
13739
13740 @example
13741 $ factor 18446744073709551557
13742   18446744073709551557: 18446744073709551557
13743 @end example
13744
13745 In contrast, @command{factor} factors the largest 64-bit number in just
13746 over a tenth of a second:
13747
13748 @example
13749 $ factor `echo '2^64-1'|bc`
13750 18446744073709551615: 3 5 17 257 641 65537 6700417
13751 @end example
13752
13753 @exitstatus
13754
13755
13756 @node seq invocation
13757 @section @command{seq}: Print numeric sequences
13758
13759 @pindex seq
13760 @cindex numeric sequences
13761 @cindex sequence of numbers
13762
13763 @command{seq} prints a sequence of numbers to standard output.  Synopses:
13764
13765 @example
13766 seq [@var{option}]@dots{} @var{last}
13767 seq [@var{option}]@dots{} @var{first} @var{last}
13768 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
13769 @end example
13770
13771 @command{seq} prints the numbers from @var{first} to @var{last} by
13772 @var{increment}.  By default, each number is printed on a separate line.
13773 When @var{increment} is not specified, it defaults to @samp{1},
13774 even when @var{first} is larger than @var{last}.
13775 @var{first} also defaults to @samp{1}.  So @code{seq 1} prints
13776 @samp{1}, but @code{seq 0} and @code{seq 10 5} produce no output.
13777 Floating-point numbers
13778 may be specified (using a period before any fractional digits).
13779
13780 The program accepts the following options.  Also see @ref{Common options}.
13781 Options must precede operands.
13782
13783 @table @samp
13784 @item -f @var{format}
13785 @itemx --format=@var{format}
13786 @opindex -f @var{format}
13787 @opindex --format=@var{format}
13788 @cindex formatting of numbers in @command{seq}
13789 Print all numbers using @var{format}.
13790 @var{format} must contain exactly one of the @samp{printf}-style
13791 floating point conversion specifications @samp{%a}, @samp{%e},
13792 @samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F}, @samp{%G}.
13793
13794 The default format is derived from @var{first}, @var{step}, and
13795 @var{last}.  If these all use a fixed point decimal representation,
13796 the default format is @samp{%.@var{p}f}, where @var{p} is the minimum
13797 precision that can represent the output numbers exactly.  Otherwise,
13798 the default format is @samp{%g}.
13799
13800 @item -s @var{string}
13801 @itemx --separator=@var{string}
13802 @cindex separator for numbers in @command{seq}
13803 Separate numbers with @var{string}; default is a newline.
13804 The output always terminates with a newline.
13805
13806 @item -w
13807 @itemx --equal-width
13808 Print all numbers with the same width, by padding with leading zeros.
13809 @var{first}, @var{step}, and @var{last} should all use a fixed point
13810 decimal representation.
13811 (To have other kinds of padding, use @option{--format}).
13812
13813 @end table
13814
13815 If you want hexadecimal integer output, you can use @command{printf}
13816 to perform the conversion:
13817
13818 @example
13819 $ printf '%x\n' `seq 1048575 1024 1050623`
13820 fffff
13821 1003ff
13822 1007ff
13823 @end example
13824
13825 For very long lists of numbers, use xargs to avoid
13826 system limitations on the length of an argument list:
13827
13828 @example
13829 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
13830 f423e
13831 f423f
13832 f4240
13833 @end example
13834
13835 To generate octal output, use the printf @code{%o} format instead
13836 of @code{%x}.
13837
13838 On most systems, seq can produce whole-number output for values up to
13839 at least @code{2^53}.  Larger integers are approximated.  The details
13840 differ depending on your floating-point implementation, but a common
13841 case is that @command{seq} works with integers through @code{2^64},
13842 and larger integers may not be numerically correct:
13843
13844 @example
13845 $ seq 18446744073709551616 1 18446744073709551618
13846 18446744073709551616
13847 18446744073709551616
13848 18446744073709551618
13849 @end example
13850
13851 Be careful when using @command{seq} with a fractional @var{increment};
13852 otherwise you may see surprising results.  Most people would expect to
13853 see @code{0.000003} printed as the last number in this example:
13854
13855 @example
13856 $ seq -s ' ' 0 0.000001 0.000003
13857 0.000000 0.000001 0.000002
13858 @end example
13859
13860 But that doesn't happen on many systems because @command{seq} is
13861 implemented using binary floating point arithmetic (via the C
13862 @code{long double} type)---which means decimal fractions like @code{0.000001}
13863 cannot be represented exactly.  That in turn means some nonintuitive
13864 conditions like @w{@code{0.000001 * 3 > 0.000003}} will end up being true.
13865
13866 To work around that in the above example, use a slightly larger number as
13867 the @var{last} value:
13868
13869 @example
13870 $ seq -s ' ' 0 0.000001 0.0000031
13871 0.000000 0.000001 0.000002 0.000003
13872 @end example
13873
13874 In general, when using an @var{increment} with a fractional part, where
13875 (@var{last} - @var{first}) / @var{increment} is (mathematically) a whole
13876 number, specify a slightly larger (or smaller, if @var{increment} is negative)
13877 value for @var{last} to ensure that @var{last} is the final value printed
13878 by seq.
13879
13880 @exitstatus
13881
13882
13883 @node File permissions
13884 @chapter File permissions
13885 @include perm.texi
13886
13887 @include getdate.texi
13888
13889 @c              What's GNU?
13890 @c              Arnold Robbins
13891 @node Opening the software toolbox
13892 @chapter Opening the Software Toolbox
13893
13894 An earlier version of this chapter appeared in
13895 @uref{http://www.linuxjournal.com/article.php?sid=2762, the
13896 @cite{What's GNU?} column of @cite{Linux Journal}, 2 (June, 1994)}.
13897 It was written by Arnold Robbins.
13898
13899 @menu
13900 * Toolbox introduction::        Toolbox introduction
13901 * I/O redirection::             I/O redirection
13902 * The who command::             The @command{who} command
13903 * The cut command::             The @command{cut} command
13904 * The sort command::            The @command{sort} command
13905 * The uniq command::            The @command{uniq} command
13906 * Putting the tools together::  Putting the tools together
13907 @end menu
13908
13909
13910 @node Toolbox introduction
13911 @unnumberedsec Toolbox Introduction
13912
13913 This month's column is only peripherally related to the GNU Project, in
13914 that it describes a number of the GNU tools on your GNU/Linux system and how they
13915 might be used.  What it's really about is the ``Software Tools'' philosophy
13916 of program development and usage.
13917
13918 The software tools philosophy was an important and integral concept
13919 in the initial design and development of Unix (of which Linux and GNU are
13920 essentially clones).  Unfortunately, in the modern day press of
13921 Internetworking and flashy GUIs, it seems to have fallen by the
13922 wayside.  This is a shame, since it provides a powerful mental model
13923 for solving many kinds of problems.
13924
13925 Many people carry a Swiss Army knife around in their pants pockets (or
13926 purse).  A Swiss Army knife is a handy tool to have: it has several knife
13927 blades, a screwdriver, tweezers, toothpick, nail file, corkscrew, and perhaps
13928 a number of other things on it.  For the everyday, small miscellaneous jobs
13929 where you need a simple, general purpose tool, it's just the thing.
13930
13931 On the other hand, an experienced carpenter doesn't build a house using
13932 a Swiss Army knife.  Instead, he has a toolbox chock full of specialized
13933 tools---a saw, a hammer, a screwdriver, a plane, and so on.  And he knows
13934 exactly when and where to use each tool; you won't catch him hammering nails
13935 with the handle of his screwdriver.
13936
13937 The Unix developers at Bell Labs were all professional programmers and trained
13938 computer scientists.  They had found that while a one-size-fits-all program
13939 might appeal to a user because there's only one program to use, in practice
13940 such programs are
13941
13942 @enumerate a
13943 @item
13944 difficult to write,
13945
13946 @item
13947 difficult to maintain and
13948 debug, and
13949
13950 @item
13951 difficult to extend to meet new situations.
13952 @end enumerate
13953
13954 Instead, they felt that programs should be specialized tools.  In short, each
13955 program ``should do one thing well.''  No more and no less.  Such programs are
13956 simpler to design, write, and get right---they only do one thing.
13957
13958 Furthermore, they found that with the right machinery for hooking programs
13959 together, that the whole was greater than the sum of the parts.  By combining
13960 several special purpose programs, you could accomplish a specific task
13961 that none of the programs was designed for, and accomplish it much more
13962 quickly and easily than if you had to write a special purpose program.
13963 We will see some (classic) examples of this further on in the column.
13964 (An important additional point was that, if necessary, take a detour
13965 and build any software tools you may need first, if you don't already
13966 have something appropriate in the toolbox.)
13967
13968 @node I/O redirection
13969 @unnumberedsec I/O Redirection
13970
13971 Hopefully, you are familiar with the basics of I/O redirection in the
13972 shell, in particular the concepts of ``standard input,'' ``standard output,''
13973 and ``standard error''.  Briefly, ``standard input'' is a data source, where
13974 data comes from.  A program should not need to either know or care if the
13975 data source is a disk file, a keyboard, a magnetic tape, or even a punched
13976 card reader.  Similarly, ``standard output'' is a data sink, where data goes
13977 to.  The program should neither know nor care where this might be.
13978 Programs that only read their standard input, do something to the data,
13979 and then send it on, are called @dfn{filters}, by analogy to filters in a
13980 water pipeline.
13981
13982 With the Unix shell, it's very easy to set up data pipelines:
13983
13984 @smallexample
13985 program_to_create_data | filter1 | ... | filterN > final.pretty.data
13986 @end smallexample
13987
13988 We start out by creating the raw data; each filter applies some successive
13989 transformation to the data, until by the time it comes out of the pipeline,
13990 it is in the desired form.
13991
13992 This is fine and good for standard input and standard output.  Where does the
13993 standard error come in to play?  Well, think about @command{filter1} in
13994 the pipeline above.  What happens if it encounters an error in the data it
13995 sees?  If it writes an error message to standard output, it will just
13996 disappear down the pipeline into @command{filter2}'s input, and the
13997 user will probably never see it.  So programs need a place where they can send
13998 error messages so that the user will notice them.  This is standard error,
13999 and it is usually connected to your console or window, even if you have
14000 redirected standard output of your program away from your screen.
14001
14002 For filter programs to work together, the format of the data has to be
14003 agreed upon.  The most straightforward and easiest format to use is simply
14004 lines of text.  Unix data files are generally just streams of bytes, with
14005 lines delimited by the @acronym{ASCII} @sc{lf} (Line Feed) character,
14006 conventionally called a ``newline'' in the Unix literature.  (This is
14007 @code{'\n'} if you're a C programmer.)  This is the format used by all
14008 the traditional filtering programs.  (Many earlier operating systems
14009 had elaborate facilities and special purpose programs for managing
14010 binary data.  Unix has always shied away from such things, under the
14011 philosophy that it's easiest to simply be able to view and edit your
14012 data with a text editor.)
14013
14014 OK, enough introduction.  Let's take a look at some of the tools, and then
14015 we'll see how to hook them together in interesting ways.   In the following
14016 discussion, we will only present those command line options that interest
14017 us.  As you should always do, double check your system documentation
14018 for the full story.
14019
14020 @node The who command
14021 @unnumberedsec The @command{who} Command
14022
14023 The first program is the @command{who} command.  By itself, it generates a
14024 list of the users who are currently logged in.  Although I'm writing
14025 this on a single-user system, we'll pretend that several people are
14026 logged in:
14027
14028 @example
14029 $ who
14030 @print{} arnold   console Jan 22 19:57
14031 @print{} miriam   ttyp0   Jan 23 14:19(:0.0)
14032 @print{} bill     ttyp1   Jan 21 09:32(:0.0)
14033 @print{} arnold   ttyp2   Jan 23 20:48(:0.0)
14034 @end example
14035
14036 Here, the @samp{$} is the usual shell prompt, at which I typed @samp{who}.
14037 There are three people logged in, and I am logged in twice.  On traditional
14038 Unix systems, user names are never more than eight characters long.  This
14039 little bit of trivia will be useful later.  The output of @command{who} is nice,
14040 but the data is not all that exciting.
14041
14042 @node The cut command
14043 @unnumberedsec The @command{cut} Command
14044
14045 The next program we'll look at is the @command{cut} command.  This program
14046 cuts out columns or fields of input data.  For example, we can tell it
14047 to print just the login name and full name from the @file{/etc/passwd}
14048 file.  The @file{/etc/passwd} file has seven fields, separated by
14049 colons:
14050
14051 @example
14052 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
14053 @end example
14054
14055 To get the first and fifth fields, we would use @command{cut} like this:
14056
14057 @example
14058 $ cut -d: -f1,5 /etc/passwd
14059 @print{} root:Operator
14060 @dots{}
14061 @print{} arnold:Arnold D. Robbins
14062 @print{} miriam:Miriam A. Robbins
14063 @dots{}
14064 @end example
14065
14066 With the @option{-c} option, @command{cut} will cut out specific characters
14067 (i.e., columns) in the input lines.  This is useful for input data
14068 that has fixed width fields, and does not have a field separator.  For
14069 example, list the Monday dates for the current month:
14070
14071 @c Is using cal ok?  Looked at gcal, but I don't like it.
14072 @example
14073 $ cal | cut -c 3-5
14074 @print{}Mo
14075 @print{}
14076 @print{}  6
14077 @print{} 13
14078 @print{} 20
14079 @print{} 27
14080 @end example
14081
14082 @node The sort command
14083 @unnumberedsec The @command{sort} Command
14084
14085 Next we'll look at the @command{sort} command.  This is one of the most
14086 powerful commands on a Unix-style system; one that you will often find
14087 yourself using when setting up fancy data plumbing.
14088
14089 The @command{sort}
14090 command reads and sorts each file named on the command line.  It then
14091 merges the sorted data and writes it to standard output.  It will read
14092 standard input if no files are given on the command line (thus
14093 making it into a filter).  The sort is based on the character collating
14094 sequence or based on user-supplied ordering criteria.
14095
14096
14097 @node The uniq command
14098 @unnumberedsec The @command{uniq} Command
14099
14100 Finally (at least for now), we'll look at the @command{uniq} program.  When
14101 sorting data, you will often end up with duplicate lines, lines that
14102 are identical.  Usually, all you need is one instance of each line.
14103 This is where @command{uniq} comes in.  The @command{uniq} program reads its
14104 standard input.  It prints only one
14105 copy of each repeated line.  It does have several options.  Later on,
14106 we'll use the @option{-c} option, which prints each unique line, preceded
14107 by a count of the number of times that line occurred in the input.
14108
14109
14110 @node Putting the tools together
14111 @unnumberedsec Putting the Tools Together
14112
14113 Now, let's suppose this is a large ISP server system with dozens of users
14114 logged in.  The management wants the system administrator to write a program that will
14115 generate a sorted list of logged in users.  Furthermore, even if a user
14116 is logged in multiple times, his or her name should only show up in the
14117 output once.
14118
14119 The administrator could sit down with the system documentation and write a C
14120 program that did this.  It would take perhaps a couple of hundred lines
14121 of code and about two hours to write it, test it, and debug it.
14122 However, knowing the software toolbox, the administrator can instead start out
14123 by generating just a list of logged on users:
14124
14125 @example
14126 $ who | cut -c1-8
14127 @print{} arnold
14128 @print{} miriam
14129 @print{} bill
14130 @print{} arnold
14131 @end example
14132
14133 Next, sort the list:
14134
14135 @example
14136 $ who | cut -c1-8 | sort
14137 @print{} arnold
14138 @print{} arnold
14139 @print{} bill
14140 @print{} miriam
14141 @end example
14142
14143 Finally, run the sorted list through @command{uniq}, to weed out duplicates:
14144
14145 @example
14146 $ who | cut -c1-8 | sort | uniq
14147 @print{} arnold
14148 @print{} bill
14149 @print{} miriam
14150 @end example
14151
14152 The @command{sort} command actually has a @option{-u} option that does what
14153 @command{uniq} does.  However, @command{uniq} has other uses for which one
14154 cannot substitute @samp{sort -u}.
14155
14156 The administrator puts this pipeline into a shell script, and makes it available for
14157 all the users on the system (@samp{#} is the system administrator,
14158 or @code{root}, prompt):
14159
14160 @example
14161 # cat > /usr/local/bin/listusers
14162 who | cut -c1-8 | sort | uniq
14163 ^D
14164 # chmod +x /usr/local/bin/listusers
14165 @end example
14166
14167 There are four major points to note here.  First, with just four
14168 programs, on one command line, the administrator was able to save about two
14169 hours worth of work.  Furthermore, the shell pipeline is just about as
14170 efficient as the C program would be, and it is much more efficient in
14171 terms of programmer time.  People time is much more expensive than
14172 computer time, and in our modern ``there's never enough time to do
14173 everything'' society, saving two hours of programmer time is no mean
14174 feat.
14175
14176 Second, it is also important to emphasize that with the
14177 @emph{combination} of the tools, it is possible to do a special
14178 purpose job never imagined by the authors of the individual programs.
14179
14180 Third, it is also valuable to build up your pipeline in stages, as we did here.
14181 This allows you to view the data at each stage in the pipeline, which helps
14182 you acquire the confidence that you are indeed using these tools correctly.
14183
14184 Finally, by bundling the pipeline in a shell script, other users can use
14185 your command, without having to remember the fancy plumbing you set up for
14186 them.  In terms of how you run them, shell scripts and compiled programs are
14187 indistinguishable.
14188
14189 After the previous warm-up exercise, we'll look at two additional, more
14190 complicated pipelines.  For them, we need to introduce two more tools.
14191
14192 The first is the @command{tr} command, which stands for ``transliterate.''
14193 The @command{tr} command works on a character-by-character basis, changing
14194 characters.  Normally it is used for things like mapping upper case to
14195 lower case:
14196
14197 @example
14198 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
14199 @print{} this example has mixed case!
14200 @end example
14201
14202 There are several options of interest:
14203
14204 @table @code
14205 @item -c
14206 work on the complement of the listed characters, i.e.,
14207 operations apply to characters not in the given set
14208
14209 @item -d
14210 delete characters in the first set from the output
14211
14212 @item -s
14213 squeeze repeated characters in the output into just one character.
14214 @end table
14215
14216 We will be using all three options in a moment.
14217
14218 The other command we'll look at is @command{comm}.  The @command{comm}
14219 command takes two sorted input files as input data, and prints out the
14220 files' lines in three columns.  The output columns are the data lines
14221 unique to the first file, the data lines unique to the second file, and
14222 the data lines that are common to both.  The @option{-1}, @option{-2}, and
14223 @option{-3} command line options @emph{omit} the respective columns.  (This is
14224 non-intuitive and takes a little getting used to.)  For example:
14225
14226 @example
14227 $ cat f1
14228 @print{} 11111
14229 @print{} 22222
14230 @print{} 33333
14231 @print{} 44444
14232 $ cat f2
14233 @print{} 00000
14234 @print{} 22222
14235 @print{} 33333
14236 @print{} 55555
14237 $ comm f1 f2
14238 @print{}         00000
14239 @print{} 11111
14240 @print{}                 22222
14241 @print{}                 33333
14242 @print{} 44444
14243 @print{}         55555
14244 @end example
14245
14246 The file name @file{-} tells @command{comm} to read standard input
14247 instead of a regular file.
14248
14249 Now we're ready to build a fancy pipeline.  The first application is a word
14250 frequency counter.  This helps an author determine if he or she is over-using
14251 certain words.
14252
14253 The first step is to change the case of all the letters in our input file
14254 to one case.  ``The'' and ``the'' are the same word when doing counting.
14255
14256 @example
14257 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
14258 @end example
14259
14260 The next step is to get rid of punctuation.  Quoted words and unquoted words
14261 should be treated identically; it's easiest to just get the punctuation out of
14262 the way.
14263
14264 @smallexample
14265 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
14266 @end smallexample
14267
14268 The second @command{tr} command operates on the complement of the listed
14269 characters, which are all the letters, the digits, the underscore, and
14270 the blank.  The @samp{\n} represents the newline character; it has to
14271 be left alone.  (The @acronym{ASCII} tab character should also be included for
14272 good measure in a production script.)
14273
14274 At this point, we have data consisting of words separated by blank space.
14275 The words only contain alphanumeric characters (and the underscore).  The
14276 next step is break the data apart so that we have one word per line.  This
14277 makes the counting operation much easier, as we will see shortly.
14278
14279 @smallexample
14280 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
14281 > tr -s ' ' '\n' | ...
14282 @end smallexample
14283
14284 This command turns blanks into newlines.  The @option{-s} option squeezes
14285 multiple newline characters in the output into just one.  This helps us
14286 avoid blank lines.  (The @samp{>} is the shell's ``secondary prompt.''
14287 This is what the shell prints when it notices you haven't finished
14288 typing in all of a command.)
14289
14290 We now have data consisting of one word per line, no punctuation, all one
14291 case.  We're ready to count each word:
14292
14293 @smallexample
14294 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
14295 > tr -s ' ' '\n' | sort | uniq -c | ...
14296 @end smallexample
14297
14298 At this point, the data might look something like this:
14299
14300 @example
14301      60 a
14302       2 able
14303       6 about
14304       1 above
14305       2 accomplish
14306       1 acquire
14307       1 actually
14308       2 additional
14309 @end example
14310
14311 The output is sorted by word, not by count!  What we want is the most
14312 frequently used words first.  Fortunately, this is easy to accomplish,
14313 with the help of two more @command{sort} options:
14314
14315 @table @code
14316 @item -n
14317 do a numeric sort, not a textual one
14318
14319 @item -r
14320 reverse the order of the sort
14321 @end table
14322
14323 The final pipeline looks like this:
14324
14325 @smallexample
14326 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
14327 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
14328 @print{}    156 the
14329 @print{}     60 a
14330 @print{}     58 to
14331 @print{}     51 of
14332 @print{}     51 and
14333 @dots{}
14334 @end smallexample
14335
14336 Whew!  That's a lot to digest.  Yet, the same principles apply.  With six
14337 commands, on two lines (really one long one split for convenience), we've
14338 created a program that does something interesting and useful, in much
14339 less time than we could have written a C program to do the same thing.
14340
14341 A minor modification to the above pipeline can give us a simple spelling
14342 checker!  To determine if you've spelled a word correctly, all you have to
14343 do is look it up in a dictionary.  If it is not there, then chances are
14344 that your spelling is incorrect.  So, we need a dictionary.
14345 The conventional location for a dictionary is @file{/usr/dict/words}.
14346 On my GNU/Linux system,@footnote{Redhat Linux 6.1, for the November 2000
14347 revision of this article.}
14348 this is a is a sorted, 45,402 word dictionary.
14349
14350 Now, how to compare our file with the dictionary?  As before, we generate
14351 a sorted list of words, one per line:
14352
14353 @smallexample
14354 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
14355 > tr -s ' ' '\n' | sort -u | ...
14356 @end smallexample
14357
14358 Now, all we need is a list of words that are @emph{not} in the
14359 dictionary.  Here is where the @command{comm} command comes in.
14360
14361 @smallexample
14362 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
14363 > tr -s ' ' '\n' | sort -u |
14364 > comm -23 - /usr/dict/words
14365 @end smallexample
14366
14367 The @option{-2} and @option{-3} options eliminate lines that are only in the
14368 dictionary (the second file), and lines that are in both files.  Lines
14369 only in the first file (standard input, our stream of words), are
14370 words that are not in the dictionary.  These are likely candidates for
14371 spelling errors.  This pipeline was the first cut at a production
14372 spelling checker on Unix.
14373
14374 There are some other tools that deserve brief mention.
14375
14376 @table @command
14377 @item grep
14378 search files for text that matches a regular expression
14379
14380 @item wc
14381 count lines, words, characters
14382
14383 @item tee
14384 a T-fitting for data pipes, copies data to files and to standard output
14385
14386 @item sed
14387 the stream editor, an advanced tool
14388
14389 @item awk
14390 a data manipulation language, another advanced tool
14391 @end table
14392
14393 The software tools philosophy also espoused the following bit of
14394 advice: ``Let someone else do the hard part.''  This means, take
14395 something that gives you most of what you need, and then massage it the
14396 rest of the way until it's in the form that you want.
14397
14398 To summarize:
14399
14400 @enumerate 1
14401 @item
14402 Each program should do one thing well.  No more, no less.
14403
14404 @item
14405 Combining programs with appropriate plumbing leads to results where
14406 the whole is greater than the sum of the parts.  It also leads to novel
14407 uses of programs that the authors might never have imagined.
14408
14409 @item
14410 Programs should never print extraneous header or trailer data, since these
14411 could get sent on down a pipeline.  (A point we didn't mention earlier.)
14412
14413 @item
14414 Let someone else do the hard part.
14415
14416 @item
14417 Know your toolbox!  Use each program appropriately.  If you don't have an
14418 appropriate tool, build one.
14419 @end enumerate
14420
14421 As of this writing, all the programs we've discussed are available via
14422 anonymous @command{ftp} from: @*
14423 @uref{ftp://gnudist.gnu.org/textutils/textutils-1.22.tar.gz}.  (There may
14424 be more recent versions available now.)
14425
14426 None of what I have presented in this column is new.  The Software Tools
14427 philosophy was first introduced in the book @cite{Software Tools}, by
14428 Brian Kernighan and P.J. Plauger (Addison-Wesley, ISBN 0-201-03669-X).
14429 This book showed how to write and use software tools.  It was written in
14430 1976, using a preprocessor for FORTRAN named @command{ratfor} (RATional
14431 FORtran).  At the time, C was not as ubiquitous as it is now; FORTRAN
14432 was.  The last chapter presented a @command{ratfor} to FORTRAN
14433 processor, written in @command{ratfor}.  @command{ratfor} looks an awful
14434 lot like C; if you know C, you won't have any problem following the
14435 code.
14436
14437 In 1981, the book was updated and made available as @cite{Software Tools
14438 in Pascal} (Addison-Wesley, ISBN 0-201-10342-7).  Both books are
14439 still in print and are well worth
14440 reading if you're a programmer.  They certainly made a major change in
14441 how I view programming.
14442
14443 The programs in both books are available from
14444 @uref{http://cm.bell-labs.com/who/bwk, Brian Kernighan's home page}.
14445 For a number of years, there was an active
14446 Software Tools Users Group, whose members had ported the original
14447 @command{ratfor} programs to essentially every computer system with a
14448 FORTRAN compiler.  The popularity of the group waned in the middle 1980s
14449 as Unix began to spread beyond universities.
14450
14451 With the current proliferation of GNU code and other clones of Unix programs,
14452 these programs now receive little attention; modern C versions are
14453 much more efficient and do more than these programs do.  Nevertheless, as
14454 exposition of good programming style, and evangelism for a still-valuable
14455 philosophy, these books are unparalleled, and I recommend them highly.
14456
14457 Acknowledgment: I would like to express my gratitude to Brian Kernighan
14458 of Bell Labs, the original Software Toolsmith, for reviewing this column.
14459
14460 @include doclicense.texi
14461
14462 @node Index
14463 @unnumbered Index
14464
14465 @printindex cp
14466
14467 @shortcontents
14468 @contents
14469 @bye
14470
14471 @c Local variables:
14472 @c texinfo-column-for-description: 32
14473 @c End: