diff options
author | Jim Meyering <jim@meyering.net> | 1994-09-03 17:54:55 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1994-09-03 17:54:55 +0000 |
commit | 6c0ec666144db28bfb1e607c12e628b6ad70d3b4 (patch) | |
tree | 53d12c7104fd809a39232ac1f449506f950c9076 /doc | |
parent | af521756619ab02f6b53bb4840b4b5f91d2332b7 (diff) | |
download | coreutils-6c0ec666144db28bfb1e607c12e628b6ad70d3b4.tar.xz |
.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/sh-utils.texi | 2688 |
1 files changed, 2688 insertions, 0 deletions
diff --git a/doc/sh-utils.texi b/doc/sh-utils.texi new file mode 100644 index 000000000..082e63631 --- /dev/null +++ b/doc/sh-utils.texi @@ -0,0 +1,2688 @@ +\input texinfo +@c %**start of header +@setfilename sh-utils.info +@settitle GNU shell utilities +@c %**end of header + +@c Define new indices for commands, filenames, and options. +@defcodeindex cm +@defcodeindex fl +@defcodeindex op + +@c Put everything in one index (arbitrarily chosen to be the concept index). +@syncodeindex cm cp +@syncodeindex fl cp +@syncodeindex fn cp +@syncodeindex ky cp +@syncodeindex op cp +@syncodeindex pg cp +@syncodeindex vr cp + +@ifinfo +@format +START-INFO-DIR-ENTRY +* Shell utilities: (sh-utils). basename date dirname echo env expr false + groups hostname id logname pathchk printenv printf + pwd sleep su tee test true tty users who whoami yes +END-INFO-DIR-ENTRY +@end format +@end ifinfo + +@ifinfo +This file documents the GNU set of shell utilities. + +Copyright (C) 1994 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end ifinfo + +@titlepage +@title GNU sh-utils, version 1.10 +@subtitle A set of shell utilities +@subtitle for version 1.10, August 1994 +@author Jim Meyering + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1994 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end titlepage + + +@ifinfo +@node Top +@top GNU shell utilities + +@cindex shell utilities +@cindex utilities for shell programming + +This manual documents GNU shell utilities. It covers release 1.10. + +@cindex POSIX.2 +The GNU shell utilities are mostly compatible with the POSIX.2 standard. + +@menu +* Common options:: Common options. +* Printing text:: echo printf yes +* Conditions:: false true test expr +* Redirection:: tee +* File name manipulation:: dirname basename pathchk +* Working context information:: pwd stty printenv tty +* User information:: id logname whoami groups users who +* System context:: date uname hostname +* Modified command invocation:: env nice nohup su +* Delaying:: sleep +* Index:: General index. +@end menu +@end ifinfo + + +@node Common options +@chapter Common options + +@cindex common options + +Certain options are available in all these programs. Rather than +writing identical descriptions for each of the programs, they are +described here. In fact, every GNU program accepts (or should accept) +these options. + +Many shell utilities take arbitrary strings as arguments. In those +cases, @samp{--help} and @samp{--version} are taken as these options +only if there is one and exactly one command line argument. + +@table @samp + +@item --help +@opindex --help +@cindex help, online +Print a usage message listing all available options, then exit successfully. + +@item --version +@opindex --version +@cindex version number, finding +Print the version number, then exit successfully. + +@end table + + +@node Printing text +@chapter Printing text + +@cindex printing text, commands for +@cindex commands for printing text + +This section describes commands that display text strings. + +@menu +* echo invocation:: Print a line of text. +* printf invocation:: Format and print data. +* yes invocation:: Print a string until interrupted. +@end menu + + +@node echo invocation +@section @code{echo}: Print a line of text + +@pindex echo +@cindex displaying text +@cindex printing text +@cindex text, displaying +@cindex arbitrary text, displaying + +Synopsis: + +@example +echo [ @var{option} ]@dots{} [ @var{string} ]@dots{} +@end example + +@code{echo} writes each given @var{string} to standard output, with a +space between each and a newline after the last one. + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -n +Do not output the trailing newline. + +@item -e +@cindex backslash escapes +Enable interpretation of the following backslash-escaped characters in +each @var{string}: + +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \c +suppress trailing newline +@item \f +form feed +@item \n +new line +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \@var{nnn} +the character whose ASCII code is @var{nnn} (octal); if @var{nnn} is not +a valid octal number, it is printed literally. +@end table + +@end table + + +@node printf invocation +@section @code{printf}: Format and print data + +@pindex printf +Synopsis: + +@example +printf @var{format} [ @var{argument} ]@dots{} +@end example + +@code{printf} prints the @var{format} string, interpreting @samp{%} +directives and @samp{\} escapes in the same way as the C @code{printf} +function. The @var{format} argument is re-used as necessary to convert +all of the given @var{argument}s. + +@code{printf} has one additional directive, @samp{%b}, which prints its +argument string with @samp{\} escapes interpreted in the same way as in +the @var{format} string. + +@kindex \0ooo +@kindex \0xhhh +@code{printf} interprets @samp{\0ooo} in @var{format} as an octal number +(if @var{ooo} is 0 to 3 octal digits) specifying a character to print, +and @samp{\xhhh} as a hexadecimal number (if @var{hhh} is 1 to 3 hex +digits) specifying a character to print. + +@kindex \c +An additional escape, @samp{\c}, causes @code{printf} to produce no +further output. + +The only options are a lone @samp{--help} or +@samp{--version}. @xref{Common options}). + + +@node yes invocation +@section @code{yes}: Print a string until interrupted + +@pindex yes +@cindex repeated output of a string + +@code{yes} prints the command line arguments, separated by spaces and +followed by a newline, forever until it is killed. If no arguments are +given, it prints @samp{y} followed by a newline forever until killed. + +The only options are a lone @samp{--help} or +@samp{--version}. @xref{Common options}). + + +@node Conditions +@chapter Conditions + +@cindex conditions +@cindex commands for exit status +@cindex exit status commands + +This section describes commands that are primarily useful for their exit +status, rather than their output. Thus, they are often used as the +condition of shell @code{if} statements, or as the last command in a +pipeline. + +@menu +* false invocation:: Do nothing, unsuccessfully. +* true invocation:: Do nothing, successfully. +* test invocation:: Check file types and compare values. +* expr invocation:: Evaluate expressions. +@end menu + + +@node false invocation +@section @code{false}: Do nothing, unsuccessfully + +@pindex false + +@cindex exit status of @code{true} +@cindex failure exit status +@code{false} does nothing except return an exit status of 1, meaning +@dfn{failure}. It can be used as a place holder in shell scripts +where an unsuccessful command is needed. + +Any arguments are ignored, except for a lone @samp{--help} or +@samp{--version} (@pxref{Common options}). + + +@node true invocation +@section @code{true}: Do nothing, successfully + +@pindex true +@cindex do nothing, successfully +@cindex no-op +@cindex successful exit + +@cindex exit status of @code{true} +@code{true} does nothing except return an exit status of 0, meaning +@dfn{success}. It can be used as a place holder in shell scripts +where a successful command is needed, although the shell built-in +command @code{:} (colon) may be faster. + +Any arguments are ignored, except for a lone @samp{--help} or +@samp{--version} (@pxref{Common options}). + + +@node test invocation +@section @code{test}: Check file types and compare values + +@pindex test +@cindex check file types +@cindex compare values +@cindex expression evaluation + +@code{test} returns a status of 0 (true) or 1 (false) depending on the +evaluation of the conditional expression @var{expr}. Each part of the +expression must be a separate argument. + +@code{test} has file status checks, string operators, and numeric +comparison operators. + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because most shells have a built-in command by the same name, using the +unadorned command name in a script or interactively may get you +different functionality than that described here. + +Besides the options below, @code{test} accepts a lone @samp{--help} or +@samp{--version}. @xref{Common options}). A single non-option argument +is also allowed: @code{test} returns true if the argument is not null. + +@menu +* File type tests:: -[bcdfhLpSt] +* Access permission tests:: -[gkruwxOG] +* File characteristics tests:: -e -s -nt -ot -ef +* String tests:: -z -n = != +* Numeric tests:: -eq -ne -lt -le -gt -ge +* Connectives for test:: ! -a -o +@end menu + + +@node File type tests +@subsection File type tests + +@cindex file type tests + +These options test for particular types of files. (Everything's a file, +but not all files are the same!) + +@table @samp + +@item -b @var{file} +@opindex -b +@cindex block special check +True if @var{file} exists and is a block special device. + +@item -c @var{file} +@opindex -c +@cindex character special check +True if @var{file} exists and is a character special device. + +@item -d @var{file} +@opindex -d +@cindex directory check +True if @var{file} exists and is a directory. + +@item -f @var{file} +@opindex -f +@cindex regular file check +True if @var{file} exists and is a regular file. + +@item -h @var{file} +@itemx -L @var{file} +@opindex -L +@opindex -h +@cindex symbolic link check +True if @var{file} exists and is a symbolic link. + +@item -p @var{file} +@opindex -p +@cindex named pipe check +True if @var{file} exists and is a named pipe. + +@item -S @var{file} +@opindex -S +@cindex socket check +True if @var{file} exists and is a socket. + +@item -t [ @var{fd} ] +@opindex -t +@cindex terminal check +True if @var{fd} is opened on a terminal. If @var{fd} is omitted, it +defaults to 1 (standard output). + +@end table + + +@node Access permission tests +@subsection Access permission tests + +@cindex access permission tests +@cindex permission tests + +These options test for particular access permissions. + +@table @samp + +@item -g @var{file} +@opindex -g +@cindex set-group-id check +True if @var{file} exists and has its set-group-id bit set. + +@item -k @var{file} +@opindex -k +@cindex sticky bit check +True if @var{file} has its @dfn{sticky} bit set. + +@item -r @var{file} +@opindex -r +@cindex readable file check +True if @var{file} exists and is readable. + +@item -u @var{file} +@opindex -u +@cindex set-user-id check +True if @var{file} exists and has its set-user-id bit set. + +@item -w @var{file} +@opindex -w +@cindex writable file check +True if @var{file} exists and is writable. + +@item -x @var{file} +@opindex -x +@cindex executable file check +True if @var{file} exists and is executable. + +@item -O @var{file} +@opindex -O +@cindex owned by effective uid check +True if @var{file} exists and is owned by the current effective user id. + +@item -G @var{file} +@opindex -G +@cindex owned by effective gid check +True if @var{file} exists and is owned by the current effective group id. + +@end table + +@node File characteristics tests +@subsection File characteristics tests + +@cindex file characteristics tests + +These options test other file characteristics. + +@table @samp + +@item -e @var{file} +@opindex -e +@cindex existence-of-file check +True if @var{file} exists. + +@item -s @var{file} +@opindex -s +@cindex nonempty file check +True if @var{file} exists and has a size greater than zero. + +@item @var{file1} -nt @var{file2} +@opindex -nt +@cindex newer-than file check +True if @var{file1} is newer (according to modification date) than +@var{file2}. + +@item @var{file1} -ot @var{file2} +@opindex -ot +@cindex older-than file check +True if @var{file1} is older (according to modification date) than +@var{file2}. + +@item @var{file1} -ef @var{file2} +@opindex -ef +@cindex same file check +@cindex hard link check +True if @var{file1} and @var{file2} have the same device and inode +numbers, i.e., if they are hard links to each other. + +@end table + + +@node String tests +@subsection String tests + +@cindex string tests + +These options test string characteristics. Strings are not quoted for +@code{test}, though you may need to quote them to protect characters +with special meaning to the shell, e.g., spaces. + +@table @samp + +@item -z @var{string} +@opindex -z +@cindex zero-length string check +True if the length of @var{string} is zero. + +@item -n @var{string} +@itemx @var{string} +@opindex -n +@cindex nonzero-length string check +True if the length of @var{string} is non-zero. + +@item @var{string1} = @var{string2} +@opindex = +@cindex equal string check +True if the strings are equal. + +@item @var{string1} != @var{string2} +@opindex != +@cindex not-equal string check +True if the strings are not equal. + +@end table + + +@node Numeric tests +@subsection Numeric tests + +@cindex numeric tests +@cindex arithmetic tests + +Numeric relationals. The arguments must be entirely numeric (possibly +negative), or the special expression @w{@code{-l @var{string}}}, which +evaluates to the length of @var{string}. + +@table @samp + +@item @var{arg1} -eq @var{arg2} +@itemx @var{arg1} -ne @var{arg2} +@itemx @var{arg1} -lt @var{arg2} +@itemx @var{arg1} -le @var{arg2} +@itemx @var{arg1} -gt @var{arg2} +@itemx @var{arg1} -ge @var{arg2} +@opindex -eq +@opindex -ne +@opindex -lt +@opindex -le +@opindex -gt +@opindex -ge +These arithmetic binary operators return true if @var{arg1} is equal, +not-equal, less-than, less-than-or-equal, greater-than, or +greater-than-or-equal than @var{arg2}, respectively. + +@end table + +For example: + +@example +test -1 -gt -2 && echo yes +@result{} yes +test -l abc -gt 1 && echo yes +@result{} yes +test 0x100 -eq 1 +@error{} test: integer expression expected before -eq +@end example + + +@node Connectives for test +@subsection Connectives for @code{test} + +@cindex logical connectives +@cindex connectives, logical + +The usual logical connectives. + +@table @samp + +@item ! @var{expr} +@opindex ! +True if @var{expr} is false. + +@item @var{expr1} -a @var{expr2} +@opindex -a +@cindex logical and operator +@cindex and operator +True if both @var{expr1} and @var{expr2} are true. + +@item @var{expr1} -o @var{expr2} +@opindex -o +@cindex logical or operator +@cindex or operator +True if either @var{expr1} or @var{expr2} is true. + +@end table + + +@node expr invocation +@section @code{expr}: Evaluate expressions + +@pindex expr +@cindex expression evaluation +@cindex evaluation of expressions + +@code{expr} evaluates an expression and writes the result on standard +output. Each token of the expression must be a separate argument. + +Operands are either numbers or strings. @code{expr} coerces +anything appearing in an operand position to an integer or a string +depending on the operation being applied to it. + +Strings are not quoted for @code{expr}, though you may need to quote +them to protect characters with special meaning to the shell, e.g., +spaces. + +@cindex parentheses for grouping +Operators may given as infix symbols or prefix keywords. Parentheses +may be used for grouping in the usual manner (you must quote parentheses +to avoid the shell evaluating them, however). + +@cindex exit status of @code{expr} +Exit status: + +@display +0 if the expression is neither null nor 0, +1 if the expression is null or 0, +2 for invalid expressions. +@end display + +@menu +* Relations for expr:: | & < <= = == != >= > +* Numeric expressions:: + - * / % +* String expressions:: : match substr index length +* Examples of expr:: Examples. +@end menu + + +@node Relations for expr +@subsection relations for @code{expr} + +@cindex connectives, logical +@cindex logical connectives +@cindex relations, numeric or string + +The usual logical connectives and relations, in order of precedence. + +@table @asis + +@item @code{|} +@kindex | +@cindex logical or operator +@cindex or operator +Yields its first argument if it is neither null nor 0, otherwise its +second argument. + +@item @code{&} +@kindex & +@cindex logical and operator +@cindex and operator +Yields its first argument if neither argument is null or 0, otherwise +0. + +@item @code{<}, @code{<=}, @code{=}, @code{==}, @code{!=}, @code{>=}, @code{>} +@kindex < +@kindex <= +@kindex = +@kindex == +@kindex > +@kindex >= +@cindex comparison operators +Compare the arguments and return 1 if the relation is true, 0 otherwise. +@code{==} is a synonym for @code{=}. @code{expr} first tries to coerce +both arguments to numbers and do a numeric comparison; if either +coercion fails, it does a lexicographic comparison. + +@end table + + +@node Numeric expressions +@subsection Numeric expressions + +@cindex numeric expressions +@cindex expressions, numeric + +Numeric operators, in order of increasing precedence. The connectives +(previous section) have higher precedence, the string operators +(following section) have lower. + +@table @asis + +@item @code{+}, @code{-} +@kindex + +@kindex - +@cindex addition +@cindex subtraction +Addition and subtraction. Both arguments are coerced to numbers; +an error occurs if this cannot be done. + +@item @code{*}, @code{/}, @code{%} +@kindex * +@kindex / +@kindex % +@cindex multiplication +@cindex division +@cindex remainder +Multiplication, division, remainder. Both arguments are coerced to +numbers; an error occurs if this cannot be done. + +@end table + + +@node String expressions +@subsection String expressions + +@cindex string expressions +@cindex expressions, string + +String operators. These have lowest precedence. + +@table @code + +@item @var{string} : @var{regex} +@cindex pattern matching +@cindex regular expression matching +@cindex matching patterns +Perform pattern matching. The arguments are coerced to strings and the +second is considered to be a (basic, a la @code{grep}) regular +expression, with a @code{^} implicitly prepended. The first argument is +then matched against this regular expression. + +If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the +@code{:} expression returns the part of @var{string} that matched the +subexpression; otherwise, it returns the number of characters matched. + +If the match fails, the @code{:} operator returns the null string if +@samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0. + +Only the first @samp{\( @dots{} \)} pair is relevant to the return +value; additional pairs are meaningful only for grouping the regular +expression operators. + +@xref{Top, , Regular Expression Library, regex, Regex}, for details of +regular expression syntax. + +@item match @var{string} @var{regex} +@cmindex match +An alternative way to do pattern matching. This is the same as +@w{@samp{@var{string} : @var{regex}}}. + +@item substr @var{string} @var{position} @var{length} +@cmindex substr +Returns the substring of @var{string} beginning at @var{position} +with length at most @var{length}. If either @var{position} or +@var{length} is negative or non-numeric, returns the null string. + +@item index @var{string} @var{character-class} +@cmindex index +Returns the first position in @var{string} where the first character in +@var{charset} was found. If no character in @var{charset} is found in +@var{string}, return 0. + +@item length @var{string} +@cmindex length +Returns the length of @var{string}. + +@end table + +The keywords cannot be used as strings. + + +@node Examples of expr +@subsection Examples of @code{expr} + +@cindex examples of @code{expr} +Here are a few examples, including quoting for shell metacharacters. + +To add 1 to the shell variable @code{foo}, in Bourne-compatible shells: +@example +foo=`expr $foo + 1` +@end example + +To print the non-directory part of the file name stored in +@code{$fname}, which need not contain a @code{/}. +@example +expr $fname : '.*/\(^.*\)' '^|' $fname +@end example + +@example +expr abc : 'a\(.\)c' +@result{} b +expr index abcdef cz +@result{} 3 +expr index index a +@error{} expr: syntax error + +@end example + + +@node Redirection +@chapter Redirection + +@cindex redirection +@cindex commands for redirection + +Unix shells commonly provide several forms of @dfn{redirection}---ways +to change the input source or output destination of a command. But one +useful redirection is performed by a separate command, not by the shell; +it's described here. + + +@menu +* tee invocation:: Redirect output to multiple files. +@end menu + +@node tee invocation +@section @code{tee}: Redirect output to multiple files + +@pindex tee +@cindex pipe fitting +@cindex destinations, multiple output +@cindex read from stdin and write to stdout and files + +The @code{tee} command copies standard input to standard output and also +to any files given as arguments. This is useful when you not only want +to send some data down a pipe, but also to save a copy. + +Synopsis: + +@example +tee [ @var{option} ]@dots{} [ @var{file} ]@dots{} +@end example + +If a file being written to does not already exist, it is created. If a +file being written to already exists, the data it previously contained +is overwritten unless the @code{-a} option is used. + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -a +@itemx --append +@opindex -a +@opindex --append +Append standard input to the given files rather than overwriting +them. + +@item -i +@itemx --ignore-interrupts +@opindex -i +@opindex --ignore-interrupts +Ignore interrupt signals. + +@end table + + +@node File name manipulation +@chapter File name manipulation + +@cindex file name manipulation +@cindex manipulation of file names +@cindex commands for file name manipulation + +This section describes commands that manipulate file names. + +@menu +* basename invocation:: Strip directory and suffix from a filename. +* dirname invocation:: Strip non-directory suffix from file name. +* pathchk invocation:: Check file name portability. +@end menu + + +@node basename invocation +@section @code{basename}: Strip directory and suffix from a filename + +@pindex basename +@cindex strip directory and suffix from filenames +@cindex directory, stripping from filenames +@cindex suffix, stripping from filenames +@cindex filenames, stripping directory and suffix +@cindex leading directory components, stripping + +Synopsis: + +@example +basename @var{name} [ @var{suffix} ] +@end example + +The @code{basename} command removes any leading directory components +from @var{name}. If @var{suffix} is specified and is identical +to the end of @var{name}, it is removed from @var{name} as well. +@code{basename} prints the result on standard output. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node dirname invocation +@section @code{dirname}: Strip non-directory suffix from file name + +@pindex dirname +@cindex directory components, printing +@cindex stripping non-directory suffix +@cindex non-directory suffix, stripping + +Synopsis: + +@example +dirname @var{name} +@end example + +@code{dirname} prints all but the final slash-delimited component +of @var{name}. If @var{name} is a single component, +@code{dirname} prints @samp{.} (meaning the current directory). + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node pathchk invocation +@section @code{pathchk}: Check file name portability + +@pindex pathchk +@cindex file names, checking validity and portability +@cindex valid file names, checking for +@cindex portable file names, checking for + +Synopsis: + +@example +pathchk [ @var{option} ]@dots{} @var{name}@dots{} +@end example + +For each @var{name}, @code{pathchk} prints a message if any of +these conditions is true: +@enumerate +@item +one of the existing directories in @var{name} does not have search +(execute) permission, +@item +the length of @var{name} is larger than its filesystem's maximum +file name length, +@item +the length of one component of @var{name}, corresponding to an +existing directory name, is larger than its filesystem's maximum +length for a file name component. +@end enumerate + +The program accepts the following option. Also @pxref{Common options}. + +@table @code + +@item -p +@itemx --portability +@opindex -p +@opindex --portability +Instead of performing length checks on the underlying filesystem, +test the length of each file name and its components against the +POSIX.1 minimum limits for portability. Also check that the file +name contains no characters not in the portable filename character set. + +@end table + +@cindex exit status of @code{pathchk} +Exit status: + +@display +0 if all specified file names passed all of the tests, +1 otherwise. +@end display + + +@node Working context information +@chapter Working context information + +@cindex working context +@cindex commands for printing the working context + +This section describes commands that display or alter the context in +which you are working: the current directory, the terminal settings, and +so forth. See also the user-related commands in the next section. + +@menu +* pwd invocation:: Print working directory. +* stty invocation:: Print or change terminal characteristics. +* printenv invocation:: Print all or part of the environment. +* tty invocation:: Print file name of terminal on standard input. +@end menu + + +@node pwd invocation +@section @code{pwd}: Print working directory + +@pindex pwd +@cindex print name of current directory +@cindex current working directory, printing +@cindex working directory, printing + +@cindex symbolic links and @code{pwd} +@code{pwd} prints the fully resolved name of the current directory. +That is, all components of the printed name will be actual directory +names---none will be symbolic links. + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because most shells have a built-in command by the same name, using the +unadorned command name in a script or interactively may get you +different functionality than that described here. + +The only options are a lone @samp{--help} or +@samp{--version}. @xref{Common options}). + + +@node stty invocation +@section @code{stty}: Print or change terminal characteristics + +@pindex stty +@cindex change or print terminal settings +@cindex terminal settings +@cindex line settings of terminal + +If given no arguments, @code{stty} prints the baud rate, line +discipline number (on systems that support it), and line settings +that have been changed from the values set by @samp{stty sane}. +Mode reading and setting are performed on the tty line connected to +standard input. + +@code{stty} accepts many non-option arguments that change aspects of +the terminal line operation, as described below. + +Synopses: + +@example +stty [ @var{setting} ]@dots{} +stty [ @var{option} ] +@end example + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -a +@itemx --all +@opindex -a +@opindex --all +Print all current settings in human-readable form. + +@item -g +@itemx --save +@opindex -g +@opindex --save +@cindex machine-readable @code{stty} output +Print all current settings in a form that can be used as an argument to +another @code{stty} command to restore the current settings. + +@end table + +Many settings can be turned off by preceding them with a @samp{-}. +Such arguments are marked below with ``May be negated'' in their +description. The descriptions themselves refer to the positive +case, that is, when @emph{not} negated (unless stated otherwise, +of course). + +Some settings are not available on all POSIX systems, since they use +extensions. Such arguments are marked below with ``Non-POSIX'' in their +description. On non-POSIX systems, those or other settings also may not +be available, but it's not feasible to document all the variations: just +try it and see. + +@menu +* Control:: Control settings +* Input:: Input settings +* Output:: Output settings +* Local:: Local settings +* Combination:: Combination settings +* Characters:: Special characters +* Special:: Special settings +@end menu + + +@node Control +@subsection Control settings + +@cindex control settings +Control settings: + +@table @code +@item parenb +@opindex parenb +@cindex two-way parity +Generate parity bit in output and expect parity bit in input. +May be negated. + +@item parodd +@opindex parodd +@cindex odd parity +@cindex even parity +Set odd parity (even if negated). May be negated. + +@item cs5 +@itemx cs6 +@itemx cs7 +@itemx cs8 +@opindex cs@var{n} +@cindex character size +@cindex eight-bit characters +Set character size to 5, 6, 7, or 8 bits. + +@item hup +@itemx hupcl +@opindex hup[cl] +Send a hangup signal when the last process closes the tty. May be +negated. + +@item cstopb +@opindex cstopb +@cindex stop bits +Use two stop bits per character (one if negated). May be negated. + +@item cread +@opindex cread +Allow input to be received. May be negated. + +@item clocal +@opindex clocal +@cindex modem control +Disable modem control signals. May be negated. + +@item crtscts +@opindex crtscts +@cindex hardware flow control +@cindex flow control, hardware +Enable RTS/CTS handshaking. Non-POSIX. May be negated. +@end table + + +@node Input +@subsection Input settings + +@cindex input settings + +@table @code +@item ignbrk +@opindex ignbrk +@cindex breaks, ignoring +Ignore breaks. May be negated. + +@item brkint +@opindex brkint +@cindex breaks, cause interrupts +Make breaks cause an interrupt signal. May be negated. + +@item ignpar +@opindex ignpar +@cindex parity, ignoring +Ignore parity errors. May be negated. + +@item parmrk +@opindex parmrk +@cindex parity errors, marking +Mark parity errors (with a 255-0-character sequence). May be negated. + +@item inpck +@opindex inpck +Enable input parity checking. May be negated. + +@item istrip +@opindex istrip +@cindex eight-bit input +Clear high (8th) bit of input characters. May be negated. + +@item inlcr +@opindex inlcr +@cindex newline, translating to return +Translate newline to carriage return. May be negated. + +@item igncr +@opindex igncr +@cindex return, ignoring +Ignore carriage return. May be negated. + +@item icrnl +@opindex icrnl +@cindex return, translating to newline +Translate carriage return to newline. May be negated. + +@item ixon +@opindex ixon +@kindex C-s/C-q flow control +@cindex XON/XOFF flow control +Enable XON/XOFF flow control. May be negated. + +@item ixoff +@itemx tandem +@opindex ixoff +@opindex tandem +@cindex software flow control +@cindex flow control, software +Enable sending of @code{stop} character when the system input buffer +is almost full, and @code{start} character when it becomes almost +empty again. May be negated. + +@item iuclc +@opindex iuclc +@cindex uppercase, translating to lowercase +Translate uppercase characters to lowercase. Non-POSIX. May be +negated. + +@item ixany +@opindex ixany +Allow any character to restart output (only the start character +if negated). Non-POSIX. May be negated. + +@item imaxbel +@opindex imaxbel +@cindex beeping at input buffer full +Enable beeping and not flushing input buffer if a character arrives +when the input buffer is full. Non-POSIX. May be negated. +@end table + + +@node Output +@subsection Output settings + +@cindex output settings +These arguments specify output-related operations. + +@table @code +@item opost +@opindex opost +Postprocess output. May be negated. + +@item olcuc +@opindex olcuc +@cindex lowercase, translating to output +Translate lowercase characters to uppercase. Non-POSIX. May be +negated. + +@item ocrnl +@opindex ocrnl +@cindex return, translating to newline +Translate carriage return to newline. Non-POSIX. May be negated. + +@item onlcr +@opindex onlcr +@cindex newline, translating to crlf +Translate newline to carriage return-newline. Non-POSIX. May be +negated. + +@item onocr +@opindex onocr +Do not print carriage returns in the first column. Non-POSIX. +May be negated. + +@item onlret +@opindex onlret +Newline performs a carriage return. Non-POSIX. May be negated. + +@item ofill +@opindex ofill +@cindex pad instead of timing for delaying +Use fill (padding) characters instead of timing for delays. Non-POSIX. +May be negated. + +@item ofdel +@opindex ofdel +@cindex pad character +Use delete characters for fill instead of null characters. Non-POSIX. +May be negated. + +@item nl1 +@itemx nl0 +@opindex nl@var{n} +Newline delay style. Non-POSIX. + +@item cr3 +@itemx cr2 +@itemx cr1 +@itemx cr0 +@opindex cr@var{n} +Carriage return delay style. Non-POSIX. + +@item tab3 +@itemx tab2 +@itemx tab1 +@itemx tab0 +@opindex tab@var{n} +Horizontal tab delay style. Non-POSIX. + +@item bs1 +@itemx bs0 +@opindex bs@var{n} +Backspace delay style. Non-POSIX. + +@item vt1 +@itemx vt0 +@opindex vt@var{n} +Vertical tab delay style. Non-POSIX. + +@item ff1 +@itemx ff0 +@opindex ff@var{n} +Form feed delay style. Non-POSIX. +@end table + + +@node Local +@subsection Local settings + +@cindex local settings + +@table @code +@item isig +@opindex isig +Enable @code{interrupt}, @code{quit}, and @code{suspend} special +characters. May be negated. + +@item icanon +@opindex icanon +Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt} +special characters. May be negated. + +@item iexten +@opindex iexten +Enable non-POSIX special characters. May be negated. + +@item echo +@opindex echo +Echo input characters. May be negated. + +@item echoe +@itemx crterase +@opindex echoe +@opindex crterase +Echo @code{erase} characters as backspace-space-backspace. May be +negated. + +@item echok +@opindex echok +@cindex newline echoing after @code{kill} +Echo a newline after a @code{kill} character. May be negated. + +@item echonl +@opindex echonl +@cindex newline, echoing +Echo newline even if not echoing other characters. May be negated. + +@item noflsh +@opindex noflsh +@cindex flushing, disabling +Disable flushing after @code{interrupt} and @code{quit} special +characters. May be negated. + +@item xcase +@opindex xcase +@cindex case translation +Enable input and output of uppercase characters by preceding their +lowercase equivalents with @samp{\}, when @code{icanon} is set. +Non-POSIX. May be negated. + +@item tostop +@opindex tostop +@cindex background jobs, stopping at terminal write +Stop background jobs that try to write to the terminal. Non-POSIX. +May be negated. + +@item echoprt +@itemx prterase +@opindex echoprt +@opindex prterase +Echo erased characters backward, between @samp{\} and @samp{/}. +Non-POSIX. May be negated. + +@item echoctl +@itemx ctlecho +@opindex echoctl +@opindex ctlecho +@cindex control characters, using @samp{^@var{c}} +@cindex hat notation for control characters +Echo control characters in hat notation (@samp{^@var{c}}) instead +of literally. Non-POSIX. May be negated. + +@item echoke +@itemx crtkill +@opindex echoke +@opindex crtkill +Echo the @code{kill} special character by erasing each character on +the line as indicated by the @code{echoprt} and @code{echoe} settings, +instead of by the @code{echoctl} and @code{echok} settings. Non-POSIX. +May be negated. +@end table + + +@node Combination +@subsection Combination settings + +@cindex combination settings +Combination settings: + +@table @code +@item evenp +@opindex evenp +@itemx parity +@opindex parity +Same as @code{parenb -parodd cs7}. May be negated. If negated, same +as @code{-parenb cs8}. + +@item oddp +@opindex oddp +Same as @code{parenb parodd cs7}. May be negated. If negated, same +as @code{-parenb cs8}. + +@item nl +@opindex nl +Same as @code{-icrnl -onlcr}. May be negated. If negated, same as +@code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}. + +@item ek +@opindex ek +Reset the @code{erase} and @code{kill} special characters to their default +values. + +@item sane +@opindex sane +Same as: +@c This is too long to write inline. +@example +cread -ignbrk brkint -inlcr -igncr icrnl -ixoff -iuclc -ixany +imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel +nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl +-noflsh -xcase -tostop -echoprt echoctl echoke +@end example +@noindent and also sets all special characters to their default values. + +@item cooked +@opindex cooked +Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus +sets the @code{eof} and @code{eol} characters to their default values +if they are the same as the @code{min} and @code{time} characters. +May be negated. If negated, same as @code{raw}. + +@item raw +@opindex raw +Same as: +@example +-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr +-icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -isig -icanon +-xcase min 1 time 0 +@end example +@noindent May be negated. If negated, same as @code{cooked}. + +@item cbreak +@opindex cbreak +Same as @code{-icanon}. May be negated. If negated, same as +@code{icanon}. + +@item pass8 +@opindex pass8 +@cindex eight-bit characters +Same as @code{-parenb -istrip cs8}. May be negated. If negated, +same as @code{parenb istrip cs7}. + +@item litout +@opindex litout +Same as @code{-parenb -istrip -opost cs8}. May be negated. +If negated, same as @code{parenb istrip opost cs7}. + +@item decctlq +@opindex decctlq +Same as @code{-ixany}. Non-POSIX. May be negated. + +@item tabs +@opindex tabs +Same as @code{tab0}. Non-POSIX. May be negated. If negated, same +as @code{tab3}. + +@item lcase +@itemx LCASE +@opindex lcase +@opindex LCASE +Same as @code{xcase iuclc olcuc}. Non-POSIX. May be negated. + +@item crt +@opindex crt +Same as @code{echoe echoctl echoke}. + +@item dec +@opindex dec +Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}. +@end table + + +@node Characters +@subsection Special characters + +@cindex special characters +@cindex characters, special + +The special characters' default values vary from system to system. +They are set with the syntax @samp{name value}, where the names are +listed below and the value can be given either literally, in hat +notation (@samp{^@var{c}}), or as an integer which may start with +@samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or +any other digit to indicate decimal. Giving a value of @code{^-} or +@code{undef} disables that special character. + +@table @code +@item intr +@opindex intr +Send an interrupt signal. + +@item quit +@opindex quit +Send a quit signal. + +@item erase +@opindex erase +Erase the last character typed. + +@item kill +@opindex kill +Erase the current line. + +@item eof +@opindex eof +Send an end of file (terminate the input). + +@item eol +@opindex eol +End the line. + +@item eol2 +@opindex eol2 +Alternate character to end the line. Non-POSIX. + +@item swtch +@opindex swtch +Switch to a different shell layer. Non-POSIX. + +@item start +@opindex start +Restart the output after stopping it. + +@item stop +@opindex stop +Stop the output. + +@item susp +@opindex susp +Send a terminal stop signal. + +@item dsusp +@opindex dsusp +Send a terminal stop signal after flushing the input. Non-POSIX. + +@item rprnt +@opindex rprnt +Redraw the current line. Non-POSIX. + +@item werase +@opindex werase +Erase the last word typed. Non-POSIX. + +@item lnext +@opindex lnext +Enter the next character typed literally, even if it is a special +character. Non-POSIX. +@end table + + +@node Special +@subsection Special settings + +@cindex special settings + +@table @code +@item min @var{n} +@opindex min +Set the minimum number of characters that will satisfy a read until +the time value has expired, when @code{-icanon} is set. + +@item time @var{n} +@opindex time +Set the number of tenths of a second before reads time out if the min +number of characters have not been read, when @code{-icanon} is set. + +@item ispeed @var{n} +@opindex ispeed +Set the input speed to @var{n}. + +@item ospeed @var{n} +@opindex ospeed +Set the output speed to @var{n}. + +@item rows @var{n} +@opindex rows +Tell the tty kernel driver that the terminal has @var{n} rows. Non-POSIX. + +@item cols @var{n} +@itemx columns @var{n} +@opindex cols +@opindex columns +Tell the kernel that the terminal has @var{n} columns. Non-POSIX. + +@item size +@opindex size +@vindex LINES +@vindex COLUMNS +Print the number of rows and columns that the kernel thinks the +terminal has. (Systems that don't support rows and cols in the kernel +typically use the environment variables @code{LINES} and @code{COLUMNS} +instead; however, GNU @code{stty} does not know anything about them.) +Non-POSIX. + +@item line @var{n} +@opindex line +Use line discipline @var{n}. Non-POSIX. + +@item speed +@opindex speed +Print the terminal speed. + +@item @var{n} +@cindex baud rate, setting +Set the input and output speeds to @var{n}. @var{n} can be one +of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 +19200 38400 @code{exta} @code{extb}. @code{exta} is the same as +19200; @code{extb} is the same as 38400. 0 hangs up the line if +@code{-clocal} is set. +@end table + + +@node printenv invocation +@section @code{printenv}: Print all or part of the environment + +@pindex printenv +@cindex printing all or part of the environment +@cindex environment, printing all or part of + +Synopsis: + +@example +printenv [ @var{option} ] [ @var{variable} ]@dots{} +@end example + +If no @var{variable}s are specified, @code{printenv} prints the entire +environment. Otherwise, it prints the value of each @var{variable} that +is set, and nothing for those that are not set. + +The only options are a lone @samp{--help} or +@samp{--version}. @xref{Common options}). + +@cindex exit status of @code{printenv} +Exit status: + +@display +0 if all variables specified were found +1 if at least one specified variable was not found +2 if a write error occurred +@end display + + +@node tty invocation +@section @code{tty}: Print file name of terminal on standard input + +@pindex tty +@cindex print terminal file name +@cindex terminal file name, printing + +@code{tty} prints the file name of the tty connected to its standard +input. It prints @samp{not a tty} if standard input is not a tty. + +Synopsis: + +@example +tty [ @var{option} ]@dots{} +@end example + +The program accepts the following option. Also @pxref{Common options}. + +@table @code + +@item -s +@itemx --silent +@itemx --quiet +@opindex -s +@opindex --silent +@opindex --quiet +Print nothing; only return an exit status. + +@end table + +@cindex exit status of @code{tty} +Exit status: + +@display +0 if standard input is a tty +1 if standard input is not a tty +2 if given incorrect arguments +3 if a write error occurs +@end display + + +@node User information +@chapter User information + +@cindex user information, commands for +@cindex commands for printing user information + +This section describes commands that print user-related information: +logins, groups, and so forth. + +@menu +* id invocation:: Print real and effective uid and gid. +* logname invocation:: Print current login name. +* whoami invocation:: Print effective user id. +* groups invocation:: Print group names a user is in. +* users invocation:: Print login names of users currently logged in. +* who invocation:: Print who is currently logged in. +@end menu + + +@node id invocation +@section @code{id}: Print real and effective uid and gid + +@pindex id +@cindex real uid and gid, printing +@cindex effective uid and gid, printing +@cindex printing real and effective uid and gid + +@noindent @code{id} prints information about the given user, or the process +running it if no user is specified. + +Synopsis: + +@example +id [ @var{option} ]@dots{} [ @var{username} ] +@end example + +By default, it prints the real user ID, real group ID, effective user ID +if different from the real user ID, effective group ID if different from +the real group ID, and supplemental group IDs. + +Each of these numeric values is preceded by an identifying string and +followed by the corresponding user or group name in parentheses. + +The options cause @code{id} to print only part of the above information. +Also @pxref{Common options}. + +@table @code +@item -g +@itemx --group +@opindex -g +@opindex --group +Print only the group ID. + +@item -G +@itemx --groups +@opindex -G +@opindex --groups +Print only the supplementary groups. + +@item -n +@itemx --name +@opindex -n +@opindex --name +Print the user or group name instead of the ID number. Requires +@code{-u}, @code{-g}, or @code{-G}. + +@item -r +@itemx --real +@opindex -r +@opindex --real +Print the real, instead of effective, user or group ID. Requires +@code{-u}, @code{-g}, or @code{-G}. + +@item -u +@itemx --user +@opindex -u +@opindex --user +Print only the user ID. + +@end table + + +@node logname invocation +@section @code{logname}: Print current login name + +@pindex logname +@cindex printing user's login name +@cindex login name, printing +@cindex user name, printing + +@flindex /etc/utmp +@flindex utmp + +@code{logname} prints the calling user's name, as found in the file +@file{/etc/utmp}, and exits with a status of 0. If there is no +@file{/etc/utmp} entry for the calling process, @code{logname} prints +an error message and exits with a status of 1. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node whoami invocation +@section @code{whoami}: Print effective user id + +@pindex whoami +@cindex effective UID, printing +@cindex printing the effective UID + +@code{whoami} prints the user name associated with the current +effective user id. It is equivalent to the command @samp{id -un}. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node groups invocation +@section @code{groups}: Print group names a user is in + +@pindex groups +@cindex printing groups a user is in +@cindex supplementary groups, printing + +@code{groups} prints the names of the primary and any supplementary +groups that each given @var{username}, or the current process if none +are given, is in. If user names are given, the name of each user is +printed before the list of that user's groups. + +Synopsis: + +@example +groups [ @var{username} ]@dots{} +@end example + +The group lists are equivalent to the output of the command @samp{id -Gn}. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node users invocation +@section @code{users}: Print login names of users currently logged in + +@pindex users +@cindex printing current usernames +@cindex usernames, printing current + +@cindex login sessions, printing users with +@code{users} prints on a single line a blank-separated list of user +names of users currently logged in to the current host. Each user name +corresponds to a login session, so if a user has more than one login +session, that user's name will appear the same number of times in the +output. + +Synopsis: + +@example +users [ @var{file} ] +@end example + +@flindex /etc/utmp +@flindex /etc/wtmp +With no @var{file} argument, @code{users} extracts its information from +the file @file{/etc/utmp}. If a file argument is given, @code{users} +uses that file instead. A common choice is @file{/etc/wtmp}. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node who invocation +@section @code{who}: Print who is currently logged in + +@pindex who +@cindex printing current user information +@cindex information, about current users + +Synopsis: + +@example +@code{who} [ @var{option} ] [ @var{file} ] [ am i ] +@end example + +@cindex terminal lines, currently used +@cindex login time +@cindex remote hostname +If given no non-option arguments, @code{who} prints the following +information for each user currently logged on: login name, terminal +line, login time, and remote hostname or X display. + +@flindex /etc/utmp +@flindex /etc/wtmp +If given one non-option argument, @code{who} uses that instead of +@file{/etc/utmp} as the name of the file containing the record of +users logged on. @file{/etc/wtmp} is commonly given as an argument +to @code{who} to look at who has previously logged on. + +@opindex am i +@opindex who am i +If given two non-option arguments, @code{who} prints only the entry +for the user running it (determined from its standard input), preceded +by the hostname. Traditionally, the two arguments given are @samp{am +i}, as in @samp{who am i}. + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -m +@opindex -m +Same as @samp{who am i}. + +@item -q +@itemx --count +@opindex -q +@opindex --count +Print only the login names and the number of users logged on. +Overrides all other options. + +@item -s +@opindex -s +Ignored; for compatibility with other versions of @code{who}. + +@item -i +@itemx -u +@itemx --idle +@opindex -i +@opindex -u +@opindex --idle +@cindex idle time +After the login time, print the number of hours and minutes that the +user has been idle. @samp{.} means the user was active in last minute. +@samp{old} means the user was idle for more than 24 hours. + +@item -H +@itemx --heading +@opindex -H +@opindex --heading +Print a line of column headings. + +@item -w +@itemx -T +@itemx --mesg +@itemx --message +@itemx --writable +@opindex -w +@opindex -T +@opindex --mesg +@opindex --message +@opindex --writable +@cindex message status +@pindex write@r{, allowed} +After each login name print a character indicating the user's message status: + +@display +@samp{+} allowing @code{write} messages +@samp{-} disallowing @code{write} messages +@samp{?} cannot find terminal device +@end display + +@end table + + +@node System context +@chapter System context + +@cindex system context +@cindex context, system +@cindex commands for system context + +This section describes commands that print or change system-wide +information. + +@menu +* date invocation:: Print or set system date and time. +* uname invocation:: Print system information. +* hostname invocation:: Print or set system name. +@end menu + + +@node date invocation +@section @code{date}: Print or set system date and time + +@pindex date +@cindex time, printing or setting +@cindex printing the current time + +@code{date} with no arguments prints the current time and date, in +the format of the @samp{%c} directive (described below). + +Synopsis: + +@example +date [ @var{option} ]@dots{} [ +@var{format} ] @c +[@var{MMDDhhmm}[[@var{CC}]@var{YY}][.@var{ss}] ] +@end example + +@findex strftime @r{and @code{date}} +@cindex time formats +@cindex formatting times +If given an argument that starts with a @samp{+}, @code{date} prints the +current time and date (or the time and date specified by the +@code{--date} option, see below) in the format defined by that argument, +which is the same as in the @code{strftime} function. Except for +directives, which start with @samp{%}, characters in the format string +are printed unchanged. The directives are described below. + +@cindex numeric field padding +@cindex padding of numeric fields +By default, @code{date} pads numeric fields with zeroes. +GNU @code{date} recognizes the following nonstandard numeric modifiers +between the @samp{%} and the directive. + +@table @code +@item - +(hyphen) do not pad the field +@item _ +(underscore) pad the field with spaces +@end table + +@menu +* Time directives:: %[HIklMprsSTXZ] +* Date directives:: %[aAbBcdDhjmUwWxyY] +* Literal directives:: %[%nt] +* Setting the time:: Changing the system clock. +* Options for date:: Instead of the current time. +* Examples of date:: Examples. +@end menu + +@node Time directives +@subsection Time directives + +@cindex time directives +@cindex directives, time + +@code{date} directives related to times. + +@table @code +@item %H +hour (00@dots{}23) +@item %I +hour (01@dots{}12) +@item %k +hour ( 0@dots{}23) +@item %l +hour ( 1@dots{}12) +@item %M +minute (00@dots{}59) +@item %p +locale's AM or PM +@item %r +time, 12-hour (hh:mm:ss [AP]M) +@item %s +@cindex epoch, seconds since +@cindex seconds since the epoch +seconds since 1970-01-01 00:00:00 UCT (a nonstandard extension) +@item %S +second (00@dots{}61) +@item %T +time, 24-hour (hh:mm:ss) +@item %X +locale's time representation (%H:%M:%S) +@item %Z +time zone (e.g., EDT), or nothing if no time zone is +determinable +@end table + + +@node Date directives +@subsection Date directives + +@cindex date directives +@cindex directives, date + +@code{date} directives related to dates. + +@table @code +@item %a +locale's abbreviated weekday name (Sun@dots{}Sat) +@item %A +locale's full weekday name, variable length (Sunday@dots{}Saturday) +@item %b +locale's abbreviated month name (Jan@dots{}Dec) +@item %B +locale's full month name, variable length (January@dots{}December) +@item %c +locale's date and time (Sat Nov 04 12:02:33 EST 1989) +@item %d +day of month (01@dots{}31) +@item %D +date (mm/dd/yy) +@item %h +same as %b +@item %j +day of year (001@dots{}366) +@item %m +month (01@dots{}12) +@item %U +week number of year with Sunday as first day of week (00@dots{}53) +@item %w +day of week (0@dots{}6) with 0 corresponding to Sunday +@item %W +week number of year with Monday as first day of week (00@dots{}53) +@item %x +locale's date representation (mm/dd/yy) +@item %y +last two digits of year (00@dots{}99) +@item %Y +year (1970@dots{}.) +@end table + + +@node Literal directives +@subsection Literal directives + +@cindex literal directives +@cindex directives, literal + +@code{date} directives that produce literal strings. + +@table @code +@item %% +a literal % +@item %n +a newline +@item %t +a horizontal tab +@end table + + +@node Setting the time +@subsection Setting the time + +@cindex setting the time +@cindex time setting + +If given an argument that does not start with @samp{+}, @code{date} +sets the system clock to the time and date specified by that argument. +The argument must consist entirely of digits, which have the following +meaning: + +@table @var +@item MM +month +@item DD +day within month +@item hh +hour +@item mm +minute +@item CC +first two digits of year (optional) +@item YY +last two digits of year (optional) +@item ss +second (optional) +@end table + +You must have appropriate privileges to set the system clock. + + +@node Options for date +@subsection Options for @code{date} + +@cindex @code{date} options +@cindex options for @code{date} + +The program accepts the following options. Also @pxref{Common options}. + +@table @code + +@item -d @var{datestr} +@itemx --date=@var{datestr} +@opindex -d +@opindex --date +@cindex parsing date strings +@cindex date strings, parsing +@cindex arbitrary date strings, parsing +Display the time and date specified in @var{datestr} instead of the +current time and date. @var{datestr} can be in almost any common format. + +@item -s @var{datestr} +@itemx --set=@var{datestr} +@opindex -s +@opindex --set +Set the time and date to @var{datestr}, which can be in almost any +common format. It can contain month names, timezones, @samp{am} and +@samp{pm}, etc. + +@item -u +@itemx --uct +@itemx --universal +@opindex -u +@opindex --uct +@opindex --universal +@cindex universal coordinated time +@cindex Greenwich Mean Time +Print or set the time and date in Universal Coordinated Time instead of +in local (wall clock) time. + +@end table + + +@node Examples of date +@subsection Examples of @code{date} + +@cindex examples of @code{date} + +Here are a few examples. + +@itemize @bullet + +@item +To print the date of the day before yesterday: +@example +date --date '2 days ago' +@end example + +@item +To print the date of the day three months and one day hence: +@example +date --date '3 months 1 day' +@end example + +@item +To print the day of year of Christmas in the current year: +@example +date --date '25 Dec' +%j +@end example + +@item +To print the current full month name and the day of the month: +@example +date '+%B %d' +@end example + +But this may not be what you want because for the first nine days of +the month, the @samp{%d} expands to a zero-padded two-digit field, +for example @samp{date -d 1-may '+%B %d'} will print @samp{May 01}. + +@item +To print the same date but without the leading zero for one-digit days +of month, you can use the nonstandard @code{-} modifier to suppress +the padding altogether. +@example +date -d 1-may '+%B %-d' +@end example + +@end itemize + + +@node uname invocation +@section @code{uname}: Print system information + +@pindex uname +@cindex print system information +@cindex system information, printing + +@code{uname} prints information about the machine and operating system +it is run on. If no options are given, @code{uname} acts as if the +@code{-s} option were given. If multiple options are given or the +@code{-a} option is given, the selected information is printed in +the order @var{snrvm} with a space between items. + +Synopsis: + +@example +uname [ @var{option} ]@dots{} +@end example + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -m +@itemx --machine +@opindex -m +@opindex --machine +@cindex machine type +@cindex hardware type +Print the machine (hardware) type. + +@item -n +@itemx --nodename +@opindex -n +@opindex --nodename +@cindex hostname +@cindex node name +@cindex network node name +Print the machine's network node hostname. + +@item -r +@itemx --release +@opindex -r +@opindex --release +@cindex operating system release +@cindex release of operating system +Print the operating system release. + +@item -s +@itemx --sysname +@opindex -s +@opindex --sysname +@cindex operating system name +@cindex name of operating system +Print the operating system name. + +@item -v +@opindex -v +@cindex operating system version +@cindex version of operating system +Print the operating system version. + +@item -a +@itemx --all +@opindex -a +@opindex --all +Print all of the above information. + +@end table + + +@node hostname invocation +@section @code{hostname}: Print or set system name + +@pindex hostname +@cindex setting the hostname +@cindex printing the hostname +@cindex system name, printing + +With no arguments, @code{hostname} prints the name of the current host +system. With one argument, it sets the current host name to the +specified string. You must have appropriate privileges to set the host +name. + +Synopsis: + +@example +hostname [ @var{name} ] +@end example + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node Modified command invocation +@chapter Modified command invocation + +@cindex modified command invocation +@cindex invocation of commands, modified +@cindex commands for invoking other commands + +This section describes commands that run other commands in some context +different than the current one: a modified environment, as a different +user, etc. + +@menu +* env invocation:: Modify the environment. +* nice invocation:: Modify the scheduling priority. +* nohup invocation:: Immunize to hangups. +* su invocation:: Modify the user and group id. +@end menu + + +@node env invocation +@section @code{env}: Run a program in a modified environment + +@pindex env +@cindex environment, running a program in a modified +@cindex modified environment, running a program in + +@code{env} runs a command with an environment modified as specified +by the command line arguments. + +Synopses: + +@example +env [ @var{option} ]@dots{} [ @var{name}=@var{value} ]@dots{} @c +[ @var{command} [ @var{args} ]@dots{} ] +env +@end example + +Arguments of the form @samp{@var{variable}=@var{value}} set +the environment variable @var{variable} to value @var{value}. +@var{value} may be empty (@samp{@var{variable}=}). Setting a variable +to an empty value is different from unsetting it. + +The first remaining argument specifies the program name to invoke; it is +searched for according to the @code{PATH} environment variable. Any +remaining arguments are passed as arguments to that program. + +@cindex environment, printing + +If no command name is specified following the environment +specifications, the resulting environment is printed. This is like +specifying a command name of @code{printenv}. + +The program accepts the following options. Also @pxref{Common options}. + +@table @code + +@item -u @var{name} +@itemx --unset=@var{name} +@opindex -u +@opindex -unset +Remove variable @var{name} from the environment, if it was in the +environment. + +@item - +@itemx -i +@itemx --ignore-environment +@opindex - +@opindex -i +@opindex --ignore-environment +Start with an empty environment, ignoring the inherited environment. + +@end table + + +@node nice invocation +@section @code{nice}: Run a program with modified scheduling priority + +@pindex nice +@cindex modifying scheduling priority +@cindex scheduling priority, modifying +@cindex priority, modifying + +If no arguments are given, @code{nice} prints the current scheduling +priority, which it inherited. Otherwise, @code{nice} runs the given +@var{command} with its scheduling priority adjusted. If no +@var{adjustment} is given, the priority of the command is incremented by +10. You must have appropriate privileges to specify a negative +adjustment. The priority can be adjusted by @code{nice} over the range +of -20 (the highest priority) to 19 (the lowest). + +Synopsis: + +@example +nice [ @var{option} ]@dots{} [ @var{command} [ @var{arg} ]@dots{} ] +@end example + +@cindex conflicts with shell built-ins +@cindex built-in shell commands, conflicts with +Because most shells have a built-in command by the same name, using the +unadorned command name in a script or interactively may get you +different functionality than that described here. + +The program accepts the following option. Also @pxref{Common options}. + +@table @code +@item -n @var{adjustment} +@itemx -@var{adjustment} +@itemx --adjustment=@var{adjustment} +@opindex -n +@opindex --adjustment +@opindex -@var{adjustment} +Add @var{adjustment} instead of 10 to the command's priority. +@end table + + +@node nohup invocation +@section @code{nohup}: Run a program immune to hangups + +@pindex nohup +@cindex hangups, immunity to +@cindex immunity to hangups + +@flindex nohup.out +@code{nohup} runs the given @var{command} with hangup signals ignored, +so that the command can continue running in the background after you log +out. + +Synopsis: + +@example +nohup @var{command} [ @var{arg} ]@dots{} +@end example + +Also, the scheduling priority is increased by 5. If standard output is a +tty, it and standard error are redirected so that they are appended to +the file @file{nohup.out}; if that cannot be written to, they are +appended to the file @file{$HOME/nohup.out}. If that cannot be written +to, the command is not run. + +If @code{nohup} creates either @file{nohup.out} or +@file{$HOME/nohup.out}, it creates it with no ``group'' or ``other'' +access permissions. It does not change the permissions if the output +file already existed. + +@code{nohup} does not automatically put the command it runs in the +background; you must do that explicitly, by ending the command line +with an @samp{&}. + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node su invocation +@section @code{su}: Run a shell with substitute user and group id + +@pindex su +@cindex substitute user and group IDs +@cindex user ID, switching +@cindex super-user, becoming +@cindex root, becoming + +@code{su} allows one user to temporarily become another user. It runs a +command (often an interactive shell) with the real and effective user +id, group id, and supplemental groups of a given @var{user}. + +Synopsis: + +@example +su [ @var{option} ]@dots{} [ @var{user} [ @var{arg} ]@dots{} ] +@end example + +@cindex passwd entry, and @code{su} shell +@flindex /bin/sh +@flindex /etc/passwd +If no @var{user} is given, the default is @code{root}, the super-user. +The shell to use is taken from @var{user}'s @code{passwd} entry, or +@file{/bin/sh} if none is specified there. If @var{user} has a +password, @code{su} prompts for the password unless run by a user with +effective user ID of zero (the super-user). + +@vindex HOME +@vindex SHELL +@vindex USER +@vindex LOGNAME +@cindex login shell +By default, @code{su} does not change the current directory. +It sets the environment variables @code{HOME} and @code{SHELL} +from the password entry for @var{user}, and if @var{user} is not +the super-user, sets @code{USER} and @code{LOGNAME} to @var{user}. +By default, the shell is not a login shell. + +If one or more @var{arg}s are given, they are passed as additional +arguments to the shell. + +@cindex @samp{-su} +@code{su} does not handle @file{/bin/sh} or any other shells specially +(e.g., by setting @code{argv[0]} to @samp{-su}, passing @code{-c} only +to certain shells, etc.). + +@findex syslog +On systems that have @code{syslog}, @code{su} can be compiled to report +failed, and optionally successful, @code{su} attempts using +@code{syslog}. + +@cindex wheel group, not supported +@cindex group wheel, not supported +@cindex fascism +This program does not support a ``wheel group'' that restricts who +can @code{su} to super-user accounts, because that can help fascist +system administrators hold unwarranted power over other users. + +The program accepts the following options. Also @pxref{Common options}. + +@table @code +@item -c @var{command} +@itemx --command=@var{command} +@opindex -c +@opindex --command +Pass @var{command}, a single command line to run, to the shell with +a @code{-c} option instead of starting an interactive shell. + +@item -f +@itemx --fast +@opindex -f +@opindex --fast +@flindex .cshrc +@cindex file name pattern expansion, disabled +@cindex globbing, disabled +Pass the @code{-f} option to the shell. This probably only makes sense +if the shell run is @code{csh} or @code{tcsh}, for which the @code{-f} +option prevents reading the startup file (@file{.cshrc}). With +Bourne-like shells, the @code{-f} option disables file name pattern +expansion (globbing), which is not likely to be useful. + +@item - +@itemx -l +@itemx --login +@opindex - +@opindex -l +@opindex --login +@c other variables already indexed above +@vindex TERM +@vindex PATH +@cindex login shell, creating +Make the shell a login shell. This means the following. Unset all +environment variables except @code{TERM}, @code{HOME}, and @code{SHELL} +(which are set as described above), and @code{USER} and @code{LOGNAME} +(which are set, even for the super-user, as described above), and set +@code{PATH} to a compiled-in default value. Change to @var{user}'s home +directory. Prepend @samp{-} to the shell's name, intended to make it +read its login startup file(s). + +@item -m +@itemx -p +@itemx --preserve-environment +@opindex -m +@opindex -p +@opindex --preserve-environment +@cindex environment, preserving +@flindex /etc/shells +@cindex restricted shell +Do not change the environment variables @code{HOME}, @code{USER}, +@code{LOGNAME}, or @code{SHELL}. Run the shell given in the environment +variable @code{SHELL} instead of the shell from @var{user}'s passwd +entry, unless the user running @code{su} is not the superuser and +@var{user}'s shell is restricted. A @dfn{restricted shell} is one that +is not listed in the file @file{/etc/shells}, or in a compiled-in list +if that file does not exist. Parts of what this option does can be +overridden by @code{--login} and @code{--shell}. + +@item -s @var{shell} +@itemx --shell=@var{shell} +@opindex -s +@opindex --shell +Run @var{shell} instead of the shell from @var{user}'s passwd entry, +unless the user running @code{su} is not the superuser and @var{user}'s +shell is restricted (see @samp{-m} just above). + +@end table + + +@node Delaying +@chapter Delaying + +@cindex delaying commands +@cindex commands for delaying + +Perhaps @code{wait} or other commands should be described here also? + +@menu +* sleep invocation:: Delay for a specified time. +@end menu + + +@node sleep invocation +@section @code{sleep}: Delay for a specified time + +@pindex sleep +@cindex delay for a specified time + +@code{sleep} pauses for an amount of time specified by the sum of +the values of the command line arguments. + +Synopsis: + +@example +sleep [ @var{number}[smhd] ]@dots{} +@end example + +@cindex time units +Each argument is a number followed by an optional unit; the default +is seconds. The units are: + +@table @code +@item s +seconds +@item m +minutes +@item h +hours +@item d +days +@end table + +The only options are @samp{--help} and @samp{--version}. @xref{Common +options}). + + +@node Index +@unnumbered Index + +@printindex cp + +@contents +@bye + +@c Local variables: +@c texinfo-column-for-description: 33 +@c End: |