.
[coreutils.git] / doc / sh-utils.texi
blob2f626e84083889dbf5053b6ec7ecb5badbada1d4
1 \input texinfo
2 @c %**start of header
3 @setfilename sh-utils.info
4 @settitle GNU shell utilities
5 @c %**end of header
7 @include version.texi
9 @c Define new indices for file names and options.
10 @defcodeindex fl
11 @defcodeindex op
13 @c Put everything in one index (arbitrarily chosen to be the concept index).
14 @syncodeindex fl cp
15 @syncodeindex fn cp
16 @syncodeindex ky cp
17 @syncodeindex op cp
18 @syncodeindex pg cp
19 @syncodeindex vr cp
21 @set Francois Fran@,{c}ois
23 @ifinfo
24 @format
25 START-INFO-DIR-ENTRY
26 * Shell utilities: (sh-utils).          GNU shell utilities.
27 * basename: (sh-utils)basename invocation.      Strip directory and suffix.
28 * chroot: (sh-utils)chroot invocation.          Specify the root directory.
29 * date: (sh-utils)date invocation.              Print/set system date and time.
30 * dirname: (sh-utils)dirname invocation.        Strip non-directory suffix.
31 * echo: (sh-utils)echo invocation.              Print a line of text.
32 * env: (sh-utils)env invocation.                Modify the environment.
33 * expr: (sh-utils)expr invocation.              Evaluate expressions.
34 * factor: (sh-utils)factor invocation.          Print prime factors
35 * false: (sh-utils)false invocation.            Do nothing, unsuccessfully.
36 * groups: (sh-utils)groups invocation.          Print group names a user is in.
37 * hostname: (sh-utils)hostname invocation.      Print or set system name.
38 * id: (sh-utils)id invocation.                  Print real/effective uid/gid.
39 * logname: (sh-utils)logname invocation.        Print current login name.
40 * nice: (sh-utils)nice invocation.              Modify scheduling priority.
41 * nohup: (sh-utils)nohup invocation.            Immunize to hangups.
42 * pathchk: (sh-utils)pathchk invocation.        Check file name portability.
43 * printenv: (sh-utils)printenv invocation.      Print environment variables.
44 * printf: (sh-utils)printf invocation.          Format and print data.
45 * pwd: (sh-utils)pwd invocation.                Print working directory.
46 * seq: (sh-utils)seq invocation.                Print numeric sequences
47 * sleep: (sh-utils)sleep invocation.            Delay for a specified time.
48 * stty: (sh-utils)stty invocation.              Print/change terminal settings.
49 * su: (sh-utils)su invocation.                  Modify user and group id.
50 * tee: (sh-utils)tee invocation.                Redirect to multiple files.
51 * test: (sh-utils)test invocation.              File/string tests.
52 * true: (sh-utils)true invocation.              Do nothing, successfully.
53 * tty: (sh-utils)tty invocation.                Print terminal name.
54 * uname: (sh-utils)uname invocation.            Print system information.
55 * users: (sh-utils)users invocation.            Print current user names.
56 * who: (sh-utils)who invocation.                Print who is logged in.
57 * whoami: (sh-utils)whoami invocation.          Print effective user id.
58 * yes: (sh-utils)yes invocation.                Print a string indefinitely.
59 END-INFO-DIR-ENTRY
60 @end format
61 @end ifinfo
63 @ifinfo
64 This file documents the GNU shell utilities.
66 Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
68 Permission is granted to make and distribute verbatim copies of
69 this manual provided the copyright notice and this permission notice
70 are preserved on all copies.
72 @ignore
73 Permission is granted to process this file through TeX and print the
74 results, provided the printed document carries copying permission
75 notice identical to this one except for the removal of this paragraph
76 (this paragraph not being relevant to the printed manual).
78 @end ignore
79 Permission is granted to copy and distribute modified versions of this
80 manual under the conditions for verbatim copying, provided that the entire
81 resulting derived work is distributed under the terms of a permission
82 notice identical to this one.
84 Permission is granted to copy and distribute translations of this manual
85 into another language, under the above conditions for modified versions,
86 except that this permission notice may be stated in a translation approved
87 by the Foundation.
88 @end ifinfo
90 @titlepage
91 @title GNU @code{sh-utils}
92 @subtitle A set of shell utilities
93 @subtitle for version @value{VERSION}, @value{UPDATED}
94 @author David MacKenzie et al.
96 @page
97 @vskip 0pt plus 1filll
98 Copyright @copyright{} 1994, 95, 96 Free Software Foundation, Inc.
100 Permission is granted to make and distribute verbatim copies of
101 this manual provided the copyright notice and this permission notice
102 are preserved on all copies.
104 Permission is granted to copy and distribute modified versions of this
105 manual under the conditions for verbatim copying, provided that the entire
106 resulting derived work is distributed under the terms of a permission
107 notice identical to this one.
109 Permission is granted to copy and distribute translations of this manual
110 into another language, under the above conditions for modified versions,
111 except that this permission notice may be stated in a translation approved
112 by the Foundation.
113 @end titlepage
116 @ifinfo
117 @node Top
118 @top GNU shell utilities
120 @cindex shell utilities
121 @cindex utilities for shell programming
123 This manual documents version @value{VERSION} of the GNU shell utilities.
125 @menu
126 * Introduction::                Caveats, overview, and authors.
127 * Common options::              Common options.
129 * Date input formats::          Specifying date strings.
130 * Printing text::               echo printf yes
131 * Conditions::                  false true test expr
132 * Redirection::                 tee
133 * File name manipulation::      dirname basename pathchk
134 * Working context::             pwd stty printenv tty
135 * User information::            id logname whoami groups users who
136 * System context::              date uname hostname
137 * Modified command invocation:: chroot env nice nohup su
138 * Delaying::                    sleep
139 * Numeric operations::          factor seq
141 * Index::                       General index.
142 @end menu
143 @end ifinfo
146 @node Introduction
147 @chapter Introduction
149 @cindex introduction
151 First of all, this manual is incomplete.  The @code{stty} section, in
152 particular, needs substantial reorganization and additional explanatory
153 text before it will be up to the standard of other GNU manuals.
154 Explanatory text in general is lacking; the manual presently assumes you
155 pretty much know what to do, and just need to be reminded of how.  Thus,
156 if you are interested, please get involved in improving this manual.
157 The entire GNU community will benefit.
159 Some of these programs are useful only when writing shell scripts;
160 utilities like these are, in fact, the ``language'' of shell scripts (to
161 a great extent).  Others are occasionally useful interactively.
163 @cindex POSIX.2
164 The GNU shell utilities are mostly compatible with the POSIX.2 standard.
166 @c This paragraph appears in all of fileutils.texi, textutils.texi, and
167 @c sh-utils.texi too -- so be sure to keep them consistent.
168 @cindex bugs, reporting
169 Please report bugs to @samp{sh-utils-bugs@@gnu.ai.mit.edu}.  Remember
170 to include the version number, machine architecture, input files, and
171 any other information needed to reproduce the bug: your input, what you
172 expected, what you got, and why it is wrong.  Diffs are welcome, but
173 please include a description of the problem as well, since this is
174 sometimes difficult to infer. @xref{Bugs, , , gcc, GNU CC}.
176 @cindex history
177 @cindex MacKenzie, David
178 @cindex Meyering, Jim
179 @c Sorry, but the @value trick doesn't work with TeX in indexing
180 @c commands, and I don't want to fix it right now. --karl.
181 @cindex Pinard, @value{Francois}
182 @cindex Berry, Karl
183 @cindex Stallman, Richard
184 This manual was originally derived from the Unix man pages in the
185 distribution, which were written by David MacKenzie and updated by Jim
186 Meyering.  What you are reading now is the authoritative documentation
187 for these utilities;  the man pages are no longer being maintained.
188 @value{Francois} Pinard did the initial conversion to Texinfo format.
189 Karl Berry did the indexing, some reorganization, and editing of the results.
190 Richard Stallman contributed his usual invaluable insights to the
191 overall process.
194 @node Common options
195 @chapter Common options
197 @cindex common options
199 Certain options are available in all these programs.  Rather than
200 writing identical descriptions for each of the programs, they are
201 described here.  (In fact, every GNU program accepts (or should accept)
202 these options.)
204 Many of these programs take arbitrary strings as arguments.  In those
205 cases, @samp{--help} and @samp{--version} are taken as these options
206 only if there is one and exactly one command line argument.
208 @table @samp
210 @item --help
211 @opindex --help
212 @cindex help, online
213 Print a usage message listing all available options, then exit successfully.
215 @item --version
216 @opindex --version
217 @cindex version number, finding
218 Print the version number, then exit successfully.
220 @end table
223 @include getdate.texi
226 @node Printing text
227 @chapter Printing text
229 @cindex printing text, commands for
230 @cindex commands for printing text
232 This section describes commands that display text strings.
234 @menu
235 * echo invocation::             Print a line of text.
236 * printf invocation::           Format and print data.
237 * yes invocation::              Print a string until interrupted.
238 @end menu
241 @node echo invocation
242 @section @code{echo}: Print a line of text
244 @pindex echo
245 @cindex displaying text
246 @cindex printing text
247 @cindex text, displaying
248 @cindex arbitrary text, displaying
250 @code{echo} writes each given @var{string} to standard output, with a
251 space between each and a newline after the last one.  Synopsis:
253 @example
254 echo [@var{option}]@dots{} [@var{string}]@dots{}
255 @end example
257 The program accepts the following options.  Also see @ref{Common options}.
259 @table @samp
260 @item -n
261 @opindex -n
262 Do not output the trailing newline.
264 @item -e
265 @opindex -e
266 @cindex backslash escapes
267 Enable interpretation of the following backslash-escaped characters in
268 each @var{string}:
270 @table @samp
271 @item \a
272 alert (bell)
273 @item \b
274 backspace
275 @item \c
276 suppress trailing newline
277 @item \f
278 form feed
279 @item \n
280 new line
281 @item \r
282 carriage return
283 @item \t
284 horizontal tab
285 @item \v
286 vertical tab
287 @item \\
288 backslash
289 @item \@var{nnn}
290 the character whose ASCII code is @var{nnn} (octal); if @var{nnn} is not
291 a valid octal number, it is printed literally.
292 @end table
294 @end table
297 @node printf invocation
298 @section @code{printf}: Format and print data
300 @pindex printf
301 @code{printf} does formatted printing of text. Synopsis:
303 @example
304 printf @var{format} [@var{argument}]@dots{}
305 @end example
307 @code{printf} prints the @var{format} string, interpreting @samp{%}
308 directives and @samp{\} escapes in the same way as the C @code{printf}
309 function.  The @var{format} argument is re-used as necessary to convert
310 all of the given @var{argument}s.
312 @code{printf} has one additional directive, @samp{%b}, which prints its
313 argument string with @samp{\} escapes interpreted in the same way as in
314 the @var{format} string.
316 @kindex \0ooo
317 @kindex \0xhhh
318 @code{printf} interprets @samp{\0ooo} in @var{format} as an octal number
319 (if @var{ooo} is 0 to 3 octal digits) specifying a character to print,
320 and @samp{\xhhh} as a hexadecimal number (if @var{hhh} is 1 to 3 hex
321 digits) specifying a character to print.
323 @kindex \c
324 An additional escape, @samp{\c}, causes @code{printf} to produce no
325 further output.
327 The only options are a lone @samp{--help} or
328 @samp{--version}.  @xref{Common options}.
331 @node yes invocation
332 @section @code{yes}: Print a string until interrupted
334 @pindex yes
335 @cindex repeated output of a string
337 @code{yes} prints the command line arguments, separated by spaces and
338 followed by a newline, forever until it is killed.  If no arguments are
339 given, it prints @samp{y} followed by a newline forever until killed.
341 The only options are a lone @samp{--help} or @samp{--version}.
342 @xref{Common options}.
345 @node Conditions
346 @chapter Conditions
348 @cindex conditions
349 @cindex commands for exit status
350 @cindex exit status commands
352 This section describes commands that are primarily useful for their exit
353 status, rather than their output.  Thus, they are often used as the
354 condition of shell @code{if} statements, or as the last command in a
355 pipeline.
357 @menu
358 * false invocation::            Do nothing, unsuccessfully.
359 * true invocation::             Do nothing, successfully.
360 * test invocation::             Check file types and compare values.
361 * expr invocation::             Evaluate expressions.
362 @end menu
365 @node false invocation
366 @section @code{false}: Do nothing, unsuccessfully
368 @pindex false
370 @cindex exit status of @code{true}
371 @cindex failure exit status
372 @code{false} does nothing except return an exit status of 1, meaning
373 @dfn{failure}.  It can be used as a place holder in shell scripts
374 where an unsuccessful command is needed.
376 Any arguments are ignored, except for a lone @samp{--help} or
377 @samp{--version} (@pxref{Common options}).
380 @node true invocation
381 @section @code{true}: Do nothing, successfully
383 @pindex true
384 @cindex do nothing, successfully
385 @cindex no-op
386 @cindex successful exit
388 @cindex exit status of @code{true}
389 @code{true} does nothing except return an exit status of 0, meaning
390 @dfn{success}.  It can be used as a place holder in shell scripts
391 where a successful command is needed, although the shell built-in
392 command @code{:} (colon) may be faster.
394 Any arguments are ignored, except for a lone @samp{--help} or
395 @samp{--version} (@pxref{Common options}).
398 @node test invocation
399 @section @code{test}: Check file types and compare values
401 @pindex test
402 @cindex check file types
403 @cindex compare values
404 @cindex expression evaluation
406 @code{test} returns a status of 0 (true) or 1 (false) depending on the
407 evaluation of the conditional expression @var{expr}.  Each part of the
408 expression must be a separate argument.
410 @code{test} has file status checks, string operators, and numeric
411 comparison operators.
413 @cindex conflicts with shell built-ins
414 @cindex built-in shell commands, conflicts with
415 Because most shells have a built-in command by the same name, using the
416 unadorned command name in a script or interactively may get you
417 different functionality than that described here.
419 Besides the options below, @code{test} accepts a lone @samp{--help} or
420 @samp{--version}.  @xref{Common options}.  A single non-option argument
421 is also allowed: @code{test} returns true if the argument is not null.
423 @menu
424 * File type tests::             -[bcdfhLpSt]
425 * Access permission tests::     -[gkruwxOG]
426 * File characteristics tests::  -e -s -nt -ot -ef
427 * String tests::                -z -n = !=
428 * Numeric tests::               -eq -ne -lt -le -gt -ge
429 * Connectives for test::        ! -a -o
430 @end menu
433 @node File type tests
434 @subsection File type tests
436 @cindex file type tests
438 These options test for particular types of files.  (Everything's a file,
439 but not all files are the same!)
441 @table @samp
443 @item -b @var{file}
444 @opindex -b
445 @cindex block special check
446 True if @var{file} exists and is a block special device.
448 @item -c @var{file}
449 @opindex -c
450 @cindex character special check
451 True if @var{file} exists and is a character special device.
453 @item -d @var{file}
454 @opindex -d
455 @cindex directory check
456 True if @var{file} exists and is a directory.
458 @item -f @var{file}
459 @opindex -f
460 @cindex regular file check
461 True if @var{file} exists and is a regular file.
463 @item -h @var{file}
464 @itemx -L @var{file}
465 @opindex -L
466 @opindex -h
467 @cindex symbolic link check
468 True if @var{file} exists and is a symbolic link.
470 @item -p @var{file}
471 @opindex -p
472 @cindex named pipe check
473 True if @var{file} exists and is a named pipe.
475 @item -S @var{file}
476 @opindex -S
477 @cindex socket check
478 True if @var{file} exists and is a socket.
480 @item -t [@var{fd}]
481 @opindex -t
482 @cindex terminal check
483 True if @var{fd} is opened on a terminal.  If @var{fd} is omitted, it
484 defaults to 1 (standard output).
486 @end table
489 @node Access permission tests
490 @subsection Access permission tests
492 @cindex access permission tests
493 @cindex permission tests
495 These options test for particular access permissions.
497 @table @samp
499 @item -g @var{file}
500 @opindex -g
501 @cindex set-group-id check
502 True if @var{file} exists and has its set-group-id bit set.
504 @item -k @var{file}
505 @opindex -k
506 @cindex sticky bit check
507 True if @var{file} has its @dfn{sticky} bit set.
509 @item -r @var{file}
510 @opindex -r
511 @cindex readable file check
512 True if @var{file} exists and is readable.
514 @item -u @var{file}
515 @opindex -u
516 @cindex set-user-id check
517 True if @var{file} exists and has its set-user-id bit set.
519 @item -w @var{file}
520 @opindex -w
521 @cindex writable file check
522 True if @var{file} exists and is writable.
524 @item -x @var{file}
525 @opindex -x
526 @cindex executable file check
527 True if @var{file} exists and is executable.
529 @item -O @var{file}
530 @opindex -O
531 @cindex owned by effective uid check
532 True if @var{file} exists and is owned by the current effective user id.
534 @item -G @var{file}
535 @opindex -G
536 @cindex owned by effective gid check
537 True if @var{file} exists and is owned by the current effective group id.
539 @end table
541 @node File characteristics tests
542 @subsection File characteristics tests
544 @cindex file characteristics tests
546 These options test other file characteristics.
548 @table @samp
550 @item -e @var{file}
551 @opindex -e
552 @cindex existence-of-file check
553 True if @var{file} exists.
555 @item -s @var{file}
556 @opindex -s
557 @cindex nonempty file check
558 True if @var{file} exists and has a size greater than zero.
560 @item @var{file1} -nt @var{file2}
561 @opindex -nt
562 @cindex newer-than file check
563 True if @var{file1} is newer (according to modification date) than
564 @var{file2}.
566 @item @var{file1} -ot @var{file2}
567 @opindex -ot
568 @cindex older-than file check
569 True if @var{file1} is older (according to modification date) than
570 @var{file2}.
572 @item @var{file1} -ef @var{file2}
573 @opindex -ef
574 @cindex same file check
575 @cindex hard link check
576 True if @var{file1} and @var{file2} have the same device and inode
577 numbers, i.e., if they are hard links to each other.
579 @end table
582 @node String tests
583 @subsection String tests
585 @cindex string tests
587 These options test string characteristics.  Strings are not quoted for
588 @code{test}, though you may need to quote them to protect characters
589 with special meaning to the shell, e.g., spaces.
591 @table @samp
593 @item -z @var{string}
594 @opindex -z
595 @cindex zero-length string check
596 True if the length of @var{string} is zero.
598 @item -n @var{string}
599 @itemx @var{string}
600 @opindex -n
601 @cindex nonzero-length string check
602 True if the length of @var{string} is nonzero.
604 @item @var{string1} = @var{string2}
605 @opindex =
606 @cindex equal string check
607 True if the strings are equal.
609 @item @var{string1} != @var{string2}
610 @opindex !=
611 @cindex not-equal string check
612 True if the strings are not equal.
614 @end table
617 @node Numeric tests
618 @subsection Numeric tests
620 @cindex numeric tests
621 @cindex arithmetic tests
623 Numeric relationals.  The arguments must be entirely numeric (possibly
624 negative), or the special expression @w{@code{-l @var{string}}}, which
625 evaluates to the length of @var{string}.
627 @table @samp
629 @item @var{arg1} -eq @var{arg2}
630 @itemx @var{arg1} -ne @var{arg2}
631 @itemx @var{arg1} -lt @var{arg2}
632 @itemx @var{arg1} -le @var{arg2}
633 @itemx @var{arg1} -gt @var{arg2}
634 @itemx @var{arg1} -ge @var{arg2}
635 @opindex -eq
636 @opindex -ne
637 @opindex -lt
638 @opindex -le
639 @opindex -gt
640 @opindex -ge
641 These arithmetic binary operators return true if @var{arg1} is equal,
642 not-equal, less-than, less-than-or-equal, greater-than, or
643 greater-than-or-equal than @var{arg2}, respectively.
645 @end table
647 For example:
649 @example
650 test -1 -gt -2 && echo yes
651 @result{} yes
652 test -l abc -gt 1 && echo yes
653 @result{} yes
654 test 0x100 -eq 1
655 @error{} test: integer expression expected before -eq
656 @end example
659 @node Connectives for test
660 @subsection Connectives for @code{test}
662 @cindex logical connectives
663 @cindex connectives, logical
665 The usual logical connectives.
667 @table @samp
669 @item ! @var{expr}
670 @opindex !
671 True if @var{expr} is false.
673 @item @var{expr1} -a @var{expr2}
674 @opindex -a
675 @cindex logical and operator
676 @cindex and operator
677 True if both @var{expr1} and @var{expr2} are true.
679 @item @var{expr1} -o @var{expr2}
680 @opindex -o
681 @cindex logical or operator
682 @cindex or operator
683 True if either @var{expr1} or @var{expr2} is true.
685 @end table
688 @node expr invocation
689 @section @code{expr}: Evaluate expressions
691 @pindex expr
692 @cindex expression evaluation
693 @cindex evaluation of expressions
695 @code{expr} evaluates an expression and writes the result on standard
696 output.  Each token of the expression must be a separate argument.
698 Operands are either numbers or strings.  @code{expr} coerces
699 anything appearing in an operand position to an integer or a string
700 depending on the operation being applied to it.
702 Strings are not quoted for @code{expr} itself, though you may need to
703 quote them to protect characters with special meaning to the shell,
704 e.g., spaces.
706 @cindex parentheses for grouping
707 Operators may given as infix symbols or prefix keywords.  Parentheses
708 may be used for grouping in the usual manner (you must quote parentheses
709 to avoid the shell evaluating them, however).
711 @cindex exit status of @code{expr}
712 Exit status:
714 @display
715 0 if the expression is neither null nor 0,
716 1 if the expression is null or 0,
717 2 for invalid expressions.
718 @end display
720 @menu
721 * Relations for expr::          | & < <= = == != >= >
722 * Numeric expressions::         + - * / %
723 * String expressions::          <colon> match substr index length quote
724 * Examples of expr::            Examples.
725 @end menu
728 @node Relations for expr
729 @subsection Relations for @code{expr}
731 @cindex connectives, logical
732 @cindex logical connectives
733 @cindex relations, numeric or string
735 The usual logical connectives and relations, in order of precedence.
737 @table @samp
739 @item |
740 @kindex |
741 @cindex logical or operator
742 @cindex or operator
743 Yields its first argument if it is neither null nor 0, otherwise its
744 second argument.
746 @item &
747 @kindex &
748 @cindex logical and operator
749 @cindex and operator
750 Yields its first argument if neither argument is null or 0, otherwise
753 @item < <= = == != >= >
754 @kindex <
755 @kindex <=
756 @kindex =
757 @kindex ==
758 @kindex >
759 @kindex >=
760 @cindex comparison operators
761 Compare the arguments and return 1 if the relation is true, 0 otherwise.
762 @code{==} is a synonym for @code{=}.  @code{expr} first tries to coerce
763 both arguments to numbers and do a numeric comparison; if either
764 coercion fails, it does a lexicographic comparison.
766 @end table
769 @node Numeric expressions
770 @subsection Numeric expressions
772 @cindex numeric expressions
773 @cindex expressions, numeric
775 Numeric operators, in order of increasing precedence.  The connectives
776 (previous section) have higher precedence, the string operators
777 (following section) have lower.
779 @table @samp
781 @item + -
782 @kindex +
783 @kindex -
784 @cindex addition
785 @cindex subtraction
786 Addition and subtraction.  Both arguments are coerced to numbers;
787 an error occurs if this cannot be done.
789 @item * / %
790 @kindex *
791 @kindex /
792 @kindex %
793 @cindex multiplication
794 @cindex division
795 @cindex remainder
796 Multiplication, division, remainder.  Both arguments are coerced to
797 numbers; an error occurs if this cannot be done.
799 @end table
802 @node String expressions
803 @subsection String expressions
805 @cindex string expressions
806 @cindex expressions, string
808 String operators.  These have lowest precedence.
810 @table @samp
812 @item @var{string} : @var{regex}
813 @cindex pattern matching
814 @cindex regular expression matching
815 @cindex matching patterns
816 Perform pattern matching.  The arguments are coerced to strings and the
817 second is considered to be a (basic, a la @code{grep}) regular
818 expression, with a @code{^} implicitly prepended.  The first argument is
819 then matched against this regular expression.
821 If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the
822 @code{:} expression returns the part of @var{string} that matched the
823 subexpression; otherwise, it returns the number of characters matched.
825 If the match fails, the @code{:} operator returns the null string if
826 @samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0.
828 Only the first @samp{\( @dots{} \)} pair is relevant to the return
829 value; additional pairs are meaningful only for grouping the regular
830 expression operators.
832 @xref{Top, , Regular Expression Library, regex, Regex}, for details of
833 regular expression syntax.
835 @item match @var{string} @var{regex}
836 @findex match
837 An alternative way to do pattern matching.  This is the same as
838 @w{@samp{@var{string} : @var{regex}}}.
840 @item substr @var{string} @var{position} @var{length}
841 @findex substr
842 Returns the substring of @var{string} beginning at @var{position}
843 with length at most @var{length}.  If either @var{position} or
844 @var{length} is negative, zero, or non-numeric, returns the null string.
846 @item index @var{string} @var{charset}
847 @findex index
848 Returns the first position in @var{string} where the first character in
849 @var{charset} was found.  If no character in @var{charset} is found in
850 @var{string}, return 0.
852 @item length @var{string}
853 @findex length
854 Returns the length of @var{string}.
856 @item quote @var{token}
857 @findex quote
858 Interpret @var{token} as a string, even if it is a keyword like @var{match}
859 or an operator like @code{/}.
860 This makes it possible to test @code{expr length quote "$x"} or
861 @code{expr quote "$x" : '.*/\(.\)'} and have it do the right thing even if
862 the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
863 This operator is a GNU extension.  It is disabled when
864 the environment variable @var{POSIXLY_CORRECT} is set.
866 @end table
868 To make @code{expr} interpret keywords as strings, you must use the
869 @code{quote} operator.
872 @node Examples of expr
873 @subsection Examples of @code{expr}
875 @cindex examples of @code{expr}
876 Here are a few examples, including quoting for shell metacharacters.
878 To add 1 to the shell variable @code{foo}, in Bourne-compatible shells:
879 @example
880 foo=`expr $foo + 1`
881 @end example
883 To print the non-directory part of the file name stored in
884 @code{$fname}, which need not contain a @code{/}.
885 @example
886 expr $fname : '.*/\(^.*\)' '^|' $fname
887 @end example
889 @example
890 expr abc : 'a\(.\)c'
891 @result{} b
892 expr index abcdef cz
893 @result{} 3
894 expr index index a
895 @error{} expr: syntax error
896 expr index quote index a
897 @result{} 0
899 @end example
902 @node Redirection
903 @chapter Redirection
905 @cindex redirection
906 @cindex commands for redirection
908 Unix shells commonly provide several forms of @dfn{redirection}---ways
909 to change the input source or output destination of a command.  But one
910 useful redirection is performed by a separate command, not by the shell;
911 it's described here.
913 @menu
914 * tee invocation::              Redirect output to multiple files.
915 @end menu
918 @node tee invocation
919 @section @code{tee}: Redirect output to multiple files
921 @pindex tee
922 @cindex pipe fitting
923 @cindex destinations, multiple output
924 @cindex read from stdin and write to stdout and files
926 The @code{tee} command copies standard input to standard output and also
927 to any files given as arguments.  This is useful when you want not only
928 to send some data down a pipe, but also to save a copy.  Synopsis:
930 @example
931 tee [@var{option}]@dots{} [@var{file}]@dots{}
932 @end example
934 If a file being written to does not already exist, it is created.  If a
935 file being written to already exists, the data it previously contained
936 is overwritten unless the @code{-a} option is used.
938 The program accepts the following options.  Also see @ref{Common options}.
940 @table @samp
941 @item -a
942 @itemx --append
943 @opindex -a
944 @opindex --append
945 Append standard input to the given files rather than overwriting
946 them.
948 @item -i
949 @itemx --ignore-interrupts
950 @opindex -i
951 @opindex --ignore-interrupts
952 Ignore interrupt signals.
954 @end table
957 @node File name manipulation
958 @chapter File name manipulation
960 @cindex file name manipulation
961 @cindex manipulation of file names
962 @cindex commands for file name manipulation
964 This section describes commands that manipulate file names.
966 @menu
967 * basename invocation::         Strip directory and suffix from a file name.
968 * dirname invocation::          Strip non-directory suffix from a file name.
969 * pathchk invocation::          Check file name portability.
970 @end menu
973 @node basename invocation
974 @section @code{basename}: Strip directory and suffix from a file name
976 @pindex basename
977 @cindex strip directory and suffix from file names
978 @cindex directory, stripping from file names
979 @cindex suffix, stripping from file names
980 @cindex file names, stripping directory and suffix
981 @cindex leading directory components, stripping
983 @code{basename} removes any leading directory components from
984 @var{name}.  Synopsis:
986 @example
987 basename @var{name} [@var{suffix}]
988 @end example
990 If @var{suffix} is specified and is identical to the end of @var{name},
991 it is removed from @var{name} as well.  @code{basename} prints the
992 result on standard output.
994 The only options are @samp{--help} and @samp{--version}.  @xref{Common
995 options}.
998 @node dirname invocation
999 @section @code{dirname}: Strip non-directory suffix from a file name
1001 @pindex dirname
1002 @cindex directory components, printing
1003 @cindex stripping non-directory suffix
1004 @cindex non-directory suffix, stripping
1006 @code{dirname} prints all but the final slash-delimited component of
1007 a string (presumably a filename).  Synopsis:
1009 @example
1010 dirname @var{name}
1011 @end example
1013 If @var{name} is a single component, @code{dirname} prints @samp{.}
1014 (meaning the current directory).
1016 The only options are @samp{--help} and @samp{--version}.  @xref{Common
1017 options}.
1020 @node pathchk invocation
1021 @section @code{pathchk}: Check file name portability
1023 @pindex pathchk
1024 @cindex file names, checking validity and portability
1025 @cindex valid file names, checking for
1026 @cindex portable file names, checking for
1028 @code{pathchk} checks portability of filenames.  Synopsis:
1030 @example
1031 pathchk [@var{option}]@dots{} @var{name}@dots{}
1032 @end example
1034 For each @var{name}, @code{pathchk} prints a message if any of
1035 these conditions is true:
1036 @enumerate
1037 @item
1038 one of the existing directories in @var{name} does not have search
1039 (execute) permission,
1040 @item
1041 the length of @var{name} is larger than its filesystem's maximum
1042 file name length,
1043 @item
1044 the length of one component of @var{name}, corresponding to an
1045 existing directory name, is larger than its filesystem's maximum
1046 length for a file name component.
1047 @end enumerate
1049 The program accepts the following option.  Also see @ref{Common options}.
1051 @table @samp
1053 @item -p
1054 @itemx --portability
1055 @opindex -p
1056 @opindex --portability
1057 Instead of performing length checks on the underlying filesystem,
1058 test the length of each file name and its components against the
1059 POSIX.1 minimum limits for portability.  Also check that the file
1060 name contains no characters not in the portable file name character set.
1062 @end table
1064 @cindex exit status of @code{pathchk}
1065 Exit status:
1067 @display
1068 0 if all specified file names passed all of the tests,
1069 1 otherwise.
1070 @end display
1073 @node Working context
1074 @chapter Working context
1076 @cindex working context
1077 @cindex commands for printing the working context
1079 This section describes commands that display or alter the context in
1080 which you are working: the current directory, the terminal settings, and
1081 so forth.  See also the user-related commands in the next section.
1083 @menu
1084 * pwd invocation::              Print working directory.
1085 * stty invocation::             Print or change terminal characteristics.
1086 * printenv invocation::         Print environment variables.
1087 * tty invocation::              Print file name of terminal on standard input.
1088 @end menu
1091 @node pwd invocation
1092 @section @code{pwd}: Print working directory
1094 @pindex pwd
1095 @cindex print name of current directory
1096 @cindex current working directory, printing
1097 @cindex working directory, printing
1099 @cindex symbolic links and @code{pwd}
1100 @code{pwd} prints the fully resolved name of the current directory.
1101 That is, all components of the printed name will be actual directory
1102 names---none will be symbolic links.
1104 @cindex conflicts with shell built-ins
1105 @cindex built-in shell commands, conflicts with
1106 Because most shells have a built-in command by the same name, using the
1107 unadorned command name in a script or interactively may get you
1108 different functionality than that described here.
1110 The only options are a lone @samp{--help} or
1111 @samp{--version}.  @xref{Common options}.
1114 @node stty invocation
1115 @section @code{stty}: Print or change terminal characteristics
1117 @pindex stty
1118 @cindex change or print terminal settings
1119 @cindex terminal settings
1120 @cindex line settings of terminal
1122 @code{stty} prints or changes terminal characteristics, such as baud rate.
1123 Synopses:
1125 @example
1126 stty [@var{setting}]@dots{}
1127 stty [@var{option}]
1128 @end example
1130 If given no arguments, @code{stty} prints the baud rate, line
1131 discipline number (on systems that support it), and line settings
1132 that have been changed from the values set by @samp{stty sane}.
1133 Mode reading and setting are performed on the tty line connected to
1134 standard input.
1136 @code{stty} accepts many non-option arguments that change aspects of
1137 the terminal line operation, as described below.
1139 The program accepts the following options.  Also see @ref{Common options}.
1141 @table @samp
1142 @item -a
1143 @itemx --all
1144 @opindex -a
1145 @opindex --all
1146 Print all current settings in human-readable form.
1148 @item -g
1149 @itemx --save
1150 @opindex -g
1151 @opindex --save
1152 @cindex machine-readable @code{stty} output
1153 Print all current settings in a form that can be used as an argument to
1154 another @code{stty} command to restore the current settings.
1156 @end table
1158 Many settings can be turned off by preceding them with a @samp{-}.
1159 Such arguments are marked below with ``May be negated'' in their
1160 description.  The descriptions themselves refer to the positive
1161 case, that is, when @emph{not} negated (unless stated otherwise,
1162 of course).
1164 Some settings are not available on all POSIX systems, since they use
1165 extensions.  Such arguments are marked below with ``Non-POSIX'' in their
1166 description.  On non-POSIX systems, those or other settings also may not
1167 be available, but it's not feasible to document all the variations: just
1168 try it and see.
1170 @menu
1171 * Control::                     Control settings
1172 * Input::                       Input settings
1173 * Output::                      Output settings
1174 * Local::                       Local settings
1175 * Combination::                 Combination settings
1176 * Characters::                  Special characters
1177 * Special::                     Special settings
1178 @end menu
1181 @node Control
1182 @subsection Control settings
1184 @cindex control settings
1185 Control settings:
1187 @table @samp
1188 @item parenb
1189 @opindex parenb
1190 @cindex two-way parity
1191 Generate parity bit in output and expect parity bit in input.
1192 May be negated.
1194 @item parodd
1195 @opindex parodd
1196 @cindex odd parity
1197 @cindex even parity
1198 Set odd parity (even if negated).  May be negated.
1200 @item cs5
1201 @itemx cs6
1202 @itemx cs7
1203 @itemx cs8
1204 @opindex cs@var{n}
1205 @cindex character size
1206 @cindex eight-bit characters
1207 Set character size to 5, 6, 7, or 8 bits.
1209 @item hup
1210 @itemx hupcl
1211 @opindex hup[cl]
1212 Send a hangup signal when the last process closes the tty.  May be
1213 negated.
1215 @item cstopb
1216 @opindex cstopb
1217 @cindex stop bits
1218 Use two stop bits per character (one if negated).  May be negated.
1220 @item cread
1221 @opindex cread
1222 Allow input to be received.  May be negated.
1224 @item clocal
1225 @opindex clocal
1226 @cindex modem control
1227 Disable modem control signals.  May be negated.
1229 @item crtscts
1230 @opindex crtscts
1231 @cindex hardware flow control
1232 @cindex flow control, hardware
1233 @cindex RTS/CTS flow control
1234 Enable RTS/CTS flow control.  Non-POSIX.  May be negated.
1235 @end table
1238 @node Input
1239 @subsection Input settings
1241 @cindex input settings
1243 @table @samp
1244 @item ignbrk
1245 @opindex ignbrk
1246 @cindex breaks, ignoring
1247 Ignore break characters.  May be negated.
1249 @item brkint
1250 @opindex brkint
1251 @cindex breaks, cause interrupts
1252 Make breaks cause an interrupt signal.  May be negated.
1254 @item ignpar
1255 @opindex ignpar
1256 @cindex parity, ignoring
1257 Ignore characters with parity errors.  May be negated.
1259 @item parmrk
1260 @opindex parmrk
1261 @cindex parity errors, marking
1262 Mark parity errors (with a 255-0-character sequence).  May be negated.
1264 @item inpck
1265 @opindex inpck
1266 Enable input parity checking.  May be negated.
1268 @item istrip
1269 @opindex istrip
1270 @cindex eight-bit input
1271 Clear high (8th) bit of input characters.  May be negated.
1273 @item inlcr
1274 @opindex inlcr
1275 @cindex newline, translating to return
1276 Translate newline to carriage return.  May be negated.
1278 @item igncr
1279 @opindex igncr
1280 @cindex return, ignoring
1281 Ignore carriage return.  May be negated.
1283 @item icrnl
1284 @opindex icrnl
1285 @cindex return, translating to newline
1286 Translate carriage return to newline.  May be negated.
1288 @item ixon
1289 @opindex ixon
1290 @kindex C-s/C-q flow control
1291 @cindex XON/XOFF flow control
1292 Enable XON/XOFF flow control (that is, @kbd{CTRL-S}/@kbd{CTRL-Q}).  May
1293 be negated.
1295 @item ixoff
1296 @itemx tandem
1297 @opindex ixoff
1298 @opindex tandem
1299 @cindex software flow control
1300 @cindex flow control, software
1301 Enable sending of @code{stop} character when the system input buffer
1302 is almost full, and @code{start} character when it becomes almost
1303 empty again.  May be negated.
1305 @item iuclc
1306 @opindex iuclc
1307 @cindex uppercase, translating to lowercase
1308 Translate uppercase characters to lowercase.  Non-POSIX.  May be
1309 negated.
1311 @item ixany
1312 @opindex ixany
1313 Allow any character to restart output (only the start character
1314 if negated).  Non-POSIX.  May be negated.
1316 @item imaxbel
1317 @opindex imaxbel
1318 @cindex beeping at input buffer full
1319 Enable beeping and not flushing input buffer if a character arrives
1320 when the input buffer is full.  Non-POSIX.  May be negated.
1321 @end table
1324 @node Output
1325 @subsection Output settings
1327 @cindex output settings
1328 These arguments specify output-related operations.
1330 @table @samp
1331 @item opost
1332 @opindex opost
1333 Postprocess output.  May be negated.
1335 @item olcuc
1336 @opindex olcuc
1337 @cindex lowercase, translating to output
1338 Translate lowercase characters to uppercase.  Non-POSIX.  May be
1339 negated.
1341 @item ocrnl
1342 @opindex ocrnl
1343 @cindex return, translating to newline
1344 Translate carriage return to newline.  Non-POSIX.  May be negated.
1346 @item onlcr
1347 @opindex onlcr
1348 @cindex newline, translating to crlf
1349 Translate newline to carriage return-newline.  Non-POSIX.  May be
1350 negated.
1352 @item onocr
1353 @opindex onocr
1354 Do not print carriage returns in the first column.  Non-POSIX.
1355 May be negated.
1357 @item onlret
1358 @opindex onlret
1359 Newline performs a carriage return.  Non-POSIX.  May be negated.
1361 @item ofill
1362 @opindex ofill
1363 @cindex pad instead of timing for delaying
1364 Use fill (padding) characters instead of timing for delays.  Non-POSIX.
1365 May be negated.
1367 @item ofdel
1368 @opindex ofdel
1369 @cindex pad character
1370 Use delete characters for fill instead of null characters.  Non-POSIX.
1371 May be negated.
1373 @item nl1
1374 @itemx nl0
1375 @opindex nl@var{n}
1376 Newline delay style.  Non-POSIX.
1378 @item cr3
1379 @itemx cr2
1380 @itemx cr1
1381 @itemx cr0
1382 @opindex cr@var{n}
1383 Carriage return delay style.  Non-POSIX.
1385 @item tab3
1386 @itemx tab2
1387 @itemx tab1
1388 @itemx tab0
1389 @opindex tab@var{n}
1390 Horizontal tab delay style.  Non-POSIX.
1392 @item bs1
1393 @itemx bs0
1394 @opindex bs@var{n}
1395 Backspace delay style.  Non-POSIX.
1397 @item vt1
1398 @itemx vt0
1399 @opindex vt@var{n}
1400 Vertical tab delay style.  Non-POSIX.
1402 @item ff1
1403 @itemx ff0
1404 @opindex ff@var{n}
1405 Form feed delay style.  Non-POSIX.
1406 @end table
1409 @node Local
1410 @subsection Local settings
1412 @cindex local settings
1414 @table @samp
1415 @item isig
1416 @opindex isig
1417 Enable @code{interrupt}, @code{quit}, and @code{suspend} special
1418 characters.  May be negated.
1420 @item icanon
1421 @opindex icanon
1422 Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt}
1423 special characters.  May be negated.
1425 @item iexten
1426 @opindex iexten
1427 Enable non-POSIX special characters.  May be negated.
1429 @item echo
1430 @opindex echo
1431 Echo input characters.  May be negated.
1433 @item echoe
1434 @itemx crterase
1435 @opindex echoe
1436 @opindex crterase
1437 Echo @code{erase} characters as backspace-space-backspace.  May be
1438 negated.
1440 @item echok
1441 @opindex echok
1442 @cindex newline echoing after @code{kill}
1443 Echo a newline after a @code{kill} character.  May be negated.
1445 @item echonl
1446 @opindex echonl
1447 @cindex newline, echoing
1448 Echo newline even if not echoing other characters.  May be negated.
1450 @item noflsh
1451 @opindex noflsh
1452 @cindex flushing, disabling
1453 Disable flushing after @code{interrupt} and @code{quit} special
1454 characters.  May be negated.
1456 @item xcase
1457 @opindex xcase
1458 @cindex case translation
1459 Enable input and output of uppercase characters by preceding their
1460 lowercase equivalents with @samp{\}, when @code{icanon} is set.
1461 Non-POSIX.  May be negated.
1463 @item tostop
1464 @opindex tostop
1465 @cindex background jobs, stopping at terminal write
1466 Stop background jobs that try to write to the terminal.  Non-POSIX.
1467 May be negated.
1469 @item echoprt
1470 @itemx prterase
1471 @opindex echoprt
1472 @opindex prterase
1473 Echo erased characters backward, between @samp{\} and @samp{/}.
1474 Non-POSIX.  May be negated.
1476 @item echoctl
1477 @itemx ctlecho
1478 @opindex echoctl
1479 @opindex ctlecho
1480 @cindex control characters, using @samp{^@var{c}}
1481 @cindex hat notation for control characters
1482 Echo control characters in hat notation (@samp{^@var{c}}) instead
1483 of literally.  Non-POSIX.  May be negated.
1485 @item echoke
1486 @itemx crtkill
1487 @opindex echoke
1488 @opindex crtkill
1489 Echo the @code{kill} special character by erasing each character on
1490 the line as indicated by the @code{echoprt} and @code{echoe} settings,
1491 instead of by the @code{echoctl} and @code{echok} settings.  Non-POSIX.
1492 May be negated.
1493 @end table
1496 @node Combination
1497 @subsection Combination settings
1499 @cindex combination settings
1500 Combination settings:
1502 @table @samp
1503 @item evenp
1504 @opindex evenp
1505 @itemx parity
1506 @opindex parity
1507 Same as @code{parenb -parodd cs7}.  May be negated.  If negated, same
1508 as @code{-parenb cs8}.
1510 @item oddp
1511 @opindex oddp
1512 Same as @code{parenb parodd cs7}.  May be negated.  If negated, same
1513 as @code{-parenb cs8}.
1515 @item nl
1516 @opindex nl
1517 Same as @code{-icrnl -onlcr}.  May be negated.  If negated, same as
1518 @code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}.
1520 @item ek
1521 @opindex ek
1522 Reset the @code{erase} and @code{kill} special characters to their default
1523 values.
1525 @item sane
1526 @opindex sane
1527 Same as:
1528 @c This is too long to write inline.
1529 @example
1530 cread -ignbrk brkint -inlcr -igncr icrnl -ixoff -iuclc -ixany
1531 imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel
1532 nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl
1533 -noflsh -xcase -tostop -echoprt echoctl echoke
1534 @end example
1535 @noindent and also sets all special characters to their default values.
1537 @item cooked
1538 @opindex cooked
1539 Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus
1540 sets the @code{eof} and @code{eol} characters to their default values
1541 if they are the same as the @code{min} and @code{time} characters.
1542 May be negated.  If negated, same as @code{raw}.
1544 @item raw
1545 @opindex raw
1546 Same as:
1547 @example
1548 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr
1549 -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -isig -icanon
1550 -xcase min 1 time 0
1551 @end example
1552 @noindent May be negated.  If negated, same as @code{cooked}.
1554 @item cbreak
1555 @opindex cbreak
1556 Same as @code{-icanon}.  May be negated.  If negated, same as
1557 @code{icanon}.
1559 @item pass8
1560 @opindex pass8
1561 @cindex eight-bit characters
1562 Same as @code{-parenb -istrip cs8}.  May be negated.  If negated,
1563 same as @code{parenb istrip cs7}.
1565 @item litout
1566 @opindex litout
1567 Same as @code{-parenb -istrip -opost cs8}.  May be negated.
1568 If negated, same as @code{parenb istrip opost cs7}.
1570 @item decctlq
1571 @opindex decctlq
1572 Same as @code{-ixany}.  Non-POSIX.  May be negated.
1574 @item tabs
1575 @opindex tabs
1576 Same as @code{tab0}.  Non-POSIX.  May be negated.  If negated, same
1577 as @code{tab3}.
1579 @item lcase
1580 @itemx LCASE
1581 @opindex lcase
1582 @opindex LCASE
1583 Same as @code{xcase iuclc olcuc}.  Non-POSIX.  May be negated.
1585 @item crt
1586 @opindex crt
1587 Same as @code{echoe echoctl echoke}.
1589 @item dec
1590 @opindex dec
1591 Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}.
1592 @end table
1595 @node Characters
1596 @subsection Special characters
1598 @cindex special characters
1599 @cindex characters, special
1601 The special characters' default values vary from system to system.
1602 They are set with the syntax @samp{name value}, where the names are
1603 listed below and the value can be given either literally, in hat
1604 notation (@samp{^@var{c}}), or as an integer which may start with
1605 @samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or
1606 any other digit to indicate decimal.
1608 @cindex disabling special characters
1609 @kindex u@r{, and disabling special characters}
1610 For GNU stty, giving a value of @code{^-} or @code{undef} disables that
1611 special character.  (This is incompatible with Ultrix @code{stty},
1612 which uses  a value of @samp{u} to disable a special character.  GNU
1613 @code{stty} treats a value @samp{u} like any other, namely to set that
1614 special character to @key{U}.)
1616 @table @samp
1618 @item intr
1619 @opindex intr
1620 Send an interrupt signal.
1622 @item quit
1623 @opindex quit
1624 Send a quit signal.
1626 @item erase
1627 @opindex erase
1628 Erase the last character typed.
1630 @item kill
1631 @opindex kill
1632 Erase the current line.
1634 @item eof
1635 @opindex eof
1636 Send an end of file (terminate the input).
1638 @item eol
1639 @opindex eol
1640 End the line.
1642 @item eol2
1643 @opindex eol2
1644 Alternate character to end the line.  Non-POSIX.
1646 @item swtch
1647 @opindex swtch
1648 Switch to a different shell layer.  Non-POSIX.
1650 @item start
1651 @opindex start
1652 Restart the output after stopping it.
1654 @item stop
1655 @opindex stop
1656 Stop the output.
1658 @item susp
1659 @opindex susp
1660 Send a terminal stop signal.
1662 @item dsusp
1663 @opindex dsusp
1664 Send a terminal stop signal after flushing the input.  Non-POSIX.
1666 @item rprnt
1667 @opindex rprnt
1668 Redraw the current line.  Non-POSIX.
1670 @item werase
1671 @opindex werase
1672 Erase the last word typed.  Non-POSIX.
1674 @item lnext
1675 @opindex lnext
1676 Enter the next character typed literally, even if it is a special
1677 character.  Non-POSIX.
1678 @end table
1681 @node Special
1682 @subsection Special settings
1684 @cindex special settings
1686 @table @samp
1687 @item min @var{n}
1688 @opindex min
1689 Set the minimum number of characters that will satisfy a read until
1690 the time value has expired, when @code{-icanon} is set.
1692 @item time @var{n}
1693 @opindex time
1694 Set the number of tenths of a second before reads time out if the min
1695 number of characters have not been read, when @code{-icanon} is set.
1697 @item ispeed @var{n}
1698 @opindex ispeed
1699 Set the input speed to @var{n}.
1701 @item ospeed @var{n}
1702 @opindex ospeed
1703 Set the output speed to @var{n}.
1705 @item rows @var{n}
1706 @opindex rows
1707 Tell the tty kernel driver that the terminal has @var{n} rows.  Non-POSIX.
1709 @item cols @var{n}
1710 @itemx columns @var{n}
1711 @opindex cols
1712 @opindex columns
1713 Tell the kernel that the terminal has @var{n} columns.  Non-POSIX.
1715 @item size
1716 @opindex size
1717 @vindex LINES
1718 @vindex COLUMNS
1719 Print the number of rows and columns that the kernel thinks the
1720 terminal has.  (Systems that don't support rows and cols in the kernel
1721 typically use the environment variables @code{LINES} and @code{COLUMNS}
1722 instead; however, GNU @code{stty} does not know anything about them.)
1723 Non-POSIX.
1725 @item line @var{n}
1726 @opindex line
1727 Use line discipline @var{n}.  Non-POSIX.
1729 @item speed
1730 @opindex speed
1731 Print the terminal speed.
1733 @item @var{n}
1734 @cindex baud rate, setting
1735 Set the input and output speeds to @var{n}.  @var{n} can be one
1736 of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600
1737 19200 38400 @code{exta} @code{extb}.  @code{exta} is the same as
1738 19200; @code{extb} is the same as 38400.  0 hangs up the line if
1739 @code{-clocal} is set.
1740 @end table
1743 @node printenv invocation
1744 @section @code{printenv}: Print all or some environment variables
1746 @pindex printenv
1747 @cindex printing all or some environment variables
1748 @cindex environment variables, printing
1750 @code{printenv} prints environment variable values.  Synopsis:
1752 @example
1753 printenv [@var{option}] [@var{variable}]@dots{}
1754 @end example
1756 If no @var{variable}s are specified, @code{printenv} prints the value of
1757 every environment variable.  Otherwise, it prints the value of each
1758 @var{variable} that is set, and nothing for those that are not set.
1760 The only options are a lone @samp{--help} or @samp{--version}.
1761 @xref{Common options}.
1763 @cindex exit status of @code{printenv}
1764 Exit status:
1766 @display
1767 0 if all variables specified were found
1768 1 if at least one specified variable was not found
1769 2 if a write error occurred
1770 @end display
1773 @node tty invocation
1774 @section @code{tty}: Print file name of terminal on standard input
1776 @pindex tty
1777 @cindex print terminal file name
1778 @cindex terminal file name, printing
1780 @code{tty} prints the file name of the terminal connected to its standard
1781 input.  It prints @samp{not a tty} if standard input is not a terminal.
1782 Synopsis:
1784 @example
1785 tty [@var{option}]@dots{}
1786 @end example
1788 The program accepts the following option.  Also see @ref{Common options}.
1790 @table @samp
1792 @item -s
1793 @itemx --silent
1794 @itemx --quiet
1795 @opindex -s
1796 @opindex --silent
1797 @opindex --quiet
1798 Print nothing; only return an exit status.
1800 @end table
1802 @cindex exit status of @code{tty}
1803 Exit status:
1805 @display
1806 0 if standard input is a terminal
1807 1 if standard input is not a terminal
1808 2 if given incorrect arguments
1809 3 if a write error occurs
1810 @end display
1813 @node User information
1814 @chapter User information
1816 @cindex user information, commands for
1817 @cindex commands for printing user information
1819 This section describes commands that print user-related information:
1820 logins, groups, and so forth.
1822 @menu
1823 * id invocation::               Print real and effective uid and gid.
1824 * logname invocation::          Print current login name.
1825 * whoami invocation::           Print effective user id.
1826 * groups invocation::           Print group names a user is in.
1827 * users invocation::            Print login names of users currently logged in.
1828 * who invocation::              Print who is currently logged in.
1829 @end menu
1832 @node id invocation
1833 @section @code{id}: Print real and effective uid and gid
1835 @pindex id
1836 @cindex real uid and gid, printing
1837 @cindex effective uid and gid, printing
1838 @cindex printing real and effective uid and gid
1840 @code{id} prints information about the given user, or the process
1841 running it if no user is specified.  Synopsis:
1843 @example
1844 id [@var{option}]@dots{} [@var{username}]
1845 @end example
1847 By default, it prints the real user id, real group id, effective user id
1848 if different from the real user id, effective group id if different from
1849 the real group id, and supplemental group ids.
1851 Each of these numeric values is preceded by an identifying string and
1852 followed by the corresponding user or group name in parentheses.
1854 The options cause @code{id} to print only part of the above information.
1855 Also see @ref{Common options}.
1857 @table @samp
1858 @item -g
1859 @itemx --group
1860 @opindex -g
1861 @opindex --group
1862 Print only the group id.
1864 @item -G
1865 @itemx --groups
1866 @opindex -G
1867 @opindex --groups
1868 Print only the supplementary groups.
1870 @item -n
1871 @itemx --name
1872 @opindex -n
1873 @opindex --name
1874 Print the user or group name instead of the ID number.  Requires
1875 @code{-u}, @code{-g}, or @code{-G}.
1877 @item -r
1878 @itemx --real
1879 @opindex -r
1880 @opindex --real
1881 Print the real, instead of effective, user or group id.  Requires
1882 @code{-u}, @code{-g}, or @code{-G}.
1884 @item -u
1885 @itemx --user
1886 @opindex -u
1887 @opindex --user
1888 Print only the user id.
1890 @end table
1893 @node logname invocation
1894 @section @code{logname}: Print current login name
1896 @pindex logname
1897 @cindex printing user's login name
1898 @cindex login name, printing
1899 @cindex user name, printing
1901 @flindex /etc/utmp
1902 @flindex utmp
1904 @code{logname} prints the calling user's name, as found in the file
1905 @file{/etc/utmp}, and exits with a status of 0.  If there is no
1906 @file{/etc/utmp} entry for the calling process, @code{logname} prints
1907 an error message and exits with a status of 1.
1909 The only options are @samp{--help} and @samp{--version}.  @xref{Common
1910 options}.
1913 @node whoami invocation
1914 @section @code{whoami}: Print effective user id
1916 @pindex whoami
1917 @cindex effective UID, printing
1918 @cindex printing the effective UID
1920 @code{whoami} prints the user name associated with the current
1921 effective user id.  It is equivalent to the command @samp{id -un}.
1923 The only options are @samp{--help} and @samp{--version}.  @xref{Common
1924 options}.
1927 @node groups invocation
1928 @section @code{groups}: Print group names a user is in
1930 @pindex groups
1931 @cindex printing groups a user is in
1932 @cindex supplementary groups, printing
1934 @code{groups} prints the names of the primary and any supplementary
1935 groups for each given @var{username}, or the current process if no names
1936 are given.  If names are given, the name of each user is printed before
1937 the list of that user's groups.  Synopsis:
1939 @example
1940 groups [@var{username}]@dots{}
1941 @end example
1943 The group lists are equivalent to the output of the command @samp{id -Gn}.
1945 The only options are @samp{--help} and @samp{--version}.  @xref{Common
1946 options}.
1949 @node users invocation
1950 @section @code{users}: Print login names of users currently logged in
1952 @pindex users
1953 @cindex printing current usernames
1954 @cindex usernames, printing current
1956 @cindex login sessions, printing users with
1957 @code{users} prints on a single line a blank-separated list of user
1958 names of users currently logged in to the current host.  Each user name
1959 corresponds to a login session, so if a user has more than one login
1960 session, that user's name will appear the same number of times in the
1961 output. Synopsis:
1963 @example
1964 users [@var{file}]
1965 @end example
1967 @flindex /etc/utmp
1968 @flindex /etc/wtmp
1969 With no @var{file} argument, @code{users} extracts its information from
1970 the file @file{/etc/utmp}.  If a file argument is given, @code{users}
1971 uses that file instead.  A common choice is @file{/etc/wtmp}.
1973 The only options are @samp{--help} and @samp{--version}.  @xref{Common
1974 options}.
1977 @node who invocation
1978 @section @code{who}: Print who is currently logged in
1980 @pindex who
1981 @cindex printing current user information
1982 @cindex information, about current users
1984 @code{who} prints information about users who are currently logged on.
1985 Synopsis:
1987 @example
1988 @code{who} [@var{option}] [@var{file}] [am i]
1989 @end example
1991 @cindex terminal lines, currently used
1992 @cindex login time
1993 @cindex remote hostname
1994 If given no non-option arguments, @code{who} prints the following
1995 information for each user currently logged on: login name, terminal
1996 line, login time, and remote hostname or X display.
1998 @flindex /etc/utmp
1999 @flindex /etc/wtmp
2000 If given one non-option argument, @code{who} uses that instead of
2001 @file{/etc/utmp} as the name of the file containing the record of
2002 users logged on.  @file{/etc/wtmp} is commonly given as an argument
2003 to @code{who} to look at who has previously logged on.
2005 @opindex am i
2006 @opindex who am i
2007 If given two non-option arguments, @code{who} prints only the entry
2008 for the user running it (determined from its standard input), preceded
2009 by the hostname.  Traditionally, the two arguments given are @samp{am
2010 i}, as in @samp{who am i}.
2012 The program accepts the following options.  Also see @ref{Common options}.
2014 @table @samp
2015 @item -m
2016 @opindex -m
2017 Same as @samp{who am i}.
2019 @item -q
2020 @itemx --count
2021 @opindex -q
2022 @opindex --count
2023 Print only the login names and the number of users logged on.
2024 Overrides all other options.
2026 @item -s
2027 @opindex -s
2028 Ignored; for compatibility with other versions of @code{who}.
2030 @item -i
2031 @itemx -u
2032 @itemx --idle
2033 @opindex -i
2034 @opindex -u
2035 @opindex --idle
2036 @cindex idle time
2037 After the login time, print the number of hours and minutes that the
2038 user has been idle.  @samp{.} means the user was active in last minute.
2039 @samp{old} means the user was idle for more than 24 hours.
2041 @item -H
2042 @itemx --heading
2043 @opindex -H
2044 @opindex --heading
2045 Print a line of column headings.
2047 @item -w
2048 @itemx -T
2049 @itemx --mesg
2050 @itemx --message
2051 @itemx --writable
2052 @opindex -w
2053 @opindex -T
2054 @opindex --mesg
2055 @opindex --message
2056 @opindex --writable
2057 @cindex message status
2058 @pindex write@r{, allowed}
2059 After each login name print a character indicating the user's message status:
2061 @display
2062 @samp{+} allowing @code{write} messages
2063 @samp{-} disallowing @code{write} messages
2064 @samp{?} cannot find terminal device
2065 @end display
2067 @end table
2070 @node System context
2071 @chapter System context
2073 @cindex system context
2074 @cindex context, system
2075 @cindex commands for system context
2077 This section describes commands that print or change system-wide
2078 information.
2080 @menu
2081 * date invocation::             Print or set system date and time.
2082 * uname invocation::            Print system information.
2083 * hostname invocation::         Print or set system name.
2084 @end menu
2087 @node date invocation
2088 @section @code{date}: Print or set system date and time
2090 @pindex date
2091 @cindex time, printing or setting
2092 @cindex printing the current time
2094 @code{date} with no arguments prints the current time and date, in the
2095 format of the @samp{%c} directive (described below).  Synopses:
2097 @example
2098 date [@var{option}]@dots{} [+@var{format}]
2099 date [-u|--utc|--universal] @c this avoids a newline in the output
2100 [ @var{MMDDhhmm}[[@var{CC}]@var{YY}][.@var{ss}] ]
2101 @end example
2103 @findex strftime @r{and @code{date}}
2104 @cindex time formats
2105 @cindex formatting times
2106 If given an argument that starts with a @samp{+}, @code{date} prints the
2107 current time and date (or the time and date specified by the
2108 @code{--date} option, see below) in the format defined by that argument,
2109 which is the same as in the @code{strftime} function.  Except for
2110 directives, which start with @samp{%}, characters in the format string
2111 are printed unchanged.  The directives are described below.
2113 @menu
2114 * Time directives::             %[HIklMprsSTXzZ]
2115 * Date directives::             %[aAbBcdDhjmUwWxyY]
2116 * Literal directives::          %[%nt]
2117 * Padding::                     Pad with zeroes, spaces (%_), or nothing (%-).
2118 * Setting the time::            Changing the system clock.
2119 * Options for date::            Instead of the current time.
2120 * Examples of date::            Examples.
2121 @end menu
2123 @node Time directives
2124 @subsection Time directives
2126 @cindex time directives
2127 @cindex directives, time
2129 @code{date} directives related to times.
2131 @table @samp
2132 @item %H
2133 hour (00@dots{}23)
2134 @item %I
2135 hour (01@dots{}12)
2136 @item %k
2137 hour ( 0@dots{}23)
2138 @item %l
2139 hour ( 1@dots{}12)
2140 @item %M
2141 minute (00@dots{}59)
2142 @item %p
2143 locale's AM or PM
2144 @item %r
2145 time, 12-hour (hh:mm:ss [AP]M)
2146 @item %s
2147 @cindex epoch, seconds since
2148 @cindex seconds since the epoch
2149 @cindex beginning of time
2150 seconds since the epoch, i.e., 1 January 1970 00:00:00 UTC (a
2151 GNU extension).
2152 Note that this value is the number of seconds between the epoch
2153 and the current date as defined by the localtime system call.
2154 It isn't changed by the @samp{--date} option.
2155 @item %S
2156 second (00@dots{}61)
2157 @item %T
2158 time, 24-hour (hh:mm:ss)
2159 @item %X
2160 locale's time representation (%H:%M:%S)
2161 @item %z
2162 RFC-822 style numeric time zone (e.g., -0600 or +0100), or nothing if no
2163 time zone is determinable.  This value reflects the @emph{current} time
2164 zone.  It isn't changed by the @samp{--date} option.
2165 @item %Z
2166 time zone (e.g., EDT), or nothing if no timezone is
2167 determinable.
2168 Note that this value reflects the @emph{current} time zone.
2169 It isn't changed by the @samp{--date} option.
2170 @end table
2173 @node Date directives
2174 @subsection Date directives
2176 @cindex date directives
2177 @cindex directives, date
2179 @code{date} directives related to dates.
2181 @table @samp
2182 @item %a
2183 locale's abbreviated weekday name (Sun@dots{}Sat)
2184 @item %A
2185 locale's full weekday name, variable length (Sunday@dots{}Saturday)
2186 @item %b
2187 locale's abbreviated month name (Jan@dots{}Dec)
2188 @item %B
2189 locale's full month name, variable length (January@dots{}December)
2190 @item %c
2191 locale's date and time (Sat Nov 04 12:02:33 EST 1989)
2192 @item %d
2193 day of month (01@dots{}31)
2194 @item %D
2195 date (mm/dd/yy)
2196 @item %h
2197 same as %b
2198 @item %j
2199 day of year (001@dots{}366)
2200 @item %m
2201 month (01@dots{}12)
2202 @item %U
2203 week number of year with Sunday as first day of week (00@dots{}53).
2204 Days in a new year preceding the first Sunday are in week zero.
2205 @item %V
2206 week number of year with Monday as first day of the week as a decimal
2207 (01@dots{}53). If the week containing January 1 has four or more days in
2208 the new year, then it is considered week 1; otherwise, it is week 53 of
2209 the previous year, and the next week is week 1. (See the ISO 8601: 1988
2210 standard.)
2211 @item %w
2212 day of week (0@dots{}6) with 0 corresponding to Sunday
2213 @item %W
2214 week number of year with Monday as first day of week (00@dots{}53).
2215 Days in a new year preceding the first Monday are in week zero.
2216 @item %x
2217 locale's date representation (mm/dd/yy)
2218 @item %y
2219 last two digits of year (00@dots{}99)
2220 @item %Y
2221 year (1970@dots{}.)
2222 @end table
2225 @node Literal directives
2226 @subsection Literal directives
2228 @cindex literal directives
2229 @cindex directives, literal
2231 @code{date} directives that produce literal strings.
2233 @table @samp
2234 @item %%
2235 a literal %
2236 @item %n
2237 a newline
2238 @item %t
2239 a horizontal tab
2240 @end table
2243 @node Padding
2244 @subsection Padding
2246 @cindex numeric field padding
2247 @cindex padding of numeric fields
2248 @cindex fields, padding numeric
2250 By default, @code{date} pads numeric fields with zeroes, so that, for
2251 example, numeric months are always output as two digits. GNU @code{date}
2252 recognizes the following numeric modifiers between the @samp{%} and the
2253 directive.
2255 @table @samp
2256 @item -
2257 (hyphen) do not pad the field; useful if the output is intended for
2258 human consumption.
2259 @item _
2260 (underscore) pad the field with spaces; useful if you need a fixed
2261 number of characters in the output, but zeroes are too distracting.
2262 @end table
2264 @noindent
2265 These are GNU extensions.
2267 Here is an example illustrating the differences:
2269 @example
2270 date +%d/%m -d "Feb 1"
2271 @result{} 01/02
2272 date +%-d/%-m -d "Feb 1"
2273 @result{} 1/2
2274 date +%_d/%_m -d "Feb 1"
2275 @result{}  1/ 2
2276 @end example
2279 @node Setting the time
2280 @subsection Setting the time
2282 @cindex setting the time
2283 @cindex time setting
2284 @cindex appropriate privileges
2286 If given an argument that does not start with @samp{+}, @code{date} sets
2287 the system clock to the time and date specified by that argument (as
2288 described below).  You must have appropriate privileges to set the
2289 system clock.  The @samp{--date} and @samp{--set} options may not be
2290 used with such an argument.  The @samp{--universal} option may be used
2291 with such an argument to indicate that the specified time and date are
2292 relative to Coordinated Universal Time rather than to the local time
2293 zone.
2295 The argument must consist entirely of digits, which have the following
2296 meaning:
2298 @table @var
2299 @item MM
2300 month
2301 @item DD
2302 day within month
2303 @item hh
2304 hour
2305 @item mm
2306 minute
2307 @item CC
2308 first two digits of year (optional)
2309 @item YY
2310 last two digits of year (optional)
2311 @item ss
2312 second (optional)
2313 @end table
2315 The @samp{--set} option also sets the system clock; see the next section.
2318 @node Options for date
2319 @subsection Options for @code{date}
2321 @cindex @code{date} options
2322 @cindex options for @code{date}
2324 The program accepts the following options.  Also see @ref{Common options}.
2326 @table @samp
2328 @item -d @var{datestr}
2329 @itemx --date=@var{datestr}
2330 @opindex -d
2331 @opindex --date
2332 @cindex parsing date strings
2333 @cindex date strings, parsing
2334 @cindex arbitrary date strings, parsing
2335 @opindex yesterday
2336 @opindex tomorrow
2337 @opindex next @var{day}
2338 @opindex last @var{day}
2339 Display the time and date specified in @var{datestr} instead of the
2340 current time and date.  @var{datestr} can be in almost any common
2341 format.  It can contain month names, timezones, @samp{am} and @samp{pm},
2342 @samp{yesterday}, @samp{ago}, @samp{next}, etc.  @xref{Date input formats}.
2344 @item -f @var{datefile}
2345 @itemx --file=@var{datefile}
2346 @opindex -f
2347 @opindex --file
2348 Parse each line in @var{datefile} as with @samp{-d} and display the
2349 resulting time and date.  If @var{datefile} is @samp{-}, use standard
2350 input.  This is useful when you have many dates to process, because the
2351 system overhead of starting up the @code{date} executable many times can
2352 be considerable.
2354 @itemx --rfc-822
2355 @opindex -R
2356 @opindex --rfc-822
2357 Display the time and date using the RFC-822-specified
2358 format, @samp{%a, %_d %b %Y %H:%M:%S %z}.
2359 If @samp{--utc} is also specified, use @samp{GMT} in place of @samp{%z}.
2361 @item -r @var{file}
2362 @itemx --reference=@var{file}
2363 @opindex -r
2364 @opindex --reference
2365 Display the time and date reference according to the last modification
2366 time of @var{file}, instead of the current time and date.
2368 @item -s @var{datestr}
2369 @itemx --set=@var{datestr}
2370 @opindex -s
2371 @opindex --set
2372 Set the time and date to @var{datestr},  See @samp{-d} above.
2374 @item -u
2375 @itemx --utc
2376 @itemx --universal
2377 @opindex -u
2378 @opindex --utc
2379 @opindex --universal
2380 @cindex coordinated universal time
2381 @cindex Greenwich Mean Time
2382 Print or set the time and date in Universal Coordinated Time instead of
2383 in local (wall clock) time.
2385 @end table
2388 @node Examples of date
2389 @subsection Examples of @code{date}
2391 @cindex examples of @code{date}
2393 Here are a few examples.  Also see the documentation for the @samp{-d}
2394 option in the previous section.
2396 @itemize @bullet
2398 @item
2399 To print the date of the day before yesterday:
2401 @example
2402 date --date='2 days ago'
2403 @end example
2405 @item
2406 To print the date of the day three months and one day hence:
2407 @example
2408 date --date='3 months 1 day'
2409 @end example
2411 @item
2412 To print the day of year of Christmas in the current year:
2413 @example
2414 date --date='25 Dec' +%j
2415 @end example
2417 @item
2418 To print the current full month name and the day of the month:
2419 @example
2420 date '+%B %d'
2421 @end example
2423 But this may not be what you want because for the first nine days of
2424 the month, the @samp{%d} expands to a zero-padded two-digit field,
2425 for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}.
2427 @item
2428 To print a date without the leading zero for one-digit days
2429 of the month, you can use the (GNU extension) @code{-} modifier to suppress
2430 the padding altogether.
2431 @example
2432 date -d=1may '+%B %-d'
2433 @end example
2435 @item
2436 To print the current date and time in the format required by many
2437 non-GNU versions of @code{date} when setting the system clock:
2438 @example
2439 date +%m%d%H%M%Y.%S
2440 @end example
2442 @item
2443 To set the system clock forward by two minutes:
2444 @example
2445 date --set='+2 minutes'
2446 @end example
2448 @item
2449 To print the date in the format specified by RFC-822,
2450 use @samp{date --rfc}.  I just did and saw this:
2452 @example
2453 Mon, 25 Mar 1996 23:34:17 -0600
2454 @end example
2456 @item
2457 To convert a date string to the number of seconds since 1970-01-01 00:00:00,
2458 use the @samp{--date} option with the @samp{%s} format.
2459 That can be useful in sorting and graphing data by date.
2460 The command in the following example prints the number of seconds that
2461 elapsed between the epoch and the specified date: one second after midnight
2462 on 1970-01-01.
2463 But it is important to note that the date string is interpreted relative
2464 to the local time zone, UTC+2, so it is two hours and one second
2465 or @samp{7201} seconds after the @code{epoch}.
2467 @example
2468 % env TZ=UTC+2 date --date='1970-01-01 00:00:01' +%s
2469 7201
2470 @end example
2472 @item
2473 If you're sorting or graphing dated data, your raw date values may be
2474 represented as seconds since the epoch.  But few people can look at
2475 the date @samp{946684800} and casually note ``Oh, that's the first second
2476 of the third millenium.''
2478 @example
2479 % env TZ=UTC date --date='2000-01-01' +%s
2480 946684800
2481 @end example
2483 To convert such an unwieldy number of seconds back to
2484 a more readable form, use a command like this:
2486 @smallexample
2487 % env TZ=UTC date -d '1970-01-01 UTC 946684800 sec' +"%Y-%m-%d %T %z"
2488 2000-01-01 00:00:00 +0000
2489 @end smallexample
2491 Note that in the few preceding examples, the timezone was set to
2492 a specific value through the @samp{TZ} environment variable.
2493 If you do not set @samp{TZ}, you must remember that @samp{--date}
2494 strings are converted relative to the local time zone.
2496 @end itemize
2499 @node uname invocation
2500 @section @code{uname}: Print system information
2502 @pindex uname
2503 @cindex print system information
2504 @cindex system information, printing
2506 @code{uname} prints information about the machine and operating system
2507 it is run on.  If no options are given, @code{uname} acts as if the
2508 @code{-s} option were given. Synopsis:
2510 @example
2511 uname [@var{option}]@dots{}
2512 @end example
2514 If multiple options or @code{-a} are given, the selected information is
2515 printed in this order:
2517 @example
2518 @var{sysname} @var{nodename} @var{release} @var{osversion} @var{machine}
2519 @end example
2521 The @var{osversion}, at least, may well be multiple words.  For example:
2523 @example
2524 uname -a
2525 @result{} Linux hayley 1.0.4 #3 Thu May 12 18:06:34 1994 i486
2526 @end example
2529 The program accepts the following options.  Also see @ref{Common options}.
2531 @table @samp
2533 @item -a
2534 @itemx --all
2535 @opindex -a
2536 @opindex --all
2537 Print all of the below information.
2539 @item -m
2540 @itemx --machine
2541 @opindex -m
2542 @opindex --machine
2543 @cindex machine type
2544 @cindex hardware type
2545 Print the machine (hardware) type.
2547 @item -n
2548 @itemx --nodename
2549 @opindex -n
2550 @opindex --nodename
2551 @cindex hostname
2552 @cindex node name
2553 @cindex network node name
2554 Print the machine's network node hostname.
2556 @item -p
2557 @itemx --processor
2558 @opindex -p
2559 @opindex --processor
2560 @cindex host processor type
2561 Print the machine's processor type
2563 @item -r
2564 @itemx --release
2565 @opindex -r
2566 @opindex --release
2567 @cindex operating system release
2568 @cindex release of operating system
2569 Print the operating system release.
2571 @item -s
2572 @itemx --sysname
2573 @opindex -s
2574 @opindex --sysname
2575 @cindex operating system name
2576 @cindex name of operating system
2577 Print the operating system name.
2579 @item -v
2580 @opindex -v
2581 @cindex operating system version
2582 @cindex version of operating system
2583 Print the operating system version.
2585 @end table
2588 @node hostname invocation
2589 @section @code{hostname}: Print or set system name
2591 @pindex hostname
2592 @cindex setting the hostname
2593 @cindex printing the hostname
2594 @cindex system name, printing
2595 @cindex appropriate privileges
2597 With no arguments, @code{hostname} prints the name of the current host
2598 system.  With one argument, it sets the current host name to the
2599 specified string.  You must have appropriate privileges to set the host
2600 name. Synopsis:
2602 @example
2603 hostname [@var{name}]
2604 @end example
2606 The only options are @samp{--help} and @samp{--version}.  @xref{Common
2607 options}.
2610 @node Modified command invocation
2611 @chapter Modified command invocation
2613 @cindex modified command invocation
2614 @cindex invocation of commands, modified
2615 @cindex commands for invoking other commands
2617 This section describes commands that run other commands in some context
2618 different than the current one: a modified environment, as a different
2619 user, etc.
2621 @menu
2622 * chroot invocation::           Modify the root directory.
2623 * env invocation::              Modify environment variables.
2624 * nice invocation::             Modify scheduling priority.
2625 * nohup invocation::            Immunize to hangups.
2626 * su invocation::               Modify user and group id.
2627 @end menu
2630 @node chroot invocation
2631 @section @code{chroot}: Run a command with a different root directory
2633 @pindex chroot
2634 @cindex running a program in a specified root directory
2635 @cindex root directory, running a program in a specified
2637 @code{chroot} runs a command with a specified root directory.
2638 On many systems, only the super-user can do this.
2639 Synopses:
2641 @example
2642 chroot @var{newroot} [@var{command} [@var{args}]@dots{}]
2643 chroot @var{option}
2644 @end example
2646 Ordinarily, filenames are looked up starting at the root of the
2647 directory structure, i.e., @file{/}.  @code{chroot} changes the root to
2648 the directory @var{newroot} (which must exist) and then runs
2649 @var{command} with optional @var{args}.  If @var{command} is not
2650 specified, the default is the value of the @code{SHELL} environment
2651 variable or @code{/bin/sh} if not set, invoked with the @samp{-i} option.
2653 The only options are @samp{--help} and @samp{--version}.  @xref{Common
2654 options}.
2657 @node env invocation
2658 @section @code{env}: Run a command in a modified environment
2660 @pindex env
2661 @cindex environment, running a program in a modified
2662 @cindex modified environment, running a program in a
2663 @cindex running a program in a modified environment
2665 @code{env} runs a command with a modified environment.  Synopses:
2667 @example
2668 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
2669 [@var{command} [@var{args}]@dots{}]
2671 @end example
2673 Arguments of the form @samp{@var{variable}=@var{value}} set
2674 the environment variable @var{variable} to value @var{value}.
2675 @var{value} may be empty (@samp{@var{variable}=}).  Setting a variable
2676 to an empty value is different from unsetting it.
2678 @vindex PATH
2679 The first remaining argument specifies the program name to invoke; it is
2680 searched for according to the @code{PATH} environment variable.  Any
2681 remaining arguments are passed as arguments to that program.
2683 @cindex environment, printing
2685 If no command name is specified following the environment
2686 specifications, the resulting environment is printed.  This is like
2687 specifying a command name of @code{printenv}.
2689 The program accepts the following options.  Also see @ref{Common options}.
2691 @table @samp
2693 @item -u @var{name}
2694 @itemx --unset=@var{name}
2695 @opindex -u
2696 @opindex -unset
2697 Remove variable @var{name} from the environment, if it was in the
2698 environment.
2700 @item -
2701 @itemx -i
2702 @itemx --ignore-environment
2703 @opindex -
2704 @opindex -i
2705 @opindex --ignore-environment
2706 Start with an empty environment, ignoring the inherited environment.
2708 @end table
2711 @node nice invocation
2712 @section @code{nice}: Run a command with modified scheduling priority
2714 @pindex nice
2715 @cindex modifying scheduling priority
2716 @cindex scheduling priority, modifying
2717 @cindex priority, modifying
2718 @cindex appropriate privileges
2720 @code{nice} prints or modifies the scheduling priority of a job.
2721 Synopsis:
2723 @example
2724 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
2725 @end example
2727 If no arguments are given, @code{nice} prints the current scheduling
2728 priority, which it inherited.  Otherwise, @code{nice} runs the given
2729 @var{command} with its scheduling priority adjusted.  If no
2730 @var{adjustment} is given, the priority of the command is incremented by
2731 10.  You must have appropriate privileges to specify a negative
2732 adjustment.  The priority can be adjusted by @code{nice} over the range
2733 of -20 (the highest priority) to 19 (the lowest).
2735 @cindex conflicts with shell built-ins
2736 @cindex built-in shell commands, conflicts with
2737 Because most shells have a built-in command by the same name, using the
2738 unadorned command name in a script or interactively may get you
2739 different functionality than that described here.
2741 The program accepts the following option.  Also see @ref{Common options}.
2743 @table @samp
2744 @item -n @var{adjustment}
2745 @itemx -@var{adjustment}
2746 @itemx --adjustment=@var{adjustment}
2747 @opindex -n
2748 @opindex --adjustment
2749 @opindex -@var{adjustment}
2750 Add @var{adjustment} instead of 10 to the command's priority.
2751 @end table
2754 @node nohup invocation
2755 @section @code{nohup}: Run a command immune to hangups
2757 @pindex nohup
2758 @cindex hangups, immunity to
2759 @cindex immunity to hangups
2760 @cindex logging out and continuing to run
2762 @flindex nohup.out
2763 @code{nohup} runs the given @var{command} with hangup signals ignored,
2764 so that the command can continue running in the background after you log
2765 out. Synopsis:
2767 @example
2768 nohup @var{command} [@var{arg}]@dots{}
2769 @end example
2771 @flindex nohup.out
2772 @code{nohup} increases the scheduling priority of @var{command} by 5, so
2773 it has a slightly smaller change to run.  If standard output is a terminal,
2774 it and standard error are redirected so that they are appended to the
2775 file @file{nohup.out}; if that cannot be written to, they are appended
2776 to the file @file{$HOME/nohup.out}.  If that cannot be written to, the
2777 command is not run.
2779 If @code{nohup} creates either @file{nohup.out} or
2780 @file{$HOME/nohup.out}, it creates it with no ``group'' or ``other''
2781 access permissions.  It does not change the permissions if the output
2782 file already existed.
2784 @code{nohup} does not automatically put the command it runs in the
2785 background; you must do that explicitly, by ending the command line
2786 with an @samp{&}.
2788 The only options are @samp{--help} and @samp{--version}.  @xref{Common
2789 options}.
2792 @node su invocation
2793 @section @code{su}: Run a command with substitute user and group id
2795 @pindex su
2796 @cindex substitute user and group ids
2797 @cindex user id, switching
2798 @cindex super-user, becoming
2799 @cindex root, becoming
2801 @code{su} allows one user to temporarily become another user.  It runs a
2802 command (often an interactive shell) with the real and effective user
2803 id, group id, and supplemental groups of a given @var{user}. Synopsis:
2805 @example
2806 su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}]
2807 @end example
2809 @cindex passwd entry, and @code{su} shell
2810 @flindex /bin/sh
2811 @flindex /etc/passwd
2812 If no @var{user} is given, the default is @code{root}, the super-user.
2813 The shell to use is taken from @var{user}'s @code{passwd} entry, or
2814 @file{/bin/sh} if none is specified there.  If @var{user} has a
2815 password, @code{su} prompts for the password unless run by a user with
2816 effective user id of zero (the super-user).
2818 @vindex HOME
2819 @vindex SHELL
2820 @vindex USER
2821 @vindex LOGNAME
2822 @cindex login shell
2823 By default, @code{su} does not change the current directory.
2824 It sets the environment variables @code{HOME} and @code{SHELL}
2825 from the password entry for @var{user}, and if @var{user} is not
2826 the super-user, sets @code{USER} and @code{LOGNAME} to @var{user}.
2827 By default, the shell is not a login shell.
2829 Any additional @var{arg}s are passed as additional arguments to the
2830 shell.
2832 @cindex @samp{-su}
2833 GNU @code{su} does not treat @file{/bin/sh} or any other shells specially
2834 (e.g., by setting @code{argv[0]} to @samp{-su}, passing @code{-c} only
2835 to certain shells, etc.).
2837 @findex syslog
2838 @code{su} can optionally be compiled to use @code{syslog} to report
2839 failed, and optionally successful, @code{su} attempts.  (If the system
2840 supports @code{syslog}.)  However, GNU @code{su} does not check if the
2841 user is a member of the @code{wheel} group; see below.
2843 The program accepts the following options.  Also see @ref{Common options}.
2845 @table @samp
2846 @item -c @var{command}
2847 @itemx --command=@var{command}
2848 @opindex -c
2849 @opindex --command
2850 Pass @var{command}, a single command line to run, to the shell with
2851 a @code{-c} option instead of starting an interactive shell.
2853 @item -f
2854 @itemx --fast
2855 @opindex -f
2856 @opindex --fast
2857 @flindex .cshrc
2858 @cindex file name pattern expansion, disabled
2859 @cindex globbing, disabled
2860 Pass the @code{-f} option to the shell.  This probably only makes sense
2861 if the shell run is @code{csh} or @code{tcsh}, for which the @code{-f}
2862 option prevents reading the startup file (@file{.cshrc}).  With
2863 Bourne-like shells, the @code{-f} option disables file name pattern
2864 expansion (globbing), which is not likely to be useful.
2866 @item -
2867 @itemx -l
2868 @itemx --login
2869 @opindex -
2870 @opindex -l
2871 @opindex --login
2872 @c other variables already indexed above
2873 @vindex TERM
2874 @vindex PATH
2875 @cindex login shell, creating
2876 Make the shell a login shell.  This means the following.  Unset all
2877 environment variables except @code{TERM}, @code{HOME}, and @code{SHELL}
2878 (which are set as described above), and @code{USER} and @code{LOGNAME}
2879 (which are set, even for the super-user, as described above), and set
2880 @code{PATH} to a compiled-in default value.  Change to @var{user}'s home
2881 directory.  Prepend @samp{-} to the shell's name, intended to make it
2882 read its login startup file(s).
2884 @item -m
2885 @itemx -p
2886 @itemx --preserve-environment
2887 @opindex -m
2888 @opindex -p
2889 @opindex --preserve-environment
2890 @cindex environment, preserving
2891 @flindex /etc/shells
2892 @cindex restricted shell
2893 Do not change the environment variables @code{HOME}, @code{USER},
2894 @code{LOGNAME}, or @code{SHELL}.  Run the shell given in the environment
2895 variable @code{SHELL} instead of the shell from @var{user}'s passwd
2896 entry, unless the user running @code{su} is not the superuser and
2897 @var{user}'s shell is restricted.  A @dfn{restricted shell} is one that
2898 is not listed in the file @file{/etc/shells}, or in a compiled-in list
2899 if that file does not exist.  Parts of what this option does can be
2900 overridden by @code{--login} and @code{--shell}.
2902 @item -s @var{shell}
2903 @itemx --shell=@var{shell}
2904 @opindex -s
2905 @opindex --shell
2906 Run @var{shell} instead of the shell from @var{user}'s passwd entry,
2907 unless the user running @code{su} is not the superuser and @var{user}'s
2908 shell is restricted (see @samp{-m} just above).
2910 @end table
2912 @cindex wheel group, not supported
2913 @cindex group wheel, not supported
2914 @cindex fascism
2915 @heading Why GNU @code{su} does not support the @samp{wheel} group
2917 (This section is by Richard Stallman.)
2919 @cindex Twenex
2920 @cindex MIT AI lab
2921 Sometimes a few of the users try to hold total power over all the
2922 rest.  For example, in 1984, a few users at the MIT AI lab decided to
2923 seize power by changing the operator password on the Twenex system and
2924 keeping it secret from everyone else.  (I was able to thwart this coup
2925 and give power back to the users by patching the kernel, but I
2926 wouldn't know how to do that in Unix.)
2928 However, occasionally the rulers do tell someone.  Under the usual
2929 @code{su} mechanism, once someone learns the root password who
2930 sympathizes with the ordinary users, he or she can tell the rest.  The
2931 ``wheel group'' feature would make this impossible, and thus cement the
2932 power of the rulers.
2934 I'm on the side of the masses, not that of the rulers.  If you are
2935 used to supporting the bosses and sysadmins in whatever they do, you
2936 might find this idea strange at first.
2939 @node Delaying
2940 @chapter Delaying
2942 @cindex delaying commands
2943 @cindex commands for delaying
2945 @c Perhaps @code{wait} or other commands should be described here also?
2947 @menu
2948 * sleep invocation::            Delay for a specified time.
2949 @end menu
2952 @node sleep invocation
2953 @section @code{sleep}: Delay for a specified time
2955 @pindex sleep
2956 @cindex delay for a specified time
2958 @code{sleep} pauses for an amount of time specified by the sum of
2959 the values of the command line arguments.
2960 Synopsis:
2962 @example
2963 sleep [@var{number}[smhd]]@dots{}
2964 @end example
2966 @cindex time units
2967 Each argument is a number followed by an optional unit; the default
2968 is seconds.  The units are:
2970 @table @samp
2971 @item s
2972 seconds
2973 @item m
2974 minutes
2975 @item h
2976 hours
2977 @item d
2978 days
2979 @end table
2981 The only options are @samp{--help} and @samp{--version}.  @xref{Common
2982 options}.
2985 @node Numeric operations
2986 @chapter Numeric operations
2988 @cindex numeric operations
2989 These programs do numerically-related operations.
2991 @menu
2992 * factor invocation::              Show factors of numbers.
2993 * seq invocation::                 Print sequences of numbers.
2994 @end menu
2997 @node factor invocation
2998 @section @code{factor}: Print prime factors
3000 @pindex factor
3001 @cindex prime factors
3003 @code{factor} prints prime factors.  Synopses:
3005 @example
3006 factor [@var{number}]@dots{}
3007 factor @var{option}
3008 @end example
3010 If no @var{number} is specified on the command line, @code{factor} reads
3011 numbers from standard input, delimited by newlines, tabs, or spaces.
3013 The only options are @samp{--help} and @samp{--version}.  @xref{Common
3014 options}.
3017 @node seq invocation
3018 @section @code{seq}: Print numeric sequences
3020 @pindex seq
3021 @cindex numeric sequences
3022 @cindex sequence of numbers
3024 @code{seq} prints a sequence of numbers to standard output.  Synopses:
3026 @example
3027 seq [@var{option}]@dots{} [@var{first} [@var{step}]] @var{last}@dots{}
3028 @end example
3030 @code{seq} prints the numbers from @var{first} to @var{last} by
3031 @var{step}.  By default, @var{first} and @var{step} are both 1, and each
3032 number is printed on its own line.  All numbers can be reals, not just
3033 integers.
3035 The program accepts the following options.  Also see @ref{Common options}.
3037 @table @samp
3038 @item -f @var{format}
3039 @itemx --format=@var{format}
3040 @opindex -f @var{format}
3041 @opindex --format=@var{format}
3042 @cindex formatting of numbers in @code{seq}
3043 Print all numbers using @var{format}; default @samp{%g}.
3044 @var{format} must contain exactly one of the standarding float output
3045 formats @samp{%e}, @samp{%f}, or @samp{%g}.
3047 @item -s @var{string}
3048 @itemx --separator=@var{string}
3049 @cindex separator for numbers in @code{seq}
3050 Separate numbers with @var{string}; default is a newline.
3051 The output always terminates with a newline.
3053 @item -w
3054 @itemx --equal-width
3055 Print all numbers with the same width, by padding with leading zeroes.
3056 (To have other kinds of padding, use @samp{--format}).
3058 @end table
3061 @node Index
3062 @unnumbered Index
3064 @printindex cp
3066 @contents
3067 @bye
3069 @c Local variables:
3070 @c texinfo-column-for-description: 33
3071 @c End: