Categories
Linux manpage

manpage find

FIND(1) General Commands Manual FIND(1)

NAME

find – search for files in a directory hierarchy

SYNOPSIS

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point…] [expression]

DESCRIPTION

       This  manual  page documents the GNU version of find.  GNU find searches the directory tree rooted at each given starting-point by evaluating the
       given expression from left to right, according to the rules of precedence (see section OPERATORS), until the outcome is known (the left hand side
       is  false  for  and  operations, true for or), at which point find moves on to the next file name.  If no starting-point is specified, `.' is asâАР
       sumed.

       If you are using find in an environment where security is important (for example if you are using it to search directories that are  writable  by
       other  users), you should read the `Security Considerations' chapter of the findutils documentation, which is called Finding Files and comes with
       findutils.  That document also includes a lot more detail and discussion than this manual page, so you may find it a more useful source of inforâАР
       mation.

OPTIONS

       The  -H, -L and -P options control the treatment of symbolic links.  Command-line arguments following these are taken to be names of files or diâАР
       rectories to be examined, up to the first argument that begins with `-', or the argument `(' or `!'.  That argument and any  following  arguments
       are taken to be the expression describing what is to be searched for.  If no paths are given, the current directory is used.  If no expression is
       given, the expression -print is used (but you should probably consider using -print0 instead, anyway).

       This manual page talks about `options' within the expression list.  These options control the behaviour of find but are specified immediately afâАР
       ter the last path name.  The five `real' options -H, -L, -P, -D and -O must appear before the first path name, if at all.  A double dash -- could
       theoretically be used to signal that any remaining arguments are not options, but this does not really work due to the way  find  determines  the
       end  of  the following path arguments: it does that by reading until an expression argument comes (which also starts with a `-').  Now, if a path
       argument would start with a `-', then find would treat it as expression argument instead.  Thus, to ensure that all start  points  are  taken  as
       such,  and  especially  to prevent that wildcard patterns expanded by the calling shell are not mistakenly treated as expression arguments, it is
       generally safer to prefix wildcards or dubious path names with either `./' or to use absolute path names starting with '/'.

       -P     Never follow symbolic links.  This is the default behaviour.  When find examines or prints information about files, and the file is a symâАР
              bolic link, the information used shall be taken from the properties of the symbolic link itself.

       -L     Follow  symbolic  links.  When find examines or prints information about files, the information used shall be taken from the properties of
              the file to which the link points, not from the link itself (unless it is a broken symbolic link or find is unable to examine the file  to
              which  the  link points).  Use of this option implies -noleaf.  If you later use the -P option, -noleaf will still be in effect.  If -L is
              in effect and find discovers a symbolic link to a subdirectory during its search, the subdirectory pointed to by the symbolic link will be
              searched.

              When  the -L option is in effect, the -type predicate will always match against the type of the file that a symbolic link points to rather
              than the link itself (unless the symbolic link is broken).  Actions that can cause symbolic links to become broken while find is executing
              (for example -delete) can give rise to confusing behaviour.  Using -L causes the -lname and -ilname predicates always to return false.

       -H     Do  not  follow symbolic links, except while processing the command line arguments.  When find examines or prints information about files,
              the information used shall be taken from the properties of the symbolic link itself.  The only exception to this behaviour is when a  file
              specified  on  the  command line is a symbolic link, and the link can be resolved.  For that situation, the information used is taken from
              whatever the link points to (that is, the link is followed).  The information about the link itself is used as  a  fallback  if  the  file
              pointed  to  by the symbolic link cannot be examined.  If -H is in effect and one of the paths specified on the command line is a symbolic
              link to a directory, the contents of that directory will be examined (though of course -maxdepth 0 would prevent this).

       If more than one of -H, -L and -P is specified, each overrides the others; the last one appearing on the command line takes effect.  Since it  is
       the default, the -P option should be considered to be in effect unless either -H or -L is specified.

       GNU  find frequently stats files during the processing of the command line itself, before any searching has begun.  These options also affect how
       those arguments are processed.  Specifically, there are a number of tests that compare files listed on the command line against  a  file  we  are
       currently  considering.   In  each case, the file specified on the command line will have been examined and some of its properties will have been
       saved.  If the named file is in fact a symbolic link, and the -P option is in effect (or if neither -H nor -L were  specified),  the  information
       used  for the comparison will be taken from the properties of the symbolic link.  Otherwise, it will be taken from the properties of the file the
       link points to.  If find cannot follow the link (for example because it has insufficient privileges or the link points to a nonexistent file) the
       properties of the link itself will be used.

       When  the  -H  or  -L  options are in effect, any symbolic links listed as the argument of -newer will be dereferenced, and the timestamp will be
       taken from the file to which the symbolic link points.  The same consideration applies to -newerXY, -anewer and -cnewer.

       The -follow option has a similar effect to -L, though it takes effect at the point where it appears (that is, if -L is not used but  -follow  is,
       any symbolic links appearing after -follow on the command line will be dereferenced, and those before it will not).

       -D debugopts
              Print  diagnostic  information;  this can be helpful to diagnose problems with why find is not doing what you want.  The list of debug opâАР
              tions should be comma separated.  Compatibility of the debug options is not guaranteed between releases of findutils.  For a complete list
              of valid debug options, see the output of find -D help.  Valid debug options include

              exec   Show diagnostic information relating to -exec, -execdir, -ok and -okdir

              opt    Prints diagnostic information relating to the optimisation of the expression tree; see the -O option.

              rates  Prints a summary indicating how often each predicate succeeded or failed.

              search Navigate the directory tree verbosely.

              stat   Print messages as files are examined with the stat and lstat system calls.  The find program tries to minimise such calls.

              tree   Show the expression tree in its original and optimised form.

              all    Enable all of the other debug options (but help).

              help   Explain the debugging options.

       -Olevel
              Enables  query  optimisation.   The find program reorders tests to speed up execution while preserving the overall effect; that is, prediâАР
              cates with side effects are not reordered relative to each other.  The optimisations performed at each optimisation level are as follows.

              0      Equivalent to optimisation level 1.

              1      This is the default optimisation level and corresponds to the traditional behaviour.  Expressions are reordered so that tests based
                     only on the names of files (for example -name and -regex) are performed first.

              2      Any  -type or -xtype tests are performed after any tests based only on the names of files, but before any tests that require inforâАР
                     mation from the inode.  On many modern versions of Unix, file types are returned by readdir() and so these predicates are faster to
                     evaluate than predicates which need to stat the file first.  If you use the -fstype FOO predicate and specify a filesystem type FOO
                     which is not known (that is, present in `/etc/mtab') at the time find starts, that predicate is equivalent to -false.

              3      At this optimisation level, the full cost-based query optimiser is enabled.  The order of tests is modified  so  that  cheap  (i.e.
                     fast)  tests  are performed first and more expensive ones are performed later, if necessary.  Within each cost band, predicates are
                     evaluated earlier or later according to whether they are likely to succeed or not.  For -o, predicates which are likely to  succeed
                     are evaluated earlier, and for -a, predicates which are likely to fail are evaluated earlier.

              The  cost-based optimiser has a fixed idea of how likely any given test is to succeed.  In some cases the probability takes account of the
              specific nature of the test (for example, -type f is assumed to be more likely to succeed than -type c).  The cost-based optimiser is curâАР
              rently  being  evaluated.   If  it does not actually improve the performance of find, it will be removed again.  Conversely, optimisations
              that prove to be reliable, robust and effective may be enabled at lower optimisation levels over time.   However,  the  default  behaviour
              (i.e.  optimisation level 1) will not be changed in the 4.3.x release series.  The findutils test suite runs all the tests on find at each
              optimisation level and ensures that the result is the same.

EXPRESSION

       The part of the command line after the list of starting points is the expression.  This is a kind of query specification describing how we  match
       files and what we do with the files that were matched.  An expression is composed of a sequence of things:

       Tests  Tests  return  a  true or false value, usually on the basis of some property of a file we are considering.  The -empty test for example is
              true only when the current file is empty.

       Actions
              Actions have side effects (such as printing something on the standard output) and return either true or false, usually based on whether or
              not they are successful.  The -print action for example prints the name of the current file on the standard output.

       Global options
              Global  options  affect  the operation of tests and actions specified on any part of the command line.  Global options always return true.
              The -depth option for example makes find traverse the file system in a depth-first order.

       Positional options
              Positional options affect only tests or actions which follow them.  Positional options always return true.  The -regextype option for  exâАР
              ample is positional, specifying the regular expression dialect for regular expressions occurring later on the command line.

       Operators
              Operators  join  together the other items within the expression.  They include for example -o (meaning logical OR) and -a (meaning logical
              AND).  Where an operator is missing, -a is assumed.

       The -print action is performed on all files for which the whole expression is true, unless it contains an action other than -prune or -quit.  AcâАР
       tions which inhibit the default -print are -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print and -printf.

       The -delete action also acts like an option (since it implies -depth).

POSITIONAL OPTIONS

Positional options always return true. They affect only tests occurring later on the command line.

       -daystart
              Measure  times  (for -amin, -atime, -cmin, -ctime, -mmin, and -mtime) from the beginning of today rather than from 24 hours ago.  This opâАР
              tion only affects tests which appear later on the command line.

       -follow
              Deprecated; use the -L option instead.  Dereference symbolic links.  Implies -noleaf.  The -follow option affects only those  tests  which
              appear after it on the command line.  Unless the -H or -L option has been specified, the position of the -follow option changes the behavâАР
              iour of the -newer predicate; any files listed as the argument of -newer will be dereferenced if they are symbolic links.  The  same  conâАР
              sideration applies to -newerXY, -anewer and -cnewer.  Similarly, the -type predicate will always match against the type of the file that a
              symbolic link points to rather than the link itself.  Using -follow causes the -lname and -ilname predicates always to return false.

       -regextype type
              Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line.  To see which  regular
              expression types are known, use -regextype help.  The Texinfo documentation (see SEE ALSO) explains the meaning of and differences between
              the various types of regular expression.

       -warn, -nowarn
              Turn warning messages on or off.  These warnings apply only to the command line usage, not to any conditions  that  find  might  encounter
              when  it  searches  directories.   The  default behaviour corresponds to -warn if standard input is a tty, and to -nowarn otherwise.  If a
              warning message relating to command-line usage is produced, the exit status of find is not affected.  If the  POSIXLY_CORRECT  environment
              variable is set, and -warn is also used, it is not specified which, if any, warnings will be active.

GLOBAL OPTIONS

       Global  options  always  return  true.  Global options take effect even for tests which occur earlier on the command line.  To prevent confusion,
       global options should specified on the command-line after the list of start points, just before the first test, positional option or action.   If
       you specify a global option in some other place, find will issue a warning message explaining that this can be confusing.

       The global options occur after the list of start points, and so are not the same kind of option as -L, for example.

       -d     A synonym for -depth, for compatibility with FreeBSD, NetBSD, MacOS X and OpenBSD.

       -depth Process each directory's contents before the directory itself.  The -delete action also implies -depth.

       -help, --help
              Print a summary of the command-line usage of find and exit.

       -ignore_readdir_race
              Normally,  find  will  emit an error message when it fails to stat a file.  If you give this option and a file is deleted between the time
              find reads the name of the file from the directory and the time it tries to stat the file, no error message will be issued.  This also apâАР
              plies  to  files or directories whose names are given on the command line.  This option takes effect at the time the command line is read,
              which means that you cannot search one part of the filesystem with this option on and part of it with this option off (if you need  to  do
              that, you will need to issue two find commands instead, one with the option and one without it).

              Furthermore, find with the -ignore_readdir_race option will ignore errors of the -delete action in the case the file has disappeared since
              the parent directory was read: it will not output an error diagnostic, and the return code of the -delete action will be true.

       -maxdepth levels
              Descend at most levels (a non-negative integer) levels of directories below the starting-points.  Using -maxdepth 0 means only  apply  the
              tests and actions to the starting-points themselves.

       -mindepth levels
              Do  not  apply any tests or actions at levels less than levels (a non-negative integer).  Using -mindepth 1 means process all files except
              the starting-points.

       -mount Don't descend directories on other filesystems.  An alternate name for -xdev, for compatibility with some other versions of find.

       -noignore_readdir_race
              Turns off the effect of -ignore_readdir_race.

       -noleaf
              Do not optimize by assuming that directories contain 2 fewer subdirectories than their hard  link  count.   This  option  is  needed  when
              searching  filesystems  that  do  not  follow the Unix directory-link convention, such as CD-ROM or MS-DOS filesystems or AFS volume mount
              points.  Each directory on a normal Unix filesystem has at least 2 hard links: its name and its `.' entry.  Additionally, its  subdirectoâАР
              ries (if any) each have a `..' entry linked to that directory.  When find is examining a directory, after it has statted 2 fewer subdirecâАР
              tories than the directory's link count, it knows that the rest of the entries in the directory are non-directories (`leaf'  files  in  the
              directory tree).  If only the files' names need to be examined, there is no need to stat them; this gives a significant increase in search
              speed.

       -version, --version
              Print the find version number and exit.

       -xdev  Don't descend directories on other filesystems.

TESTS

       Some tests, for example -newerXY and -samefile, allow comparison between the file currently being examined and some reference file  specified  on
       the  command line.  When these tests are used, the interpretation of the reference file is determined by the options -H, -L and -P and any previâАР
       ous -follow, but the reference file is only examined once, at the time the command line is parsed.  If the reference file cannot be examined (for
       example, the stat(2) system call fails for it), an error message is issued, and find exits with a nonzero status.

       A numeric argument n can be specified to tests (like -amin, -mtime, -gid, -inum, -links, -size, -uid and -used) as

       +n     for greater than n,

       -n     for less than n,

       n      for exactly n.

       Supported tests:

       -amin n
              File was last accessed less than, more than or exactly n minutes ago.

       -anewer reference
              Time of the last access of the current file is more recent than that of the last data modification of the reference file.  If reference is
              a symbolic link and the -H option or the -L option is in effect, then the time of the last data modification of the file it points  to  is
              always used.

       -atime n
              File  was  last  accessed less than, more than or exactly n*24 hours ago.  When find figures out how many 24-hour periods ago the file was
              last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

       -cmin n
              File's status was last changed less than, more than or exactly n minutes ago.

       -cnewer reference
              Time of the last status change of the current file is more recent than that of the last data modification of the reference file.  If  refâАР
              erence  is  a  symbolic  link  and the -H option or the -L option is in effect, then the time of the last data modification of the file it
              points to is always used.

       -ctime n
              File's status was last changed less than, more than or exactly n*24 hours ago.  See the comments for -atime to understand how rounding afâАР
              fects the interpretation of file status change times.

       -empty File is empty and is either a regular file or a directory.

       -executable
              Matches files which are executable and directories which are searchable (in a file name resolution sense) by the current user.  This takes
              into account access control lists and other permissions artefacts which the -perm test ignores.  This test makes use of the access(2) sysâАР
              tem  call,  and  so  can  be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the
              client's kernel and so cannot make use of the UID mapping information held on the server.  Because this test is based only on  the  result
              of the access(2) system call, there is no guarantee that a file for which this test succeeds can actually be executed.

       -false Always false.

       -fstype type
              File  is on a filesystem of type type.  The valid filesystem types vary among different versions of Unix; an incomplete list of filesystem
              types that are accepted on some version of Unix or another is: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K.  You can use -printf with the  %F
              directive to see the types of your filesystems.

       -gid n File's numeric group ID is less than, more than or exactly n.

       -group gname
              File belongs to group gname (numeric group ID allowed).

       -ilname pattern
              Like  -lname,  but the match is case insensitive.  If the -L option or the -follow option is in effect, this test returns false unless the
              symbolic link is broken.

       -iname pattern
              Like -name, but the match is case insensitive.  For example, the patterns `fo' and `F??' match the file names `Foo', `FOO', `foo', `fOo',
              etc.  The pattern `foo*` will also match a file called '.foobar'.

       -inum n
              File has inode number smaller than, greater than or exactly n.  It is normally easier to use the -samefile test instead.

       -ipath pattern
              Like -path.  but the match is case insensitive.

       -iregex pattern
              Like -regex, but the match is case insensitive.

       -iwholename pattern
              See -ipath.  This alternative is less portable than -ipath.

       -links n
              File has less than, more than or exactly n hard links.

       -lname pattern
              File  is a symbolic link whose contents match shell pattern pattern.  The metacharacters do not treat `/' or `.' specially.  If the -L opâАР
              tion or the -follow option is in effect, this test returns false unless the symbolic link is broken.

       -mmin n
              File's data was last modified less than, more than or exactly n minutes ago.

       -mtime n
              File's data was last modified less than, more than or exactly n*24 hours ago.  See the comments for -atime to understand how rounding  afâАР
              fects the interpretation of file modification times.

       -name pattern
              Base  of file name (the path with the leading directories removed) matches shell pattern pattern.  Because the leading directories are reâАР
              moved, the file names considered for a match with -name will never include a slash, so `-name a/b' will never match anything (you probably
              need  to  use  -path  instead).   A  warning is issued if you try to do this, unless the environment variable POSIXLY_CORRECT is set.  The
              metacharacters (`*', `?', and `[]') match a `.' at the start of the base name (this is a change in findutils-4.2.2; see section  STANDARDS
              CONFORMANCE  below).  To ignore a directory and the files under it, use -prune rather than checking every file in the tree; see an example
              in the description of that action.  Braces are not recognised as being special, despite the fact that some  shells  including  Bash  imbue
              braces  with  a  special  meaning  in shell patterns.  The filename matching is performed with the use of the fnmatch(3) library function.
              Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.

       -newer reference
              Time of the last data modification of the current file is more recent than that of the last data modification of the reference  file.   If
              reference  is  a symbolic link and the -H option or the -L option is in effect, then the time of the last data modification of the file it
              points to is always used.

       -newerXY reference
              Succeeds if timestamp X of the file being considered is newer than timestamp Y of the file reference.  The letters X and Y can be  any  of
              the following letters:

              a   The access time of the file reference
              B   The birth time of the file reference
              c   The inode status change time of reference
              m   The modification time of the file reference
              t   reference is interpreted directly as a time

              Some  combinations are invalid; for example, it is invalid for X to be t.  Some combinations are not implemented on all systems; for examâАР
              ple B is not supported on all systems.  If an invalid or unsupported combination of XY is specified, a fatal error results.  Time specifiâАР
              cations  are  interpreted as for the argument to the -d option of GNU date.  If you try to use the birth time of a reference file, and the
              birth time cannot be determined, a fatal error message results.  If you specify a test which refers to the birth time of files being examâАР
              ined, this test will fail for any files where the birth time is unknown.

       -nogroup
              No group corresponds to file's numeric group ID.

       -nouser
              No user corresponds to file's numeric user ID.

       -path pattern
              File name matches shell pattern pattern.  The metacharacters do not treat `/' or `.' specially; so, for example,
                  find . -path "./sr*sc"
              will  print an entry for a directory called ./src/misc (if one exists).  To ignore a whole directory tree, use -prune rather than checking
              every file in the tree.  Note that the pattern match test applies to the whole file name, starting from one of the start points  named  on
              the  command line.  It would only make sense to use an absolute path name here if the relevant start point is also an absolute path.  This
              means that this command will never match anything:
                  find bar -path /foo/bar/myfile -print
              Find compares the -path argument with the concatenation of a directory name and the base name of the file it's examining.  Since the  conâАР
              catenation  will  never  end with a slash, -path arguments ending in a slash will match nothing (except perhaps a start point specified on
              the command line).  The predicate -path is also supported by HP-UX find and is part of the POSIX 2008 standard.

       -perm mode
              File's permission bits are exactly mode (octal or symbolic).  Since an exact match is required, if you want to use this form for  symbolic
              modes, you may have to specify a rather complex mode string.  For example `-perm g=w' will only match files which have mode 0020 (that is,
              ones for which group write permission is the only permission set).  It is more likely that you will want to use the `/' or `-' forms,  for
              example `-perm -g=w', which matches any file with group write permission.  See the EXAMPLES section for some illustrative examples.

       -perm -mode
              All  of the permission bits mode are set for the file.  Symbolic modes are accepted in this form, and this is usually the way in which you
              would want to use them.  You must specify `u', `g' or `o' if you use a symbolic mode.  See the EXAMPLES section for some illustrative  exâАР
              amples.

       -perm /mode
              Any  of the permission bits mode are set for the file.  Symbolic modes are accepted in this form.  You must specify `u', `g' or `o' if you
              use a symbolic mode.  See the EXAMPLES section for some illustrative examples.  If no permission bits in mode are set, this  test  matches
              any file (the idea here is to be consistent with the behaviour of -perm -000).

       -perm +mode
              This is no longer supported (and has been deprecated since 2005).  Use -perm /mode instead.

       -readable
              Matches  files which are readable by the current user.  This takes into account access control lists and other permissions artefacts which
              the -perm test ignores.  This test makes use of the access(2) system call, and so can be fooled by NFS servers which do  UID  mapping  (or
              root-squashing),  since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held
              on the server.

       -regex pattern
              File name matches regular expression pattern.  This is a match on the whole path, not a search.   For  example,  to  match  a  file  named
              ./fubar3, you can use the regular expression `.bar.' or `.b.3', but not `f.r3'.  The regular expressions understood by find are by deâАР
              fault Emacs Regular Expressions (except that `.' matches newline), but this can be changed with the -regextype option.

       -samefile name
              File refers to the same inode as name.  When -L is in effect, this can include symbolic links.

       -size n[cwbkMG]
              File uses less than, more than or exactly n units of space, rounding up.  The following suffixes can be used:

              `b'    for 512-byte blocks (this is the default if no suffix is used)

              `c'    for bytes

              `w'    for two-byte words

              `k'    for kibibytes (KiB, units of 1024 bytes)

              `M'    for mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)

              `G'    for gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes)

              The size is simply the st_size member of the struct stat populated by the lstat (or stat) system call, rounded  up  as  shown  above.   In
              other  words,  it's consistent with the result you get for ls -l.  Bear in mind that the `%k' and `%b' format specifiers of -printf handle
              sparse files differently.  The `b' suffix always denotes 512-byte blocks and never 1024-byte blocks, which is different to  the  behaviour
              of -ls.

              The  +  and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match.  Bear in mind that the
              size is rounded up to the next unit.  Therefore -size -1M is not equivalent to -size -1048576c.  The former only matches empty files,  the
              latter matches files from 0 to 1,048,575 bytes.

       -true  Always true.

       -type c
              File is of type c:

              b      block (buffered) special

              c      character (unbuffered) special

              d      directory

              p      named pipe (FIFO)

              f      regular file

              l      symbolic  link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken.  If you
                     want to search for symbolic links when -L is in effect, use -xtype.

              s      socket

              D      door (Solaris)

              To search for more than one type at once, you can supply the combined list of type letters separated by a comma `,' (GNU extension).

       -uid n File's numeric user ID is less than, more than or exactly n.

       -used n
              File was last accessed less than, more than or exactly n days after its status was last changed.

       -user uname
              File is owned by user uname (numeric user ID allowed).

       -wholename pattern
              See -path.  This alternative is less portable than -path.

       -writable
              Matches files which are writable by the current user.  This takes into account access control lists and other permissions artefacts  which
              the  -perm  test  ignores.  This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or
              root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information  held
              on the server.

       -xtype c
              The  same  as  -type  unless the file is a symbolic link.  For symbolic links: if the -H or -P option was specified, true if the file is a
              link to a file of type c; if the -L option has been given, true if c is `l'.  In other words, for symbolic links, -xtype checks  the  type
              of the file that -type does not check.

       -context pattern
              (SELinux only) Security context of the file matches glob pattern.

ACTIONS

       -delete
              Delete files; true if removal succeeded.  If the removal failed, an error message is issued.  If -delete fails, find's exit status will be
              nonzero (when it eventually exits).  Use of -delete automatically turns on the `-depth' option.

              Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete evâАР
              erything  below the starting points you specified.  When testing a find command line that you later intend to use with -delete, you should
              explicitly specify -depth in order to avoid later surprises.  Because -delete implies -depth, you cannot usefully use -prune  and  -delete
              together.

              Together  with  the  -ignore_readdir_race option, find will ignore errors of the -delete action in the case the file has disappeared since
              the parent directory was read: it will not output an error diagnostic, and the return code of the -delete action will be true.

       -exec command ;
              Execute command; true if 0 status is returned.  All following arguments to find are taken to be arguments to the command until an argument
              consisting  of `;' is encountered.  The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguâАР
              ments to the command, not just in arguments where it is alone, as in some versions of find.  Both of these constructions might need to  be
              escaped (with a `\') or quoted to protect them from expansion by the shell.  See the EXAMPLES section for examples of the use of the -exec
              option.  The specified command is run once for each matched file.  The command is executed in the starting directory.  There are  unavoidâАР
              able security problems surrounding use of the -exec action; you should use the -execdir option instead.

       -exec command {} +
              This  variant  of  the  -exec action runs the specified command on the selected files, but the command line is built by appending each seâАР
              lected file name at the end; the total number of invocations of the command will be much less than the number of matched files.  The  comâАР
              mand line is built in much the same way that xargs builds its command lines.  Only one instance of `{}' is allowed within the command, and
              it must appear at the end, immediately before the `+'; it needs to be escaped (with a `\') or quoted to protect it from interpretation  by
              the  shell.  The command is executed in the starting directory.  If any invocation with the `+' form returns a non-zero value as exit staâАР
              tus, then find returns a non-zero exit status.  If find encounters an error, this can sometimes cause an immediate exit, so  some  pending
              commands  may  not  be run at all.  For this reason -exec my-command ... {} + -quit may not result in my-command actually being run.  This
              variant of -exec always returns true.

       -execdir command ;

       -execdir command {} +
              Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not  normally  the  directory  in
              which you started find.  As with -exec, the {} should be quoted if find is being invoked from a shell.  This a much more secure method for
              invoking commands, as it avoids race conditions during resolution of the paths to the matched files.  As with the -exec  action,  the  `+'
              form of -execdir will build a command line to process more than one matched file, but any given invocation of command will only list files
              that exist in the same subdirectory.  If you use this option, you must ensure that your $PATH environment variable does not reference `.';
              otherwise,  an  attacker  can  run any commands they like by leaving an appropriately-named file in a directory in which you will run -exâАР
              ecdir.  The same applies to having entries in $PATH which are empty or which are not absolute directory names.  If any invocation with the
              `+'  form  returns a non-zero value as exit status, then find returns a non-zero exit status.  If find encounters an error, this can someâАР
              times cause an immediate exit, so some pending commands may not be run at all.  The result of the action depends on whether the + or the ;
              variant is being used; -execdir command {} + always returns true, while -execdir command {} ; returns true only if command returns 0.

       -fls file
              True;  like  -ls  but write to file like -fprint.  The output file is always created, even if the predicate is never matched.  See the UNâАР
              USUAL FILENAMES section for information about how unusual characters in filenames are handled.

       -fprint file
              True; print the full file name into file file.  If file does not exist when find is run, it is created; if it does exist, it is truncated.
              The  file  names  /dev/stdout  and /dev/stderr are handled specially; they refer to the standard output and standard error output, respecâАР
              tively.  The output file is always created, even if the predicate is never matched.  See the UNUSUAL  FILENAMES  section  for  information
              about how unusual characters in filenames are handled.

       -fprint0 file
              True;  like  -print0  but write to file like -fprint.  The output file is always created, even if the predicate is never matched.  See the
              UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.

       -fprintf file format
              True; like -printf but write to file like -fprint.  The output file is always created, even if the predicate is never  matched.   See  the
              UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.

       -ls    True;  list  current  file  in  ls  -dils format on standard output.  The block counts are of 1 KB blocks, unless the environment variable
              POSIXLY_CORRECT is set, in which case 512-byte blocks are used.  See the UNUSUAL FILENAMES section for information about how unusual charâАР
              acters in filenames are handled.

       -ok command ;
              Like  -exec  but ask the user first.  If the user agrees, run the command.  Otherwise just return false.  If the command is run, its stanâАР
              dard input is redirected from /dev/null.

              The response to the prompt is matched against a pair of regular expressions to determine if it is an  affirmative  or  negative  response.
              This regular expression is obtained from the system if the `POSIXLY_CORRECT' environment variable is set, or otherwise from find's message
              translations.  If the system has no suitable definition, find's own definition will be used.  In either case, the  interpretation  of  the
              regular  expression itself will be affected by the environment variables 'LC_CTYPE' (character classes) and 'LC_COLLATE' (character ranges
              and equivalence classes).

       -okdir command ;
              Like -execdir but ask the user first in the same way as for -ok.  If the user does not agree, just return false.  If the command  is  run,
              its standard input is redirected from /dev/null.

       -print True;  print  the full file name on the standard output, followed by a newline.  If you are piping the output of find into another program
              and there is the faintest possibility that the files which you are searching for might contain a newline, then you should  seriously  conâАР
              sider using the -print0 option instead of -print.  See the UNUSUAL FILENAMES section for information about how unusual characters in fileâАР
              names are handled.

       -print0
              True; print the full file name on the standard output, followed by a null character (instead of the newline character that  -print  uses).
              This  allows  file names that contain newlines or other types of white space to be correctly interpreted by programs that process the find
              output.  This option corresponds to the -0 option of xargs.

       -printf format
              True; print format on the standard output, interpreting `\' escapes and `%' directives.  Field widths and precisions can be  specified  as
              with  the  printf(3) C function.  Please note that many of the fields are printed as %s rather than %d, and this may mean that flags don't
              work as you might expect.  This also means that the `-' flag does work (it forces fields to be left-aligned).  Unlike -print, -printf does
              not add a newline at the end of the string.  The escapes and directives are:

              \a     Alarm bell.

              \b     Backspace.

              \c     Stop printing from this format immediately and flush the output.

              \f     Form feed.

              \n     Newline.

              \r     Carriage return.

              \t     Horizontal tab.

              \v     Vertical tab.

              \0     ASCII NUL.

              \\     A literal backslash (`\').

              \NNN   The character whose ASCII code is NNN (octal).

              A `\' character followed by any other character is treated as an ordinary character, so they both are printed.

              %%     A literal percent sign.

              %a     File's last access time in the format returned by the C ctime(3) function.

              %Ak    File's  last access time in the format specified by k, which is either `@' or a directive for the C strftime(3) function.  The folâАР
                     lowing shows an incomplete list of possible values for k.  Please refer to the documentation of  strftime(3)  for  the  full  list.
                     Some  of the conversion specification characters might not be available on all systems, due to differences in the implementation of
                     the strftime(3) library function.

                     @      seconds since Jan. 1, 1970, 00:00 GMT, with fractional part.

                     Time fields:

                     H      hour (00..23)

                     I      hour (01..12)

                     k      hour ( 0..23)

                     l      hour ( 1..12)

                     M      minute (00..59)

                     p      locale's AM or PM

                     r      time, 12-hour (hh:mm:ss [AP]M)

                     S      Second (00.00 .. 61.00).  There is a fractional part.

                     T      time, 24-hour (hh:mm:ss.xxxxxxxxxx)

                     +      Date and time, separated by `+', for example `2004-04-28+22:22:05.0'.  This is a GNU extension.  The time is  given  in  the
                            current  timezone  (which  may be affected by setting the TZ environment variable).  The seconds field includes a fractional
                            part.

                     X      locale's time representation (H:M:S).  The seconds field includes a fractional part.

                     Z      time zone (e.g., EDT), or nothing if no time zone is determinable

                     Date fields:

                     a      locale's abbreviated weekday name (Sun..Sat)

                     A      locale's full weekday name, variable length (Sunday..Saturday)

                     b      locale's abbreviated month name (Jan..Dec)

                     B      locale's full month name, variable length (January..December)

                     c      locale's date and time (Sat Nov 04 12:02:33 EST 1989).  The format is the same as for ctime(3) and so to  preserve  compatiâАР
                            bility with that format, there is no fractional part in the seconds field.

                     d      day of month (01..31)

                     D      date (mm/dd/yy)

                     F      date (yyyy-mm-dd)

                     h      same as b

                     j      day of year (001..366)

                     m      month (01..12)

                     U      week number of year with Sunday as first day of week (00..53)

                     w      day of week (0..6)

                     W      week number of year with Monday as first day of week (00..53)

                     x      locale's date representation (mm/dd/yy)

                     y      last two digits of year (00..99)

                     Y      year (1970...)

              %b     The amount of disk space used for this file in 512-byte blocks.  Since disk space is allocated in multiples of the filesystem block
                     size this is usually greater than %s/512, but it can also be smaller if the file is a sparse file.

              %c     File's last status change time in the format returned by the C ctime(3) function.

              %Ck    File's last status change time in the format specified by k, which is the same as for %A.

              %d     File's depth in the directory tree; 0 means the file is a starting-point.

              %D     The device number on which the file exists (the st_dev field of struct stat), in decimal.

              %f     Print the basename; the file's name with any leading directories removed (only the last element).  For /, the result is  `/'.   See
                     the EXAMPLES section for an example.

              %F     Type of the filesystem the file is on; this value can be used for -fstype.

              %g     File's group name, or numeric group ID if the group has no name.

              %G     File's numeric group ID.

              %h     Dirname;  the Leading directories of the file's name (all but the last element).  If the file name contains no slashes (since it is
                     in the current directory) the %h specifier expands to `.'.  For files which are themselves directories and contain a slash (includâАР
                     ing /), %h expands to the empty string.  See the EXAMPLES section for an example.

              %H     Starting-point under which file was found.

              %i     File's inode number (in decimal).

              %k     The  amount  of  disk  space used for this file in 1 KB blocks.  Since disk space is allocated in multiples of the filesystem block
                     size this is usually greater than %s/1024, but it can also be smaller if the file is a sparse file.

              %l     Object of symbolic link (empty string if file is not a symbolic link).

              %m     File's permission bits (in octal).  This option uses the `traditional' numbers which most Unix implementations  use,  but  if  your
                     particular implementation uses an unusual ordering of octal permissions bits, you will see a difference between the actual value of
                     the file's mode and the output of %m.  Normally you will want to have a leading zero on this number, and to do this, you should use
                     the  flag (as in, for example, `%m').

              %M     File's permissions (in symbolic form, as for ls).  This directive is supported in findutils 4.2.5 and later.

              %n     Number of hard links to file.

              %p     File's name.

              %P     File's name with the name of the starting-point under which it was found removed.

              %s     File's size in bytes.

              %S     File's  sparseness.  This is calculated as (BLOCKSIZE*st_blocks / st_size).  The exact value you will get for an ordinary file of a
                     certain length is system-dependent.  However, normally sparse files will have values less than 1.0, and files  which  use  indirect
                     blocks  may  have a value which is greater than 1.0.  In general the number of blocks used by a file is file system dependent.  The
                     value used for BLOCKSIZE is system-dependent, but is usually 512 bytes.  If the file size is zero, the value printed is  undefined.
                     On systems which lack support for st_blocks, a file's sparseness is assumed to be 1.0.

              %t     File's last modification time in the format returned by the C ctime(3) function.

              %Tk    File's last modification time in the format specified by k, which is the same as for %A.

              %u     File's user name, or numeric user ID if the user has no name.

              %U     File's numeric user ID.

              %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

              %Y     File's  type (like %y), plus follow symbolic links: `L'=loop, `N'=nonexistent, `?' for any other error when determining the type of
                     the target of a symbolic link.

              %Z     (SELinux only) file's security context.

              %{ %[ %(
                     Reserved for future use.

              A `%' character followed by any other character is discarded, but the other character is printed (don't rely on this,  as  further  format
              characters  may be introduced).  A `%' at the end of the format argument causes undefined behaviour since there is no following character.
              In some locales, it may hide your door keys, while in others it may remove the final page from the novel you are reading.

              The %m and %d directives support the #, 0 and + flags, but the other directives do not, even if they print  numbers.   Numeric  directives
              that  do  not support these flags include G, U, b, D, k and n.  The `-' format flag is supported and changes the alignment of a field from
              right-justified (which is the default) to left-justified.

              See the UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.

       -prune True; if the file is a directory, do not descend into it.  If -depth is given, then -prune has no effect.  Because -delete implies -depth,
              you cannot usefully use -prune and -delete together.  For example, to skip the directory src/emacs and all files and directories under it,
              and print the names of the other files found, do something like this:
                  find . -path ./src/emacs -prune -o -print

       -quit  Exit immediately (with return value zero if no errors have occurred).  This is different to -prune because -prune only applies to the conâАР
              tents  of pruned directories, while -quit simply makes find stop immediately.  No child processes will be left running.  Any command lines
              which have been built by -exec ... + or -execdir ... + are invoked before the program is exited.  After -quit is executed, no  more  files
              specified on the command line will be processed.  For example, `find /tmp/foo /tmp/bar -print -quit` will print only `/tmp/foo`.
              One common use of -quit is to stop searching the file system once we have found what we want.  For example, if we want to find just a sinâАР
              gle file we can do this:
                  find / -name needle -print -quit

OPERATORS

Listed in order of decreasing precedence:

       ( expr )
              Force precedence.  Since parentheses are special to the shell, you will normally need to quote them.  Many of the examples in this  manual
              page use backslashes for this purpose: `\(...\)' instead of `(...)'.

       ! expr True if expr is false.  This character will also usually need protection from interpretation by the shell.

       -not expr
              Same as ! expr, but not POSIX compliant.

       expr1 expr2
              Two expressions in a row are taken to be joined with an implied -a; expr2 is not evaluated if expr1 is false.

       expr1 -a expr2
              Same as expr1 expr2.

       expr1 -and expr2
              Same as expr1 expr2, but not POSIX compliant.

       expr1 -o expr2
              Or; expr2 is not evaluated if expr1 is true.

       expr1 -or expr2
              Same as expr1 -o expr2, but not POSIX compliant.

       expr1 , expr2
              List; both expr1 and expr2 are always evaluated.  The value of expr1 is discarded; the value of the list is the value of expr2.  The comma
              operator can be useful for searching for several different types of thing,  but  traversing  the  filesystem  hierarchy  only  once.   The
              -fprintf action can be used to list the various matched items into several different output files.

       Please  note  that  -a when specified implicitly (for example by two tests appearing without an explicit operator between them) or explicitly has
       higher precedence than -o.  This means that find . -name afile -o -name bfile -print will never print afile.

UNUSUAL FILENAMES

       Many of the actions of find result in the printing of data which is under the control of other users.  This includes file names, sizes, modificaâАР
       tion  times  and  so  forth.  File names are a potential problem since they can contain any character except `\0' and `/'.  Unusual characters in
       file names can do unexpected and often undesirable things to your terminal (for example, changing the settings of your function keys on some terâАР
       minals).  Unusual characters are handled differently by various actions, as described below.

       -print0, -fprint0
              Always print the exact filename, unchanged, even if the output is going to a terminal.

       -ls, -fls
              Unusual  characters are always escaped.  White space, backslash, and double quote characters are printed using C-style escaping (for examâАР
              ple `\f', `\"').  Other unusual characters are printed using an octal escape.  Other printable characters (for -ls and -fls these are  the
              characters between octal 041 and 0176) are printed as-is.

       -printf, -fprintf
              If  the  output  is not going to a terminal, it is printed as-is.  Otherwise, the result depends on which directive is in use.  The direcâАР
              tives %D, %F, %g, %G, %H, %Y, and %y expand to values which are not under control of files' owners, and so are printed as-is.  The  direcâАР
              tives  %a,  %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u and %U have values which are under the control of files' owners but which cannot be
              used to send arbitrary data to the terminal, and so these are printed as-is.  The directives %f, %h, %l, %p and %P are quoted.  This quotâАР
              ing is performed in the same way as for GNU ls.  This is not the same quoting mechanism as the one used for -ls and -fls.  If you are able
              to decide what format to use for the output of find then it is normally better to use `\0' as a terminator than to use  newline,  as  file
              names can contain white space and newline characters.  The setting of the `LC_CTYPE' environment variable is used to determine which charâАР
              acters need to be quoted.

       -print, -fprint
              Quoting is handled in the same way as for -printf and -fprintf.  If you are using find in a script or in a  situation  where  the  matched
              files might have arbitrary names, you should consider using -print0 instead of -print.

       The -ok and -okdir actions print the current filename as-is.  This may change in a future release.

STANDARDS CONFORMANCE

       For  closest  compliance  to the POSIX standard, you should set the POSIXLY_CORRECT environment variable.  The following options are specified in
       the POSIX standard (IEEE Std 1003.1-2008, 2016 Edition):

       -H     This option is supported.

       -L     This option is supported.

       -name  This option is supported, but POSIX conformance depends on the POSIX conformance of the system's fnmatch(3) library function.  As of findâАР
              utils-4.2.2,  shell metacharacters (`*', `?' or `[]' for example) match a leading `.', because IEEE PASC interpretation 126 requires this.
              This is a change from previous versions of findutils.

       -type  Supported.  POSIX specifies `b', `c', `d', `l', `p', `f' and `s'.  GNU find also supports `D', representing a Door, where the OS  provides
              these.  Furthermore, GNU find allows multiple types to be specified at once in a comma-separated list.

       -ok    Supported.   Interpretation  of the response is according to the `yes' and `no' patterns selected by setting the `LC_MESSAGES' environment
              variable.  When the `POSIXLY_CORRECT' environment variable is set, these patterns are taken system's definition of  a  positive  (yes)  or
              negative  (no)  response.  See the system's documentation for nl_langinfo(3), in particular YESEXPR and NOEXPR.  When `POSIXLY_CORRECT' is
              not set, the patterns are instead taken from find's own message catalogue.

       -newer Supported.  If the file specified is a symbolic link, it is always dereferenced.  This is a change from previous behaviour, which used  to
              take the relevant time from the symbolic link; see the HISTORY section below.

       -perm  Supported.   If  the  POSIXLY_CORRECT environment variable is not set, some mode arguments (for example +a+x) which are not valid in POSIX
              are supported for backward-compatibility.

       Other primaries
              The primaries -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user and -xdev
              are all supported.

       The POSIX standard specifies parentheses `(', `)', negation `!' and the logical AND/OR operators -a and -o.

       All other options, predicates, expressions and so forth are extensions beyond the POSIX standard.  Many of these extensions are not unique to GNU
       find, however.

       The POSIX standard requires that find detects loops:

              The find utility shall detect infinite loops; that is, entering a previously visited directory that is an ancestor of the  last  file  enâАР
              countered.   When  it detects an infinite loop, find shall write a diagnostic message to standard error and shall either recover its posiâАР
              tion in the hierarchy or terminate.

       GNU find complies with these requirements.  The link count of directories which contain entries which are hard links to an ancestor will often be
       lower than they otherwise should be.  This can mean that GNU find will sometimes optimise away the visiting of a subdirectory which is actually a
       link to an ancestor.  Since find does not actually enter such a subdirectory, it is allowed to avoid emitting  a  diagnostic  message.   Although
       this  behaviour  may  be  somewhat  confusing, it is unlikely that anybody actually depends on this behaviour.  If the leaf optimisation has been
       turned off with -noleaf, the directory entry will always be examined and the diagnostic message will be issued where it is appropriate.  Symbolic
       links  cannot  be  used to create filesystem cycles as such, but if the -L option or the -follow option is in use, a diagnostic message is issued
       when find encounters a loop of symbolic links.  As with loops containing hard links, the leaf optimisation will often mean that find  knows  that
       it doesn't need to call stat() or chdir() on the symbolic link, so this diagnostic is frequently not necessary.

       The -d option is supported for compatibility with various BSD systems, but you should use the POSIX-compliant option -depth instead.

       The POSIXLY_CORRECT environment variable does not affect the behaviour of the -regex or -iregex tests because those tests aren't specified in the
       POSIX standard.

ENVIRONMENT VARIABLES

LANG Provides a default value for the internationalization variables that are unset or null.

LC_ALL If set to a non-empty string value, override the values of all the other internationalization variables.

       LC_COLLATE
              The POSIX standard specifies that this variable affects the pattern matching to be used for the -name  option.   GNU  find  uses  the  fnâАР
              match(3)  library  function, and so support for `LC_COLLATE' depends on the system library.  This variable also affects the interpretation
              of the response to -ok; while the `LC_MESSAGES' variable selects the actual pattern used to interpret the response to -ok, the interpretaâАР
              tion of any bracket expressions in the pattern will be affected by `LC_COLLATE'.

       LC_CTYPE
              This  variable  affects  the  treatment of character classes used in regular expressions and also with the -name test, if the system's fnâАР
              match(3) library function supports this.  This variable also affects the interpretation of any character classes in  the  regular  expresâАР
              sions  used  to interpret the response to the prompt issued by -ok.  The `LC_CTYPE' environment variable will also affect which characters
              are considered to be unprintable when filenames are printed; see the section UNUSUAL FILENAMES.

       LC_MESSAGES
              Determines the locale to be used for internationalised messages.  If the `POSIXLY_CORRECT' environment variable is set, this  also  deterâАР
              mines the interpretation of the response to the prompt made by the -ok action.

       NLSPATH
              Determines the location of the internationalisation message catalogues.

       PATH   Affects the directories which are searched to find the executables invoked by -exec, -execdir, -ok and -okdir.

       POSIXLY_CORRECT
              Determines  the  block  size used by -ls and -fls.  If POSIXLY_CORRECT is set, blocks are units of 512 bytes.  Otherwise they are units of
              1024 bytes.

              Setting this variable also turns off warning messages (that is, implies -nowarn) by default, because POSIX requires that  apart  from  the
              output for -ok, all messages printed on stderr are diagnostics and must result in a non-zero exit status.

              When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a valid symbolic mode.  When POSIXLY_CORRECT is
              set, such constructs are treated as an error.

              When POSIXLY_CORRECT is set, the response to the prompt made by the -ok action is interpreted according to the system's message catalogue,
              as opposed to according to find's own message translations.

       TZ     Affects the time zone used for some of the time-related format directives of -printf and -fprintf.

EXAMPLES

Simple `find|xargs` approach

âА¢ Find files named core in or below the directory /tmp and delete them.

$ find /tmp -name core -type f -print | xargs /bin/rm -f

Note that this will work incorrectly if there are any filenames containing newlines, single or double quotes, or spaces.

Safer `find -print0 | xargs -0` approach

       âА¢      Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names conâАР
              taining single or double quotes, spaces or newlines are correctly handled.

                  $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

              The -name test comes before the -type test in order to avoid having to call stat(2) on every file.

       Note that there is still a race between the time find traverses the hierarchy printing the matching filenames, and the time the process  executed
       by xargs works with that file.

Executing a command for each file

âА¢ Run file on every file in or below the current directory.

$ find . -type f -exec file ‘{}’ \;

              Notice  that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation.  The semicolon
              is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

       In many cases, one might prefer the `-exec ... +` or better the `-execdir ... +` syntax for performance and security reasons.

Traversing the filesystem just once – for 2 different actions

âА¢ Traverse the filesystem just once, listing set-user-ID files and directories into /root/suid.txt and large files into /root/big.txt.

                  $ find / \
                      \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
                      \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

              This example uses the line-continuation character '\' on the first two lines to instruct the shell to continue reading the command on  the
              next line.

Searching files by age

âА¢ Search for files in your home directory which have been modified in the last twenty-four hours.

$ find $HOME -mtime 0

              This  command  works  this  way  because the time since each file was last modified is divided by 24 hours and any remainder is discarded.
              That means that to match -mtime 0, a file will have to have a modification in the past which is less than 24 hours ago.

Searching files by permissions

âА¢ Search for files which are executable but not readable.

$ find /sbin /usr/sbin -executable \! -readable -print

âА¢ Search for files which have read and write permission for their owner, and group, but which other users can read but not write to.

$ find . -perm 664

Files which meet these criteria but have other permissions bits set (for example if someone can execute the file) will not be matched.

       âА¢      Search for files which have read and write permission for their owner and group, and which other users can read,  without  regard  to  the
              presence of any extra permission bits (for example the executable bit).

                  $ find . -perm -664

              This will match a file which has mode 0777, for example.

       âА¢      Search for files which are writable by somebody (their owner, or their group, or anybody else).

                  $ find . -perm /222

       âА¢      Search for files which are writable by either their owner or their group.

                  $ find . -perm /220
                  $ find . -perm /u+w,g+w
                  $ find . -perm /u=w,g=w

              All three of these commands do the same thing, but the first one uses the octal representation of the file mode, and the other two use the
              symbolic form.  The files don't have to be writable by both the owner and group to be matched; either will do.

       âА¢      Search for files which are writable by both their owner and their group.

                  $ find . -perm -220
                  $ find . -perm -g+w,u+w

              Both these commands do the same thing.

       âА¢      A more elaborate search on permissions.

                  $ find . -perm -444 -perm /222 \! -perm /111
                  $ find . -perm -a+r -perm /a+w \! -perm /a+x

              These two commands both search for files that are readable for everybody (-perm -444 or -perm -a+r), have  at  least  one  write  bit  set
              (-perm /222 or -perm /a+w) but are not executable for anybody (! -perm /111 or ! -perm /a+x respectively).

Pruning – omitting files and subdirectories

       âА¢      Copy the contents of /source-dir to /dest-dir, but omit files and directories named .snapshot (and anything in them).  It also omits files
              or directories whose name ends in '~', but not their contents.

                  $ cd /source-dir
                  $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
                      | cpio -pmd0 /dest-dir

              The construct -prune -o \( ... -print0 \) is quite common.  The idea here is that the expression before -prune matches things which are to
              be  pruned.   However,  the  -prune action itself returns true, so the following -o ensures that the right hand side is evaluated only for
              those directories which didn't get pruned (the contents of the pruned directories are not even visited, so their contents are irrelevant).
              The  expression  on  the  right hand side of the -o is in parentheses only for clarity.  It emphasises that the -print0 action takes place
              only for things that didn't have -prune applied to them.  Because the default `and' condition between tests binds more  tightly  than  -o,
              this is the default anyway, but the parentheses help to show what is going on.

       âА¢      Given  the  following  directory  of  projects  and  their  associated SCM administrative directories, perform an efficient search for the
              projects' roots:

                  $ find repo/ \
                      \( -exec test -d '{}/.svn' \; \
                      -or -exec test -d '{}/.git' \; \
                      -or -exec test -d '{}/CVS' \; \
                      \) -print -prune

              Sample output:

                  repo/project1/CVS
                  repo/gnu/project2/.svn
                  repo/gnu/project3/.svn
                  repo/gnu/project3/src/.svn
                  repo/project4/.git

              In this example, -prune prevents unnecessary descent into directories that have already been discovered (for  example  we  do  not  search
              project3/src because we already found project3/.svn), but ensures sibling directories (project2 and project3) are found.

Other useful examples

âА¢ Search for several file types.

$ find /tmp -type f,d,l

              Search  for  files,  directories,  and symbolic links in the directory /tmp passing these types as a comma-separated list (GNU extension),
              which is otherwise equivalent to the longer, yet more portable:

                  $ find /tmp \( -type f -o -type d -o -type l \)

       âА¢      Search for files with the particular name needle and stop immediately when we find the first one.

                  $ find / -name needle -print -quit

       âА¢      Demonstrate the interpretation of the %f and %h format directives of the -printf action for some corner-cases.  Here is an example includâАР
              ing some output.

                  $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
                  [.][.]
                  [.][..]
                  [][/]
                  [][tmp]
                  [/tmp][TRACE]
                  [.][compile]
                  [compile/64/tests][find]

EXIT STATUS

       find exits with status 0 if all files are processed successfully, greater than 0 if errors occur.  This is deliberately a very broad description,
       but if the return value is non-zero, you should not rely on the correctness of the results of find.

       When some error occurs, find may stop immediately, without completing all the actions specified.  For example, some starting points may not  have
       been examined or some pending program invocations for -exec ... {} + or -execdir ... {} + may not have been performed.

HISTORY

       As  of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for example) used in filename patterns match a leading `.', because IEEE POSIX inâАР
       terpretation 126 requires this.

       As of findutils-4.3.3, -perm /000 now matches all files instead of none.

       Nanosecond-resolution timestamps were implemented in findutils-4.3.3.

       As of findutils-4.3.11, the -delete action sets find's exit status to a nonzero value when it fails.  However, find will  not  exit  immediately.
       Previously, find's exit status was unaffected by the failure of -delete.

       Feature                Added in   Also occurs in
       -newerXY               4.3.3      BSD
       -D                     4.3.1
       -O                     4.3.1
       -readable              4.3.0
       -writable              4.3.0
       -executable            4.3.0
       -regextype             4.2.24
       -exec ... +            4.2.12     POSIX
       -execdir               4.2.12     BSD
       -okdir                 4.2.12
       -samefile              4.2.11
       -H                     4.2.5      POSIX
       -L                     4.2.5      POSIX
       -P                     4.2.5      BSD
       -delete                4.2.3
       -quit                  4.2.3
       -d                     4.2.3      BSD
       -wholename             4.2.0
       -iwholename            4.2.0
       -ignore_readdir_race   4.2.0
       -fls                   4.0
       -ilname                3.8
       -iname                 3.8
       -ipath                 3.8
       -iregex                3.8

       The  syntax  -perm  +MODE was removed in findutils-4.5.12, in favour of -perm /MODE.  The +MODE syntax had been deprecated since findutils-4.2.21
       which was released in 2005.

NON-BUGS

Operator precedence surprises

       The command find . -name afile -o -name bfile -print will never print afile because this is actually equivalent to find . -name afile -o \( -name
       bfile  -a  -print  \).  Remember that the precedence of -a is higher than that of -o and when there is no operator specified between tests, -a is
       assumed.

âАЬpaths must precede expressionâАЭ error message

       $ find . -name *.c -print
       find: paths must precede expression
       find: possible unquoted pattern after predicate `-name'?

       This happens when the shell could expand the pattern .c to more than one file name existing in the current directory, and passing the  resulting
       file names in the command line to find like this:
       find . -name frcode.c locate.c word_io.c -print
       That  command  is  of course not going to work, because the -name predicate allows exactly only one pattern as argument.  Instead of doing things
       this way, you should enclose the pattern in quotes or escape the wildcard, thus allowing find to use the pattern with  the  wildcard  during  the
       search for file name matching instead of file names expanded by the parent shell:
       $ find . -name '.c' -print
       $ find . -name \*.c -print

BUGS

       There  are security problems inherent in the behaviour that the POSIX standard specifies for find, which therefore cannot be fixed.  For example,
       the -exec action is inherently insecure, and -execdir should be used instead.

       The environment variable LC_COLLATE has no effect on the -ok action.

REPORTING BUGS

       GNU findutils online help: <https://www.gnu.org/software/findutils/#get-help>
       Report any translation bugs to <https://translationproject.org/team/>

       Report any other issue via the form at the GNU Savannah bug tracker:
              <https://savannah.gnu.org/bugs/?group=findutils>
       General topics about the GNU findutils package are discussed at the bug-findutils mailing list:
              <https://lists.gnu.org/mailman/listinfo/bug-findutils>

COPYRIGHT

       Copyright © 1990-2021 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.

SEE ALSO

chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2), ctime(3) fnmatch(3), printf(3), strftime(3), locatedb(5), regex(7)

       Full documentation <https://www.gnu.org/software/findutils/find>
       or available locally via: info find

                                                                                                                                                 FIND(1)
Categories
Linux manpage

manpage ifconfig

IFCONFIG(8) Linux System Administrator’s Manual IFCONFIG(8)

NAME

ifconfig – configure a network interface

SYNOPSIS

       ifconfig [-v] [-a] [-s] [interface]
       ifconfig [-v] interface [aftype] options | address ...

DESCRIPTION

       Ifconfig is used to configure the kernel-resident network interfaces.  It is used at boot time to set up interfaces as necessary.  After that, it
       is usually only needed when debugging or when system tuning is needed.

       If no arguments are given, ifconfig displays the status of the currently active interfaces.  If a single interface argument is given, it displays
       the  status  of  the  given interface only; if a single -a argument is given, it displays the status of all interfaces, even those that are down.
       Otherwise, it configures an interface.

Address Families

       If the first argument after the interface name is recognized as the name of a supported address family, that address family is used for  decoding
       and  displaying all protocol addresses.  Currently supported address families include inet (TCP/IP, default), inet6 (IPv6), ax25 (AMPR Packet RaâАР
       dio), ddp (Appletalk Phase 2), ipx (Novell IPX) and netrom (AMPR Packet radio).  All numbers supplied as parts in IPv4  dotted  decimal  notation
       may  be decimal, octal, or hexadecimal, as specified in the ISO C standard (that is, a leading 0x or 0X implies hexadecimal; otherwise, a leading
       '0' implies octal; otherwise, the number is interpreted as decimal). Use of hexadecimal and octal numbers is not RFC-compliant and therefore  its
       use is discouraged.

OPTIONS

-a display all interfaces which are currently available, even if down

-s display a short list (like netstat -i)

-v be more verbose for some error conditions

       interface
              The name of the interface.  This is usually a driver name followed by a unit number, for example eth0 for the first Ethernet interface. If
              your kernel supports alias interfaces, you can specify them with syntax like eth0:0 for the first alias of eth0. You can use them  to  asâАР
              sign  more  addresses.  To  delete an alias interface use ifconfig eth0:0 down.  Note: for every scope (i.e. same net with address/netmask
              combination) all aliases are deleted, if you delete the first (primary).

       up     This flag causes the interface to be activated.  It is implicitly specified if an address is assigned to the interface; you  can  suppress
              this  behavior  when  using  an alias interface by appending an - to the alias (e.g.  eth0:0-).  It is also suppressed when using the IPv4
              0.0.0.0 address as the kernel will use this to implicitly delete alias interfaces.

       down   This flag causes the driver for this interface to be shut down.

       [-]arp Enable or disable the use of the ARP protocol on this interface.

       [-]promisc
              Enable or disable the promiscuous mode of the interface.  If selected, all packets on the network will be received by the interface.

       [-]allmulti
              Enable or disable all-multicast mode.  If selected, all multicast packets on the network will be received by the interface.

       mtu N  This parameter sets the Maximum Transfer Unit (MTU) of an interface.

       dstaddr addr
              Set the remote IP address for a point-to-point link (such as PPP).  This keyword is now obsolete; use the pointopoint keyword instead.

       netmask addr
              Set the IP network mask for this interface.  This value defaults to the usual class A, B or C network mask (as derived from the  interface
              IP address), but it can be set to any value.

       add addr/prefixlen
              Add an IPv6 address to an interface.

       del addr/prefixlen
              Remove an IPv6 address from an interface.

       tunnel ::aa.bb.cc.dd
              Create a new SIT (IPv6-in-IPv4) device, tunnelling to the given destination.

       irq addr
              Set the interrupt line used by this device.  Not all devices can dynamically change their IRQ setting.

       io_addr addr
              Set the start address in I/O space for this device.

       mem_start addr
              Set the start address for shared memory used by this device.  Only a few devices need this.

       media type
              Set  the  physical port or medium type to be used by the device.  Not all devices can change this setting, and those that can vary in what
              values they support.  Typical values for type are 10base2 (thin Ethernet), 10baseT (twisted-pair 10Mbps Ethernet),  AUI  (external  transâАР
              ceiver) and so on.  The special medium type of auto can be used to tell the driver to auto-sense the media.  Again, not all drivers can do
              this.

       [-]broadcast [addr]
              If the address argument is given, set the protocol broadcast address for this interface.  Otherwise, set (or clear) the IFF_BROADCAST flag
              for the interface.

       [-]pointopoint [addr]
              This  keyword enables the point-to-point mode of an interface, meaning that it is a direct link between two machines with nobody else lisâАР
              tening on it.
              If the address argument is also given, set the protocol address of the other side of the link, just  like  the  obsolete  dstaddr  keyword
              does.  Otherwise, set or clear the IFF_POINTOPOINT flag for the interface.

       hw class address
              Set the hardware address of this interface, if the device driver supports this operation.  The keyword must be followed by the name of the
              hardware class and the printable ASCII equivalent of the hardware address.  Hardware classes currently supported include ether (Ethernet),
              ax25 (AMPR AX.25), ARCnet and netrom (AMPR NET/ROM).

       multicast
              Set the multicast flag on the interface. This should not normally be needed as the drivers set the flag correctly themselves.

       address
              The IP address to be assigned to this interface.

       txqueuelen length
              Set the length of the transmit queue of the device. It is useful to set this to small values for slower devices with a high latency (modem
              links, ISDN) to prevent fast bulk transfers from disturbing interactive traffic like telnet too much.

NOTES

       Since kernel release 2.2 there are no explicit interface statistics for alias interfaces anymore. The statistics printed for the original address
       are  shared  with all alias addresses on the same device. If you want per-address statistics you should add explicit accounting rules for the adâАР
       dress using the iptables(8) command.

       Since net-tools 1.60-4 ifconfig is printing byte counters and human readable counters with IEC 60027-2 units. So 1 KiB are 2^10 byte.  Note,  the
       numbers are truncated to one decimal (which can by quite a large error if you consider 0.1 PiB is 112.589.990.684.262 bytes :)

       Interrupt  problems  with Ethernet device drivers fail with EAGAIN (SIOCSIIFLAGS: Resource temporarily unavailable) it is most likely a interrupt
       conflict. See http://www.scyld.com/expert/irq-conflict.html for more information.

FILES

       /proc/net/dev
       /proc/net/if_inet6

BUGS

       Ifconfig uses the ioctl access method to get the full address information, which limits hardware addresses to 8 bytes.  Because Infiniband  hardâАР
       ware  address  has  20  bytes,  only the first 8 bytes are displayed correctly.  Please use ip link command from iproute2 package to display link
       layer informations including the hardware address.

       While appletalk DDP and IPX addresses will be displayed they cannot be altered by this command.

SEE ALSO

       route(8), netstat(8), arp(8), rarp(8), iptables(8), ifup(8), interfaces(5).
       http://physics.nist.gov/cuu/Units/binary.html - Prefixes for binary multiples

AUTHORS

       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
       Alan Cox, <Alan.Cox@linux.org>
       Phil Blundell, <Philip.Blundell@pobox.com>
       Andi Kleen
       Bernd Eckenfels, <net-tools@lina.inka.de>

net-tools                                                              2008-10-03                                                            IFCONFIG(8)
Categories
Linux manpage

manpage less

LESS(1) General Commands Manual LESS(1)

NAME

less – opposite of more

SYNOPSIS

       less -?
       less --help
       less -V
       less --version
       less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
            [-b space] [-h lines] [-j line] [-k keyfile]
            [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
            [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
            [-# shift] [+[+]cmd] [--] [filename]...
       (See the OPTIONS section for alternate option syntax with long option names.)

DESCRIPTION

       Less  is a program similar to more (1), but it has many more features.  Less does not have to read the entire input file before starting, so with
       large input files it starts up faster than text editors like vi (1).  Less uses termcap (or terminfo on some systems), so it can run on a variety
       of  terminals.   There  is even limited support for hardcopy terminals.  (On a hardcopy terminal, lines which should be printed at the top of the
       screen are prefixed with a caret.)

       Commands are based on both more and vi.  Commands may be preceded by a decimal number, called N in the descriptions below.  The number is used by
       some commands, as indicated.

COMMANDS

       In  the  following descriptions, ^X means control-X.  ESC stands for the ESCAPE key; for example ESC-v means the two character sequence "ESCAPE",
       then "v".

       h or H Help: display a summary of these commands.  If you forget all the other commands, remember this one.

       SPACE or ^V or f or ^F
              Scroll forward N lines, default one window (see option -z below).  If N is more than the screen size, only the  final  screenful  is  disâАР
              played.  Warning: some systems use ^V as a special literalization character.

       z      Like SPACE, but if N is specified, it becomes the new window size.

       ESC-SPACE
              Like SPACE, but scrolls a full screenful, even if it reaches end-of-file in the process.

       ENTER or RETURN or ^N or e or ^E or j or ^J
              Scroll forward N lines, default 1.  The entire N lines are displayed, even if N is more than the screen size.

       d or ^D
              Scroll  forward  N  lines, default one half of the screen size.  If N is specified, it becomes the new default for subsequent d and u comâАР
              mands.

       b or ^B or ESC-v
              Scroll backward N lines, default one window (see option -z below).  If N is more than the screen size, only the final  screenful  is  disâАР
              played.

       w      Like ESC-v, but if N is specified, it becomes the new window size.

       y or ^Y or ^P or k or ^K
              Scroll  backward N lines, default 1.  The entire N lines are displayed, even if N is more than the screen size.  Warning: some systems use
              ^Y as a special job control character.

       u or ^U
              Scroll backward N lines, default one half of the screen size.  If N is specified, it becomes the new default for subsequent d and  u  comâАР
              mands.

       J      Like j, but continues to scroll beyond the end of the file.

       K or Y Like k, but continues to scroll beyond the beginning of the file.

       ESC-) or RIGHTARROW
              Scroll horizontally right N characters, default half the screen width (see the -# option).  If a number N is specified, it becomes the deâАР
              fault for future RIGHTARROW and LEFTARROW commands.  While the text is scrolled, it acts as though the -S option (chop lines) were in  efâАР
              fect.

       ESC-( or LEFTARROW
              Scroll  horizontally left N characters, default half the screen width (see the -# option).  If a number N is specified, it becomes the deâАР
              fault for future RIGHTARROW and LEFTARROW commands.

       ESC-} or ^RIGHTARROW
              Scroll horizontally right to show the end of the longest displayed line.

       ESC-{ or ^LEFTARROW
              Scroll horizontally left back to the first column.

       r or ^R or ^L
              Repaint the screen.

       R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

       F      Scroll forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already at the  end  of
              the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f"
              command.)

       ESC-F  Like F, but as soon as a line is found which matches the last search pattern, the terminal bell is rung and forward scrolling stops.

       g or < or ESC-<
              Go to line N in the file, default 1 (beginning of file).  (Warning: this may be slow if N is large.)

       G or > or ESC->
              Go to line N in the file, default the end of the file.  (Warning: this may be slow if N is large, or if N is not  specified  and  standard
              input, rather than a file, is being read.)

       ESC-G  Same as G, except if no number N is specified and the input is standard input, goes to the last line which is currently buffered.

       p or % Go to a position N percent into the file.  N should be between 0 and 100, and may contain a decimal point.

       P      Go to the line containing byte offset N in the file.

       {      If  a  left curly bracket appears in the top line displayed on the screen, the { command will go to the matching right curly bracket.  The
              matching right curly bracket is positioned on the bottom line of the screen.  If there is more than one left  curly  bracket  on  the  top
              line, a number N may be used to specify the N-th bracket on the line.

       }      If  a  right  curly  bracket appears in the bottom line displayed on the screen, the } command will go to the matching left curly bracket.
              The matching left curly bracket is positioned on the top line of the screen.  If there is more than one right curly  bracket  on  the  top
              line, a number N may be used to specify the N-th bracket on the line.

       (      Like {, but applies to parentheses rather than curly brackets.

       )      Like }, but applies to parentheses rather than curly brackets.

       [      Like {, but applies to square brackets rather than curly brackets.

       ]      Like }, but applies to square brackets rather than curly brackets.

       ESC-^F Followed  by two characters, acts like {, but uses the two characters as open and close brackets, respectively.  For example, "ESC ^F < >"
              could be used to go forward to the > which matches the < in the top displayed line.

       ESC-^B Followed by two characters, acts like }, but uses the two characters as open and close brackets, respectively.  For example, "ESC ^B <  >"
              could be used to go backward to the < which matches the > in the bottom displayed line.

       m      Followed  by  any lowercase or uppercase letter, marks the first displayed line with that letter.  If the status column is enabled via the
              -J option, the status column shows the marked line.

       M      Acts like m, except the last displayed line is marked rather than the first displayed line.

       '      (Single quote.)  Followed by any lowercase or uppercase letter, returns to the position which was  previously  marked  with  that  letter.
              Followed  by another single quote, returns to the position at which the last "large" movement command was executed.  Followed by a ^ or $,
              jumps to the beginning or end of the file respectively.  Marks are preserved when a new file is examined, so the ' command can be used  to
              switch between input files.

       ^X^X   Same as single quote.

       ESC-m  Followed by any lowercase or uppercase letter, clears the mark identified by that letter.

       /pattern
              Search forward in the file for the N-th line containing the pattern.  N defaults to 1.  The pattern is a regular expression, as recognized
              by the regular expression library supplied by your system.  The search starts at the first line displayed (but see the -a and -j  options,
              which change this).

              Certain  characters  are special if entered at the beginning of the pattern; they modify the type of search rather than become part of the
              pattern:

              ^N or !
                     Search for lines which do NOT match the pattern.

              ^E or *
                     Search multiple files.  That is, if the search reaches the END of the current file without finding a match, the search continues in
                     the next file in the command line list.

              ^F or @
                     Begin  the  search  at  the first line of the FIRST file in the command line list, regardless of what is currently displayed on the
                     screen or the settings of the -a or -j options.

              ^K     Highlight any text which matches the pattern on the current screen, but don't move to the first match (KEEP current position).

              ^R     Don't interpret regular expression metacharacters; that is, do a simple textual comparison.

       ?pattern
              Search backward in the file for the N-th line containing the pattern.  The search starts at the last line displayed (but see the -a and -j
              options, which change this).

              Certain characters are special as in the / command:

              ^N or !
                     Search for lines which do NOT match the pattern.

              ^E or *
                     Search  multiple  files.  That is, if the search reaches the beginning of the current file without finding a match, the search conâАР
                     tinues in the previous file in the command line list.

              ^F or @
                     Begin the search at the last line of the last file in the command line list, regardless of  what  is  currently  displayed  on  the
                     screen or the settings of the -a or -j options.

              ^K     As in forward searches.

              ^R     As in forward searches.

       ESC-/pattern
              Same as "/*".

       ESC-?pattern
              Same as "?*".

       n      Repeat  previous search, for N-th line containing the last pattern.  If the previous search was modified by ^N, the search is made for the
              N-th line NOT containing the pattern.  If the previous search was modified by ^E, the search continues in the next (or previous)  file  if
              not  satisfied  in  the  current  file.   If the previous search was modified by ^R, the search is done without using regular expressions.
              There is no effect if the previous search was modified by ^F or ^K.

       N      Repeat previous search, but in the reverse direction.

       ESC-n  Repeat previous search, but crossing file boundaries.  The effect is as if the previous search were modified by *.

       ESC-N  Repeat previous search, but in the reverse direction and crossing file boundaries.

       ESC-u  Undo search highlighting.  Turn off highlighting of strings matching the current search pattern.  If highlighting is already  off  because
              of  a  previous ESC-u command, turn highlighting back on.  Any search command will also turn highlighting back on.  (Highlighting can also
              be disabled by toggling the -G option; in that case search commands do not turn highlighting back on.)

       &pattern
              Display only lines which match the pattern; lines which do not match the pattern are not displayed.  If pattern is empty (if  you  type  &
              immediately  followed  by ENTER), any filtering is turned off, and all lines are displayed.  While filtering is in effect, an ampersand is
              displayed at the beginning of the prompt, as a reminder that some lines in the file may be hidden.

              Certain characters are special as in the / command:

              ^N or !
                     Display only lines which do NOT match the pattern.

              ^R     Don't interpret regular expression metacharacters; that is, do a simple textual comparison.

       :e [filename]
              Examine a new file.  If the filename is missing, the "current" file (see the :n and :p commands below) from the list of files in the  comâАР
              mand  line  is re-examined.  A percent sign (%) in the filename is replaced by the name of the current file.  A pound sign (#) is replaced
              by the name of the previously examined file.  However, two consecutive percent signs are simply replaced with a single percent sign.  This
              allows  you to enter a filename that contains a percent sign in the name.  Similarly, two consecutive pound signs are replaced with a sinâАР
              gle pound sign.  The filename is inserted into the command line list of files so that it can be seen by subsequent :n and :p commands.  If
              the  filename consists of several files, they are all inserted into the list of files and the first one is examined.  If the filename conâАР
              tains one or more spaces, the entire filename should be enclosed in double quotes (also see the -" option).

       ^X^V or E
              Same as :e.  Warning: some systems use ^V as a special literalization character.  On such systems, you may not be able to use ^V.

       :n     Examine the next file (from the list of files given in the command line).  If a number N is specified, the N-th next file is examined.

       :p     Examine the previous file in the command line list.  If a number N is specified, the N-th previous file is examined.

       :x     Examine the first file in the command line list.  If a number N is specified, the N-th file in the list is examined.

       :d     Remove the current file from the list of files.

       t      Go to the next tag, if there were more than one matches for the current tag.  See the -t option for more details about tags.

       T      Go to the previous tag, if there were more than one matches for the current tag.

       = or ^G or :f
              Prints some information about the file being viewed, including its name and the line number and byte offset of the bottom line being  disâАР
              played.   If  possible,  it also prints the length of the file, the number of lines in the file and the percent of the file above the last
              displayed line.

       -      Followed by one of the command line option letters (see OPTIONS below), this will change the setting of that option and  print  a  message
              describing  the  new setting.  If a ^P (CONTROL-P) is entered immediately after the dash, the setting of the option is changed but no mesâАР
              sage is printed.  If the option letter has a numeric value (such as -b or -h), or a string value (such as -P or -t), a new  value  may  be
              entered after the option letter.  If no new value is entered, a message describing the current setting is printed and nothing is changed.

       --     Like  the  - command, but takes a long option name (see OPTIONS below) rather than a single option letter.  You must press ENTER or RETURN
              after typing the option name.  A ^P immediately after the second dash suppresses printing of a message describing the new setting,  as  in
              the - command.

       -+     Followed  by  one  of the command line option letters this will reset the option to its default setting and print a message describing the
              new setting.  (The "-+X" command does the same thing as "-+X" on the command line.)  This does not work for string-valued options.

       --+    Like the -+ command, but takes a long option name rather than a single option letter.

       -!     Followed by one of the command line option letters, this will reset the option to the "opposite" of its default setting and print  a  mesâАР
              sage describing the new setting.  This does not work for numeric or string-valued options.

       --!    Like the -! command, but takes a long option name rather than a single option letter.

       _      (Underscore.)   Followed  by  one of the command line option letters, this will print a message describing the current setting of that opâАР
              tion.  The setting of the option is not changed.

       __     (Double underscore.)  Like the _ (underscore) command, but takes a long option name rather than a single option letter.   You  must  press
              ENTER or RETURN after typing the option name.

       +cmd   Causes  the  specified  cmd  to  be executed each time a new file is examined.  For example, +G causes less to initially display each file
              starting at the end rather than the beginning.

       V      Prints the version number of less being run.

       q or Q or :q or :Q or ZZ
              Exits less.

       The following four commands may or may not be valid, depending on your particular installation.

       v      Invokes an editor to edit the current file being viewed.  The editor is taken from the environment variable VISUAL if defined,  or  EDITOR
              if VISUAL is not defined, or defaults to "vi" if neither VISUAL nor EDITOR is defined.  See also the discussion of LESSEDIT under the secâАР
              tion on PROMPTS below.

       ! shell-command
              Invokes a shell to run the shell-command given.  A percent sign (%) in the command is replaced by the name of the current file.   A  pound
              sign  (#) is replaced by the name of the previously examined file.  "!!" repeats the last shell command.  "!" with no shell command simply
              invokes a shell.  On Unix systems, the shell is taken from the environment variable SHELL, or defaults to "sh".  On MS-DOS and  OS/2  sysâАР
              tems, the shell is the normal command processor.

       | <m> shell-command
              <m> represents any mark letter.  Pipes a section of the input file to the given shell command.  The section of the file to be piped is beâАР
              tween the position marked by the letter and the current screen.  The entire current screen is included, regardless of whether  the  marked
              position is before or after the current screen.  <m> may also be ^ or $ to indicate beginning or end of file respectively.  If <m> is . or
              newline, the current screen is piped.

       s filename
              Save the input to a file.  This only works if the input is a pipe, not an ordinary file.

OPTIONS

Command line options are described below. Most options may be changed while less is running, via the “-” command.

       Most options may be given in one of two forms: either a dash followed by a single letter, or two dashes followed by a long option name.   A  long
       option  name may be abbreviated as long as the abbreviation is unambiguous.  For example, --quit-at-eof may be abbreviated --quit, but not --qui,
       since both --quit-at-eof and --quiet begin with --qui.  Some long option names are in uppercase, such as --QUIT-AT-EOF, as distinct from  --quit-
       at-eof.   Such option names need only have their first letter capitalized; the remainder of the name may be in either case.  For example, --Quit-
       at-eof is equivalent to --QUIT-AT-EOF.

       Options are also taken from the environment variable "LESS".  For example, to avoid typing "less -options ..." each time  less  is  invoked,  you
       might tell csh:

       setenv LESS "-options"

       or if you use sh:

       LESS="-options"; export LESS

       On MS-DOS, you don't need the quotes, but you should replace any percent signs in the options string by double percent signs.

       The environment variable is parsed before the command line, so command line options override the LESS environment variable.  If an option appears
       in the LESS variable, it can be reset to its default value on the command line by beginning the command line option with "-+".

       Some options like -k or -D require a string to follow the option letter.  The string for that option is considered to end when a dollar sign  ($)
       is found.  For example, you can set two -D options on MS-DOS like this:

       LESS="Dn9.1$Ds4.1"

       If  the  --use-backslash  option appears earlier in the options, then a dollar sign or backslash may be included literally in an option string by
       preceding it with a backslash.  If the --use-backslash option is not in effect, then backslashes are not treated specially, and there is  no  way
       to include a dollar sign in the option string.

       -? or --help
              This  option displays a summary of the commands accepted by less (the same as the h command).  (Depending on how your shell interprets the
              question mark, it may be necessary to quote the question mark, thus: "-\?".)

       -a or --search-skip-screen
              By default, forward searches start at the top of the displayed screen and backwards searches start at the bottom of the  displayed  screen
              (except  for  repeated searches invoked by the n or N commands, which start after or before the "target" line respectively; see the -j opâАР
              tion for more about the target line).  The -a option causes forward searches to instead start at the bottom of  the  screen  and  backward
              searches to start at the top of the screen, thus skipping all lines displayed on the screen.

       -A or --SEARCH-SKIP-SCREEN
              Causes  all forward searches (not just non-repeated searches) to start just after the target line, and all backward searches to start just
              before the target line.  Thus, forward searches will skip part of the displayed screen (from the first line up to and including the target
              line).   Similarly backwards searches will skip the displayed screen from the last line up to and including the target line.  This was the
              default behavior in less versions prior to 441.

       -bn or --buffers=n
              Specifies the amount of buffer space less will use for each file, in units of kilobytes (1024 bytes).  By default 64 K of buffer space  is
              used  for  each  file  (unless  the  file is a pipe; see the -B option).  The -b option specifies instead that n kilobytes of buffer space
              should be used for each file.  If n is -1, buffer space is unlimited; that is, the entire file can be read into memory.

       -B or --auto-buffers
              By default, when data is read from a pipe, buffers are allocated automatically as needed.  If a large amount of  data  is  read  from  the
              pipe,  this can cause a large amount of memory to be allocated.  The -B option disables this automatic allocation of buffers for pipes, so
              that only 64 K (or the amount of space specified by the -b option) is used for the pipe.  Warning: use of -B can result in erroneous  disâАР
              play, since only the most recently viewed part of the piped data is kept in memory; any earlier data is lost.

       -c or --clear-screen
              Causes  full screen repaints to be painted from the top line down.  By default, full screen repaints are done by scrolling from the bottom
              of the screen.

       -C or --CLEAR-SCREEN
              Same as -c, for compatibility with older versions of less.

       -d or --dumb
              The -d option suppresses the error message normally displayed if the terminal is dumb; that is, lacks some important capability,  such  as
              the ability to clear the screen or scroll backward.  The -d option does not otherwise change the behavior of less on a dumb terminal.

       -Dxcolor or --color=xcolor
              [MS-DOS  only]  Sets  the  color  of the text displayed.  x is a single character which selects the type of text whose color is being set:
              n=normal, s=standout, d=bold, u=underlined, k=blink.  color is a pair of numbers separated by a period.   The  first  number  selects  the
              foreground  color  and  the  second selects the background color of the text.  A single number N is the same as N.M, where M is the normal
              background color.  The color may start or end with u to use underline (with the normal color, if by itself), if  the  system  supports  it
              (Windows only).  x may also be a to toggle strict ANSI sequence rendering (SGR mode).

       -e or --quit-at-eof
              Causes less to automatically exit the second time it reaches end-of-file.  By default, the only way to exit less is via the "q" command.

       -E or --QUIT-AT-EOF
              Causes less to automatically exit the first time it reaches end-of-file.

       -f or --force
              Forces non-regular files to be opened.  (A non-regular file is a directory or a device special file.)  Also suppresses the warning message
              when a binary file is opened.  By default, less will refuse to open non-regular files.  Note that some operating systems  will  not  allow
              directories to be read, even if -f is set.

       -F or --quit-if-one-screen
              Causes less to automatically exit if the entire file can be displayed on the first screen.

       -g or --hilite-search
              Normally,  less will highlight ALL strings which match the last search command.  The -g option changes this behavior to highlight only the
              particular string which was found by the last search command.  This can cause less to run somewhat faster than the default.

       -G or --HILITE-SEARCH
              The -G option suppresses all highlighting of strings found by search commands.

       -hn or --max-back-scroll=n
              Specifies a maximum number of lines to scroll backward.  If it is necessary to scroll backward more than n lines, the screen is  repainted
              in a forward direction instead.  (If the terminal does not have the ability to scroll backward, -h0 is implied.)

       -i or --ignore-case
              Causes  searches  to ignore case; that is, uppercase and lowercase are considered identical.  This option is ignored if any uppercase letâАР
              ters appear in the search pattern; in other words, if a pattern contains uppercase letters, then that search does not ignore case.

       -I or --IGNORE-CASE
              Like -i, but searches ignore case even if the pattern contains uppercase letters.

       -jn or --jump-target=n
              Specifies a line on the screen where the "target" line is to be positioned.  The target line is the  line  specified  by  any  command  to
              search  for  a  pattern, jump to a line number, jump to a file percentage or jump to a tag.  The screen line may be specified by a number:
              the top line on the screen is 1, the next is 2, and so on.  The number may be negative to specify a line relative to  the  bottom  of  the
              screen:  the bottom line on the screen is -1, the second to the bottom is -2, and so on.  Alternately, the screen line may be specified as
              a fraction of the height of the screen, starting with a decimal point: .5 is in the middle of the screen, .3 is three tenths down from the
              first  line, and so on.  If the line is specified as a fraction, the actual line number is recalculated if the terminal window is resized,
              so that the target line remains at the specified fraction of the screen height.  If any form of the -j option is  used,  repeated  forward
              searches (invoked with "n" or "N") begin at the line immediately after the target line, and repeated backward searches begin at the target
              line, unless changed by -a or -A.  For example, if "-j4" is used, the target line is the fourth line on the screen,  so  forward  searches
              begin  at  the  fifth line on the screen.  However nonrepeated searches (invoked with "/" or "?")  always begin at the start or end of the
              current screen respectively.

       -J or --status-column
              Displays a status column at the left edge of the screen.  The status column shows the lines that matched the current search, and any lines
              that are marked (via the m or M command).  The status column is also used if the -w or -W option is in effect.

       -kfilename or --lesskey-file=filename
              Causes  less  to  open  and  interpret  the  named  file  as a lesskey (1) file.  Multiple -k options may be specified.  If the LESSKEY or
              LESSKEY_SYSTEM environment variable is set, or if a lesskey file is found in a standard place (see KEY BINDINGS), it is  also  used  as  a
              lesskey file.

       -K or --quit-on-intr
              Causes  less  to  exit  immediately  (with  status 2) when an interrupt character (usually ^C) is typed.  Normally, an interrupt character
              causes less to stop whatever it is doing and return to its command prompt.  Note that use of this option makes it impossible to return  to
              the command prompt from the "F" command.

       -L or --no-lessopen
              Ignore the LESSOPEN environment variable (see the INPUT PREPROCESSOR section below).  This option can be set from within less, but it will
              apply only to files opened subsequently, not to the file which is currently open.

       -m or --long-prompt
              Causes less to prompt verbosely (like more), with the percent into the file.  By default, less prompts with a colon.

       -M or --LONG-PROMPT
              Causes less to prompt even more verbosely than more.

       -n or --line-numbers
              Suppresses line numbers.  The default (to use line numbers) may cause less to run more slowly in some cases, especially with a very  large
              input  file.  Suppressing line numbers with the -n option will avoid this problem.  Using line numbers means: the line number will be disâАР
              played in the verbose prompt and in the = command, and the v command will pass the current line number to the editor (see also the discusâАР
              sion of LESSEDIT in PROMPTS below).

       -N or --LINE-NUMBERS
              Causes a line number to be displayed at the beginning of each line in the display.

       -ofilename or --log-file=filename
              Causes  less  to copy its input to the named file as it is being viewed.  This applies only when the input file is a pipe, not an ordinary
              file.  If the file already exists, less will ask for confirmation before overwriting it.

       -Ofilename or --LOG-FILE=filename
              The -O option is like -o, but it will overwrite an existing file without asking for confirmation.

              If no log file has been specified, the -o and -O options can be used from within less to specify a log file.  Without a  file  name,  they
              will simply report the name of the log file.  The "s" command is equivalent to specifying -o from within less.

       -ppattern or --pattern=pattern
              The  -p  option on the command line is equivalent to specifying +/pattern; that is, it tells less to start at the first occurrence of patâАР
              tern in the file.

       -Pprompt or --prompt=prompt
              Provides a way to tailor the three prompt styles to your own preference.  This option would normally be put in the LESS environment  variâАР
              able, rather than being typed in with each less command.  Such an option must either be the last option in the LESS variable, or be termiâАР
              nated by a dollar sign.
               -Ps followed by a string changes the default (short) prompt to that string.
               -Pm changes the medium (-m) prompt.
               -PM changes the long (-M) prompt.
               -Ph changes the prompt for the help screen.
               -P= changes the message printed by the = command.
               -Pw changes the message printed while waiting for data (in the F command).

              All prompt strings consist of a sequence of letters and special escape sequences.  See the section on PROMPTS for more details.

       -q or --quiet or --silent
              Causes moderately "quiet" operation: the terminal bell is not rung if an attempt is made to scroll past the end of the file or before  the
              beginning  of  the file.  If the terminal has a "visual bell", it is used instead.  The bell will be rung on certain other errors, such as
              typing an invalid character.  The default is to ring the terminal bell in all such cases.

       -Q or --QUIET or --SILENT
              Causes totally "quiet" operation: the terminal bell is never rung.  If the terminal has a "visual bell", it is used in all cases where the
              terminal bell would have been rung.

       -r or --raw-control-chars
              Causes  "raw"  control  characters to be displayed.  The default is to display control characters using the caret notation; for example, a
              control-A (octal 001) is displayed as "^A".  Warning: when the -r option is used, less cannot keep track of the actual appearance  of  the
              screen (since this depends on how the screen responds to each type of control character).  Thus, various display problems may result, such
              as long lines being split in the wrong place.

       -R or --RAW-CONTROL-CHARS
              Like -r, but only ANSI "color" escape sequences are output in "raw" form.  Unlike -r, the screen appearance  is  maintained  correctly  in
              most cases.  ANSI "color" escape sequences are sequences of the form:

                   ESC [ ... m

              where  the  "..."  is zero or more color specification characters For the purpose of keeping track of screen appearance, ANSI color escape
              sequences are assumed to not move the cursor.  You can make less think that characters other than "m" can end ANSI color escape  sequences
              by  setting  the  environment variable LESSANSIENDCHARS to the list of characters which can end a color escape sequence.  And you can make
              less think that characters other than the standard ones may appear between the ESC and the m by setting the environment  variable  LESSANâАР
              SIMIDCHARS to the list of characters which can appear.

       -s or --squeeze-blank-lines
              Causes consecutive blank lines to be squeezed into a single blank line.  This is useful when viewing nroff output.

       -S or --chop-long-lines
              Causes  lines  longer  than the screen width to be chopped (truncated) rather than wrapped.  That is, the portion of a long line that does
              not fit in the screen width is not shown.  The default is to wrap long lines; that is, display the remainder on the next line.

       -ttag or --tag=tag
              The -t option, followed immediately by a TAG, will edit the file containing that tag.  For this to work, tag information  must  be  availâАР
              able;  for  example,  there may be a file in the current directory called "tags", which was previously built by ctags (1) or an equivalent
              command.  If the environment variable LESSGLOBALTAGS is set, it is taken to be the name of a command compatible with global (1), and  that
              command  is  executed  to  find  the tag.  (See http://www.gnu.org/software/global/global.html).  The -t option may also be specified from
              within less (using the - command) as a way of examining a new file.  The command ":t" is equivalent to specifying -t from within less.

       -Ttagsfile or --tag-file=tagsfile
              Specifies a tags file to be used instead of "tags".

       -u or --underline-special
              Causes backspaces and carriage returns to be treated as printable characters; that is, they are sent to the terminal when they  appear  in
              the input.

       -U or --UNDERLINE-SPECIAL
              Causes  backspaces,  tabs,  carriage returns and "formatting characters" (as defined by Unicode) to be treated as control characters; that
              is, they are handled as specified by the -r option.

              By default, if neither -u nor -U is given, backspaces which appear adjacent to an underscore character are treated specially:  the  underâАР
              lined text is displayed using the terminal's hardware underlining capability.  Also, backspaces which appear between two identical characâАР
              ters are treated specially: the overstruck text is printed using the  terminal's  hardware  boldface  capability.   Other  backspaces  are
              deleted,  along with the preceding character.  Carriage returns immediately followed by a newline are deleted.  Other carriage returns are
              handled as specified by the -r option.  Text which is overstruck or underlined can be searched for if neither -u nor -U is in effect.

       -V or --version
              Displays the version number of less.

       -w or --hilite-unread
              Temporarily highlights the first "new" line after a forward movement of a full page.  The first "new" line is the line immediately followâАР
              ing the line previously at the bottom of the screen.  Also highlights the target line after a g or p command.  The highlight is removed at
              the next command which causes movement.  The entire line is highlighted, unless the -J option is in effect, in which case only the  status
              column is highlighted.

       -W or --HILITE-UNREAD
              Like -w, but temporarily highlights the first new line after any forward movement command larger than one line.

       -xn,... or --tabs=n,...
              Sets  tab  stops.  If only one n is specified, tab stops are set at multiples of n.  If multiple values separated by commas are specified,
              tab stops are set at those positions, and then continue with the same spacing as the last two.  For example, -x9,17 will set tabs at posiâАР
              tions 9, 17, 25, 33, etc.  The default for n is 8.

       -X or --no-init
              Disables  sending  the termcap initialization and deinitialization strings to the terminal.  This is sometimes desirable if the deinitialâАР
              ization string does something unnecessary, like clearing the screen.

       -yn or --max-forw-scroll=n
              Specifies a maximum number of lines to scroll forward.  If it is necessary to scroll forward more than n lines, the  screen  is  repainted
              instead.   The  -c  or  -C  option  may be used to repaint from the top of the screen if desired.  By default, any forward movement causes
              scrolling.

       -zn or --window=n or -n
              Changes the default scrolling window size to n lines.  The default is one screenful.  The z and w commands can also be used to change  the
              window size.  The "z" may be omitted for compatibility with some versions of more.  If the number n is negative, it indicates n lines less
              than the current screen size.  For example, if the screen is 24 lines, -z-4 sets the scrolling window to 20 lines.  If the screen  is  reâАР
              sized to 40 lines, the scrolling window automatically changes to 36 lines.

       -"cc or --quotes=cc
              Changes the filename quoting character.  This may be necessary if you are trying to name a file which contains both spaces and quote charâАР
              acters.  Followed by a single character, this changes the quote character to that character.  Filenames containing a space should then  be
              surrounded by that character rather than by double quotes.  Followed by two characters, changes the open quote to the first character, and
              the close quote to the second character.  Filenames containing a space should then be preceded by the open quote character and followed by
              the  close  quote  character.   Note that even after the quote characters are changed, this option remains -" (a dash followed by a double
              quote).

       -~ or --tilde
              Normally lines after end of file are displayed as a single tilde (~).  This option causes lines after end of file to be displayed as blank
              lines.

       -# or --shift
              Specifies  the  default  number  of positions to scroll horizontally in the RIGHTARROW and LEFTARROW commands.  If the number specified is
              zero, it sets the default number of positions to one half of the screen width.  Alternately, the number may be specified as a fraction  of
              the width of the screen, starting with a decimal point: .5 is half of the screen width, .3 is three tenths of the screen width, and so on.
              If the number is specified as a fraction, the actual number of scroll positions is recalculated if the terminal window is resized, so that
              the actual scroll remains at the specified fraction of the screen width.

       --follow-name
              Normally,  if  the  input file is renamed while an F command is executing, less will continue to display the contents of the original file
              despite its name change.  If --follow-name is specified, during an F command less will periodically attempt to reopen the  file  by  name.
              If the reopen succeeds and the file is a different file from the original (which means that a new file has been created with the same name
              as the original (now renamed) file), less will display the contents of that new file.

       --mouse
              Enables mouse input: scrolling the mouse wheel down moves forward in the file, scrolling the mouse wheel up moves backwards in  the  file,
              and  clicking  the  mouse sets the "#" mark to the line where the mouse is clicked.  The number of lines to scroll when the wheel is moved
              can be set by the --wheel-lines option.  Mouse input works only on terminals which support X11 mouse reporting, and on the Windows version
              of less.

       --MOUSE
              Like --mouse, except the direction scrolled on mouse wheel movement is reversed.

       --no-keypad
              Disables  sending  the keypad initialization and deinitialization strings to the terminal.  This is sometimes useful if the keypad strings
              make the numeric keypad behave in an undesirable manner.

       --no-histdups
              This option changes the behavior so that if a search string or file name is typed in, and the same string is already in the history  list,
              the existing copy is removed from the history list before the new one is added.  Thus, a given string will appear only once in the history
              list.  Normally, a string may appear multiple times.

       --rscroll
              This option changes the character used to mark truncated lines.  It may begin with a two-character  attribute  indicator  like  LESSBINFMT
              does.  If there is no attribute indicator, standout is used.  If set to "-", truncated lines are not marked.

       --save-marks
              Save marks in the history file, so marks are retained across different invocations of less.

       --use-backslash
              This  option  changes  the interpretations of options which follow this one.  After the --use-backslash option, any backslash in an option
              string is removed and the following character is taken literally.  This allows a dollar sign to be included in option strings.

       --wheel-lines=n
              Set the number of lines to scroll when the mouse wheel is scrolled and the --mouse or --MOUSE option is in effect.  The default is 1 line.

       --     A command line argument of "--" marks the end of option arguments.  Any arguments following this are interpreted as filenames.   This  can
              be useful when viewing a file whose name begins with a "-" or "+".

       +      If  a  command  line  option begins with +, the remainder of that option is taken to be an initial command to less.  For example, +G tells
              less to start at the end of the file rather than the beginning, and +/xyz tells it to start at the first occurrence of "xyz" in the  file.
              As  a  special  case, +<number> acts like +<number>g; that is, it starts the display at the specified line number (however, see the caveat
              under the "g" command above).  If the option starts with ++, the initial command applies to every file being viewed, not  just  the  first
              one.  The + command described previously may also be used to set (or change) an initial command for every file.

LINE EDITING

       When entering command line at the bottom of the screen (for example, a filename for the :e command, or the pattern for a search command), certain
       keys can be used to manipulate the command line.  Most commands have an alternate form in [ brackets ] which can be used if a key does not  exist
       on  a  particular keyboard.  (Note that the forms beginning with ESC do not work in some MS-DOS and Windows systems because ESC is the line erase
       character.)  Any of these special keys may be entered literally by preceding it with the "literal" character, either ^V or ^A.  A  backslash  itâАР
       self may also be entered literally by entering two backslashes.

       LEFTARROW [ ESC-h ]
              Move the cursor one space to the left.

       RIGHTARROW [ ESC-l ]
              Move the cursor one space to the right.

       ^LEFTARROW [ ESC-b or ESC-LEFTARROW ]
              (That is, CONTROL and LEFTARROW simultaneously.)  Move the cursor one word to the left.

       ^RIGHTARROW [ ESC-w or ESC-RIGHTARROW ]
              (That is, CONTROL and RIGHTARROW simultaneously.)  Move the cursor one word to the right.

       HOME [ ESC-0 ]
              Move the cursor to the beginning of the line.

       END [ ESC-$ ]
              Move the cursor to the end of the line.

       BACKSPACE
              Delete the character to the left of the cursor, or cancel the command if the command line is empty.

       DELETE or [ ESC-x ]
              Delete the character under the cursor.

       ^BACKSPACE [ ESC-BACKSPACE ]
              (That is, CONTROL and BACKSPACE simultaneously.)  Delete the word to the left of the cursor.

       ^DELETE [ ESC-X or ESC-DELETE ]
              (That is, CONTROL and DELETE simultaneously.)  Delete the word under the cursor.

       UPARROW [ ESC-k ]
              Retrieve  the previous command line.  If you first enter some text and then press UPARROW, it will retrieve the previous command which beâАР
              gins with that text.

       DOWNARROW [ ESC-j ]
              Retrieve the next command line.  If you first enter some text and then press DOWNARROW, it will retrieve the  next  command  which  begins
              with that text.

       TAB    Complete  the  partial filename to the left of the cursor.  If it matches more than one filename, the first match is entered into the comâАР
              mand line.  Repeated TABs will cycle thru the other matching filenames.  If the completed filename is a directory, a "/"  is  appended  to
              the  filename.  (On MS-DOS systems, a "\" is appended.)  The environment variable LESSSEPARATOR can be used to specify a different characâАР
              ter to append to a directory name.

       BACKTAB [ ESC-TAB ]
              Like, TAB, but cycles in the reverse direction thru the matching filenames.

       ^L     Complete the partial filename to the left of the cursor.  If it matches more than one filename, all matches are entered into  the  command
              line (if they fit).

       ^U (Unix and OS/2) or ESC (MS-DOS)
              Delete  the entire command line, or cancel the command if the command line is empty.  If you have changed your line-kill character in Unix
              to something other than ^U, that character is used instead of ^U.

       ^G     Delete the entire command line and return to the main prompt.

KEY BINDINGS

       You may define your own less commands by using the program lesskey (1) to create a lesskey file.  This file specifies a set of command  keys  and
       an  action  associated  with each key.  You may also use lesskey to change the line-editing keys (see LINE EDITING), and to set environment variâАР
       ables.  If the environment variable LESSKEY is set, less uses that as the name of the lesskey file.  Otherwise, less looks in  a  standard  place
       for  the  lesskey  file:  On  Unix  systems, less looks for a lesskey file called "$HOME/.less".  On MS-DOS and Windows systems, less looks for a
       lesskey file called "$HOME/less", and if it is not found there, then looks for a lesskey file called "less" in any directory specified  in  the
       PATH  environment  variable.   On  OS/2  systems, less looks for a lesskey file called "$HOME/less.ini", and if it is not found, then looks for a
       lesskey file called "less.ini" in any directory specified in the INIT environment variable, and if it not found there, then looks for  a  lesskey
       file called "less.ini" in any directory specified in the PATH environment variable.  See the lesskey manual page for more details.

       A  system-wide  lesskey file may also be set up to provide key bindings.  If a key is defined in both a local lesskey file and in the system-wide
       file, key bindings in the local file take precedence over those in the system-wide file.  If the environment variable LESSKEY_SYSTEM is set, less
       uses  that as the name of the system-wide lesskey file.  Otherwise, less looks in a standard place for the system-wide lesskey file: On Unix sysâАР
       tems, the system-wide lesskey file is /usr/local/etc/sysless.  (However, if less was built with  a  different  sysconf  directory  than  /usr/loâАР
       cal/etc,  that  directory  is  where the sysless file is found.)  On MS-DOS and Windows systems, the system-wide lesskey file is c:\_sysless.  On
       OS/2 systems, the system-wide lesskey file is c:\sysless.ini.

INPUT PREPROCESSOR

       You may define an "input preprocessor" for less.  Before less opens a file, it first gives your input preprocessor a chance to modify the way the
       contents  of  the  file are displayed.  An input preprocessor is simply an executable program (or shell script), which writes the contents of the
       file to a different file, called the replacement file.  The contents of the replacement file are then displayed in place of the contents  of  the
       original  file.   However,  it will appear to the user as if the original file is opened; that is, less will display the original filename as the
       name of the current file.

       An input preprocessor receives one command line argument, the original filename, as entered by the user.  It should create the replacement  file,
       and  when finished, print the name of the replacement file to its standard output.  If the input preprocessor does not output a replacement fileâАР
       name, less uses the original file, as normal.  The input preprocessor is not called when viewing standard input.  To set up an  input  preprocesâАР
       sor, set the LESSOPEN environment variable to a command line which will invoke your input preprocessor.  This command line should include one ocâАР
       currence of the string "%s", which will be replaced by the filename when the input preprocessor command is invoked.

       When less closes a file opened in such a way, it will call another program, called the input postprocessor, which may perform any desired  clean-
       up  action  (such as deleting the replacement file created by LESSOPEN).  This program receives two command line arguments, the original filename
       as entered by the user, and the name of the replacement file.  To set up an input postprocessor, set the LESSCLOSE environment variable to a comâАР
       mand line which will invoke your input postprocessor.  It may include two occurrences of the string "%s"; the first is replaced with the original
       name of the file and the second with the name of the replacement file, which was output by LESSOPEN.

       For example, on many Unix systems, these two scripts will allow you to keep files in compressed format, but still let less view them directly:

       lessopen.sh:
            #! /bin/sh
            case "$1" in
            *.Z) TEMPFILE=$(mktemp)
                 uncompress -c $1  >$TEMPFILE  2>/dev/null
                 if [ -s $TEMPFILE ]; then
                      echo $TEMPFILE
                 else
                      rm -f $TEMPFILE
                 fi
                 ;;
            esac

       lessclose.sh:
            #! /bin/sh
            rm $2

       To use these scripts, put them both where they can be executed and set LESSOPEN="lessopen.sh %s", and LESSCLOSE="lessclose.sh %s %s".  More  comâАР
       plex LESSOPEN and LESSCLOSE scripts may be written to accept other types of compressed files, and so on.

       It is also possible to set up an input preprocessor to pipe the file data directly to less, rather than putting the data into a replacement file.
       This avoids the need to decompress the entire file before starting to view it.  An input preprocessor that works this  way  is  called  an  input
       pipe.   An  input  pipe,  instead of writing the name of a replacement file on its standard output, writes the entire contents of the replacement
       file on its standard output.  If the input pipe does not write any characters on its standard output, then there is no replacement file and  less
       uses  the  original  file,  as normal.  To use an input pipe, make the first character in the LESSOPEN environment variable a vertical bar (|) to
       signify that the input preprocessor is an input pipe.  As with non-pipe input preprocessors, the command string must contain  one  occurrence  of
       %s, which is replaced with the filename of the input file.

       For example, on many Unix systems, this script will work like the previous example scripts:

       lesspipe.sh:
            #! /bin/sh
            case "$1" in
            *.Z) uncompress -c $1  2>/dev/null
                 ;;
            *)   exit 1
                 ;;
            esac
            exit $?

       To use this script, put it where it can be executed and set LESSOPEN="|lesspipe.sh %s".

       Note  that  a  preprocessor  cannot  output an empty file, since that is interpreted as meaning there is no replacement, and the original file is
       used.  To avoid this, if LESSOPEN starts with two vertical bars, the exit status of the script becomes meaningful.  If the exit status  is  zero,
       the output is considered to be replacement text, even if it is empty.  If the exit status is nonzero, any output is ignored and the original file
       is used.  For compatibility with previous versions of less, if LESSOPEN starts with only one vertical bar, the exit status of the preprocessor is
       ignored.

       When  an  input  pipe is used, a LESSCLOSE postprocessor can be used, but it is usually not necessary since there is no replacement file to clean
       up.  In this case, the replacement file name passed to the LESSCLOSE postprocessor is "-".

       For compatibility with previous versions of less, the input preprocessor or pipe is not used if less is viewing standard input.  However, if  the
       first  character  of  LESSOPEN is a dash (-), the input preprocessor is used on standard input as well as other files.  In this case, the dash is
       not considered to be part of the preprocessor command.  If standard input is being viewed, the input preprocessor is passed a file name  consistâАР
       ing  of  a single dash.  Similarly, if the first two characters of LESSOPEN are vertical bar and dash (|-) or two vertical bars and a dash (||-),
       the input pipe is used on standard input as well as other files.  Again, in this case the dash is not considered to be part  of  the  input  pipe
       command.

NATIONAL CHARACTER SETS

There are three types of characters in the input file:

       normal characters
              can be displayed directly to the screen.

       control characters
              should not be displayed directly, but are expected to be found in ordinary text files (such as backspace and tab).

       binary characters
              should not be displayed directly and are not expected to be found in text files.

       A  "character  set"  is  simply  a description of which characters are to be considered normal, control, and binary.  The LESSCHARSET environment
       variable may be used to select a character set.  Possible values for LESSCHARSET are:

       ascii  BS, TAB, NL, CR, and formfeed are control characters, all chars with values between 32 and 126 are normal, and all others are binary.

       iso8859
              Selects an ISO 8859 character set.  This is the same as ASCII, except characters between 160 and 255 are treated as normal characters.

       latin1 Same as iso8859.

       latin9 Same as iso8859.

       dos    Selects a character set appropriate for MS-DOS.

       ebcdic Selects an EBCDIC character set.

       IBM-1047
              Selects an EBCDIC character set used by OS/390 Unix Services.  This is the EBCDIC analogue of latin1.  You get similar results by  setting
              either LESSCHARSET=IBM-1047 or LC_CTYPE=en_US in your environment.

       koi8-r Selects a Russian character set.

       next   Selects a character set appropriate for NeXT computers.

       utf-8  Selects  the UTF-8 encoding of the ISO 10646 character set.  UTF-8 is special in that it supports multi-byte characters in the input file.
              It is the only character set that supports multi-byte characters.

       windows
              Selects a character set appropriate for Microsoft Windows (cp 1251).

       In rare cases, it may be desired to tailor less to use a character set other than the ones definable by LESSCHARSET.  In this case, the  environâАР
       ment  variable LESSCHARDEF can be used to define a character set.  It should be set to a string where each character in the string represents one
       character in the character set.  The character "." is used for a normal character, "c" for control, and "b" for binary.  A decimal number may  be
       used for repetition.  For example, "bccc4b." would mean character 0 is binary, 1, 2 and 3 are control, 4, 5, 6 and 7 are binary, and 8 is normal.
       All characters after the last are taken to be the same as the last, so characters 9 through 255 would be normal.  (This is an example,  and  does
       not necessarily represent any real character set.)

       This table shows the value of LESSCHARDEF which is equivalent to each of the possible values for LESSCHARSET:

            ascii     8bcccbcc18b95.b
            dos       8bcccbcc12bc5b95.b.
            ebcdic    5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b
                      9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b.
            IBM-1047  4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc
                      191.b
            iso8859   8bcccbcc18b95.33b.
            koi8-r    8bcccbcc18b95.b128.
            latin1    8bcccbcc18b95.33b.
            next      8bcccbcc18b95.bb125.bb

       If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings "UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_CTYPE or LANG
       environment variables, then the default character set is utf-8.

       If that string is not found, but your system supports the setlocale interface, less will use setlocale to determine the character set.  setlocale
       is controlled by setting the LANG or LC_CTYPE environment variables.

       Finally, if the setlocale interface is also not available, the default character set is latin1.

       Control and binary characters are displayed in standout (reverse video).  Each such character is displayed in caret notation if possible (e.g. ^A
       for control-A).  Caret notation is used only if inverting the 0100 bit results in a normal printable character.  Otherwise, the character is disâАР
       played  as a hex number in angle brackets.  This format can be changed by setting the LESSBINFMT environment variable.  LESSBINFMT may begin with
       a "" and one character to select the display attribute: "k" is blinking, "d" is bold, "u" is underlined, "s" is standout, and "n"  is  norâАР
       mal.   If  LESSBINFMT  does  not  begin  with  a "", normal attribute is assumed.  The remainder of LESSBINFMT is a string which may include one
       printf-style escape sequence (a % followed by x, X, o, d, etc.).  For example, if LESSBINFMT is "u[%x]", binary characters are displayed in  unâАР
       derlined  hexadecimal  surrounded  by  brackets.   The default if no LESSBINFMT is specified is "*s<%02X>".  Warning: the result of expanding the
       character via LESSBINFMT must be less than 31 characters.

       When the character set is utf-8, the LESSUTFBINFMT environment variable acts similarly to LESSBINFMT but it applies to Unicode code  points  that
       were  successfully  decoded but are unsuitable for display (e.g., unassigned code points).  Its default value is "<U+%04lX>".  Note that LESSUTFâАР
       BINFMT and LESSBINFMT share their display attribute setting ("*x") so specifying one will affect both; LESSUTFBINFMT is read after LESSBINFMT  so
       its setting, if any, will have priority.  Problematic octets in a UTF-8 file (octets of a truncated sequence, octets of a complete but non-shortâАР
       est form sequence, illegal octets, and stray trailing octets) are displayed individually using LESSBINFMT so as to facilitate diagnostic  of  how
       the UTF-8 file is ill-formed.

PROMPTS

       The  -P option allows you to tailor the prompt to your preference.  The string given to the -P option replaces the specified prompt string.  CerâАР
       tain characters in the string are interpreted specially.  The prompt mechanism is rather complicated to provide  flexibility,  but  the  ordinary
       user need not understand the details of constructing personalized prompt strings.

       A percent sign followed by a single character is expanded according to what the following character is:

       %bX    Replaced  by  the byte offset into the current input file.  The b is followed by a single character (shown as X above) which specifies the
              line whose byte offset is to be used.  If the character is a "t", the byte offset of the top line in the display is used, an "m" means use
              the  middle  line,  a "b" means use the bottom line, a "B" means use the line just after the bottom line, and a "j" means use the "target"
              line, as specified by the -j option.

       %B     Replaced by the size of the current input file.

       %c     Replaced by the column number of the text appearing in the first column of the screen.

       %dX    Replaced by the page number of a line in the input file.  The line to be used is determined by the X, as with the %b option.

       %D     Replaced by the number of pages in the input file, or equivalently, the page number of the last line in the input file.

       %E     Replaced by the name of the editor (from the VISUAL environment variable, or the EDITOR environment variable if VISUAL  is  not  defined).
              See the discussion of the LESSEDIT feature below.

       %f     Replaced by the name of the current input file.

       %F     Replaced by the last component of the name of the current input file.

       %g     Replaced  by  the  shell-escaped name of the current input file.  This is useful when the expanded string will be used in a shell command,
              such as in LESSEDIT.

       %i     Replaced by the index of the current file in the list of input files.

       %lX    Replaced by the line number of a line in the input file.  The line to be used is determined by the X, as with the %b option.

       %L     Replaced by the line number of the last line in the input file.

       %m     Replaced by the total number of input files.

       %pX    Replaced by the percent into the current input file, based on byte offsets.  The line used is determined by the X as with the %b option.

       %PX    Replaced by the percent into the current input file, based on line numbers.  The line used is determined by the X as with the %b option.

       %s     Same as %B.

       %t     Causes any trailing spaces to be removed.  Usually used at the end of the string, but may appear anywhere.

       %T     Normally expands to the word "file".  However if viewing files via a tags list using the -t option, it expands to the word "tag".

       %x     Replaced by the name of the next input file in the list.

       If any item is unknown (for example, the file size if input is a pipe), a question mark is printed instead.

       The format of the prompt string can be changed depending on certain conditions.  A question mark followed by a  single  character  acts  like  an
       "IF":  depending  on the following character, a condition is evaluated.  If the condition is true, any characters following the question mark and
       condition character, up to a period, are included in the prompt.  If the condition is false, such characters are not included.  A colon appearing
       between  the question mark and the period can be used to establish an "ELSE": any characters between the colon and the period are included in the
       string if and only if the IF condition is false.  Condition characters (which follow a question mark) may be:

       ?a     True if any characters have been included in the prompt so far.

       ?bX    True if the byte offset of the specified line is known.

       ?B     True if the size of current input file is known.

       ?c     True if the text is horizontally shifted (%c is not zero).

       ?dX    True if the page number of the specified line is known.

       ?e     True if at end-of-file.

       ?f     True if there is an input filename (that is, if input is not a pipe).

       ?lX    True if the line number of the specified line is known.

       ?L     True if the line number of the last line in the file is known.

       ?m     True if there is more than one input file.

       ?n     True if this is the first prompt in a new input file.

       ?pX    True if the percent into the current input file, based on byte offsets, of the specified line is known.

       ?PX    True if the percent into the current input file, based on line numbers, of the specified line is known.

       ?s     Same as "?B".

       ?x     True if there is a next input file (that is, if the current input file is not the last one).

       Any characters other than the special ones (question mark, colon, period, percent, and backslash) become literally part of the  prompt.   Any  of
       the special characters may be included in the prompt literally by preceding it with a backslash.

       Some examples:

       ?f%f:Standard input.

       This prompt prints the filename, if known; otherwise the string "Standard input".

       ?f%f .?ltLine %lt:?pt%pt\%:?btByte %bt:-...

       This prompt would print the filename, if known.  The filename is followed by the line number, if known, otherwise the percent if known, otherwise
       the byte offset if known.  Otherwise, a dash is printed.  Notice how each question mark has a matching period, and how the % after the %pt is inâАР
       cluded literally by escaping it with a backslash.

       ?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\: %x..%t";

       This  prints  the  filename  if  this  is the first prompt in a file, followed by the "file N of N" message if there is more than one input file.
       Then, if we are at end-of-file, the string "(END)" is printed followed by the name of the next file, if there is one.  Finally, any trailing spaâАР
       ces  are  truncated.  This is the default prompt.  For reference, here are the defaults for the other two prompts (-m and -M respectively).  Each
       is broken into two lines here for readability only.

       ?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\: %x.:
            ?pB%pB\%:byte %bB?s/%s...%t

       ?f%f .?n?m(%T %i of %m) ..?ltlines %lt-%lb?L/%L. :
            byte %bB?s/%s. .?e(END) ?x- Next\: %x.:?pB%pB\%..%t

       And here is the default message produced by the = command:

       ?f%f .?m(%T %i of %m) .?ltlines %lt-%lb?L/%L. .
            byte %bB?s/%s. ?e(END) :?pB%pB\%..%t

       The prompt expansion features are also used for another purpose: if an environment variable LESSEDIT is defined, it is used as the command to  be
       executed  when  the v command is invoked.  The LESSEDIT string is expanded in the same way as the prompt strings.  The default value for LESSEDIT
       is:

            %E ?lm+%lm. %g

       Note that this expands to the editor name, followed by a + and the line number, followed by the shell-escaped file name.  If your editor does not
       accept the "+linenumber" syntax, or has other differences in invocation syntax, the LESSEDIT variable can be changed to modify this default.

SECURITY

When the environment variable LESSSECURE is set to 1, less runs in a “secure” mode. This means these features are disabled:

! the shell command

| the pipe command

:e the examine command.

v the editing command

s -o log files

-k use of lesskey files

-t use of tags files

metacharacters in filenames, such as *

filename completion (TAB, ^L)

Less can also be compiled to be permanently in “secure” mode.

COMPATIBILITY WITH MORE

       If the environment variable LESS_IS_MORE is set to 1, or if the program is invoked via a file link named "more", less behaves (mostly) in conforâАР
       mance with the POSIX "more" command specification.  In this mode, less behaves differently in these ways:

       The -e option works differently.  If the -e option is not set, less behaves as if the -e option were set.  If the -e option is set, less  behaves
       as if the -E option were set.

       The  -m option works differently.  If the -m option is not set, the medium prompt is used, and it is prefixed with the string "--More--".  If the
       -m option is set, the short prompt is used.

       The -n option acts like the -z option.  The normal behavior of the -n option is unavailable in this mode.

       The parameter to the -p option is taken to be a less command rather than a search pattern.

       The LESS environment variable is ignored, and the MORE environment variable is used in its place.

ENVIRONMENT VARIABLES

       Environment variables may be specified either in the system environment as usual, or in a lesskey (1) file.  If environment variables are defined
       in  more  than  one place, variables defined in a local lesskey file take precedence over variables defined in the system environment, which take
       precedence over variables defined in the system-wide lesskey file.

       COLUMNS
              Sets the number of columns on the screen.  Takes precedence over the number of columns specified by the TERM variable.  (But if you have a
              windowing  system  which  supports TIOCGWINSZ or WIOCGETD, the window system's idea of the screen size takes precedence over the LINES and
              COLUMNS environment variables.)

       EDITOR The name of the editor (used for the v command).

       HOME   Name of the user's home directory (used to find a lesskey file on Unix and OS/2 systems).

       HOMEDRIVE, HOMEPATH
              Concatenation of the HOMEDRIVE and HOMEPATH environment variables is the name of the user's home directory if the HOME variable is not set
              (only in the Windows version).

       INIT   Name of the user's init directory (used to find a lesskey file on OS/2 systems).

       LANG   Language for determining the character set.

       LC_CTYPE
              Language for determining the character set.

       LESS   Options which are passed to less automatically.

       LESSANSIENDCHARS
              Characters which may end an ANSI color escape sequence (default "m").

       LESSANSIMIDCHARS
              Characters   which   may   appear  between  the  ESC  character  and  the  end  character  in  an  ANSI  color  escape  sequence  (default
              "0123456789:;[?!"'#%()*+ ".

       LESSBINFMT
              Format for displaying non-printable, non-control characters.

       LESSCHARDEF
              Defines a character set.

       LESSCHARSET
              Selects a predefined character set.

       LESSCLOSE
              Command line to invoke the (optional) input-postprocessor.

       LESSECHO
              Name of the lessecho program (default "lessecho").  The lessecho program is needed to expand metacharacters, such as * and ?, in filenames
              on Unix systems.

       LESSEDIT
              Editor prototype string (used for the v command).  See discussion under PROMPTS.

       LESSGLOBALTAGS
              Name  of the command used by the -t option to find global tags.  Normally should be set to "global" if your system has the global (1) comâАР
              mand.  If not set, global tags are not used.

       LESSHISTFILE
              Name of the history file used to remember search commands and shell commands between invocations of less.  If set to "-" or "/dev/null", a
              history  file  is  not  used.   The  default  is  "$HOME/.lesshst"  on  Unix  systems,  "$HOME/_lesshst"  on  DOS  and Windows systems, or
              "$HOME/lesshst.ini" or "$INIT/lesshst.ini" on OS/2 systems.

       LESSHISTSIZE
              The maximum number of commands to save in the history file.  The default is 100.

       LESSKEY
              Name of the default lesskey(1) file.

       LESSKEY_SYSTEM
              Name of the default system-wide lesskey(1) file.

       LESSMETACHARS
              List of characters which are considered "metacharacters" by the shell.

       LESSMETAESCAPE
              Prefix which less will add before each metacharacter in a command sent to the shell.  If LESSMETAESCAPE is an empty string, commands  conâАР
              taining metacharacters will not be passed to the shell.

       LESSOPEN
              Command line to invoke the (optional) input-preprocessor.

       LESSSECURE
              Runs less in "secure" mode.  See discussion under SECURITY.

       LESSSEPARATOR
              String to be appended to a directory name in filename completion.

       LESSUTFBINFMT
              Format for displaying non-printable Unicode code points.

       LESS_IS_MORE
              Emulate the more (1) command.

       LINES  Sets  the  number  of  lines on the screen.  Takes precedence over the number of lines specified by the TERM variable.  (But if you have a
              windowing system which supports TIOCGWINSZ or WIOCGETD, the window system's idea of the screen size takes precedence over  the  LINES  and
              COLUMNS environment variables.)

       MORE   Options which are passed to less automatically when running in more compatible mode.

       PATH   User's search path (used to find a lesskey file on MS-DOS and OS/2 systems).

       SHELL  The shell used to execute the ! command, as well as to expand filenames.

       TERM   The type of terminal on which less is being run.

       VISUAL The name of the editor (used for the v command).

SEE ALSO

lesskey(1)

COPYRIGHT

Copyright (C) 1984-2019 Mark Nudelman

       less  is  part  of  the GNU project and is free software.  You can redistribute it and/or modify it under the terms of either (1) the GNU General
       Public License as published by the Free Software Foundation; or (2) the Less License.  See the file README in the less distribution for more  deâАР
       tails  regarding  redistribution.  You should have received a copy of the GNU General Public License along with the source for less; see the file
       COPYING.  If not, write to the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.  You should also have  received
       a copy of the Less License; see the file LICENSE.

       less is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
       FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

AUTHOR

       Mark Nudelman
       Report bugs at https://github.com/gwsw/less/issues.
       For more information, see the less homepage at
       http://www.greenwoodsoftware.com/less.

                                                                Version 551: 11 Jun 2019                                                         LESS(1)
Categories
Linux manpage

manpage mv

MV(1) User Commands MV(1)

NAME

mv – move (rename) files

SYNOPSIS

       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.

       --backup[=CONTROL]
              make a backup of each existing destination file

       -b     like --backup but does not accept an argument

       -f, --force
              do not prompt before overwriting

       -i, --interactive
              prompt before overwrite

       -n, --no-clobber
              do not overwrite an existing file

       If you specify more than one of -i, -f, -n, only the final one takes effect.

       --strip-trailing-slashes
              remove any trailing slashes from each SOURCE argument

       -S, --suffix=SUFFIX
              override the usual backup suffix

       -t, --target-directory=DIRECTORY
              move all SOURCE arguments into DIRECTORY

       -T, --no-target-directory
              treat DEST as a normal file

       -u, --update
              move only when the SOURCE file is newer than the destination file or when the destination file is missing

       -v, --verbose
              explain what is being done

       -Z, --context
              set SELinux security context of destination file to default type

       --help display this help and exit

       --version
              output version information and exit

       The  backup  suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.  The version control method may be selected via the --backup option
       or through the VERSION_CONTROL environment variable.  Here are the values:

       none, off
              never make backups (even if --backup is given)

       numbered, t
              make numbered backups

       existing, nil
              numbered if numbered backups exist, simple otherwise

       simple, never
              always make simple backups

AUTHOR

Written by Mike Parker, David MacKenzie, and Jim Meyering.

REPORTING BUGS

       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT

       Copyright © 2020 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.

SEE ALSO

rename(2)

       Full documentation <https://www.gnu.org/software/coreutils/mv>
       or available locally via: info '(coreutils) mv invocation'

GNU coreutils 8.32                                                   September 2020                                                                MV(1)
Categories
Linux manpage

manpage netstat

NETSTAT(8) Linux System Administrator’s Manual NETSTAT(8)

NAME

netstat – Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

SYNOPSIS

       netstat  [address_family_options]  [--tcp|-t]  [--udp|-u]  [--udplite|-U]  [--sctp|-S]  [--raw|-w]  [--l2cap|-2]  [--rfcomm|-f]  [--listening|-l]
       [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o]  [--proâАР
       gram|-p] [--verbose|-v] [--continuous|-c] [--wide|-W]

       netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--nuâАР
       meric-users] [--continuous|-c]

       netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts]  [--numeric-ports]
       [--numeric-users] [--continuous|-c]

       netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]

       netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]

       netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w]

       netstat {--version|-V}

       netstat {--help|-h}

       address_family_options:

       [-4|--inet]  [-6|--inet6]  [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,bluetooth, ... } ] [--unix|-x] [--inet|--ip|--tcpip] [--ax25] [--x25]
       [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]

NOTES

       This program is mostly obsolete.  Replacement for netstat is ss.  Replacement for netstat -r is ip route.  Replacement for netstat -i  is  ip  -s
       link.  Replacement for netstat -g is ip maddr.

DESCRIPTION

       Netstat  prints  information  about the Linux networking subsystem.  The type of information printed is controlled by the first argument, as folâАР
       lows:

(none)

       By default, netstat displays a list of open sockets.  If you don't specify any address families, then the active sockets of  all  configured  adâАР
       dress families will be printed.

–route, -r

Display the kernel routing tables. See the description in route(8) for details. netstat -r and route -e produce the same output.

–groups, -g

Display multicast group membership information for IPv4 and IPv6.

–interfaces, -i

Display a table of all network interfaces.

–masquerade, -M

Display a list of masqueraded connections.

–statistics, -s

Display summary statistics for each protocol.

OPTIONS

–verbose, -v

Tell the user what is going on by being verbose. Especially print some useful information about unconfigured address families.

–wide, -W

Do not truncate IP addresses by using output as wide as needed. This is optional for now to not break existing scripts.

–numeric, -n

Show numerical addresses instead of trying to determine symbolic host, port or user names.

–numeric-hosts

shows numerical host addresses but does not affect the resolution of port or user names.

–numeric-ports

shows numerical port numbers but does not affect the resolution of host or user names.

–numeric-users

shows numerical user IDs but does not affect the resolution of host or port names.

–protocol=family, -A

       Specifies  the address families (perhaps better described as low level protocols) for which connections are to be shown.  family is a comma (',')
       separated list of address family keywords like inet, inet6, unix, ipx, ax25, netrom, econet, ddp, and bluetooth.  This has the same effect as usâАР
       ing the --inet|-4, --inet6|-6, --unix|-x, --ipx, --ax25, --netrom, --ddp, and --bluetooth options.

       The address family inet (Iv4) includes raw, udp, udplite and tcp protocol sockets.

       The address family bluetooth (Iv4) includes l2cap and rfcomm protocol sockets.

-c, –continuous

This will cause netstat to print the selected information every second continuously.

-e, –extend

Display additional information. Use this option twice for maximum detail.

-o, –timers

Include information related to networking timers.

-p, –program

Show the PID and name of the program to which each socket belongs.

-l, –listening

Show only listening sockets. (These are omitted by default.)

-a, –all

Show both listening and non-listening sockets. With the –interfaces option, show interfaces that are not up

-F

Print routing information from the FIB. (This is the default.)

-C

Print routing information from the route cache.

OUTPUT

Active Internet connections (TCP, UDP, UDPLite, raw) Proto

The protocol (tcp, udp, udpl, raw) used by the socket.

Recv-Q

       Established: The count of bytes not copied by the user program connected to this socket.  Listening: Since Kernel 2.6.18 this column contains the
       current syn backlog.

Send-Q

       Established: The count of bytes not acknowledged by the remote host.  Listening: Since Kernel 2.6.18 this column contains the maximum size of the
       syn backlog.

Local Address

       Address  and  port  number  of the local end of the socket.  Unless the --numeric (-n) option is specified, the socket address is resolved to its
       canonical host name (FQDN), and the port number is translated into the corresponding service name.

Foreign Address

Address and port number of the remote end of the socket. Analogous to “Local Address”.

State

       The state of the socket. Since there are no states in raw mode and usually no states used in UDP and UDPLite, this column may be left blank. NorâАР
       mally this can be one of several values:

       ESTABLISHED
              The socket has an established connection.

       SYN_SENT
              The socket is actively attempting to establish a connection.

       SYN_RECV
              A connection request has been received from the network.

       FIN_WAIT1
              The socket is closed, and the connection is shutting down.

       FIN_WAIT2
              Connection is closed, and the socket is waiting for a shutdown from the remote end.

       TIME_WAIT
              The socket is waiting after close to handle packets still in the network.

       CLOSE  The socket is not being used.

       CLOSE_WAIT
              The remote end has shut down, waiting for the socket to close.

       LAST_ACK
              The remote end has shut down, and the socket is closed. Waiting for acknowledgement.

       LISTEN The  socket is listening for incoming connections.  Such sockets are not included in the output unless you specify the --listening (-l) or
              --all (-a) option.

       CLOSING
              Both sockets are shut down but we still don't have all our data sent.

       UNKNOWN
              The state of the socket is unknown.

User

The username or the user id (UID) of the owner of the socket.

PID/Program name

       Slash-separated pair of the process id (PID) and process name of the process that owns the socket.  --program causes this column to be  included.
       You  will  also need superuser privileges to see this information on sockets you don't own.  This identification information is not yet available
       for IPX sockets.

Timer

(this needs to be written)

Active UNIX domain Sockets
Proto

The protocol (usually unix) used by the socket.

RefCnt

The reference count (i.e. attached processes via this socket).

Flags

       The flags displayed is SO_ACCEPTON (displayed as ACC), SO_WAITDATA (W) or SO_NOSPACE (N).  SO_ACCECPTON is used on unconnected sockets  if  their
       corresponding processes are waiting for a connect request. The other flags are not of normal interest.

Type

There are several types of socket access:

       SOCK_DGRAM
              The socket is used in Datagram (connectionless) mode.

       SOCK_STREAM
              This is a stream (connection) socket.

       SOCK_RAW
              The socket is used as a raw socket.

       SOCK_RDM
              This one serves reliably-delivered messages.

       SOCK_SEQPACKET
              This is a sequential packet socket.

       SOCK_PACKET
              Raw interface access socket.

       UNKNOWN
              Who ever knows what the future will bring us - just fill in here :-)

State

This field will contain one of the following Keywords:

FREE The socket is not allocated

       LISTENING
              The  socket  is  listening  for a connection request.  Such sockets are only included in the output if you specify the --listening (-l) or
              --all (-a) option.

       CONNECTING
              The socket is about to establish a connection.

       CONNECTED
              The socket is connected.

       DISCONNECTING
              The socket is disconnecting.

       (empty)
              The socket is not connected to another one.

       UNKNOWN
              This state should never happen.

PID/Program name

       Process ID (PID) and process name of the process that has the socket open.  More info available in Active Internet  connections  section  written
       above.

Path

This is the path name as which the corresponding processes attached to the socket.

Active IPX sockets

(this needs to be done by somebody who knows it)

Active NET/ROM sockets

(this needs to be done by somebody who knows it)

Active AX.25 sockets

(this needs to be done by somebody who knows it)

FILES

/etc/services — The services translation file

/proc — Mount point for the proc filesystem, which gives access to kernel status information via the following files.

/proc/net/dev — device information

/proc/net/raw — raw socket information

/proc/net/tcp — TCP socket information

/proc/net/udp — UDP socket information

/proc/net/udplite — UDPLite socket information

/proc/net/igmp — IGMP multicast information

/proc/net/unix — Unix domain socket information

/proc/net/ipx — IPX socket information

/proc/net/ax25 — AX25 socket information

/proc/net/appletalk — DDP (appletalk) socket information

/proc/net/nr — NET/ROM socket information

/proc/net/route — IP routing information

/proc/net/ax25_route — AX25 routing information

/proc/net/ipx_route — IPX routing information

/proc/net/nr_nodes — NET/ROM nodelist

/proc/net/nr_neigh — NET/ROM neighbours

/proc/net/ip_masquerade — masqueraded connections

/sys/kernel/debug/bluetooth/l2cap — Bluetooth L2CAP information

/sys/kernel/debug/bluetooth/rfcomm — Bluetooth serial connections

/proc/net/snmp — statistics

SEE ALSO

route(8), ifconfig(8), iptables(8), proc(5) ss(8) ip(8)

BUGS

Occasionally strange information may appear if a socket changes as it is viewed. This is unlikely to occur.

AUTHORS

       The  netstat user interface was written by Fred Baumgarten <dc6iq@insu1.etec.uni-karlsruhe.de>, the man page basically by Matt Welsh <mdw@tc.corâАР
       nell.edu>. It was updated by Alan Cox <Alan.Cox@linux.org>, updated again by Tuan Hoang <tqhoang@bigfoot.com>. The man page and the  command  inâАР
       cluded  in  the  net-tools  package  is  totally  rewritten  by  Bernd  Eckenfels  <ecki@linux.de>.   UDPLite  options  were added by Brian Micek
       <bmicek@gmail.com>

net-tools                                                              2014-10-07                                                             NETSTAT(8)
Categories
Linux manpage

manpage ps

PS(1) User Commands PS(1)

NAME

ps – report a snapshot of the current processes.

SYNOPSIS

ps [options]

DESCRIPTION

       ps displays information about a selection of the active processes.  If you want a repetitive update of the selection and the displayed
       information, use top instead.

       This version of ps accepts several kinds of options:

       1   UNIX options, which may be grouped and must be preceded by a dash.
       2   BSD options, which may be grouped and must not be used with a dash.
       3   GNU long options, which are preceded by two dashes.

       Options of different types may be freely mixed, but conflicts can appear.  There are some synonymous options, which are functionally identical,
       due to the many standards and ps implementations that this ps is compatible with.

       Note that ps -aux is distinct from ps aux.  The POSIX and UNIX standards require that ps -aux print all processes owned by a user named x, as
       well as printing all processes that would be selected by the -a option.  If the user named x does not exist, this ps may interpret the command as
       ps aux instead and print a warning.  This behavior is intended to aid in transitioning old scripts and habits.  It is fragile, subject to change,
       and thus should not be relied upon.

       By default, ps selects all processes with the same effective user ID (euid=EUID) as the current user and associated with the same terminal as the
       invoker.  It displays the process ID (pid=PID), the terminal associated with the process (tname=TTY), the cumulated CPU time in [DD-]hh:mm:ss
       format (time=TIME), and the executable name (ucmd=CMD).  Output is unsorted by default.

       The use of BSD-style options will add process state (stat=STAT) to the default display and show the command args (args=COMMAND) instead of the
       executable name.  You can override this with the PS_FORMAT environment variable.  The use of BSD-style options will also change the process
       selection to include processes on other terminals (TTYs) that are owned by you; alternately, this may be described as setting the selection to be
       the set of all processes filtered to exclude processes owned by other users or not on a terminal.  These effects are not considered when options
       are described as being "identical" below, so -M will be considered identical to Z and so on.

       Except as described below, process selection options are additive.  The default selection is discarded, and then the selected processes are added
       to the set of processes to be displayed.  A process will thus be shown if it meets any of the given selection criteria.

EXAMPLES

       To see every process on the system using standard syntax:
          ps -e
          ps -ef
          ps -eF
          ps -ely

       To see every process on the system using BSD syntax:
          ps ax
          ps axu

       To print a process tree:
          ps -ejH
          ps axjf

       To get info about threads:
          ps -eLf
          ps axms

       To get security info:
          ps -eo euser,ruser,suser,fuser,f,comm,label
          ps axZ
          ps -eM

       To see every process running as root (real & effective ID) in user format:
          ps -U root -u root u

       To see every process with a user-defined format:
          ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
          ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
          ps -Ao pid,tt,user,fname,tmout,f,wchan

       Print only the process IDs of syslogd:
          ps -C syslogd -o pid=

       Print only the name of PID 42:
          ps -q 42 -o comm=

SIMPLE PROCESS SELECTION

       a      Lift the BSD-style "only yourself" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options
              are used or when the ps personality setting is BSD-like.  The set of processes selected in this manner is in addition to the set of
              processes selected by other means.  An alternate description is that this option causes ps to list all processes with a terminal (tty), or
              to list all processes when used together with the x option.

       -A     Select all processes.  Identical to -e.

       -a     Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal.

       -d     Select all processes except session leaders.

       --deselect
              Select all processes except those that fulfill the specified conditions (negates the selection).  Identical to -N.

       -e     Select all processes.  Identical to -A.

       g      Really all, even session leaders.  This flag is obsolete and may be discontinued in a future release.  It is normally implied by the a
              flag, and is only useful when operating in the sunos4 personality.

       -N     Select all processes except those that fulfill the specified conditions (negates the selection).  Identical to --deselect.

       T      Select all processes associated with this terminal.  Identical to the t option without any argument.

       r      Restrict the selection to only running processes.

       x      Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options
              are used or when the ps personality setting is BSD-like.  The set of processes selected in this manner is in addition to the set of
              processes selected by other means.  An alternate description is that this option causes ps to list all processes owned by you (same EUID
              as ps), or to list all processes when used together with the a option.

PROCESS SELECTION BY LIST

       These options accept a single argument in the form of a blank-separated or comma-separated list.  They can be used multiple times.  For example:
       ps -p "1 2" -p 3,4

       -123   Identical to --pid 123.

       123    Identical to --pid 123.

       -C cmdlist
              Select by command name.  This selects the processes whose executable name is given in cmdlist.  NOTE: The command name is not the same as
              the command line. Previous versions of procps and the kernel truncated this command name to 15 characters. This limitation is no longer
              present in both. If you depended on matching only 15 characters, you may no longer get a match.

       -G grplist
              Select by real group ID (RGID) or name.  This selects the processes whose real group name or ID is in the grplist list.  The real group ID
              identifies the group of the user who created the process, see getgid(2).

       -g grplist
              Select by session OR by effective group name.  Selection by session is specified by many standards, but selection by effective group is
              the logical behavior that several other operating systems use.  This ps will select by session when the list is completely numeric (as
              sessions are).  Group ID numbers will work only when some group names are also specified.  See the -s and --group options.

       --Group grplist
              Select by real group ID (RGID) or name.  Identical to -G.

       --group grplist
              Select by effective group ID (EGID) or name.  This selects the processes whose effective group name or ID is in grplist.  The effective
              group ID describes the group whose file access permissions are used by the process (see getegid(2)).  The -g option is often an
              alternative to --group.

       p pidlist
              Select by process ID.  Identical to -p and --pid.

       -p pidlist
              Select by PID.  This selects the processes whose process ID numbers appear in pidlist.  Identical to p and --pid.

       --pid pidlist
              Select by process ID.  Identical to -p and p.

       --ppid pidlist
              Select by parent process ID.  This selects the processes with a parent process ID in pidlist.  That is, it selects processes that are
              children of those listed in pidlist.

       q pidlist
              Select by process ID (quick mode).  Identical to -q and --quick-pid.

       -q pidlist
              Select by PID (quick mode).  This selects the processes whose process ID numbers appear in pidlist.  With this option ps reads the
              necessary info only for the pids listed in the pidlist and doesn't apply additional filtering rules.  The order of pids is unsorted and
              preserved.  No additional selection options, sorting and forest type listings are allowed in this mode.  Identical to q and --quick-pid.

       --quick-pid pidlist
              Select by process ID (quick mode).  Identical to -q and q.

       -s sesslist
              Select by session ID.  This selects the processes with a session ID specified in sesslist.

       --sid sesslist
              Select by session ID.  Identical to -s.

       t ttylist
              Select by tty.  Nearly identical to -t and --tty, but can also be used with an empty ttylist to indicate the terminal associated with ps.
              Using the T option is considered cleaner than using t with an empty ttylist.

       -t ttylist
              Select by tty.  This selects the processes associated with the terminals given in ttylist.  Terminals (ttys, or screens for text output)
              can be specified in several forms: /dev/ttyS1, ttyS1, S1.  A plain "-" may be used to select processes not attached to any terminal.

       --tty ttylist
              Select by terminal.  Identical to -t and t.

       U userlist
              Select by effective user ID (EUID) or name.  This selects the processes whose effective user name or ID is in userlist.  The effective
              user ID describes the user whose file access permissions are used by the process (see geteuid(2)).  Identical to -u and --user.

       -U userlist
              Select by real user ID (RUID) or name.  It selects the processes whose real user name or ID is in the userlist list.  The real user ID
              identifies the user who created the process, see getuid(2).

       -u userlist
              Select by effective user ID (EUID) or name.  This selects the processes whose effective user name or ID is in userlist.

              The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)).  Identical to U and
              --user.

       --User userlist
              Select by real user ID (RUID) or name.  Identical to -U.

       --user userlist
              Select by effective user ID (EUID) or name.  Identical to -u and U.

OUTPUT FORMAT CONTROL

These options are used to choose the information displayed by ps. The output may differ by personality.

-c Show different scheduler information for the -l option.

       --context
              Display security context format (for SELinux).

       -f     Do full-format listing.  This option can be combined with many other UNIX-style options to add additional columns.  It also causes the
              command arguments to be printed.  When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added.  See the c
              option, the format keyword args, and the format keyword comm.

       -F     Extra full format.  See the -f option, which -F implies.

       --format format
              user-defined format.  Identical to -o and o.

       j      BSD job control format.

       -j     Jobs format.

       l      Display BSD long format.

       -l     Long format.  The -y option is often useful with this.

       -M     Add a column of security data.  Identical to Z (for SELinux).

       O format
              is preloaded o (overloaded).  The BSD O option can act like -O (user-defined output format with some common fields predefined) or can be
              used to specify sort order.  Heuristics are used to determine the behavior of this option.  To ensure that the desired behavior is
              obtained (sorting or formatting), specify the option in some other way (e.g.  with -O or --sort).  When used as a formatting option, it is
              identical to -O, with the BSD personality.

       -O format
              Like -o, but preloaded with some default columns.  Identical to -o pid,format,state,tname,time,command or -o pid,format,tname,time,cmd,
              see -o below.

       o format
              Specify user-defined format.  Identical to -o and --format.

       -o format
              User-defined format.  format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify
              individual output columns.  The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below.  Headers may be renamed
              (ps -o pid,ruser=RealUser -o comm=Command) as desired.  If all column headers are empty (ps -o pid= -o comm=) then the header line will
              not be output.  Column width will increase as needed for wide headers; this may be used to widen up columns such as WCHAN (ps -o pid,
              wchan=WIDE-WCHAN-COLUMN -o comm).  Explicit width control (ps opid,wchan:42,cmd) is offered too.  The behavior of ps -o pid=X,comm=Y
              varies with personality; output may be one column named "X,comm=Y" or two columns named "X" and "Y".  Use multiple -o options when in
              doubt.  Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose
              the default UNIX or BSD columns.

       s      Display signal format.

       u      Display user-oriented format.

       v      Display virtual memory format.

       X      Register format.

       -y     Do not show flags; show rss in place of addr.  This option can only be used with -l.

       Z      Add a column of security data.  Identical to -M (for SELinux).

OUTPUT MODIFIERS

       c      Show the true command name.  This is derived from the name of the executable file, rather than from the argv value.  Command arguments and
              any modifications to them are thus not shown.  This option effectively turns the args format keyword into the comm format keyword; it is
              useful with the -f format option and with the various BSD-style format options, which all normally display the command arguments.  See the
              -f option, the format keyword args, and the format keyword comm.

       --cols n
              Set screen width.

       --columns n
              Set screen width.

       --cumulative
              Include some dead child process data (as a sum with the parent).

       e      Show the environment after the command.

       f      ASCII art process hierarchy (forest).

       --forest
              ASCII art process tree.

       h      No header.  (or, one header per screen in the BSD personality).  The h option is problematic.  Standard BSD ps uses this option to print a
              header on each page of output, but older Linux ps uses this option to totally disable the header.  This version of ps follows the Linux
              usage of not printing the header unless the BSD personality has been selected, in which case it prints a header on each page of output.
              Regardless of the current personality, you can use the long options --headers and --no-headers to enable printing headers each page or
              disable headers entirely, respectively.

       -H     Show process hierarchy (forest).

       --headers
              Repeat header lines, one per page of output.

       k spec Specify sorting order.  Sorting syntax is [+|-]key[,[+|-]key[,...]].  Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS
              section.  The "+" is optional since default direction is increasing numerical or lexicographic order.  Identical to --sort.

                      Examples:
                      ps jaxkuid,-ppid,+pid
                      ps axk comm o comm,args
                      ps kstart_time -ef

       --lines n
              Set screen height.

       n      Numeric output for WCHAN and USER (including all types of UID and GID).

       --no-headers
              Print no header line at all.  --no-heading is an alias for this option.

       O order
              Sorting order (overloaded).  The BSD O option can act like -O (user-defined output format with some common fields predefined) or can be
              used to specify sort order.  Heuristics are used to determine the behavior of this option.  To ensure that the desired behavior is
              obtained (sorting or formatting), specify the option in some other way (e.g.  with -O or --sort).

              For sorting, obsolete BSD O option syntax is O[+|-]k1[,[+|-]k2[,...]].  It orders the processes listing according to the multilevel sort
              specified by the sequence of one-letter short keys k1,k2, ... described in the OBSOLETE SORT KEYS section below.  The "+" is currently
              optional, merely re-iterating the default direction on a key, but may help to distinguish an O sort from an O format.  The "-" reverses
              direction only on the key it precedes.

       --rows n
              Set screen height.

       S      Sum up some information, such as CPU usage, from dead child processes into their parent.  This is useful for examining a system where a
              parent process repeatedly forks off short-lived children to do work.

       --sort spec
              Specify sorting order.  Sorting syntax is [+|-]key[,[+|-]key[,...]].  Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS
              section.  The "+" is optional since default direction is increasing numerical or lexicographic order.  Identical to k.  For example: ps
              jax --sort=uid,-ppid,+pid

       w      Wide output.  Use this option twice for unlimited width.

       -w     Wide output.  Use this option twice for unlimited width.

       --width n
              Set screen width.

THREAD DISPLAY

H Show threads as if they were processes.

-L Show threads, possibly with LWP and NLWP columns.

m Show threads after processes.

-m Show threads after processes.

-T Show threads, possibly with SPID column.

OTHER INFORMATION

       --help section
              Print a help message.  The section argument can be one of simple, list, output, threads, misc, or all.  The argument can be shortened to
              one of the underlined letters as in: s|l|o|t|m|a.

       --info Print debugging info.

       L      List all format specifiers.

       V      Print the procps-ng version.

       -V     Print the procps-ng version.

       --version
              Print the procps-ng version.

NOTES

       This ps works by reading the virtual files in /proc.  This ps does not need to be setuid kmem or have any privileges to run.  Do not give this ps
       any special permissions.

       CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process.  This is not ideal, and it does
       not conform to the standards that ps otherwise conforms to.  CPU usage is unlikely to add up to exactly 100%.

       The SIZE and RSS fields don't count some parts of a process including the page tables, kernel stack, struct thread_info, and struct task_struct.
       This is usually at least 20 KiB of memory that is always resident.  SIZE is the virtual size of the process (code+data+stack).

       Processes marked <defunct> are dead processes (so-called "zombies") that remain because their parent has not destroyed them properly.  These
       processes will be destroyed by init(8) if the parent process exits.

       If the length of the username is greater than the length of the display column, the username will be truncated.  See the -o and -O formatting
       options to customize length.

       Commands options such as ps -aux are not recommended as it is a confusion of two different standards.  According to the POSIX and UNIX standards,
       the above command asks to display all processes with a TTY (generally the commands users are running) plus all processes owned by a user named x.
       If that user doesn't exist, then ps will assume you really meant ps aux.

PROCESS FLAGS

The sum of these values is displayed in the “F” column, which is provided by the flags output specifier:

               1    forked but didn't exec
               4    used super-user privileges

PROCESS STATE CODES

       Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a
       process:

               D    uninterruptible sleep (usually IO)
               I    Idle kernel thread
               R    running or runnable (on run queue)
               S    interruptible sleep (waiting for an event to complete)
               T    stopped by job control signal
               t    stopped by debugger during the tracing
               W    paging (not valid since the 2.6.xx kernel)
               X    dead (should never be seen)
               Z    defunct ("zombie") process, terminated but not reaped by its parent

       For BSD formats and when the stat keyword is used, additional characters may be displayed:

               <    high-priority (not nice to other users)
               N    low-priority (nice to other users)
               L    has pages locked into memory (for real-time and custom IO)
               s    is a session leader
               l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
               +    is in the foreground process group

OBSOLETE SORT KEYS

       These keys are used by the BSD O option (when it is used for sorting).  The GNU --sort option doesn't use these keys, but the specifiers
       described below in the STANDARD FORMAT SPECIFIERS section.  Note that the values used in sorting are the internal values ps uses and not the
       "cooked" values used in some of the output format fields (e.g.  sorting on tty will sort into device number, not according to the terminal name
       displayed).  Pipe ps output into the sort(1) command if you want to sort the cooked values.

       KEY   LONG         DESCRIPTION
       c     cmd          simple name of executable
       C     pcpu         cpu utilization
       f     flags        flags as in long format F field
       g     pgrp         process group ID
       G     tpgid        controlling tty process group ID
       j     cutime       cumulative user time
       J     cstime       cumulative system time
       k     utime        user time
       m     min_flt      number of minor page faults
       M     maj_flt      number of major page faults
       n     cmin_flt     cumulative minor page faults
       N     cmaj_flt     cumulative major page faults
       o     session      session ID
       p     pid          process ID
       P     ppid         parent process ID
       r     rss          resident set size
       R     resident     resident pages
       s     size         memory size in kilobytes
       S     share        amount of shared pages
       t     tty          the device number of the controlling tty
       T     start_time   time process was started
       U     uid          user ID number
       u     user         user name
       v     vsize        total VM size in KiB
       y     priority     kernel scheduling priority

AIX FORMAT DESCRIPTORS

       This ps supports AIX format descriptors, which work somewhat like the formatting codes of printf(1) and printf(3).  For example, the normal
       default output can be produced with this: ps -eo "%p %y %x %c".  The NORMAL codes are described in the next section.

       CODE   NORMAL   HEADER
       %C     pcpu     %CPU
       %G     group    GROUP
       %P     ppid     PPID
       %U     user     USER
       %a     args     COMMAND
       %c     comm     COMMAND
       %g     rgroup   RGROUP
       %n     nice     NI
       %p     pid      PID
       %r     pgid     PGID
       %t     etime    ELAPSED
       %u     ruser    RUSER
       %x     time     TIME
       %y     tty      TTY
       %z     vsz      VSZ

STANDARD FORMAT SPECIFIERS

       Here are the different keywords that may be used to control the output format (e.g., with option -o) or to sort the selected processes with the
       GNU-style --sort option.

       For example: ps -eo pid,user,args --sort user

       This version of ps tries to recognize most of the keywords used in other implementations of ps.

       The following user-defined format specifiers may contain spaces: args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart, start.

       Some keywords may not be available for sorting.

       CODE        HEADER    DESCRIPTION

       %cpu        %CPU      cpu utilization of the process in "##.#" format.  Currently, it is the CPU time used divided by the time the process has
                             been running (cputime/realtime ratio), expressed as a percentage.  It will not add up to 100% unless you are lucky.  (alias
                             pcpu).

       %mem        %MEM      ratio of the process's resident set size  to the physical memory on the machine, expressed as a percentage.  (alias pmem).

       args        COMMAND   command with all its arguments as a string.  Modifications to the arguments may be shown.  The output in this column may
                             contain spaces.  A process marked <defunct> is partly dead, waiting to be fully destroyed by its parent.  Sometimes the
                             process args will be unavailable; when this happens, ps will instead print the executable name in brackets.  (alias cmd,
                             command).  See also the comm format keyword, the -f option, and the c option.
                             When specified last, this column will extend to the edge of the display.  If ps can not determine display width, as when
                             output is redirected (piped) into a file or another command, the output width is undefined (it may be 80, unlimited,
                             determined by the TERM variable, and so on).  The COLUMNS environment variable or --cols option may be used to exactly
                             determine the width in this case.  The w or -w option may be also be used to adjust width.

       blocked     BLOCKED   mask of the blocked signals, see signal(7).  According to the width of the field, a 32 or 64-bit mask in hexadecimal format
                             is displayed.  (alias sig_block, sigmask).

       bsdstart    START     time the command started.  If the process was started less than 24 hours ago, the output format is " HH:MM", else it is "
                             Mmm:SS" (where Mmm is the three letters of the month).  See also lstart, start, start_time, and stime.

       bsdtime     TIME      accumulated cpu time, user + system.  The display format is usually "MMM:SS", but can be shifted to the right if the
                             process used more than 999 minutes of cpu time.

       c           C         processor utilization.  Currently, this is the integer value of the percent usage over the lifetime of the process.  (see
                             %cpu).

       caught      CAUGHT    mask of the caught signals, see signal(7).  According to the width of the field, a 32 or 64 bits mask in hexadecimal format
                             is displayed.  (alias sig_catch, sigcatch).

       cgname      CGNAME    display name of control groups to which the process belongs.

       cgroup      CGROUP    display control groups to which the process belongs.

       class       CLS       scheduling class of the process.  (alias policy, cls).  Field's possible values are:

                                      -   not reported
                                      TS  SCHED_OTHER
                                      FF  SCHED_FIFO
                                      RR  SCHED_RR
                                      B   SCHED_BATCH
                                      ISO SCHED_ISO
                                      IDL SCHED_IDLE
                                      DLN SCHED_DEADLINE
                                      ?   unknown value

       cls         CLS       scheduling class of the process.  (alias policy, cls).  Field's possible values are:

                                      -   not reported
                                      TS  SCHED_OTHER
                                      FF  SCHED_FIFO
                                      RR  SCHED_RR
                                      B   SCHED_BATCH
                                      ISO SCHED_ISO
                                      IDL SCHED_IDLE
                                      DLN SCHED_DEADLINE
                                      ?   unknown value

       cmd         CMD       see args.  (alias args, command).

       comm        COMMAND   command name (only the executable name).  Modifications to the command name will not be shown.  A process marked <defunct>
                             is partly dead, waiting to be fully destroyed by its parent.  The output in this column may contain spaces.  (alias ucmd,
                             ucomm).  See also the args format keyword, the -f option, and the c option.
                             When specified last, this column will extend to the edge of the display.  If ps can not determine display width, as when
                             output is redirected (piped) into a file or another command, the output width is undefined (it may be 80, unlimited,
                             determined by the TERM variable, and so on).  The COLUMNS environment variable or --cols option may be used to exactly
                             determine the width in this case.  The w or -w option may be also be used to adjust width.

       command     COMMAND   See args.  (alias args, command).

       cp          CP        per-mill (tenths of a percent) CPU usage.  (see %cpu).

       cputime     TIME      cumulative CPU time, "[DD-]hh:mm:ss" format.  (alias time).

       cputimes    TIME      cumulative CPU time in seconds (alias times).

       drs         DRS       data resident set size, the amount of physical memory devoted to other than executable code.

       egid        EGID      effective group ID number of the process as a decimal integer.  (alias gid).

       egroup      EGROUP    effective group ID of the process.  This will be the textual group ID, if it can be obtained and the field width permits,
                             or a decimal representation otherwise.  (alias group).

       eip         EIP       instruction pointer.

       esp         ESP       stack pointer.

       etime       ELAPSED   elapsed time since the process was started, in the form [[DD-]hh:]mm:ss.

       etimes      ELAPSED   elapsed time since the process was started, in seconds.

       euid        EUID      effective user ID (alias uid).

       euser       EUSER     effective user name.  This will be the textual user ID, if it can be obtained and the field width permits, or a decimal
                             representation otherwise.  The n option can be used to force the decimal representation.  (alias uname, user).

       exe         EXE       path to the executable. Useful if path cannot be printed via cmd, comm or args format options.

       f           F         flags associated with the process, see the PROCESS FLAGS section.  (alias flag, flags).

       fgid        FGID      filesystem access group ID.  (alias fsgid).

       fgroup      FGROUP    filesystem access group ID.  This will be the textual group ID, if it can be obtained and the field width permits, or a
                             decimal representation otherwise.  (alias fsgroup).

       flag        F         see f.  (alias f, flags).

       flags       F         see f.  (alias f, flag).

       fname       COMMAND   first 8 bytes of the base name of the process's executable file.  The output in this column may contain spaces.

       fuid        FUID      filesystem access user ID.  (alias fsuid).

       fuser       FUSER     filesystem access user ID.  This will be the textual user ID, if it can be obtained and the field width permits, or a
                             decimal representation otherwise.

       gid         GID       see egid.  (alias egid).

       group       GROUP     see egroup.  (alias egroup).

       ignored     IGNORED   mask of the ignored signals, see signal(7).  According to the width of the field, a 32 or 64 bits mask in hexadecimal
                             format is displayed.  (alias sig_ignore, sigignore).

       ipcns       IPCNS     Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       label       LABEL     security label, most commonly used for SELinux context data.  This is for the Mandatory Access Control ("MAC") found on
                             high-security systems.

       lstart      STARTED   time the command started.  See also bsdstart, start, start_time, and stime.

       lsession    SESSION   displays the login session identifier of a process, if systemd support has been included.

       luid        LUID      displays Login ID associated with a process.

       lwp         LWP       light weight process (thread) ID of the dispatchable entity (alias spid, tid).  See tid for additional information.

       lxc         LXC       The name of the lxc container within which a task is running.  If a process is not running inside a container, a dash ('-')
                             will be shown.

       machine     MACHINE   displays the machine name for processes assigned to VM or container, if systemd support has been included.

       maj_flt     MAJFLT    The number of major page faults that have occurred with this process.

       min_flt     MINFLT    The number of minor page faults that have occurred with this process.

       mntns       MNTNS     Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       netns       NETNS     Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       ni          NI        nice value.  This ranges from 19 (nicest) to -20 (not nice to others), see nice(1).  (alias nice).

       nice        NI        see ni.(alias ni).

       nlwp        NLWP      number of lwps (threads) in the process.  (alias thcount).

       numa        NUMA      The node associated with the most recently used processor.  A -1 means that NUMA information is unavailable.

       nwchan      WCHAN     address of the kernel function where the process is sleeping (use wchan if you want the kernel function name).  Running
                             tasks will display a dash ('-') in this column.

       ouid        OWNER     displays the Unix user identifier of the owner of the session of a process, if systemd support has been included.

       pcpu        %CPU      see %cpu.  (alias %cpu).

       pending     PENDING   mask of the pending signals.  See signal(7).  Signals pending on the process are distinct from signals pending on
                             individual threads.  Use the m option or the -m option to see both.  According to the width of the field, a 32 or 64 bits
                             mask in hexadecimal format is displayed.  (alias sig).

       pgid        PGID      process group ID or, equivalently, the process ID of the process group leader.  (alias pgrp).

       pgrp        PGRP      see pgid.  (alias pgid).

       pid         PID       a number representing the process ID (alias tgid).

       pidns       PIDNS     Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       pmem        %MEM      see %mem.  (alias %mem).

       policy      POL       scheduling class of the process.  (alias class, cls).  Possible values are:

                                      -   not reported
                                      TS  SCHED_OTHER
                                      FF  SCHED_FIFO
                                      RR  SCHED_RR
                                      B   SCHED_BATCH
                                      ISO SCHED_ISO
                                      IDL SCHED_IDLE
                                      DLN SCHED_DEADLINE
                                      ?   unknown value

       ppid        PPID      parent process ID.

       pri         PRI       priority of the process.  Higher number means lower priority.

       psr         PSR       processor that process is currently assigned to.

       rgid        RGID      real group ID.

       rgroup      RGROUP    real group name.  This will be the textual group ID, if it can be obtained and the field width permits, or a decimal
                             representation otherwise.

       rss         RSS       resident set size, the non-swapped physical memory that a task has used (in kilobytes).  (alias rssize, rsz).

       rssize      RSS       see rss.  (alias rss, rsz).

       rsz         RSZ       see rss.  (alias rss, rssize).

       rtprio      RTPRIO    realtime priority.

       ruid        RUID      real user ID.

       ruser       RUSER     real user ID.  This will be the textual user ID, if it can be obtained and the field width permits, or a decimal
                             representation otherwise.

       s           S         minimal state display (one character).  See section PROCESS STATE CODES for the different values.  See also stat if you
                             want additional information displayed.  (alias state).

       sched       SCH       scheduling policy of the process.  The policies SCHED_OTHER (SCHED_NORMAL), SCHED_FIFO, SCHED_RR, SCHED_BATCH, SCHED_ISO,
                             SCHED_IDLE and SCHED_DEADLINE are respectively displayed as 0, 1, 2, 3, 4, 5 and 6.

       seat        SEAT      displays the identifier associated with all hardware devices assigned to a specific workplace, if systemd support has been
                             included.

       sess        SESS      session ID or, equivalently, the process ID of the session leader.  (alias session, sid).

       sgi_p       P         processor that the process is currently executing on.  Displays "*" if the process is not currently running or runnable.

       sgid        SGID      saved group ID.  (alias svgid).

       sgroup      SGROUP    saved group name.  This will be the textual group ID, if it can be obtained and the field width permits, or a decimal
                             representation otherwise.

       sid         SID       see sess.  (alias sess, session).

       sig         PENDING   see pending.  (alias pending, sig_pend).

       sigcatch    CAUGHT    see caught.  (alias caught, sig_catch).

       sigignore   IGNORED   see ignored.  (alias ignored, sig_ignore).

       sigmask     BLOCKED   see blocked.  (alias blocked, sig_block).

       size        SIZE      approximate amount of swap space that would be required if the process were to dirty all writable pages and then be swapped
                             out.  This number is very rough!

       slice       SLICE     displays the slice unit which a process belongs to, if systemd support has been included.

       spid        SPID      see lwp.  (alias lwp, tid).

       stackp      STACKP    address of the bottom (start) of stack for the process.

       start       STARTED   time the command started.  If the process was started less than 24 hours ago, the output format is "HH:MM:SS", else it is
                             "  Mmm dd" (where Mmm is a three-letter month name).  See also lstart, bsdstart, start_time, and stime.

       start_time  START     starting time or date of the process.  Only the year will be displayed if the process was not started the same year ps was
                             invoked, or "MmmDD" if it was not started the same day, or "HH:MM" otherwise.  See also bsdstart, start, lstart, and stime.

       stat        STAT      multi-character process state.  See section PROCESS STATE CODES for the different values meaning.  See also s and state if
                             you just want the first character displayed.

       state       S         see s. (alias s).

       stime       STIME     see start_time. (alias start_time).

       suid        SUID      saved user ID.  (alias svuid).

       supgid      SUPGID    group ids of supplementary groups, if any.  See getgroups(2).

       supgrp      SUPGRP    group names of supplementary groups, if any.  See getgroups(2).

       suser       SUSER     saved user name.  This will be the textual user ID, if it can be obtained and the field width permits, or a decimal
                             representation otherwise.  (alias svuser).

       svgid       SVGID     see sgid.  (alias sgid).

       svuid       SVUID     see suid.  (alias suid).

       sz          SZ        size in physical pages of the core image of the process.  This includes text, data, and stack space.  Device mappings are
                             currently excluded; this is subject to change.  See vsz and rss.

       tgid        TGID      a number representing the thread group to which a task belongs (alias pid).  It is the process ID of the thread group
                             leader.

       thcount     THCNT     see nlwp.  (alias nlwp).  number of kernel threads owned by the process.

       tid         TID       the unique number representing a dispatchable entity (alias lwp, spid).  This value may also appear as: a process ID (pid);
                             a process group ID (pgrp); a session ID for the session leader (sid); a thread group ID for the thread group leader (tgid);
                             and a tty process group ID for the process group leader (tpgid).

       time        TIME      cumulative CPU time, "[DD-]HH:MM:SS" format.  (alias cputime).

       times       TIME      cumulative CPU time in seconds (alias cputimes).

       tname       TTY       controlling tty (terminal).  (alias tt, tty).

       tpgid       TPGID     ID of the foreground process group on the tty (terminal) that the process is connected to, or -1 if the process is not
                             connected to a tty.

       trs         TRS       text resident set size, the amount of physical memory devoted to executable code.

       tt          TT        controlling tty (terminal).  (alias tname, tty).

       tty         TT        controlling tty (terminal).  (alias tname, tt).

       ucmd        CMD       see comm.  (alias comm, ucomm).

       ucomm       COMMAND   see comm.  (alias comm, ucmd).

       uid         UID       see euid.  (alias euid).

       uname       USER      see euser.  (alias euser, user).

       unit        UNIT      displays unit which a process belongs to, if systemd support has been included.

       user        USER      see euser.  (alias euser, uname).

       userns      USERNS    Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       utsns       UTSNS     Unique inode number describing the namespace the process belongs to.  See namespaces(7).

       uunit       UUNIT     displays user unit which a process belongs to, if systemd support has been included.

       vsize       VSZ       see vsz.  (alias vsz).

       vsz         VSZ       virtual memory size of the process in KiB (1024-byte units).  Device mappings are currently excluded; this is subject to
                             change.  (alias vsize).

       wchan       WCHAN     name of the kernel function in which the process is sleeping, a "-" if the process is running, or a "*" if the process is
                             multi-threaded and ps is not displaying threads.

ENVIRONMENT VARIABLES

The following environment variables could affect ps:

       COLUMNS
          Override default display width.

       LINES
          Override default display height.

       PS_PERSONALITY
          Set to one of posix, old, linux, bsd, sun, digital... (see section PERSONALITY below).

       CMD_ENV
          Set to one of posix, old, linux, bsd, sun, digital... (see section PERSONALITY below).

       I_WANTABROKEN_PS
          Force obsolete command line interpretation.

       LC_TIME
          Date format.

       PS_COLORS
          Not currently supported.

       PS_FORMAT
          Default output format override.  You may set this to a format string of the type used for the -o option.  The DefSysV and DefBSD values are
          particularly useful.

       POSIXLY_CORRECT
          Don't find excuses to ignore bad "features".

       POSIX2
          When set to "on", acts as POSIXLY_CORRECT.

       UNIX95
          Don't find excuses to ignore bad "features".

       XPG
          Cancel CMDENV=irix non-standard behavior.

       In general, it is a bad idea to set these variables.  The one exception is CMD_ENV or PS_PERSONALITY, which could be set to Linux for normal
       systems.  Without that setting, ps follows the useless and bad parts of the Unix98 standard.

PERSONALITY

       390        like the OS/390 OpenEdition ps
       aix        like AIX ps
       bsd        like FreeBSD ps (totally non-standard)
       compaq     like Digital Unix ps
       debian     like the old Debian ps
       digital    like Tru64 (was Digital Unix, was OSF/1) ps
       gnu        like the old Debian ps
       hp         like HP-UX ps
       hpux       like HP-UX ps
       irix       like Irix ps
       linux      ***** recommended *****
       old        like the original Linux ps (totally non-standard)
       os390      like OS/390 Open Edition ps
       posix      standard
       s390       like OS/390 Open Edition ps
       sco        like SCO ps
       sgi        like Irix ps
       solaris2   like Solaris 2+ (SunOS 5) ps
       sunos4     like SunOS 4 (Solaris 1) ps (totally non-standard)
       svr4       standard
       sysv       standard
       tru64      like Tru64 (was Digital Unix, was OSF/1) ps
       unix       standard
       unix95     standard
       unix98     standard

SEE ALSO

pgrep(1), pstree(1), top(1), proc(5).

STANDARDS

This ps conforms to:

       1   Version 2 of the Single Unix Specification
       2   The Open Group Technical Standard Base Specifications, Issue 6
       3   IEEE Std 1003.1, 2004 Edition
       4   X/Open System Interfaces Extension [UP XSI]
       5   ISO/IEC 9945:2003

AUTHOR

       ps was originally written by Branko Lankester ⟨lankeste@fwi.uva.nl⟩.  Michael K. Johnson ⟨johnsonm@redhat.com⟩ re-wrote it significantly to use
       the proc filesystem, changing a few things in the process.  Michael Shields ⟨mjshield@nyx.cs.du.edu⟩ added the pid-list feature.  Charles Blake
       ⟨cblake@bbn.com⟩ added multi-level sorting, the dirent-style library, the device name-to-number mmaped database, the approximate binary search
       directly on System.map, and many code and documentation cleanups.  David Mossberger-Tang wrote the generic BFD support for psupdate.  Albert
       Cahalan ⟨albert@users.sf.net⟩ rewrote ps for full Unix98 and BSD support, along with some ugly hacks for obsolete and foreign syntax.

       Please send bug reports to ⟨procps@freelists.org⟩.  No subscription is required or suggested.

procps-ng                                                              2020-06-04                                                                  PS(1)
Categories
Linux manpage

manpage rm

RM(1) User Commands RM(1)

NAME

rm – remove files or directories

SYNOPSIS

rm [OPTION]… [FILE]…

DESCRIPTION

This manual page documents the GNU version of rm. rm removes each specified file. By default, it does not remove directories.

       If the -I or --interactive=once option is given, and there are more than three files or the -r, -R, or --recursive are given, then rm prompts the
       user for whether to proceed with the entire operation.  If the response is not affirmative, the entire command is aborted.

       Otherwise, if a file is unwritable, standard input is a terminal, and the -f or --force option is not given, or the  -i  or  --interactive=always
       option is given, rm prompts the user for whether to remove the file.  If the response is not affirmative, the file is skipped.

OPTIONS

Remove (unlink) the FILE(s).

       -f, --force
              ignore nonexistent files and arguments, never prompt

       -i     prompt before every removal

       -I     prompt  once  before  removing  more than three files, or when removing recursively; less intrusive than -i, while still giving protection
              against most mistakes

       --interactive[=WHEN]
              prompt according to WHEN: never, once (-I), or always (-i); without WHEN, prompt always

       --one-file-system
              when removing a hierarchy recursively, skip any directory that is on a file system different from that of the corresponding  command  line
              argument

       --no-preserve-root
              do not treat '/' specially

       --preserve-root[=all]
              do not remove '/' (default); with 'all', reject any command line argument on a separate device from its parent

       -r, -R, --recursive
              remove directories and their contents recursively

       -d, --dir
              remove empty directories

       -v, --verbose
              explain what is being done

       --help display this help and exit

       --version
              output version information and exit

       By  default,  rm  does not remove directories.  Use the --recursive (-r or -R) option to remove each listed directory, too, along with all of its
       contents.

       To remove a file whose name starts with a '-', for example '-foo', use one of these commands:

              rm -- -foo

              rm ./-foo

       Note that if you use rm to remove a file, it might be possible to recover some of its contents, given  sufficient  expertise  and/or  time.   For
       greater assurance that the contents are truly unrecoverable, consider using shred.

AUTHOR

Written by Paul Rubin, David MacKenzie, Richard M. Stallman, and Jim Meyering.

REPORTING BUGS

       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT

       Copyright © 2020 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.

SEE ALSO

unlink(1), unlink(2), chattr(1), shred(1)

       Full documentation <https://www.gnu.org/software/coreutils/rm>
       or available locally via: info '(coreutils) rm invocation'

GNU coreutils 8.32                                                   September 2020                                                                RM(1)
Categories
Linux manpage

manpage rsync

rsync(1) User Commands rsync(1)

NAME

rsync – a fast, versatile, remote (and local) file-copying tool

SYNOPSIS

Local
rsync [OPTION…] SRC… [DEST]
       Access via remote shell:
           Pull:
               rsync [OPTION...] [USER@]HOST:SRC... [DEST]
           Push:
               rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
           Pull:
               rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
           Push:
               rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)

       Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

DESCRIPTION

       Rsync  is  a fast and extraordinarily versatile file copying tool.  It can copy locally, to/from another host over any remote shell, or to/from a
       remote rsync daemon.  It offers a large number of options that control every aspect of its behavior and permit very flexible specification of the
       set of files to be copied.  It is famous for its delta-transfer algorithm, which reduces the amount of data sent over the network by sending only
       the differences between the source files and the existing files in the destination.  Rsync is widely used for backups and mirroring and as an imâАР
       proved copy command for everyday use.

       Rsync  finds  files that need to be transferred using a "quick check" algorithm (by default) that looks for files that have changed in size or in
       last-modified time.  Any changes in the other preserved attributes (as requested by options) are made on the destination file directly  when  the
       quick check indicates that the file's data does not need to be updated.

       Some of the additional features of rsync are:

       o      support for copying links, devices, owners, groups, and permissions

       o      exclude and exclude-from options similar to GNU tar

       o      a CVS exclude mode for ignoring the same files that CVS would ignore

       o      can use any transparent remote shell, including ssh or rsh

       o      does not require super-user privileges

       o      pipelining of file transfers to minimize latency costs

       o      support for anonymous or authenticated rsync daemons (ideal for mirroring)

GENERAL

Rsync copies files either to or from a remote host, or locally on the current host (it does not support copying files between two remote hosts).

       There are two different ways for rsync to contact a remote system: using a remote-shell program as the transport (such as ssh or rsh) or contactâАР
       ing an rsync daemon directly via TCP.  The remote-shell transport is used whenever the source or destination path contains  a  single  colon  (:)
       separator  after  a  host specification.  Contacting an rsync daemon directly happens when the source or destination path contains a double colon
       (::) separator after a host specification, OR when an rsync:// URL is specified (see also the "USING RSYNC-DAEMON  FEATURES  VIA  A  REMOTE-SHELL
       CONNECTION" section for an exception to this latter rule).

       As a special case, if a single source arg is specified without a destination, the files are listed in an output format similar to "ls -l".

       As expected, if neither the source or destination path specify a remote host, the copy occurs locally (see also the --list-only option).

       Rsync refers to the local side as the client and the remote side as the server.  Don't confuse server with an rsync daemon.  A daemon is always a
       server, but a server can be either a daemon or a remote-shell spawned process.

SETUP

See the file README.md for installation instructions.

       Once installed, you can use rsync to any machine that you can access via a remote shell (as well as some that you can access using the rsync daeâАР
       mon-mode protocol).  For remote transfers, a modern rsync uses ssh for its communications, but it may have been configured to use a different reâАР
       mote shell by default, such as rsh or remsh.

       You can also specify any remote shell you like, either by using the -e command line option, or by setting the RSYNC_RSH environment variable.

       Note that rsync must be installed on both the source and destination machines.

USAGE

You use rsync in the same way you use rcp. You must specify a source and a destination, one of which may be remote.

Perhaps the best way to explain the syntax is with some examples:

rsync -t *.c foo:src/

       This would transfer all files matching the pattern .c from the current directory to the directory src on the machine foo.  If any of  the  files
       already  exist on the remote system then the rsync remote-update protocol is used to update the file by sending only the differences in the data.
       Note that the expansion of wildcards on the command-line (.c) into a list of files is handled by the shell before it runs rsync and not by rsync
       itself (exactly the same as all other Posix-style programs).

           rsync -avz foo:src/bar /data/tmp

       This  would  recursively  transfer all files from the directory src/bar on the machine foo into the /data/tmp/bar directory on the local machine.
       The files are transferred in archive mode, which ensures that symbolic links, devices, attributes, permissions, ownerships, etc. are preserved in
       the transfer.  Additionally, compression will be used to reduce the size of data portions of the transfer.

           rsync -avz foo:src/bar/ /data/tmp

       A  trailing  slash  on  the  source changes this behavior to avoid creating an additional directory level at the destination.  You can think of a
       trailing / on a source as meaning "copy the contents of this directory" as opposed to "copy the directory by name", but in  both  cases  the  atâАР
       tributes  of the containing directory are transferred to the containing directory on the destination.  In other words, each of the following comâАР
       mands copies the files in the same way, including their setting of the attributes of /dest/foo:

           rsync -av /src/foo /dest
           rsync -av /src/foo/ /dest/foo

       Note also that host and module references don't require a trailing slash to copy the contents of the default directory.   For  example,  both  of
       these copy the remote directory's contents into "/dest":

           rsync -av host: /dest
           rsync -av host::module /dest

       You  can  also use rsync in local-only mode, where both the source and destination don't have a ':' in the name.  In this case it behaves like an
       improved copy command.

       Finally, you can list all the (listable) modules available from a particular rsync daemon by leaving off the module name:

           rsync somehost.mydomain.com::

       See the following section for more details.

ADVANCED USAGE

       The syntax for requesting multiple files from a remote host is done by specifying additional remote-host args in the same style as the first,  or
       with the hostname omitted.  For instance, all these work:

           rsync -av host:file1 :file2 host:file{3,4} /dest/
           rsync -av host::modname/file{1,2} host::modname/file3 /dest/
           rsync -av host::modname/file1 ::modname/file{3,4}

       Older versions of rsync required using quoted spaces in the SRC, like these examples:

           rsync -av host:'dir1/file1 dir2/file2' /dest
           rsync host::'modname/dir1/file1 modname/dir2/file2' /dest

       This word-splitting still works (by default) in the latest rsync, but is not as easy to use as the first method.

       If  you need to transfer a filename that contains whitespace, you can either specify the --protect-args (-s) option, or you'll need to escape the
       whitespace in a way that the remote shell will understand.  For instance:

           rsync -av host:'file\ name\ with\ spaces' /dest

CONNECTING TO AN RSYNC DAEMON

       It is also possible to use rsync without a remote shell as the transport.  In this case you will directly connect to a remote rsync daemon, typiâАР
       cally using TCP port 873. (This obviously requires the daemon to be running on the remote system, so refer to the STARTING AN RSYNC DAEMON TO ACâАР
       CEPT CONNECTIONS section below for information on that.)

       Using rsync in this way is the same as using it with a remote shell except that:

       o      you either use a double colon :: instead of a single colon to separate the hostname from the path, or you use an rsync:// URL.

       o      the first word of the "path" is actually a module name.

       o      the remote daemon may print a message of the day when you connect.

       o      if you specify no path name on the remote daemon then the list of accessible paths on the daemon will be shown.

       o      if you specify no local destination then a listing of the specified files on the remote daemon is provided.

       o      you must not specify the --rsh (-e) option (since that overrides the daemon connection to use ssh -- see USING RSYNC-DAEMON FEATURES VIA A
              REMOTE-SHELL CONNECTION below).

       An example that copies all the files in a remote module named "src":

           rsync -av host::src /dest

       Some  modules  on  the  remote daemon may require authentication.  If so, you will receive a password prompt when you connect.  You can avoid the
       password prompt by setting the environment variable RSYNC_PASSWORD to the password you want to use or using the --password-file option.  This may
       be useful when scripting rsync.

       WARNING: On some systems environment variables are visible to all users.  On those systems using --password-file is recommended.

       You  may  establish  the  connection via a web proxy by setting the environment variable RSYNC_PROXY to a hostname:port pair pointing to your web
       proxy.  Note that your web proxy's configuration must support proxy connections to port 873.

       You may also establish a daemon connection using a program as a proxy by setting the environment variable RSYNC_CONNECT_PROG to the commands  you
       wish  to  run  in  place of making a direct socket connection.  The string may contain the escape "%H" to represent the hostname specified in the
       rsync command (so use "%%" if you need a single "%" in your string).  For example:

           export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'
           rsync -av targethost1::module/src/ /dest/
           rsync -av rsync://targethost2/module/src/ /dest/

       The command specified above uses ssh to run nc (netcat) on a proxyhost, which forwards all data to port 873 (the rsync daemon) on the  targethost
       (%H).

       Note  also  that if the RSYNC_SHELL environment variable is set, that program will be used to run the RSYNC_CONNECT_PROG command instead of using
       the default shell of the system() call.

USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION

       It is sometimes useful to use various features of an rsync daemon (such as named modules) without actually allowing any  new  socket  connections
       into  a  system (other than what is already required to allow remote-shell access).  Rsync supports connecting to a host using a remote shell and
       then spawning a single-use "daemon" server that expects to read its config file in the home dir of the remote user.  This can be  useful  if  you
       want  to encrypt a daemon-style transfer's data, but since the daemon is started up fresh by the remote user, you may not be able to use features
       such as chroot or change the uid used by the daemon. (For another way to encrypt a daemon transfer, consider using ssh to tunnel a local port  to
       a remote machine and configure a normal rsync daemon on that remote host to only allow connections from "localhost".)

       From  the  user's  perspective, a daemon transfer via a remote-shell connection uses nearly the same command-line syntax as a normal rsync-daemon
       transfer, with the only exception being that you must explicitly set the remote shell program on the command-line with the --rsh=COMMAND  option.
       (Setting the RSYNC_RSH in the environment will not turn on this functionality.) For example:

           rsync -av --rsh=ssh host::module /dest

       If  you need to specify a different remote-shell user, keep in mind that the user@ prefix in front of the host is specifying the rsync-user value
       (for a module that requires user-based authentication).  This means that you must give the '-l user' option to ssh when  specifying  the  remote-
       shell, as in this example that uses the short version of the --rsh option:

           rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest

       The "ssh-user" will be used at the ssh level; the "rsync-user" will be used to log-in to the "module".

STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS

       In  order  to connect to an rsync daemon, the remote system needs to have a daemon already running (or it needs to have configured something like
       inetd to spawn an rsync daemon for incoming connections on a particular port).  For full information on how to start a daemon that will  handling
       incoming  socket connections, see the rsyncd.conf(5) man page -- that is the config file for the daemon, and it contains the full details for how
       to run the daemon (including stand-alone and inetd configurations).

       If you're using one of the remote-shell transports for the transfer, there is no need to manually start an rsync daemon.

SORTED TRANSFER ORDER

       Rsync always sorts the specified filenames into its internal transfer list.  This handles the merging together of  the  contents  of  identically
       named  directories, makes it easy to remove duplicate filenames, and may confuse someone when the files are transferred in a different order than
       what was given on the command-line.

       If you need a particular file to be transferred prior to another, either separate the files into different rsync calls, or consider  using  --deâАР
       lay-updates (which doesn't affect the sorted transfer order, but does make the final file-updating phase happen much more rapidly).

EXAMPLES

Here are some examples of how I use rsync.

To backup my wife’s home directory, which consists of large MS Word files and mail folders, I use a cron job that runs

rsync -Cavz . arvidsjaur:backup

each night over a PPP connection to a duplicate directory on my machine “arvidsjaur”.

To synchronize my samba source trees I use the following Makefile targets:

get
rsync -avuzb –exclude ‘*~’ samba:samba/ .
put
rsync -Cavuzb . samba:samba/ sync: get put
       This  allows  me  to sync with a CVS directory at the other end of the connection.  I then do CVS operations on the remote machine, which saves a
       lot of time as the remote CVS protocol isn't very efficient.

       I mirror a directory between my "old" and "new" ftp sites with the command:

           rsync -az -e ssh --delete ~ftp/pub/samba nimbus:"~ftp/pub/tridge"

       This is launched from cron every few hours.

OPTION SUMMARY

Here is a short summary of the options available in rsync. Please refer to the detailed description below for a complete description.

       --verbose, -v            increase verbosity
       --info=FLAGS             fine-grained informational verbosity
       --debug=FLAGS            fine-grained debug verbosity
       --stderr=e|a|c           change stderr output mode (default: errors)
       --quiet, -q              suppress non-error messages
       --no-motd                suppress daemon-mode MOTD
       --checksum, -c           skip based on checksum, not mod-time & size
       --archive, -a            archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
       --no-OPTION              turn off an implied OPTION (e.g. --no-D)
       --recursive, -r          recurse into directories
       --relative, -R           use relative path names
       --no-implied-dirs        don't send implied dirs with --relative
       --backup, -b             make backups (see --suffix & --backup-dir)
       --backup-dir=DIR         make backups into hierarchy based in DIR
       --suffix=SUFFIX          backup suffix (default ~ w/o --backup-dir)
       --update, -u             skip files that are newer on the receiver
       --inplace                update destination files in-place
       --append                 append data onto shorter files
       --append-verify          --append w/old data in file checksum
       --dirs, -d               transfer directories without recursing
       --mkpath                 create the destination's path component
       --links, -l              copy symlinks as symlinks
       --copy-links, -L         transform symlink into referent file/dir
       --copy-unsafe-links      only "unsafe" symlinks are transformed
       --safe-links             ignore symlinks that point outside the tree
       --munge-links            munge symlinks to make them safe & unusable
       --copy-dirlinks, -k      transform symlink to dir into referent dir
       --keep-dirlinks, -K      treat symlinked dir on receiver as dir
       --hard-links, -H         preserve hard links
       --perms, -p              preserve permissions
       --executability, -E      preserve executability
       --chmod=CHMOD            affect file and/or directory permissions
       --acls, -A               preserve ACLs (implies --perms)
       --xattrs, -X             preserve extended attributes
       --owner, -o              preserve owner (super-user only)
       --group, -g              preserve group
       --devices                preserve device files (super-user only)
       --copy-devices           copy device contents as regular file
       --specials               preserve special files
       -D                       same as --devices --specials
       --times, -t              preserve modification times
       --atimes, -U             preserve access (use) times
       --open-noatime           avoid changing the atime on opened files
       --crtimes, -N            preserve create times (newness)
       --omit-dir-times, -O     omit directories from --times
       --omit-link-times, -J    omit symlinks from --times
       --super                  receiver attempts super-user activities
       --fake-super             store/recover privileged attrs using xattrs
       --sparse, -S             turn sequences of nulls into sparse blocks
       --preallocate            allocate dest files before writing them
       --write-devices          write to devices as files (implies --inplace)
       --dry-run, -n            perform a trial run with no changes made
       --whole-file, -W         copy files whole (w/o delta-xfer algorithm)
       --checksum-choice=STR    choose the checksum algorithm (aka --cc)
       --one-file-system, -x    don't cross filesystem boundaries
       --block-size=SIZE, -B    force a fixed checksum block-size
       --rsh=COMMAND, -e        specify the remote shell to use
       --rsync-path=PROGRAM     specify the rsync to run on remote machine
       --existing               skip creating new files on receiver
       --ignore-existing        skip updating files that exist on receiver
       --remove-source-files    sender removes synchronized files (non-dir)
       --del                    an alias for --delete-during
       --delete                 delete extraneous files from dest dirs
       --delete-before          receiver deletes before xfer, not during
       --delete-during          receiver deletes during the transfer
       --delete-delay           find deletions during, delete after
       --delete-after           receiver deletes after transfer, not during
       --delete-excluded        also delete excluded files from dest dirs
       --ignore-missing-args    ignore missing source args without error
       --delete-missing-args    delete missing source args from destination
       --ignore-errors          delete even if there are I/O errors
       --force                  force deletion of dirs even if not empty
       --max-delete=NUM         don't delete more than NUM files
       --max-size=SIZE          don't transfer any file larger than SIZE
       --min-size=SIZE          don't transfer any file smaller than SIZE
       --max-alloc=SIZE         change a limit relating to memory alloc
       --partial                keep partially transferred files
       --partial-dir=DIR        put a partially transferred file into DIR
       --delay-updates          put all updated files into place at end
       --prune-empty-dirs, -m   prune empty directory chains from file-list
       --numeric-ids            don't map uid/gid values by user/group name
       --usermap=STRING         custom username mapping
       --groupmap=STRING        custom groupname mapping
       --chown=USER:GROUP       simple username/groupname mapping
       --timeout=SECONDS        set I/O timeout in seconds
       --contimeout=SECONDS     set daemon connection timeout in seconds
       --ignore-times, -I       don't skip files that match size and time
       --size-only              skip files that match in size
       --modify-window=NUM, -@  set the accuracy for mod-time comparisons
       --temp-dir=DIR, -T       create temporary files in directory DIR
       --fuzzy, -y              find similar file for basis if no dest file
       --compare-dest=DIR       also compare destination files relative to DIR
       --copy-dest=DIR          ... and include copies of unchanged files
       --link-dest=DIR          hardlink to files in DIR when unchanged
       --compress, -z           compress file data during the transfer
       --compress-choice=STR    choose the compression algorithm (aka --zc)
       --compress-level=NUM     explicitly set compression level (aka --zl)
       --skip-compress=LIST     skip compressing files with suffix in LIST
       --cvs-exclude, -C        auto-ignore files in the same way CVS does
       --filter=RULE, -f        add a file-filtering RULE
       -F                       same as --filter='dir-merge /.rsync-filter'
                                repeated: --filter='- .rsync-filter'
       --exclude=PATTERN        exclude files matching PATTERN
       --exclude-from=FILE      read exclude patterns from FILE
       --include=PATTERN        don't exclude files matching PATTERN
       --include-from=FILE      read include patterns from FILE
       --files-from=FILE        read list of source-file names from FILE
       --from0, -0              all -from/filter files are delimited by 0s
       --protect-args, -s       no space-splitting; wildcard chars only
       --copy-as=USER[:GROUP]   specify user & optional group for the copy
       --address=ADDRESS        bind address for outgoing socket to daemon
       --port=PORT              specify double-colon alternate port number
       --sockopts=OPTIONS       specify custom TCP options
       --blocking-io            use blocking I/O for the remote shell
       --outbuf=N|L|B           set out buffering to None, Line, or Block
       --stats                  give some file-transfer stats
       --8-bit-output, -8       leave high-bit chars unescaped in output
       --human-readable, -h     output numbers in a human-readable format
       --progress               show progress during transfer
       -P                       same as --partial --progress
       --itemize-changes, -i    output a change-summary for all updates
       --remote-option=OPT, -M  send OPTION to the remote side only
       --out-format=FORMAT      output updates using the specified FORMAT
       --log-file=FILE          log what we're doing to the specified FILE
       --log-file-format=FMT    log updates using the specified FMT
       --password-file=FILE     read daemon-access password from FILE
       --early-input=FILE       use FILE for daemon's early exec input
       --list-only              list the files instead of copying them
       --bwlimit=RATE           limit socket I/O bandwidth
       --stop-after=MINS        Stop rsync after MINS minutes have elapsed
       --stop-at=y-m-dTh:m      Stop rsync at the specified point in time
       --write-batch=FILE       write a batched update to FILE
       --only-write-batch=FILE  like --write-batch but w/o updating dest
       --read-batch=FILE        read a batched update from FILE
       --protocol=NUM           force an older protocol version to be used
       --iconv=CONVERT_SPEC     request charset conversion of filenames
       --checksum-seed=NUM      set block/file checksum seed (advanced)
       --ipv4, -4               prefer IPv4
       --ipv6, -6               prefer IPv6
       --version, -V            print the version + other info and exit
       --help, -h ()           show this help (* -h is help only on its own)

       Rsync can also be run as a daemon, in which case the following options are accepted:

       --daemon                 run as an rsync daemon
       --address=ADDRESS        bind to the specified address
       --bwlimit=RATE           limit socket I/O bandwidth
       --config=FILE            specify alternate rsyncd.conf file
       --dparam=OVERRIDE, -M    override global daemon config parameter
       --no-detach              do not detach from the parent
       --port=PORT              listen on alternate port number
       --log-file=FILE          override the "log file" setting
       --log-file-format=FMT    override the "log format" setting
       --sockopts=OPTIONS       specify custom TCP options
       --verbose, -v            increase verbosity
       --ipv4, -4               prefer IPv4
       --ipv6, -6               prefer IPv6
       --help, -h               show this help (when used with --daemon)

OPTIONS

       Rsync accepts both long (double-dash + word) and short (single-dash + letter) options.  The full list of the available options are described  beâАР
       low.   If  an option can be specified in more than one way, the choices are comma-separated.  Some options only have a long variant, not a short.
       If the option takes a parameter, the parameter is only listed after the long variant, even though it must also be specified for the short.   When
       specifying  a  parameter,  you can either use the form --option=param or replace the '=' with whitespace.  The parameter may need to be quoted in
       some manner for it to survive the shell's command-line parsing.  Keep in mind that a leading tilde (~) in  a  filename  is  substituted  by  your
       shell, so --option=~/foo will not change the tilde into your home directory (remove the '=' for that).

       --help, -h ()
              Print  a  short  help  page describing the options available in rsync and exit.  () The -h short option will only invoke --help when used
              without other options since it normally means --human-readable.

       --version, -V
              Print the rsync version plus other info and exit.

              The output includes the default list of checksum algorithms, the default list of compression algorithms, a list of  compiled-in  capabiliâАР
              ties, a link to the rsync web site, and some license/copyright info.

       --verbose, -v
              This  option  increases  the amount of information you are given during the transfer.  By default, rsync works silently.  A single -v will
              give you information about what files are being transferred and a brief summary at the end.  Two -v options will give you  information  on
              what  files are being skipped and slightly more information at the end.  More than two -v options should only be used if you are debugging
              rsync.

              In a modern rsync, the -v option is equivalent to the setting of groups of --info and --debug options.  You can choose to use these  newer
              options in addition to, or in place of using --verbose, as any fine-grained settings override the implied settings of -v.  Both --info and
              --debug have a way to ask for help that tells you exactly what flags are set for each increase in verbosity.

              However, do keep in mind that a daemon's "max verbosity" setting will limit how high of a level the various individual flags can be set on
              the  daemon  side.  For instance, if the max is 2, then any info and/or debug flag that is set to a higher value than what would be set by
              -vv will be downgraded to the -vv level in the daemon's logging.

       --info=FLAGS
              This option lets you have fine-grained control over the information output you want to see.  An individual flag name may be followed by  a
              level  number,  with  0 meaning to silence that output, 1 being the default output level, and higher numbers increasing the output of that
              flag (for those that support higher levels).  Use --info=help to see all the available flag names, what they output, and what  flag  names
              are added for each increase in the verbose level.  Some examples:

                  rsync -a --info=progress2 src/ dest/
                  rsync -avv --info=stats2,misc1,flist0 src/ dest/

              Note that --info=name's output is affected by the --out-format and --itemize-changes (-i) options.  See those options for more information
              on what is output and when.

              This option was added to 3.1.0, so an older rsync on the server side might reject your attempts at fine-grained control (if  one  or  more
              flags  needed  to  be  send  to the server and the server was too old to understand them).  See also the "max verbosity" caveat above when
              dealing with a daemon.

       --debug=FLAGS
              This option lets you have fine-grained control over the debug output you want to see.  An individual flag name may be followed by a  level
              number,  with  0  meaning  to silence that output, 1 being the default output level, and higher numbers increasing the output of that flag
              (for those that support higher levels).  Use --debug=help to see all the available flag names, what they output, and what flag  names  are
              added for each increase in the verbose level.  Some examples:

                  rsync -avvv --debug=none src/ dest/
                  rsync -avA --del --debug=del2,acl src/ dest/

              Note that some debug messages will only be output when --stderr=all is specified, especially those pertaining to I/O and buffer debugging.

              Beginning in 3.2.0, this option is no longer auto-forwarded to the server side in order to allow you to specify different debug values for
              each side of the transfer, as well as to specify a new debug option that is only present in one of the rsync versions.  If you want to duâАР
              plicate the same option on both sides, using brace expansion is an easy way to save you some typing.  This works in zsh and bash:

                  rsync -aiv {-M,}--debug=del2 src/ dest/

       --stderr=errors|all|client
              This  option  controls which processes output to stderr and if info messages are also changed to stderr.  The mode strings can be abbreviâАР
              ated, so feel free to use a single letter value.  The 3 possible choices are:

              o      errors - (the default) causes all the rsync processes to send an error directly to stderr, even if the process  is  on  the  remote
                     side  of  the  transfer.  Info messages are sent to the client side via the protocol stream.  If stderr is not available (i.e. when
                     directly connecting with a daemon via a socket) errors fall back to being sent via the protocol stream.

              o      all - causes all rsync messages (info and error) to get written directly to stderr from  all  (possible)  processes.   This  causes
                     stderr to become line-buffered (instead of raw) and eliminates the ability to divide up the info and error messages by file handle.
                     For those doing debugging or using several levels of verbosity, this option can help to  avoid  clogging  up  the  transfer  stream
                     (which  should  prevent  any  chance of a deadlock bug hanging things up).  It also allows --debug to enable some extra I/O related
                     messages.

              o      client - causes all rsync messages to be sent to the client side via the protocol stream.  One client process outputs all messages,
                     with errors on stderr and info messages on stdout.  This was the default in older rsync versions, but can cause error delays when a
                     lot of transfer data is ahead of the messages.  If you're pushing files to an older rsync, you may want to use  --stderr=all  since
                     that idiom has been around for several releases.

              This  option  was  added in rsync 3.2.3.  This version also began the forwarding of a non-default setting to the remote side, though rsync
              uses the backward-compatible options --msgs2stderr and --no-msgs2stderr to represent the all and client settings, respectively.   A  newer
              rsync will continue to accept these older option names to maintain compatibility.

       --quiet, -q
              This  option  decreases the amount of information you are given during the transfer, notably suppressing information messages from the reâАР
              mote server.  This option is useful when invoking rsync from cron.

       --no-motd
              This option affects the information that is output by the client at the start of a daemon transfer.  This suppresses  the  message-of-the-
              day (MOTD) text, but it also affects the list of modules that the daemon sends in response to the "rsync host::" request (due to a limitaâАР
              tion in the rsync protocol), so omit this option if you want to request the list of modules from the daemon.

       --ignore-times, -I
              Normally rsync will skip any files that are already the same size and have the same modification timestamp.  This option  turns  off  this
              "quick check" behavior, causing all files to be updated.

       --size-only
              This  modifies rsync's "quick check" algorithm for finding files that need to be transferred, changing it from the default of transferring
              files with either a changed size or a changed last-modified time to just looking for files that have changed in size.  This is useful when
              starting to use rsync after using another mirroring system which may not preserve timestamps exactly.

       --modify-window=NUM, -@
              When comparing two timestamps, rsync treats the timestamps as being equal if they differ by no more than the modify-window value.  The deâАР
              fault is 0, which matches just integer seconds.  If you specify a negative value (and  the  receiver  is  at  least  version  3.1.3)  then
              nanoseconds will also be taken into account.  Specifying 1 is useful for copies to/from MS Windows FAT filesystems, because FAT represents
              times with a 2-second resolution (allowing times to differ from the original by up to 1 second).

              If you want all your transfers to default to comparing nanoseconds, you can create a ~/.popt file and put these lines in it:

                  rsync alias -a -a@-1
                  rsync alias -t -t@-1

              With that as the default, you'd need to specify --modify-window=0 (aka -@0) to override it and ignore nanoseconds, e.g. if you're  copying
              between ext3 and ext4, or if the receiving rsync is older than 3.1.3.

       --checksum, -c
              This  changes the way rsync checks if the files have been changed and are in need of a transfer.  Without this option, rsync uses a "quick
              check" that (by default) checks if each file's size and time of last modification match between the  sender  and  receiver.   This  option
              changes  this  to  compare a 128-bit checksum for each file that has a matching size.  Generating the checksums means that both sides will
              expend a lot of disk I/O reading all the data in the files in the transfer, so this can slow things down significantly (and this is  prior
              to any reading that will be done to transfer changed files)

              The sending side generates its checksums while it is doing the file-system scan that builds the list of the available files.  The receiver
              generates its checksums when it is scanning for changed files, and will checksum any file that has the  same  size  as  the  corresponding
              sender's file: files with either a changed size or a changed checksum are selected for transfer.

              Note  that  rsync  always  verifies  that each transferred file was correctly reconstructed on the receiving side by checking a whole-file
              checksum that is generated as the file is transferred, but that automatic after-the-transfer verification has nothing to do with this  opâАР
              tion's before-the-transfer "Does this file need to be updated?" check.

              The  checksum  used  is auto-negotiated between the client and the server, but can be overridden using either the --checksum-choice (--cc)
              option or an environment variable that is discussed in that option's section.

       --archive, -a
              This is equivalent to -rlptgoD.  It is a quick way of saying you want recursion and want to preserve almost everything.  Be aware that  it
              does not include preserving ACLs (-A), xattrs (-X), atimes (-U), crtimes (-N), nor the finding and preserving of hardlinks (-H).

              The only exception to the above equivalence is when --files-from is specified, in which case -r is not implied.

       --no-OPTION
              You  may turn off one or more implied options by prefixing the option name with "no-".  Not all options may be prefixed with a "no-": only
              options that are implied by other options (e.g. --no-D, --no-perms) or have different defaults in various circumstances (e.g.  --no-whole-
              file,  --no-blocking-io,  --no-dirs).  You may specify either the short or the long option name after the "no-" prefix (e.g. --no-R is the
              same as --no-relative).

              For example: if you want to use -a (--archive) but don't want -o (--owner), instead of converting  -a  into  -rlptgD,  you  could  specify
              -a --no-o (or -a --no-owner).

              The  order  of  the options is important: if you specify --no-r -a, the -r option would end up being turned on, the opposite of -a --no-r.
              Note also that the side-effects of the --files-from option are NOT positional, as it affects the default  state  of  several  options  and
              slightly changes the meaning of -a (see the --files-from option for more details).

       --recursive, -r
              This tells rsync to copy directories recursively.  See also --dirs (-d).

              Beginning  with rsync 3.0.0, the recursive algorithm used is now an incremental scan that uses much less memory than before and begins the
              transfer after the scanning of the first few directories have been completed.  This incremental scan only affects our recursion algorithm,
              and does not change a non-recursive transfer.  It is also only possible when both ends of the transfer are at least version 3.0.0.

              Some  options require rsync to know the full file list, so these options disable the incremental recursion mode.  These include: --delete-
              before, --delete-after, --prune-empty-dirs, and --delay-updates.  Because of this, the default delete mode when you  specify  --delete  is
              now  --delete-during  when  both ends of the connection are at least 3.0.0 (use --del or --delete-during to request this improved deletion
              mode explicitly).  See also the --delete-delay option that is a better choice than using --delete-after.

              Incremental recursion can be disabled using the --no-inc-recursive option or its shorter --no-i-r alias.

       --relative, -R
              Use relative paths.  This means that the full path names specified on the command line are sent to the server rather than  just  the  last
              parts  of  the filenames.  This is particularly useful when you want to send several different directories at the same time.  For example,
              if you used this command:

                  rsync -av /foo/bar/baz.c remote:/tmp/

              would create a file named baz.c in /tmp/ on the remote machine.  If instead you used

                  rsync -avR /foo/bar/baz.c remote:/tmp/

              then a file named /tmp/foo/bar/baz.c would be created on the remote machine, preserving its full path.   These  extra  path  elements  are
              called "implied directories" (i.e. the "foo" and the "foo/bar" directories in the above example).

              Beginning  with  rsync 3.0.0, rsync always sends these implied directories as real directories in the file list, even if a path element is
              really a symlink on the sending side.  This prevents some really unexpected behaviors when copying the full path of a file that you didn't
              realize  had  a  symlink in its path.  If you want to duplicate a server-side symlink, include both the symlink via its path, and referent
              directory via its real path.  If you're dealing with an older rsync on the sending side, you may need to use the --no-implied-dirs option.

              It is also possible to limit the amount of path information that is sent as implied directories for each path you specify.  With a  modern
              rsync on the sending side (beginning with 2.6.7), you can insert a dot and a slash into the source path, like this:

                  rsync -avR /foo/./bar/baz.c remote:/tmp/

              That  would create /tmp/bar/baz.c on the remote machine. (Note that the dot must be followed by a slash, so "/foo/." would not be abbreviâАР
              ated.) For older rsync versions, you would need to use a chdir to limit the source path.  For example, when pushing files:

                  (cd /foo; rsync -avR bar/baz.c remote:/tmp/)

              (Note that the parens put the two commands into a sub-shell, so that the "cd" command doesn't remain in effect for  future  commands.)  If
              you're pulling files from an older rsync, use this idiom (but only for a non-daemon transfer):

                  rsync -avR --rsync-path="cd /foo; rsync" \
                       remote:bar/baz.c /tmp/

       --no-implied-dirs
              This  option  affects the default behavior of the --relative option.  When it is specified, the attributes of the implied directories from
              the source names are not included in the transfer.  This means that the corresponding path elements on the destination system are left unâАР
              changed  if they exist, and any missing implied directories are created with default attributes.  This even allows these implied path eleâАР
              ments to have big differences, such as being a symlink to a directory on the receiving side.

              For instance, if a command-line arg or a files-from entry told rsync to transfer the file  "path/foo/file",  the  directories  "path"  and
              "path/foo"  are implied when --relative is used.  If "path/foo" is a symlink to "bar" on the destination system, the receiving rsync would
              ordinarily delete "path/foo", recreate it as a directory, and receive the file into the new directory.  With  --no-implied-dirs,  the  reâАР
              ceiving  rsync  updates  "path/foo/file"  using the existing path elements, which means that the file ends up being created in "path/bar".
              Another way to accomplish this link preservation is to use the --keep-dirlinks option (which will also affect symlinks to  directories  in
              the rest of the transfer).

              When  pulling  files from an rsync older than 3.0.0, you may need to use this option if the sending side has a symlink in the path you reâАР
              quest and you wish the implied directories to be transferred as normal directories.

       --backup, -b
              With this option, preexisting destination files are renamed as each file is transferred or deleted.  You can control where the backup file
              goes and what (if any) suffix gets appended using the --backup-dir and --suffix options.

              Note  that  if  you  don't  specify --backup-dir, (1) the --omit-dir-times option will be forced on, and (2) if --delete is also in effect
              (without --delete-excluded), rsync will add a "protect" filter-rule for the backup suffix to the end of all your existing  excludes  (e.g.
              -f "P *~").   This  will prevent previously backed-up files from being deleted.  Note that if you are supplying your own filter rules, you
              may need to manually insert your own exclude/protect rule somewhere higher up in the list so that it has a high enough priority to be  efâАР
              fective (e.g., if your rules specify a trailing inclusion/exclusion of *, the auto-added rule would never be reached).

       --backup-dir=DIR
              This implies the --backup option, and tells rsync to store all backups in the specified directory on the receiving side.  This can be used
              for incremental backups.  You can additionally specify a backup suffix using the --suffix option (otherwise the files  backed  up  in  the
              specified directory will keep their original filenames).

              Note  that  if  you  specify  a relative path, the backup directory will be relative to the destination directory, so you probably want to
              specify either an absolute path or a path that starts with "../".  If an rsync daemon is the receiver, the backup dir  cannot  go  outside
              the module's path hierarchy, so take extra care not to delete it or copy into it.

       --suffix=SUFFIX
              This  option  allows  you  to  override  the  default  backup  suffix used with the --backup (-b) option.  The default suffix is a ~ if no
              --backup-dir was specified, otherwise it is an empty string.

       --update, -u
              This forces rsync to skip any files which exist on the destination and have a modified time that is newer than the source file. (If an exâАР
              isting destination file has a modification time equal to the source file's, it will be updated if the sizes are different.)

              Note  that  this  does  not  affect  the copying of dirs, symlinks, or other special files.  Also, a difference of file format between the
              sender and receiver is always considered to be important enough for an update, no matter what date is on the objects.  In other words,  if
              the source has a directory where the destination has a file, the transfer would occur regardless of the timestamps.

              This  option  is  a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus it doesn't affect
              deletions.  It just limits the files that the receiver requests to be transferred.

       --inplace
              This option changes how rsync transfers a file when its data needs to be updated: instead of the default method of creating a new copy  of
              the file and moving it into place when it is complete, rsync instead writes the updated data directly to the destination file.

              This has several effects:

              o      Hard  links  are  not broken.  This means the new data will be visible through other hard links to the destination file.  Moreover,
                     attempts to copy differing source files onto a multiply-linked destination file will result in a "tug of war" with the  destination
                     data changing back and forth.

              o      In-use  binaries  cannot be updated (either the OS will prevent this from happening, or binaries that attempt to swap-in their data
                     will misbehave or crash).

              o      The file's data will be in an inconsistent state during the transfer and will be left that way if the transfer is interrupted or if
                     an update fails.

              o      A  file  that  rsync  cannot write to cannot be updated.  While a super user can update any file, a normal user needs to be granted
                     write permission for the open of the file for writing to be successful.

              o      The efficiency of rsync's delta-transfer algorithm may be reduced if some data in the destination file is overwritten before it can
                     be  copied to a position later in the file.  This does not apply if you use --backup, since rsync is smart enough to use the backup
                     file as the basis file for the transfer.

              WARNING: you should not use this option to update files that are being accessed by others, so be careful when choosing to use this  for  a
              copy.

              This option is useful for transferring large files with block-based changes or appended data, and also on systems that are disk bound, not
              network bound.  It can also help keep a copy-on-write filesystem snapshot from diverging the entire contents of a file that only has minor
              changes.

              The  option  implies  --partial (since an interrupted transfer does not delete the file), but conflicts with --partial-dir and --delay-upâАР
              dates.  Prior to rsync 2.6.4 --inplace was also incompatible with --compare-dest and --link-dest.

       --append
              This special copy mode only works to efficiently update files that are known to be growing larger where any existing content  on  the  reâАР
              ceiving side is also known to be the same as the content on the sender.  The use of --append can be dangerous if you aren't 100% sure that
              all the files in the transfer are shared, growing files.  You should thus use filter rules to ensure that you weed out any files  that  do
              not fit this criteria.

              Rsync  updates these growing file in-place without verifying any of the existing content in the file (it only verifies the content that it
              is appending).  Rsync skips any files that exist on the receiving side that are not shorter than the associated file on the  sending  side
              (which means that new files are transferred).

              This  does  not interfere with the updating of a file's non-content attributes (e.g.  permissions, ownership, etc.) when the file does not
              need to be transferred, nor does it affect the updating of any directories or non-regular files.

       --append-verify
              This special copy mode works like --append except that all the data in the file is included in the checksum verification (making  it  much
              less  efficient  but also potentially safer).  This option can be dangerous if you aren't 100% sure that all the files in the transfer are
              shared, growing files.  See the --append option for more details.

              Note: prior to rsync 3.0.0, the --append option worked like --append-verify, so if you are interacting with an older rsync (or the  transâАР
              fer is using a protocol prior to 30), specifying either append option will initiate an --append-verify transfer.

       --dirs, -d
              Tell  the  sending side to include any directories that are encountered.  Unlike --recursive, a directory's contents are not copied unless
              the directory name specified is "." or ends with a trailing slash (e.g. ".", "dir/.", "dir/", etc.).  Without this option or the  --recurâАР
              sive option, rsync will skip all directories it encounters (and output a message to that effect for each one).  If you specify both --dirs
              and --recursive, --recursive takes precedence.

              The --dirs option is implied by the --files-from option or the --list-only option (including an implied --list-only usage) if  --recursive
              wasn't specified (so that directories are seen in the listing).  Specify --no-dirs (or --no-d) if you want to turn this off.

              There is also a backward-compatibility helper option, --old-dirs (or --old-d) that tells rsync to use a hack of -r --exclude='/*/*' to get
              an older rsync to list a single directory without recursing.

       --mkpath
              Create a missing path component of the destination arg.  This allows rsync to create multiple levels of missing destination  dirs  and  to
              create a path in which to put a single renamed file.  Keep in mind that you'll need to supply a trailing slash if you want the entire desâАР
              tination path to be treated as a directory when copying a single arg (making rsync behave the same way that it would if the path component
              of the destination had already existed).

              For  example, the following creates a copy of file foo as bar in the sub/dir directory, creating dirs "sub" and "sub/dir" if either do not
              yet exist:

                  rsync -ai --mkpath foo sub/dir/bar

              If you instead ran the following, it would have created file foo in the sub/dir/bar directory:

                  rsync -ai --mkpath foo sub/dir/bar/

       --links, -l
              When symlinks are encountered, recreate the symlink on the destination.

       --copy-links, -L
              When symlinks are encountered, the item that they point to (the referent) is copied, rather than the symlink.  In older versions of rsync,
              this option also had the side-effect of telling the receiving side to follow symlinks, such as symlinks to directories.  In a modern rsync
              such as this one, you'll need to specify --keep-dirlinks (-K) to get this extra behavior.  The only exception is when sending files to  an
              rsync that is too old to understand -K -- in that case, the -L option will still have the side-effect of -K on that older receiving rsync.

       --copy-unsafe-links
              This tells rsync to copy the referent of symbolic links that point outside the copied tree.  Absolute symlinks are also treated like ordiâАР
              nary files, and so are any symlinks in the source path itself when --relative is used.  This option has no additional  effect  if  --copy-
              links was also specified.

              Note  that  the cut-off point is the top of the transfer, which is the part of the path that rsync isn't mentioning in the verbose output.
              If you copy "/src/subdir" to "/dest/" then the "subdir" directory is a name inside the transfer tree, not the top of the  transfer  (which
              is  /src) so it is legal for created relative symlinks to refer to other names inside the /src and /dest directories.  If you instead copy
              "/src/subdir/" (with a trailing slash) to "/dest/subdir" that would not allow symlinks to any files outside of "subdir".

       --safe-links
              This tells rsync to ignore any symbolic links which point outside the copied tree.  All absolute symlinks are also ignored. Using this opâАР
              tion in conjunction with --relative may give unexpected results.

       --munge-links
              This option tells rsync to (1) modify all symlinks on the receiving side in a way that makes them unusable but recoverable (see below), or
              (2) to unmunge symlinks on the sending side that had been stored in a munged state.  This is useful if you don't quite trust the source of
              the data to not try to slip in a symlink to a unexpected place.

              The  way  rsync  disables the use of symlinks is to prefix each one with the string "/rsyncd-munged/".  This prevents the links from being
              used as long as that directory does not exist.  When this option is enabled, rsync will refuse to run if that path is  a  directory  or  a
              symlink to a directory.

              The  option  only  affects  the client side of the transfer, so if you need it to affect the server, specify it via --remote-option. (Note
              that in a local transfer, the client side is the sender.)

              This option has no affect on a daemon, since the daemon configures whether it wants munged symlinks via  its  "munge symlinks"  parameter.
              See also the "munge-symlinks" perl script in the support directory of the source code.

       --copy-dirlinks, -k
              This  option  causes  the  sending side to treat a symlink to a directory as though it were a real directory.  This is useful if you don't
              want symlinks to non-directories to be affected, as they would be using --copy-links.

              Without this option, if the sending side has replaced a directory with a symlink to a directory, the receiving side will  delete  anything
              that is in the way of the new symlink, including a directory hierarchy (as long as --force or --delete is in effect).

              See also --keep-dirlinks for an analogous option for the receiving side.

              --copy-dirlinks  applies  to  all symlinks to directories in the source.  If you want to follow only a few specified symlinks, a trick you
              can use is to pass them as additional source args with a trailing slash, using --relative to make the paths match up right.  For example:

                  rsync -r --relative src/./ src/./follow-me/ dest/

              This works because rsync calls lstat(2) on the source arg as given, and the trailing slash makes lstat(2) follow the symlink, giving  rise
              to a directory in the file-list which overrides the symlink found during the scan of "src/./".

       --keep-dirlinks, -K
              This  option causes the receiving side to treat a symlink to a directory as though it were a real directory, but only if it matches a real
              directory from the sender.  Without this option, the receiver's symlink would be deleted and replaced with a real directory.

              For example, suppose you transfer a directory "foo" that contains a file "file", but "foo" is a symlink to  directory  "bar"  on  the  reâАР
              ceiver.   Without --keep-dirlinks, the receiver deletes symlink "foo", recreates it as a directory, and receives the file into the new diâАР
              rectory.  With --keep-dirlinks, the receiver keeps the symlink and "file" ends up in "bar".

              One note of caution: if you use --keep-dirlinks, you must trust all the symlinks in the copy! If it is possible for an untrusted  user  to
              create their own symlink to any directory, the user could then (on a subsequent copy) replace the symlink with a real directory and affect
              the content of whatever directory the symlink references.  For backup copies, you are better off using something like a bind mount instead
              of a symlink to modify your receiving hierarchy.

              See also --copy-dirlinks for an analogous option for the sending side.

       --hard-links, -H
              This  tells  rsync to look for hard-linked files in the source and link together the corresponding files on the destination.  Without this
              option, hard-linked files in the source are treated as though they were separate files.

              This option does NOT necessarily ensure that the pattern of hard links on the destination exactly matches that on the  source.   Cases  in
              which the destination may end up with extra hard links include the following:

              o      If  the  destination  contains extraneous hard-links (more linking than what is present in the source file list), the copying algoâАР
                     rithm will not break them explicitly.  However, if one or more of the  paths  have  content  differences,  the  normal  file-update
                     process will break those extra links (unless you are using the --inplace option).

              o      If you specify a --link-dest directory that contains hard links, the linking of the destination files against the --link-dest files
                     can cause some paths in the destination to become linked together due to the --link-dest associations.

              Note that rsync can only detect hard links between files that are inside the transfer set.  If rsync updates a file that has  extra  hard-
              link connections to files outside the transfer, that linkage will be broken.  If you are tempted to use the --inplace option to avoid this
              breakage, be very careful that you know how your files are being updated so that you are certain that no unintended changes happen due  to
              lingering hard links (and see the --inplace option for more caveats).

              If  incremental recursion is active (see --recursive), rsync may transfer a missing hard-linked file before it finds that another link for
              that contents exists elsewhere in the hierarchy.  This does not affect the accuracy of the transfer (i.e. which files are hard-linked  toâАР
              gether),  just  its  efficiency (i.e. copying the data for a new, early copy of a hard-linked file that could have been found later in the
              transfer in another member of the hard-linked set of files).  One way to avoid this inefficiency is to disable incremental recursion using
              the --no-inc-recursive option.

       --perms, -p
              This  option causes the receiving rsync to set the destination permissions to be the same as the source permissions. (See also the --chmod
              option for a way to modify what rsync considers to be the source permissions.)

              When this option is off, permissions are set as follows:

              o      Existing files (including updated files) retain their existing permissions, though the --executability option might change just the
                     execute permission for the file.

              o      New  files  get  their  "normal" permission bits set to the source file's permissions masked with the receiving directory's default
                     permissions (either the receiving process's umask, or the permissions specified via the destination directory's default  ACL),  and
                     their special permission bits disabled except in the case where a new directory inherits a setgid bit from its parent directory.

              Thus, when --perms and --executability are both disabled, rsync's behavior is the same as that of other file-copy utilities, such as cp(1)
              and tar(1).

              In summary: to give destination files (both old and new) the source permissions, use --perms.  To give new files  the  destination-default
              permissions (while leaving existing files unchanged), make sure that the --perms option is off and use --chmod=ugo=rwX (which ensures that
              all non-masked bits get enabled).  If you'd care to make this latter behavior easier to type, you could define a popt alias for  it,  such
              as  putting this line in the file ~/.popt (the following defines the -Z option, and includes --no-g to use the default group of the destiâАР
              nation dir):

                  rsync alias -Z --no-p --no-g --chmod=ugo=rwX

              You could then use this new option in a command such as this one:

                  rsync -avZ src/ dest/

              (Caveat: make sure that -a does not follow -Z, or it will re-enable the two --no-* options mentioned above.)

              The preservation of the destination's setgid bit on newly-created directories when --perms is off was added in rsync 2.6.7.   Older  rsync
              versions erroneously preserved the three special permission bits for newly-created files when --perms was off, while overriding the destiâАР
              nation's setgid bit setting on a newly-created directory.  Default ACL observance was added to the ACL patch for rsync 2.6.7, so older (or
              non-ACL-enabled)  rsyncs use the umask even if default ACLs are present.  (Keep in mind that it is the version of the receiving rsync that
              affects these behaviors.)

       --executability, -E
              This option causes rsync to preserve the executability (or non-executability) of regular files when --perms is  not  enabled.   A  regular
              file  is considered to be executable if at least one 'x' is turned on in its permissions.  When an existing destination file's executabilâАР
              ity differs from that of the corresponding source file, rsync modifies the destination file's permissions as follows:

              o      To make a file non-executable, rsync turns off all its 'x' permissions.

              o      To make a file executable, rsync turns on each 'x' permission that has a corresponding 'r' permission enabled.

              If --perms is enabled, this option is ignored.

       --acls, -A
              This option causes rsync to update the destination ACLs to be the same as the source ACLs.  The option also implies --perms.

              The source and destination systems must have compatible ACL entries for this option to work properly.  See the --fake-super option  for  a
              way to backup and restore ACLs that are not compatible.

       --xattrs, -X
              This option causes rsync to update the destination extended attributes to be the same as the source ones.

              For systems that support extended-attribute namespaces, a copy being done by a super-user copies all namespaces except system..  A normal
              user only copies the user. namespace.  To be able to backup and restore non-user namespaces as a normal user, see  the  --fake-super  opâАР
              tion.

              The  above  name filtering can be overridden by using one or more filter options with the x modifier.  When you specify an xattr-affecting
              filter rule, rsync requires that you do your own system/user filtering, as well as any additional  filtering  for  what  xattr  names  are
              copied and what names are allowed to be deleted.  For example, to skip the system namespace, you could specify:

                  --filter='-x system.*'

              To skip all namespaces except the user namespace, you could specify a negated-user match:

                  --filter='-x! user.*'

              To prevent any attributes from being deleted, you could specify a receiver-only rule that excludes all names:

                  --filter='-xr *'

              Note  that  the -X option does not copy rsync's special xattr values (e.g.  those used by --fake-super) unless you repeat the option (e.g.
              -XX).  This "copy all xattrs" mode cannot be used with --fake-super.

       --chmod=CHMOD
              This option tells rsync to apply one or more comma-separated "chmod" modes to the permission of the files in the transfer.  The  resulting
              value  is  treated as though it were the permissions that the sending side supplied for the file, which means that this option can seem to
              have no effect on existing files if --perms is not enabled.

              In addition to the normal parsing rules specified in the chmod(1) manpage, you can specify an item that should only apply to  a  directory
              by  prefixing  it  with a 'D', or specify an item that should only apply to a file by prefixing it with a 'F'.  For example, the following
              will ensure that all directories get marked set-gid, that no files are other-writable, that both are user-writable and group-writable, and
              that both have consistent executability across all bits:

                  --chmod=Dg+s,ug+w,Fo-w,+X

              Using octal mode numbers is also allowed:

                  --chmod=D2775,F664

              It is also legal to specify multiple --chmod options, as each additional option is just appended to the list of changes to make.

              See the --perms and --executability options for how the resulting permission value can be applied to the files in the transfer.

       --owner, -o
              This  option  causes  rsync to set the owner of the destination file to be the same as the source file, but only if the receiving rsync is
              being run as the super-user (see also the --super and --fake-super options).  Without this option, the owner  of  new  and/or  transferred
              files are set to the invoking user on the receiving side.

              The  preservation  of  ownership  will associate matching names by default, but may fall back to using the ID number in some circumstances
              (see also the --numeric-ids option for a full discussion).

       --group, -g
              This option causes rsync to set the group of the destination file to be the same as the source file.  If the receiving program is not runâАР
              ning  as  the super-user (or if --no-super was specified), only groups that the invoking user on the receiving side is a member of will be
              preserved.  Without this option, the group is set to the default group of the invoking user on the receiving side.

              The preservation of group information will associate matching names by default, but may fall back to using the ID number in  some  circumâАР
              stances (see also the --numeric-ids option for a full discussion).

       --devices
              This  option causes rsync to transfer character and block device files to the remote system to recreate these devices.  This option has no
              effect if the receiving rsync is not run as the super-user (see also the --super and --fake-super options).

       --specials
              This option causes rsync to transfer special files such as named sockets and fifos.

       -D     The -D option is equivalent to --devices --specials.

       --write-devices
              This tells rsync to treat a device on the receiving side as a regular file, allowing the writing of file data into a device.

              This option implies the --inplace option.

              Be careful using this, as you should know what devices are present on the receiving side of the transfer, especially if running  rsync  as
              root.

              This option is refused by an rsync daemon.

       --times, -t
              This  tells  rsync  to transfer modification times along with the files and update them on the remote system.  Note that if this option is
              not used, the optimization that excludes files that have not been modified cannot be effective; in other words, a missing -t  or  -a  will
              cause the next transfer to behave as if it used -I, causing all files to be updated (though rsync's delta-transfer algorithm will make the
              update fairly efficient if the files haven't actually changed, you're much better off using -t).

       --atimes, -U
              This tells rsync to set the access (use) times of the destination files to the same value as the source files.

              If repeated, it also sets the --open-noatime option, which can help you to make the sending and receiving systems  have  the  same  access
              times on the transferred files without needing to run rsync an extra time after a file is transferred.

              Note that some older rsync versions (prior to 3.2.0) may have been built with a pre-release --atimes patch that does not imply --open-noaâАР
              time when this option is repeated.

       --open-noatime
              This tells rsync to open files with the O_NOATIME flag (on systems that support it) to avoid changing the access time of  the  files  that
              are  being  transferred.  If your OS does not support the O_NOATIME flag then rsync will silently ignore this option.  Note also that some
              filesystems are mounted to avoid updating the atime on read access even without the O_NOATIME flag being set.

       --crtimes, -N,
              This tells rsync to set the create times (newness) of the destination files to the same value as the source files.

       --omit-dir-times, -O
              This tells rsync to omit directories when it is preserving modification times (see --times).  If NFS is sharing the directories on the reâАР
              ceiving side, it is a good idea to use -O.  This option is inferred if you use --backup without --backup-dir.

              This  option also has the side-effect of avoiding early creation of directories in incremental recursion copies.  The default --inc-recurâАР
              sive copying normally does an early-create pass of all the sub-directories in a parent directory in order for it to be able  to  then  set
              the  modify  time of the parent directory right away (without having to delay that until a bunch of recursive copying has finished).  This
              early-create idiom is not necessary if directory modify times are not being preserved, so it is skipped.  Since  early-create  directories
              don't have accurate mode, mtime, or ownership, the use of this option can help when someone wants to avoid these partially-finished direcâАР
              tories.

       --omit-link-times, -J
              This tells rsync to omit symlinks when it is preserving modification times (see --times).

       --super
              This tells the receiving side to attempt super-user activities even if the receiving rsync wasn't run by the super-user.  These activities
              include:  preserving  users via the --owner option, preserving all groups (not just the current user's groups) via the --group option, and
              copying devices via the --devices option.  This is useful for systems that allow such activities without being the  super-user,  and  also
              for ensuring that you will get errors if the receiving side isn't being run as the super-user.  To turn off super-user activities, the suâАР
              per-user can use --no-super.

       --fake-super
              When this option is enabled, rsync simulates super-user activities by saving/restoring the privileged attributes via special extended  atâАР
              tributes  that are attached to each file (as needed).  This includes the file's owner and group (if it is not the default), the file's deâАР
              vice info (device & special files are created as empty text files), and any permission bits that we won't allow to be set on the real file
              (e.g.  the  real  file  gets  u-s,g-s,o-t  for  safety)  or  that would limit the owner's access (since the real super-user can always acâАР
              cess/change a file, the files we create can always be accessed/changed by the creating user).  This option also handles  ACLs  (if  --acls
              was specified) and non-user extended attributes (if --xattrs was specified).

              This is a good way to backup data without using a super-user, and to store ACLs from incompatible systems.

              The  --fake-super  option only affects the side where the option is used.  To affect the remote side of a remote-shell connection, use the
              --remote-option (-M) option:

                  rsync -av -M--fake-super /src/ host:/dest/

              For a local copy, this option affects both the source and the destination.  If you wish a local copy to enable this option  just  for  the
              destination files, specify -M--fake-super.  If you wish a local copy to enable this option just for the source files, combine --fake-super
              with -M--super.

              This option is overridden by both --super and --no-super.

              See also the "fake super" setting in the daemon's rsyncd.conf file.

       --sparse, -S
              Try to handle sparse files efficiently so they take up less space on the destination.  If combined with --inplace the file  created  might
              not  end  up with sparse blocks with some combinations of kernel version and/or filesystem type.  If --whole-file is in effect (e.g. for a
              local copy) then it will always work because rsync truncates the file prior to writing out the updated version.

              Note that versions of rsync older than 3.1.3 will reject the combination of --sparse and --inplace.

       --preallocate
              This tells the receiver to allocate each destination file to its eventual size before writing data to the file.  Rsync will only  use  the
              real  filesystem-level  preallocation  support  provided  by Linux's fallocate(2) system call or Cygwin's posix_fallocate(3), not the slow
              glibc implementation that writes a null byte into each block.

              Without this option, larger files may not be entirely contiguous on the filesystem, but with this option rsync  will  probably  copy  more
              slowly.   If  the destination is not an extent-supporting filesystem (such as ext4, xfs, NTFS, etc.), this option may have no positive efâАР
              fect at all.

              If combined with --sparse, the file will only have sparse blocks (as opposed to allocated sequences of null bytes) if the  kernel  version
              and filesystem type support creating holes in the allocated data.

       --dry-run, -n
              This  makes  rsync perform a trial run that doesn't make any changes (and produces mostly the same output as a real run).  It is most comâАР
              monly used in combination with the --verbose, -v and/or --itemize-changes, -i options to see what an rsync command is going to  do  before
              one actually runs it.

              The  output  of  --itemize-changes is supposed to be exactly the same on a dry run and a subsequent real run (barring intentional trickery
              and system call failures); if it isn't, that's a bug.  Other output should be mostly unchanged, but may differ in some areas.  Notably,  a
              dry run does not send the actual data for file transfers, so --progress has no effect, the "bytes sent", "bytes received", "literal data",
              and "matched data" statistics are too small, and the "speedup" value is equivalent to a run where no file transfers were needed.

       --whole-file, -W
              This option disables rsync's delta-transfer algorithm, which causes all transferred files to be sent whole.  The transfer may be faster if
              this  option  is used when the bandwidth between the source and destination machines is higher than the bandwidth to disk (especially when
              the "disk" is actually a networked filesystem).  This is the default when both the source and destination are specified  as  local  paths,
              but only if no batch-writing option is in effect.

       --checksum-choice=STR, --cc=STR
              This option overrides the checksum algorithms.  If one algorithm name is specified, it is used for both the transfer checksums and (assumâАР
              ing --checksum is specified) the pre-transfer checksums.  If two comma-separated names are supplied, the first name affects  the  transfer
              checksums, and the second name affects the pre-transfer checksums (-c).

              The checksum options that you may be able to use are:

              o      auto (the default automatic choice)

              o      xxh128

              o      xxh3

              o      xxh64 (aka xxhash)

              o      md5

              o      md4

              o      none

              Run rsync --version to see the default checksum list compiled into your version (which may differ from the list above).

              If "none" is specified for the first (or only) name, the --whole-file option is forced on and no checksum verification is performed on the
              transferred data.  If "none" is specified for the second (or only) name, the --checksum option cannot be used.

              The "auto" option is the default, where rsync bases its algorithm choice on a negotiation between the client and the server as follows:

              When both sides of the transfer are at least 3.2.0, rsync chooses the first algorithm in the client's list of choices that is also in  the
              server's  list  of  choices.  If no common checksum choice is found, rsync exits with an error.  If the remote rsync is too old to support
              checksum negotiation, a value is chosen based on the protocol version (which chooses between MD5 and various flavors of MD4 based on  proâАР
              tocol age).

              The default order can be customized by setting the environment variable RSYNC_CHECKSUM_LIST to a space-separated list of acceptable checkâАР
              sum names.  If the string contains a "&" character, it is separated into the "client string & server string", otherwise  the  same  string
              applies to both.  If the string (or string portion) contains no non-whitespace characters, the default checksum list is used.  This method
              does not allow you to specify the transfer checksum separately from the pre-transfer checksum, and it  discards  "auto"  and  all  unknown
              checksum names.  A list with only invalid names results in a failed negotiation.

              The use of the --checksum-choice option overrides this environment list.

       --one-file-system, -x
              This  tells rsync to avoid crossing a filesystem boundary when recursing.  This does not limit the user's ability to specify items to copy
              from multiple filesystems, just rsync's recursion through the hierarchy of each directory that the user specified, and also the  analogous
              recursion  on  the  receiving side during deletion.  Also keep in mind that rsync treats a "bind" mount to the same device as being on the
              same filesystem.

              If this option is repeated, rsync omits all mount-point directories from the copy.  Otherwise, it includes  an  empty  directory  at  each
              mount-point  it  encounters (using the attributes of the mounted directory because those of the underlying mount-point directory are inacâАР
              cessible).

              If rsync has been told to collapse symlinks (via --copy-links or --copy-unsafe-links), a symlink to  a  directory  on  another  device  is
              treated like a mount-point.  Symlinks to non-directories are unaffected by this option.

       --existing, --ignore-non-existing
              This tells rsync to skip creating files (including directories) that do not exist yet on the destination.  If this option is combined with
              the --ignore-existing option, no files will be updated (which can be useful if all you want to do is delete extraneous files).

              This option is a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus  it  doesn't  affect
              deletions.  It just limits the files that the receiver requests to be transferred.

       --ignore-existing
              This tells rsync to skip updating files that already exist on the destination (this does not ignore existing directories, or nothing would
              get done).  See also --existing.

              This option is a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus  it  doesn't  affect
              deletions.  It just limits the files that the receiver requests to be transferred.

              This  option  can  be  useful for those doing backups using the --link-dest option when they need to continue a backup run that got interâАР
              rupted.  Since a --link-dest run is copied into a new directory hierarchy (when it is used properly), using --ignore-existing will  ensure
              that  the  already-handled  files  don't get tweaked (which avoids a change in permissions on the hard-linked files).  This does mean that
              this option is only looking at the existing files in the destination hierarchy itself.

       --remove-source-files
              This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the transfer and  have  been  sucâАР
              cessfully duplicated on the receiving side.

              Note  that you should only use this option on source files that are quiescent.  If you are using this to move files that show up in a parâАР
              ticular directory over to another host, make sure that the finished files get renamed into the source directory, not directly written into
              it,  so  that rsync can't possibly transfer a file that is not yet fully written.  If you can't first write the files into a different diâАР
              rectory, you should use a naming idiom that lets rsync avoid transferring files that are not yet finished (e.g. name  the  file  "foo.new"
              when it is written, rename it to "foo" when it is done, and then use the option --exclude='*.new' for the rsync transfer).

              Starting  with  3.1.0,  rsync will skip the sender-side removal (and output an error) if the file's size or modify time has not stayed unâАР
              changed.

       --delete
              This tells rsync to delete extraneous files from the receiving side (ones that aren't on the sending side), but only for  the  directories
              that  are  being  synchronized.  You must have asked rsync to send the whole directory (e.g. "dir" or "dir/") without using a wildcard for
              the directory's contents (e.g. "dir/*") since the wildcard is expanded by the shell and rsync thus gets a request to  transfer  individual
              files, not the files' parent directory.  Files that are excluded from the transfer are also excluded from being deleted unless you use the
              --delete-excluded option or mark the rules as only matching on the sending side (see the include/exclude modifiers  in  the  FILTER  RULES
              section).

              Prior  to  rsync  2.6.7, this option would have no effect unless --recursive was enabled.  Beginning with 2.6.7, deletions will also occur
              when --dirs (-d) is enabled, but only for directories whose contents are being copied.

              This option can be dangerous if used incorrectly! It is a very good idea to first try a run using the --dry-run option (-n)  to  see  what
              files are going to be deleted.

              If  the sending side detects any I/O errors, then the deletion of any files at the destination will be automatically disabled.  This is to
              prevent temporary filesystem failures (such as NFS errors) on the sending side from causing a massive deletion of files  on  the  destinaâАР
              tion.  You can override this with the --ignore-errors option.

              The  --delete  option  may  be combined with one of the --delete-WHEN options without conflict, as well as --delete-excluded.  However, if
              none of the --delete-WHEN options are specified, rsync will choose the --delete-during algorithm when talking to rsync 3.0.0 or newer, and
              the --delete-before algorithm when talking to an older rsync.  See also --delete-delay and --delete-after.

       --delete-before
              Request  that  the  file-deletions on the receiving side be done before the transfer starts.  See --delete (which is implied) for more deâАР
              tails on file-deletion.

              Deleting before the transfer is helpful if the filesystem is tight for space and removing extraneous files would help to make the transfer
              possible.   However,  it  does  introduce a delay before the start of the transfer, and this delay might cause the transfer to timeout (if
              --timeout was specified).  It also forces rsync to use the old, non-incremental recursion algorithm that requires rsync to  scan  all  the
              files in the transfer into memory at once (see --recursive).

       --delete-during, --del
              Request  that  the  file-deletions  on the receiving side be done incrementally as the transfer happens.  The per-directory delete scan is
              done right before each directory is checked for updates, so it behaves like a more efficient --delete-before, including  doing  the  deleâАР
              tions  prior to any per-directory filter files being updated.  This option was first added in rsync version 2.6.4.  See --delete (which is
              implied) for more details on file-deletion.

       --delete-delay
              Request that the file-deletions on the receiving side be computed during the transfer (like --delete-during), and then removed  after  the
              transfer  completes.   This  is  useful when combined with --delay-updates and/or --fuzzy, and is more efficient than using --delete-after
              (but can behave differently, since --delete-after computes the deletions in a separate pass after all updates are done).  If the number of
              removed  files overflows an internal buffer, a temporary file will be created on the receiving side to hold the names (it is removed while
              open, so you shouldn't see it during the transfer).  If the creation of the temporary file fails, rsync will try to  fall  back  to  using
              --delete-after  (which  it  cannot  do  if --recursive is doing an incremental scan).  See --delete (which is implied) for more details on
              file-deletion.

       --delete-after
              Request that the file-deletions on the receiving side be done after the transfer has completed.  This is useful if  you  are  sending  new
              per-directory  merge  files  as  a  part  of the transfer and you want their exclusions to take effect for the delete phase of the current
              transfer.  It also forces rsync to use the old, non-incremental recursion algorithm that requires rsync to  scan  all  the  files  in  the
              transfer into memory at once (see --recursive). See --delete (which is implied) for more details on file-deletion.

       --delete-excluded
              In addition to deleting the files on the receiving side that are not on the sending side, this tells rsync to also delete any files on the
              receiving side that are excluded (see --exclude).  See the FILTER RULES section for a way to make individual exclusions behave this way on
              the receiver, and for a way to protect files from --delete-excluded.  See --delete (which is implied) for more details on file-deletion.

       --ignore-missing-args
              When  rsync  is  first processing the explicitly requested source files (e.g.  command-line arguments or --files-from entries), it is norâАР
              mally an error if the file cannot be found.  This option suppresses that error, and does not try to transfer the file.  This does not  afâАР
              fect subsequent vanished-file errors if a file was initially found to be present and later is no longer there.

       --delete-missing-args
              This  option  takes the behavior of (the implied) --ignore-missing-args option a step farther: each missing arg will become a deletion reâАР
              quest of the corresponding destination file on the receiving side (should it exist).  If the destination file is a non-empty directory, it
              will  only be successfully deleted if --force or --delete are in effect.  Other than that, this option is independent of any other type of
              delete processing.

              The missing source files are represented by special file-list entries which display as a "*missing" entry in the --list-only output.

       --ignore-errors
              Tells --delete to go ahead and delete files even when there are I/O errors.

       --force
              This option tells rsync to delete a non-empty directory when it is to be replaced by a non-directory.  This is only relevant if  deletions
              are not active (see --delete for details).

              Note  for  older  rsync versions: --force used to still be required when using --delete-after, and it used to be non-functional unless the
              --recursive option was also enabled.

       --max-delete=NUM
              This tells rsync not to delete more than NUM files or directories.  If that limit is exceeded, all further deletions are  skipped  through
              the end of the transfer.  At the end, rsync outputs a warning (including a count of the skipped deletions) and exits with an error code of
              25 (unless some more important error condition also occurred).

              Beginning with version 3.0.0, you may specify --max-delete=0 to be warned about any extraneous files in the destination  without  removing
              any of them.  Older clients interpreted this as "unlimited", so if you don't know what version the client is, you can use the less obvious
              --max-delete=-1 as a backward-compatible way to specify that no deletions be allowed (though really old  versions  didn't  warn  when  the
              limit was exceeded).

       --max-size=SIZE
              This  tells rsync to avoid transferring any file that is larger than the specified SIZE.  A numeric value can be suffixed with a string to
              indicate the numeric units or left unqualified to specify bytes.  Feel free to use a fractional value along with the units, such as --max-
              size=1.5m.

              This  option  is  a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus it doesn't affect
              deletions.  It just limits the files that the receiver requests to be transferred.

              The first letter of a units string can be B (bytes), K (kilo), M (mega), G (giga), T (tera), or P (peta).  If the string is a single  char
              or  has  "ib"  added  to it (e.g. "G" or "GiB") then the units are multiples of 1024.  If you use a two-letter suffix that ends with a "B"
              (e.g. "kb") then you get units that are multiples of 1000.  The string's letters can be any mix of upper and lower-case that you  want  to
              use.

              Finally,  if the string ends with either "+1" or "-1", it is offset by one byte in the indicated direction.  The largest possible value is
              usually 8192P-1.

              Examples: --max-size=1.5mb-1 is 1499999 bytes, and --max-size=2g+1 is 2147483649 bytes.

              Note that rsync versions prior to 3.1.0 did not allow --max-size=0.

       --min-size=SIZE
              This tells rsync to avoid transferring any file that is smaller than the specified SIZE, which can help in not  transferring  small,  junk
              files.  See the --max-size option for a description of SIZE and other information.

              Note that rsync versions prior to 3.1.0 did not allow --min-size=0.

       --max-alloc=SIZE
              By default rsync limits an individual malloc/realloc to about 1GB in size.  For most people this limit works just fine and prevents a proâАР
              tocol error causing rsync to request massive amounts of memory.  However, if you have many millions of files in a transfer, a large amount
              of server memory, and you don't want to split up your transfer into multiple parts, you can increase the per-allocation limit to something
              larger and rsync will consume more memory.

              Keep in mind that this is not a limit on the total size of allocated memory.  It is a sanity-check value for each individual allocation.

              See the --max-size option for a description of how SIZE can be specified.  The default suffix if none is given is bytes.

              Beginning in 3.2.3, a value of 0 specifies no limit.

              You can set a default value using the environment variable RSYNC_MAX_ALLOC using the same SIZE values as supported by this option.  If the
              remote  rsync  doesn't understand the --max-alloc option, you can override an environmental value by specifying --max-alloc=1g, which will
              make rsync avoid sending the option to the remote side (because "1G" is the default).

       --block-size=SIZE, -B
              This forces the block size used in rsync's delta-transfer algorithm to a fixed value.  It is normally selected based on the size  of  each
              file being updated.  See the technical report for details.

              Beginning  in  3.2.3  the  SIZE  can be specified with a suffix as detailed in the --max-size option.  Older versions only accepted a byte
              count.

       --rsh=COMMAND, -e
              This option allows you to choose an alternative remote shell program to use for communication between  the  local  and  remote  copies  of
              rsync.  Typically, rsync is configured to use ssh by default, but you may prefer to use rsh on a local network.

              If  this  option  is  used  with [user@]host::module/path, then the remote shell COMMAND will be used to run an rsync daemon on the remote
              host, and all data will be transmitted through that remote shell connection, rather than through a direct socket connection to  a  running
              rsync daemon on the remote host.  See the section "USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION" above.

              Beginning with rsync 3.2.0, the RSYNC_PORT environment variable will be set when a daemon connection is being made via a remote-shell conâАР
              nection.  It is set to 0 if the default daemon port is being assumed, or it is set to the value of the rsync port that was  specified  via
              either  the  --port option or a non-empty port value in an rsync:// URL.  This allows the script to discern if a non-default port is being
              requested, allowing for things such as an SSL or stunnel helper script to connect to a default or alternate port.

              Command-line arguments are permitted in COMMAND provided that COMMAND is presented to rsync as a single argument.   You  must  use  spaces
              (not  tabs or other whitespace) to separate the command and args from each other, and you can use single- and/or double-quotes to preserve
              spaces in an argument (but not backslashes).  Note that doubling a single-quote inside a single-quoted string gives  you  a  single-quote;
              likewise  for  double-quotes  (though  you need to pay attention to which quotes your shell is parsing and which quotes rsync is parsing).
              Some examples:

                  -e 'ssh -p 2234'
                  -e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'

              (Note that ssh users can alternately customize site-specific connect options in their .ssh/config file.)

              You can also choose the remote shell program using the RSYNC_RSH environment variable, which accepts the same range of values as -e.

              See also the --blocking-io option which is affected by this option.

       --rsync-path=PROGRAM
              Use this to specify what program is to be run on the remote machine to start-up rsync.  Often used when rsync is not in  the  default  reâАР
              mote-shell's  path (e.g. --rsync-path=/usr/local/bin/rsync).  Note that PROGRAM is run with the help of a shell, so it can be any program,
              script, or command sequence you'd care to run, so long as it does not corrupt the standard-in & standard-out that rsync is using to commuâАР
              nicate.

              One tricky example is to set a different default directory on the remote machine for use with the --relative option.  For instance:

                  rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/

       --remote-option=OPTION, -M
              This  option  is used for more advanced situations where you want certain effects to be limited to one side of the transfer only.  For inâАР
              stance, if you want to pass --log-file=FILE and --fake-super to the remote system, specify it like this:

                  rsync -av -M --log-file=foo -M--fake-super src/ dest/

              If you want to have an option affect only the local side of a transfer when it normally affects both sides, send its negation to  the  reâАР
              mote side.  Like this:

                  rsync -av -x -M--no-x src/ dest/

              Be  cautious  using  this,  as it is possible to toggle an option that will cause rsync to have a different idea about what data to expect
              next over the socket, and that will make it fail in a cryptic fashion.

              Note that it is best to use a separate --remote-option for each option you want to pass.  This makes your usage compatible with the --proâАР
              tect-args  option.   If  that  option is off, any spaces in your remote options will be split by the remote shell unless you take steps to
              protect them.

              When performing a local transfer, the "local" side is the sender and the "remote" side is the receiver.

              Note some versions of the popt option-parsing library have a bug in them that prevents you from using an adjacent arg with an equal in  it
              next  to  a  short  option letter (e.g. -M--log-file=/tmp/foo).  If this bug affects your version of popt, you can use the version of popt
              that is included with rsync.

       --cvs-exclude, -C
              This is a useful shorthand for excluding a broad range of files that you often don't want to transfer between systems.  It uses a  similar
              algorithm to CVS to determine if a file should be ignored.

              The  exclude list is initialized to exclude the following items (these initial items are marked as perishable -- see the FILTER RULES secâАР
              tion):

                  RCS SCCS CVS CVS.adm RCSLOG cvslog.*  tags TAGS .make.state .nse_depinfo ~  . , _$* *$ *.old *.bak *.BAK *.orig .rej .del- *.a
                  *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/

              then,  files  listed in a $HOME/.cvsignore are added to the list and any files listed in the CVSIGNORE environment variable (all cvsignore
              names are delimited by whitespace).

              Finally, any file is ignored if it is in the same directory as a .cvsignore file and matches one of the patterns listed  therein.   Unlike
              rsync's filter/exclude files, these patterns are split on whitespace.  See the cvs(1) manual for more information.

              If  you're  combining  -C with your own --filter rules, you should note that these CVS excludes are appended at the end of your own rules,
              regardless of where the -C was placed on the command-line.  This makes them a lower priority than any rules you specified explicitly.   If
              you  want to control where these CVS excludes get inserted into your filter rules, you should omit the -C as a command-line option and use
              a combination of --filter=:C and --filter=-C (either on your command-line or by putting the ":C" and "-C" rules into a  filter  file  with
              your  other  rules).  The first option turns on the per-directory scanning for the .cvsignore file.  The second option does a one-time imâАР
              port of the CVS excludes mentioned above.

       --filter=RULE, -f
              This option allows you to add rules to selectively exclude certain files from the list of files to be transferred.  This is most useful in
              combination with a recursive transfer.

              You  may  use  as  many --filter options on the command line as you like to build up the list of files to exclude.  If the filter contains
              whitespace, be sure to quote it so that the shell gives the rule to rsync as a single argument.  The text below also mentions that you can
              use an underscore to replace the space that separates a rule from its arg.

              See the FILTER RULES section for detailed information on this option.

       -F     The -F option is a shorthand for adding two --filter rules to your command.  The first time it is used is a shorthand for this rule:

                  --filter='dir-merge /.rsync-filter'

              This  tells rsync to look for per-directory .rsync-filter files that have been sprinkled through the hierarchy and use their rules to filâАР
              ter the files in the transfer.  If -F is repeated, it is a shorthand for this rule:

                  --filter='exclude .rsync-filter'

              This filters out the .rsync-filter files themselves from the transfer.

              See the FILTER RULES section for detailed information on how these options work.

       --exclude=PATTERN
              This option is a simplified form of the --filter option that defaults to an exclude rule and does not allow the full  rule-parsing  syntax
              of normal filter rules.

              See the FILTER RULES section for detailed information on this option.

       --exclude-from=FILE
              This option is related to the --exclude option, but it specifies a FILE that contains exclude patterns (one per line).  Blank lines in the
              file are ignored, as are whole-line comments that start with ';' or '#' (filename rules that contain those characters are unaffected).

              If FILE is '-', the list will be read from standard input.

       --include=PATTERN
              This option is a simplified form of the --filter option that defaults to an include rule and does not allow the full  rule-parsing  syntax
              of normal filter rules.

              See the FILTER RULES section for detailed information on this option.

       --include-from=FILE
              This option is related to the --include option, but it specifies a FILE that contains include patterns (one per line).  Blank lines in the
              file are ignored, as are whole-line comments that start with ';' or '#' (filename rules that contain those characters are unaffected).

              If FILE is '-', the list will be read from standard input.

       --files-from=FILE
              Using this option allows you to specify the exact list of files to transfer (as read from the specified FILE or '-' for  standard  input).
              It also tweaks the default behavior of rsync to make transferring just the specified files and directories easier:

              o      The  --relative (-R) option is implied, which preserves the path information that is specified for each item in the file (use --no-
                     relative or --no-R if you want to turn that off).

              o      The --dirs (-d) option is implied, which will create directories specified in the list on the destination rather than noisily skipâАР
                     ping them (use --no-dirs or --no-d if you want to turn that off).

              o      The --archive (-a) option's behavior does not imply --recursive (-r), so specify it explicitly, if you want it.

              o      These side-effects change the default state of rsync, so the position of the --files-from option on the command-line has no bearing
                     on how other options are parsed (e.g. -a works the same before or after --files-from, as does --no-R and all other options).

              The filenames that are read from the FILE are all relative to the source dir -- any leading slashes are removed and no ".." references are
              allowed to go higher than the source dir.  For example, take this command:

                  rsync -a --files-from=/tmp/foo /usr remote:/backup

              If  /tmp/foo  contains the string "bin" (or even "/bin"), the /usr/bin directory will be created as /backup/bin on the remote host.  If it
              contains "bin/" (note the trailing slash), the immediate contents of the directory would also be sent (without needing  to  be  explicitly
              mentioned  in  the  file --  this began in version 2.6.4).  In both cases, if the -r option was enabled, that dir's entire hierarchy would
              also be transferred (keep in mind that -r needs to be specified explicitly with --files-from, since it is not implied by -a).   Also  note
              that the effect of the (enabled by default) --relative option is to duplicate only the path info that is read from the file -- it does not
              force the duplication of the source-spec path (/usr in this case).

              In addition, the --files-from file can be read from the remote host instead of the local host if you specify a "host:"  in  front  of  the
              file  (the  host must match one end of the transfer).  As a short-cut, you can specify just a prefix of ":" to mean "use the remote end of
              the transfer".  For example:

                  rsync -a --files-from=:/path/file-list src:/ /tmp/copy

              This would copy all the files specified in the /path/file-list file that was located on the remote "src" host.

              If the --iconv and --protect-args options are specified and the --files-from filenames are being sent from one host to another, the  fileâАР
              names will be translated from the sending host's charset to the receiving host's charset.

              NOTE: sorting the list of files in the --files-from input helps rsync to be more efficient, as it will avoid re-visiting the path elements
              that are shared between adjacent entries.  If the input is not sorted, some path elements (implied directories) may end up  being  scanned
              multiple times, and rsync will eventually unduplicate them after they get turned into file-list elements.

       --from0, -0
              This  tells  rsync  that the rules/filenames it reads from a file are terminated by a null ('\0') character, not a NL, CR, or CR+LF.  This
              affects --exclude-from, --include-from, --files-from, and any merged files specified in a --filter rule.  It does not affect --cvs-exclude
              (since all names read from a .cvsignore file are split on whitespace).

       --protect-args, -s
              This option sends all filenames and most options to the remote rsync without allowing the remote shell to interpret them.  This means that
              spaces are not split in names, and any non-wildcard special characters are not translated (such as ~, $, ;, &, etc.).  Wildcards  are  exâАР
              panded on the remote host by rsync (instead of the shell doing it).

              If  you  use this option with --iconv, the args related to the remote side will also be translated from the local to the remote character-
              set.  The translation happens before wild-cards are expanded.  See also the --files-from option.

              You may also control this option via the RSYNC_PROTECT_ARGS environment variable.  If this variable has a non-zero value, this option will
              be  enabled by default, otherwise it will be disabled by default.  Either state is overridden by a manually specified positive or negative
              version of this option (note that --no-s and --no-protect-args are the negative versions).  Since this  option  was  first  introduced  in
              3.0.0, you'll need to make sure it's disabled if you ever need to interact with a remote rsync that is older than that.

              Rsync  can  also  be configured (at build time) to have this option enabled by default (with is overridden by both the environment and the
              command-line).  Run rsync --version to check if this is the case, as it will display "default protect-args" or "optional protect-args" deâАР
              pending on how it was compiled.

              This option will eventually become a new default setting at some as-yet-undetermined point in the future.

       --copy-as=USER[:GROUP]
              This  option  instructs  rsync to use the USER and (if specified after a colon) the GROUP for the copy operations.  This only works if the
              user that is running rsync has the ability to change users.  If the group is not specified then the user's default groups are used.

              This option can help to reduce the risk of an rsync being run as root into or out of a directory that might have live changes happening to
              it  and  you  want to make sure that root-level read or write actions of system files are not possible.  While you could alternatively run
              all of rsync as the specified user, sometimes you need the root-level host-access credentials to be used, so this  allows  rsync  to  drop
              root for the copying part of the operation after the remote-shell or daemon connection is established.

              The  option only affects one side of the transfer unless the transfer is local, in which case it affects both sides.  Use the --remote-opâАР
              tion to affect the remote side, such as -M--copy-as=joe.  For a local transfer, the lsh (or lsh.sh) support file  provides  a  local-shell
              helper  script that can be used to allow a "localhost:" or "lh:" host-spec to be specified without needing to setup any remote shells, alâАР
              lowing you to specify remote options that affect the side of the transfer that is using the host-spec (and using hostname "lh" avoids  the
              overriding of the remote directory to the user's home dir).

              For example, the following rsync writes the local files as user "joe":

                  sudo rsync -aiv --copy-as=joe host1:backups/joe/ /home/joe/

              This  makes all files owned by user "joe", limits the groups to those that are available to that user, and makes it impossible for the joe
              user to do a timed exploit of the path to induce a change to a file that the joe user has no permissions to change.

              The following command does a local copy into the "dest/" dir as user "joe" (assuming you've installed  support/lsh  into  a  dir  on  your
              $PATH):

                  sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/

       --temp-dir=DIR, -T
              This  option  instructs  rsync  to use DIR as a scratch directory when creating temporary copies of the files transferred on the receiving
              side.  The default behavior is to create each temporary file in the same directory as the associated  destination  file.   Beginning  with
              rsync  3.1.1,  the  temp-file  names inside the specified DIR will not be prefixed with an extra dot (though they will still have a random
              suffix added).

              This option is most often used when the receiving disk partition does not have enough free space to hold a copy of the largest file in the
              transfer.  In this case (i.e. when the scratch directory is on a different disk partition), rsync will not be able to rename each received
              temporary file over the top of the associated destination file, but instead must copy it into place.  Rsync does this by copying the  file
              over  the  top  of the destination file, which means that the destination file will contain truncated data during this copy.  If this were
              not done this way (even if the destination file were first removed, the data locally copied to a temporary file in the destination  direcâАР
              tory,  and  then  renamed into place) it would be possible for the old file to continue taking up disk space (if someone had it open), and
              thus there might not be enough room to fit the new version on the disk at the same time.

              If you are using this option for reasons other than a shortage of disk space, you may wish to combine it with the --delay-updates  option,
              which  will  ensure  that all copied files get put into subdirectories in the destination hierarchy, awaiting the end of the transfer.  If
              you don't have enough room to duplicate all the arriving files on the destination partition, another way to tell  rsync  that  you  aren't
              overly concerned about disk space is to use the --partial-dir option with a relative path; because this tells rsync that it is OK to stash
              off a copy of a single file in a subdir in the destination hierarchy, rsync will use the partial-dir as a staging area to bring  over  the
              copied file, and then rename it into place from there. (Specifying a --partial-dir with an absolute path does not have this side-effect.)

       --fuzzy, -y
              This option tells rsync that it should look for a basis file for any destination file that is missing.  The current algorithm looks in the
              same directory as the destination file for either a file that has an identical size and modified-time,  or  a  similarly-named  file.   If
              found, rsync uses the fuzzy basis file to try to speed up the transfer.

              If  the  option  is  repeated,  the  fuzzy scan will also be done in any matching alternate destination directories that are specified via
              --compare-dest, --copy-dest, or --link-dest.

              Note that the use of the --delete option might get rid of any potential fuzzy-match files, so either use --delete-after  or  specify  some
              filename exclusions if you need to prevent this.

       --compare-dest=DIR
              This  option  instructs  rsync to use DIR on the destination machine as an additional hierarchy to compare destination files against doing
              transfers (if the files are missing in the destination directory).  If a file is found in DIR that is identical to the sender's file,  the
              file  will  NOT  be transferred to the destination directory.  This is useful for creating a sparse backup of just files that have changed
              from an earlier backup.  This option is typically used to copy into an empty (or newly created) directory.

              Beginning in version 2.6.4, multiple --compare-dest directories may be provided, which will cause rsync to search the list  in  the  order
              specified for an exact match.  If a match is found that differs only in attributes, a local copy is made and the attributes updated.  If a
              match is not found, a basis file from one of the DIRs will be selected to try to speed up the transfer.

              If DIR is a relative path, it is relative to the destination directory.  See also --copy-dest and --link-dest.

              NOTE: beginning with version 3.1.0, rsync will remove a file from a non-empty destination hierarchy if an exact match is found in  one  of
              the compare-dest hierarchies (making the end result more closely match a fresh copy).

       --copy-dest=DIR
              This  option behaves like --compare-dest, but rsync will also copy unchanged files found in DIR to the destination directory using a local
              copy.  This is useful for doing transfers to a new destination while leaving existing files intact, and then doing  a  flash-cutover  when
              all files have been successfully transferred.

              Multiple  --copy-dest directories may be provided, which will cause rsync to search the list in the order specified for an unchanged file.
              If a match is not found, a basis file from one of the DIRs will be selected to try to speed up the transfer.

              If DIR is a relative path, it is relative to the destination directory.  See also --compare-dest and --link-dest.

       --link-dest=DIR
              This option behaves like --copy-dest, but unchanged files are hard linked from DIR to the destination directory.  The files must be  idenâАР
              tical in all preserved attributes (e.g. permissions, possibly ownership) in order for the files to be linked together.  An example:

                  rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/

              If  file's  aren't  linking,  double-check their attributes.  Also check if some attributes are getting forced outside of rsync's control,
              such a mount option that squishes root to a single user, or mounts a removable drive with generic ownership (such as OS X's "Ignore ownerâАР
              ship on this volume" option).

              Beginning in version 2.6.4, multiple --link-dest directories may be provided, which will cause rsync to search the list in the order specâАР
              ified for an exact match (there is a limit of 20 such directories).  If a match is found that differs only in attributes, a local copy  is
              made  and  the  attributes  updated.   If  a match is not found, a basis file from one of the DIRs will be selected to try to speed up the
              transfer.

              This option works best when copying into an empty destination hierarchy, as existing files may get their attributes tweaked, and that  can
              affect  alternate  destination files via hard-links.  Also, itemizing of changes can get a bit muddled.  Note that prior to version 3.1.0,
              an alternate-directory exact match would never be found (nor linked into the destination) when a destination file already exists.

              Note that if you combine this option with --ignore-times, rsync will not link any files together because it only links identical files toâАР
              gether as a substitute for transferring the file, never as an additional check after the file is updated.

              If DIR is a relative path, it is relative to the destination directory.  See also --compare-dest and --copy-dest.

              Note  that  rsync  versions prior to 2.6.1 had a bug that could prevent --link-dest from working properly for a non-super-user when -o was
              specified (or implied by -a).  You can work-around this bug by avoiding the -o option when sending to an old rsync.

       --compress, -z
              With this option, rsync compresses the file data as it is sent to the destination machine, which reduces the amount of data  being  transâАР
              mitted -- something that is useful over a slow connection.

              Rsync supports multiple compression methods and will choose one for you unless you force the choice using the --compress-choice (--zc) opâАР
              tion.

              Run rsync --version to see the default compress list compiled into your version.

              When both sides of the transfer are at least 3.2.0, rsync chooses the first algorithm in the client's list of choices that is also in  the
              server's  list  of  choices.  If no common compress choice is found, rsync exits with an error.  If the remote rsync is too old to support
              checksum negotiation, its list is assumed to be "zlib".

              The default order can be customized by setting the environment variable RSYNC_COMPRESS_LIST to a space-separated list of  acceptable  comâАР
              pression  names.   If  the  string  contains a "&" character, it is separated into the "client string & server string", otherwise the same
              string applies to both.  If the string (or string portion) contains no non-whitespace characters, the default compress list is used.   Any
              unknown compression names are discarded from the list, but a list with only invalid names results in a failed negotiation.

              There  are  some  older rsync versions that were configured to reject a -z option and require the use of -zz because their compression liâАР
              brary was not compatible with the default zlib compression method.  You can usually ignore this weirdness unless  the  rsync  server  comâАР
              plains and tells you to specify -zz.

              See also the --skip-compress option for the default list of file suffixes that will be transferred with no (or minimal) compression.

       --compress-choice=STR, --zc=STR
              This  option  can be used to override the automatic negotiation of the compression algorithm that occurs when --compress is used.  The opâАР
              tion implies --compress unless "none" was specified, which instead implies --no-compress.

              The compression options that you may be able to use are:

              o      zstd

              o      lz4

              o      zlibx

              o      zlib

              o      none

              Run rsync --version to see the default compress list compiled into your version (which may differ from the list above).

              Note that if you see an error about an option named --old-compress or --new-compress,  this  is  rsync  trying  to  send  the  --compress-
              choice=zlib  or  --compress-choice=zlibx option in a backward-compatible manner that more rsync versions understand.  This error indicates
              that the older rsync version on the server will not allow you to force the compression type.

              Note that the "zlibx" compression algorithm is just the "zlib" algorithm with matched data excluded from the compression stream (to try to
              make it more compatible with an external zlib implementation).

       --compress-level=NUM, --zl=NUM
              Explicitly  set the compression level to use (see --compress, -z) instead of letting it default.  The --compress option is implied as long
              as the level chosen is not a "don't compress" level for the compression algorithm that is in effect (e.g. zlib compression treats level  0
              as "off").

              The  level  values  vary  depending on the checksum in effect.  Because rsync will negotiate a checksum choice by default (when the remote
              rsync is new enough), it can be good to combine this option with a --compress-choice (--zc) option unless you're sure of the choice in efâАР
              fect.  For example:

                  rsync -aiv --zc=zstd --zl=22 host:src/ dest/

              For  zlib & zlibx compression the valid values are from 1 to 9 with 6 being the default.  Specifying 0 turns compression off, and specifyâАР
              ing -1 chooses the default of 6.

              For zstd compression the valid values are from -131072 to 22 with 3 being the default. Specifying 0 chooses the default of 3.

              For lz4 compression there are no levels, so the value is always 0.

              If you specify a too-large or too-small value, the number is silently limited to a valid value.  This allows you to specify something like
              --zl=999999999 and be assured that you'll end up with the maximum compression level no matter what algorithm was chosen.

              If  you  want to know the compression level that is in effect, specify --debug=nstr to see the "negotiated string" results.  This will reâАР
              port something like "Client compress: zstd (level 3)" (along with the checksum choice in effect).

       --skip-compress=LIST
              Override the list of file suffixes that will be compressed as little as possible.  Rsync sets the compression level on  a  per-file  basis
              based  on  the  file's  suffix.  If the compression algorithm has an "off" level (such as zlib/zlibx) then no compression occurs for those
              files.  Other algorithms that support changing the streaming level on-the-fly will have the level minimized to reduces the  CPU  usage  as
              much as possible for a matching file.  At this time, only zlib & zlibx compression support this changing of levels on a per-file basis.

              The LIST should be one or more file suffixes (without the dot) separated by slashes (/).  You may specify an empty string to indicate that
              no files should be skipped.

              Simple character-class matching is supported: each must consist of a list of letters inside the square brackets (e.g. no special  classes,
              such as "[:alpha:]", are supported, and '-' has no special meaning).

              The characters asterisk (*) and question-mark (?) have no special meaning.

              Here's an example that specifies 6 suffixes to skip (since 1 of the 5 rules matches 2 suffixes):

                  --skip-compress=gz/jpg/mp[34]/7z/bz2

              The default file suffixes in the skip-compress list in this version of rsync are:

                  3g2  3gp  7z aac ace apk avi bz2 deb dmg ear f4v flac flv gpg gz iso jar jpeg jpg lrz lz lz4 lzma lzo m1a m1v m2a m2ts m2v m4a m4b m4p
                  m4r m4v mka mkv mov mp1 mp2 mp3 mp4 mpa mpeg mpg mpv mts odb odf odg odi odm odp ods odt oga ogg ogm ogv ogx opus otg oth otp ots  ott
                  oxt png qt rar rpm rz rzip spx squashfs sxc sxd sxg sxm sxw sz tbz tbz2 tgz tlz ts txz tzo vob war webm webp xz z zip zst

              This  list  will  be replaced by your --skip-compress list in all but one situation: a copy from a daemon rsync will add your skipped sufâАР
              fixes to its list of non-compressing files (and its list may be configured to a different default).

       --numeric-ids
              With this option rsync will transfer numeric group and user IDs rather than using user and group names and mapping them at both ends.

              By default rsync will use the username and groupname to determine what ownership to give files.  The special uid 0 and the special group 0
              are never mapped via user/group names even if the --numeric-ids option is not specified.

              If a user or group has no name on the source system or it has no match on the destination system, then the numeric ID from the source sysâАР
              tem is used instead.  See also the comments on the "use chroot" setting in the rsyncd.conf manpage for information on how the chroot  setâАР
              ting affects rsync's ability to look up the names of the users and groups and what you can do about it.

       --usermap=STRING, --groupmap=STRING
              These  options  allow  you  to specify users and groups that should be mapped to other values by the receiving side.  The STRING is one or
              more FROM:TO pairs of values separated by commas.  Any matching FROM value from the sender is replaced with a TO value from the  receiver.
              You may specify usernames or user IDs for the FROM and TO values, and the FROM value may also be a wild-card string, which will be matched
              against the sender's names (wild-cards do NOT match against ID numbers, though see below for why a '*' matches everything).  You  may  inâАР
              stead specify a range of ID numbers via an inclusive range: LOW-HIGH.  For example:

                  --usermap=0-99:nobody,wayne:admin,*:normal --groupmap=usr:1,1:usr

              The  first  match  in the list is the one that is used.  You should specify all your user mappings using a single --usermap option, and/or
              all your group mappings using a single --groupmap option.

              Note that the sender's name for the 0 user and group are not transmitted to the receiver, so you should either match these values using  a
              0, or use the names in effect on the receiving side (typically "root").  All other FROM names match those in use on the sending side.  All
              TO names match those in use on the receiving side.

              Any IDs that do not have a name on the sending side are treated as having an empty name for the purpose of matching.  This allows them  to
              be matched via a "*" or using an empty name.  For instance:

                  --usermap=:nobody --groupmap=*:nobody

              When the --numeric-ids option is used, the sender does not send any names, so all the IDs are treated as having an empty name.  This means
              that you will need to specify numeric FROM values if you want to map these nameless IDs to different values.

              For the --usermap option to have any effect, the -o (--owner) option must be used (or implied), and the receiver will need to  be  running
              as  a  super-user  (see also the --fake-super option).  For the --groupmap option to have any effect, the -g (--group) option must be used
              (or implied), and the receiver will need to have permissions to set that group.

              If your shell complains about the wildcards, use --protect-args (-s).

       --chown=USER:GROUP
              This option forces all files to be owned by USER with group GROUP.  This is a simpler interface than using --usermap  and  --groupmap  diâАР
              rectly,  but  it  is implemented using those options internally, so you cannot mix them.  If either the USER or GROUP is empty, no mapping
              for the omitted user/group will occur.  If GROUP is empty, the trailing colon may be omitted, but if USER is empty, a leading  colon  must
              be supplied.

              If  you  specify "--chown=foo:bar", this is exactly the same as specifying "--usermap=:foo --groupmap=:bar", only easier.  If your shell
              complains about the wildcards, use --protect-args (-s).

       --timeout=SECONDS
              This option allows you to set a maximum I/O timeout in seconds.  If no data is transferred for the specified time then  rsync  will  exit.
              The default is 0, which means no timeout.

       --contimeout=SECONDS
              This option allows you to set the amount of time that rsync will wait for its connection to an rsync daemon to succeed.  If the timeout is
              reached, rsync exits with an error.

       --address=ADDRESS
              By default rsync will bind to the wildcard address when connecting to an rsync daemon.  The --address option allows you to specify a  speâАР
              cific IP address (or hostname) to bind to.  See also this option in the --daemon mode section.

       --port=PORT
              This  specifies an alternate TCP port number to use rather than the default of 873.  This is only needed if you are using the double-colon
              (::) syntax to connect with an rsync daemon (since the URL syntax has a way to specify the port as a part of the URL).  See also this  opâАР
              tion in the --daemon mode section.

       --sockopts=OPTIONS
              This  option  can provide endless fun for people who like to tune their systems to the utmost degree.  You can set all sorts of socket opâАР
              tions which may make transfers faster (or slower!).  Read the man page for the setsockopt() system call for details on some of the options
              you may be able to set.  By default no special socket options are set.  This only affects direct socket connections to a remote rsync daeâАР
              mon.

              This option also exists in the --daemon mode section.

       --blocking-io
              This tells rsync to use blocking I/O when launching a remote shell transport.  If the remote shell is either rsh or remsh, rsync  defaults
              to using blocking I/O, otherwise it defaults to using non-blocking I/O. (Note that ssh prefers non-blocking I/O.)

       --outbuf=MODE
              This  sets  the  output buffering mode.  The mode can be None (aka Unbuffered), Line, or Block (aka Full).  You may specify as little as a
              single letter for the mode, and use upper or lower case.

              The main use of this option is to change Full buffering to Line buffering when rsync's output is going to a file or pipe.

       --itemize-changes, -i
              Requests a simple itemized list of the changes that are being made to each file, including attribute changes.  This is exactly the same as
              specifying  --out-format='%i %n%L'.   If you repeat the option, unchanged files will also be output, but only if the receiving rsync is at
              least version 2.6.7 (you can use -vv with older versions of rsync, but that also turns on the output of other verbose messages).

              The "%i" escape has a cryptic output that is 11 letters long.  The general format is like the string YXcstpoguax, where Y is  replaced  by
              the  type  of update being done, X is replaced by the file-type, and the other letters represent attributes that may be output if they are
              being modified.

              The update types that replace the Y are as follows:

              o      A < means that a file is being transferred to the remote host (sent).

              o      A > means that a file is being transferred to the local host (received).

              o      A c means that a local change/creation is occurring for the item (such as the creation of a directory or the changing of a symlink,
                     etc.).

              o      A h means that the item is a hard link to another item (requires --hard-links).

              o      A . means that the item is not being updated (though it might have attributes that are being modified).

              o      A * means that the rest of the itemized-output area contains a message (e.g. "deleting").

              The file-types that replace the X are: f for a file, a d for a directory, an L for a symlink, a D for a device, and a S for a special file
              (e.g. named sockets and fifos).

              The other letters in the string indicate if some attributes of the file have changed, as follows:

              o      "." - the attribute is unchanged.

              o      "+" - the file is newly created.

              o      " " - all the attributes are unchanged (all dots turn to spaces).

              o      "?" - the change is unknown (when the remote rsync is old).

              o      A letter indicates an attribute is being updated.

              The attribute that is associated with each letter is as follows:

              o      A c means either that a regular file has a different checksum (requires --checksum) or that a symlink, device, or special file  has
                     a  changed  value.  Note that if you are sending files to an rsync prior to 3.0.1, this change flag will be present only for checkâАР
                     sum-differing regular files.

              o      A s means the size of a regular file is different and will be updated by the file transfer.

              o      A t means the modification time is different and is being updated to the sender's value (requires --times).  An alternate value  of
                     T  means  that  the modification time will be set to the transfer time, which happens when a file/symlink/device is updated without
                     --times and when a symlink is changed and the receiver can't set its time. (Note: when using an rsync 3.0.0 client, you  might  see
                     the s flag combined with t instead of the proper T flag for this time-setting failure.)

              o      A p means the permissions are different and are being updated to the sender's value (requires --perms).

              o      An o means the owner is different and is being updated to the sender's value (requires --owner and super-user privileges).

              o      A g means the group is different and is being updated to the sender's value (requires --group and the authority to set the group).

              o      A u|n|b indicates the following information: u  means the access (use) time is different and is being updated to the sender's value
                     (requires --atimes); n means the create time (newness) is different and is being updated to  the  sender's  value  (requires  --crâАР
                     times); b means that both the access and create times are being updated.

              o      The a means that the ACL information is being changed.

              o      The x means that the extended attribute information is being changed.

              One other output is possible: when deleting files, the "%i" will output the string "*deleting" for each item that is being removed (assumâАР
              ing that you are talking to a recent enough rsync that it logs deletions instead of outputting them as a verbose message).

       --out-format=FORMAT
              This allows you to specify exactly what the rsync client outputs to the user on a per-update basis.  The format is a text string  containâАР
              ing  embedded  single-character  escape  sequences prefixed with a percent (%) character.  A default format of "%n%L" is assumed if either
              --info=name or -v is specified (this tells you just the name of the file and, if the item is a link, where it points).  For a full list of
              the possible escape characters, see the "log format" setting in the rsyncd.conf manpage.

              Specifying the --out-format option implies the --info=name option, which will mention each file, dir, etc. that gets updated in a signifiâАР
              cant way (a transferred file, a recreated symlink/device, or a touched directory).  In addition, if the itemize-changes escape (%i) is inâАР
              cluded  in  the string (e.g. if the --itemize-changes option was used), the logging of names increases to mention any item that is changed
              in any way (as long as the receiving side is at least 2.6.4).  See the --itemize-changes option for a description of the output of "%i".

              Rsync will output the out-format string prior to a file's transfer unless one of the transfer-statistic escapes  is  requested,  in  which
              case  the  logging is done at the end of the file's transfer.  When this late logging is in effect and --progress is also specified, rsync
              will also output the name of the file being transferred prior to its progress information (followed, of course, by the out-format output).

       --log-file=FILE
              This option causes rsync to log what it is doing to a file.  This is similar to the logging that a daemon does, but can be  requested  for
              the client side and/or the server side of a non-daemon transfer.  If specified as a client option, transfer logging will be enabled with a
              default format of "%i %n%L".  See the --log-file-format option if you wish to override this.

              Here's a example command that requests the remote side to log what is happening:

                  rsync -av --remote-option=--log-file=/tmp/rlog src/ dest/

              This is very useful if you need to debug why a connection is closing unexpectedly.

       --log-file-format=FORMAT
              This allows you to specify exactly what per-update logging is put into the file specified by the --log-file option  (which  must  also  be
              specified  for this option to have any effect).  If you specify an empty string, updated files will not be mentioned in the log file.  For
              a list of the possible escape characters, see the "log format" setting in the rsyncd.conf manpage.

              The default FORMAT used if --log-file is specified and this option is not is '%i %n%L'.

       --stats
              This tells rsync to print a verbose set of statistics on the file transfer, allowing you to tell how effective rsync's delta-transfer  alâАР
              gorithm  is  for  your  data.  This option is equivalent to --info=stats2 if combined with 0 or 1 -v options, or --info=stats3 if combined
              with 2 or more -v options.

              The current statistics are as follows:

              o      Number of files is the count of all "files" (in the generic sense), which includes directories, symlinks,  etc.   The  total  count
                     will  be followed by a list of counts by filetype (if the total is non-zero).  For example: "(reg: 5, dir: 3, link: 2, dev: 1, speâАР
                     cial: 1)" lists the totals for regular files, directories, symlinks, devices, and special files.  If any of value is 0, it is  comâАР
                     pletely omitted from the list.

              o      Number of created files  is  the  count  of how many "files" (generic sense) were created (as opposed to updated).  The total count
                     will be followed by a list of counts by filetype (if the total is non-zero).

              o      Number of deleted files is the count of how many "files" (generic sense) were deleted.  The total count will be followed by a  list
                     of  counts by filetype (if the total is non-zero).  Note that this line is only output if deletions are in effect, and only if proâАР
                     tocol 31 is being used (the default for rsync 3.1.x).

              o      Number of regular files transferred is the count of normal files that were updated via rsync's delta-transfer algorithm, which does
                     not include dirs, symlinks, etc.  Note that rsync 3.1.0 added the word "regular" into this heading.

              o      Total file size is the total sum of all file sizes in the transfer.  This does not count any size for directories or special files,
                     but does include the size of symlinks.

              o      Total transferred file size is the total sum of all files sizes for just the transferred files.

              o      Literal data is how much unmatched file-update data we had to send to the receiver for it to recreate the updated files.

              o      Matched data is how much data the receiver got locally when recreating the updated files.

              o      File list size is how big the file-list data was when the sender sent it to the receiver.  This is smaller than the in-memory  size
                     for the file list due to some compressing of duplicated data when rsync sends the list.

              o      File list generation time  is  the number of seconds that the sender spent creating the file list.  This requires a modern rsync on
                     the sending side for this to be present.

              o      File list transfer time is the number of seconds that the sender spent sending the file list to the receiver.

              o      Total bytes sent is the count of all the bytes that rsync sent from the client side to the server side.

              o      Total bytes received is the count of all non-message bytes that rsync received by the client side from the server  side.  "Non-mesâАР
                     sage"  bytes  means that we don't count the bytes for a verbose message that the server sent to us, which makes the stats more conâАР
                     sistent.

       --8-bit-output, -8
              This tells rsync to leave all high-bit characters unescaped in the output instead of trying to test them to see if they're  valid  in  the
              current  locale  and  escaping  the invalid ones.  All control characters (but never tabs) are always escaped, regardless of this option's
              setting.

              The escape idiom that started in 2.6.7 is to output a literal backslash (\) and a hash (), followed by exactly 3 octal digits.  For examâАР
              ple,  a  newline  would output as "\012".  A literal backslash that is in a filename is not escaped unless it is followed by a hash and 3
              digits (0-9).

       --human-readable, -h
              Output numbers in a more human-readable format.  There are 3 possible levels: (1) output numbers with a separator between each  set  of  3
              digits  (either a comma or a period, depending on if the decimal point is represented by a period or a comma); (2) output numbers in units
              of 1000 (with a character suffix for larger units -- see below); (3) output numbers in units of 1024.

              The default is human-readable level 1.  Each -h option increases the level by one.  You can take the level down to 0 (to output numbers as
              pure digits) by specifying the --no-human-readable (--no-h) option.

              The  unit  letters  that  are  appended  in  levels  2  and  3  are:  K (kilo), M (mega), G (giga), T (tera), or P (peta).  For example, a
              1234567-byte file would output as 1.23M in level-2 (assuming that a period is your local decimal point).

              Backward compatibility note: versions of rsync prior to 3.1.0 do not support human-readable level 1, and they default to level  0.   Thus,
              specifying  one or two -h options will behave in a comparable manner in old and new versions as long as you didn't specify a --no-h option
              prior to one or more -h options.  See the --list-only option for one difference.

       --partial
              By default, rsync will delete any partially transferred file if the transfer is interrupted.  In some circumstances it is  more  desirable
              to  keep  partially  transferred  files.   Using  the --partial option tells rsync to keep the partial file which should make a subsequent
              transfer of the rest of the file much faster.

       --partial-dir=DIR
              A better way to keep partial files than the --partial option is to specify a DIR that will be used to hold the partial  data  (instead  of
              writing it out to the destination file).  On the next transfer, rsync will use a file found in this dir as data to speed up the resumption
              of the transfer and then delete it after it has served its purpose.

              Note that if --whole-file is specified (or implied), any partial-dir file that is found for a file that is being updated  will  simply  be
              removed (since rsync is sending files without using rsync's delta-transfer algorithm).

              Rsync  will create the DIR if it is missing (just the last dir -- not the whole path).  This makes it easy to use a relative path (such as
              "--partial-dir=.rsync-partial") to have rsync create the partial-directory in the destination file's directory when needed, and  then  reâАР
              move  it  again when the partial file is deleted.  Note that the directory is only removed if it is a relative pathname, as it is expected
              that an absolute path is to a directory that is reserved for partial-dir work.

              If the partial-dir value is not an absolute path, rsync will add an exclude rule at the end of all your existing excludes.  This will preâАР
              vent  the  sending of any partial-dir files that may exist on the sending side, and will also prevent the untimely deletion of partial-dir
              items on the receiving side.  An example: the above --partial-dir option would add the equivalent of "-f '-p .rsync-partial/'" at the  end
              of any other filter rules.

              If  you  are  supplying your own exclude rules, you may need to add your own exclude/hide/protect rule for the partial-dir because (1) the
              auto-added rule may be ineffective at the end of your other rules, or (2) you may wish to override rsync's exclude choice.  For  instance,
              if you want to make rsync clean-up any left-over partial-dirs that may be lying around, you should specify --delete-after and add a "risk"
              filter rule, e.g.  -f 'R .rsync-partial/'. (Avoid using --delete-before or --delete-during unless you don't need rsync to use any  of  the
              left-over partial-dir data during the current run.)

              IMPORTANT: the --partial-dir should not be writable by other users or it is a security risk.  E.g. AVOID "/tmp".

              You  can also set the partial-dir value the RSYNC_PARTIAL_DIR environment variable.  Setting this in the environment does not force --parâАР
              tial to be enabled, but rather it affects where partial files go when --partial is specified.  For instance, instead of  using  --partial-
              dir=.rsync-tmp  along  with  --progress, you could set RSYNC_PARTIAL_DIR=.rsync-tmp in your environment and then just use the -P option to
              turn on the use of the .rsync-tmp dir for partial transfers.  The only times that the --partial option does not look for this  environment
              value are (1) when --inplace was specified (since --inplace conflicts with --partial-dir), and (2) when --delay-updates was specified (see
              below).

              When a modern rsync resumes the transfer of a file in the partial-dir, that partial file is now updated in-place instead of  creating  yet
              another  tmp-file  copy (so it maxes out at dest + tmp instead of dest + partial + tmp).  This requires both ends of the transfer to be at
              least version 3.2.0.

              For the purposes of the daemon-config's "refuse options" setting, --partial-dir does not imply --partial.  This is so that  a  refusal  of
              the  --partial option can be used to disallow the overwriting of destination files with a partial transfer, while still allowing the safer
              idiom provided by --partial-dir.

       --delay-updates
              This option puts the temporary file from each updated file into a holding directory until the end of the transfer, at which time  all  the
              files  are  renamed into place in rapid succession.  This attempts to make the updating of the files a little more atomic.  By default the
              files are placed into a directory named .~tmp~ in each file's destination directory, but if you've  specified  the  --partial-dir  option,
              that  directory  will  be used instead.  See the comments in the --partial-dir section for a discussion of how this .~tmp~ dir will be exâАР
              cluded from the transfer, and what you can do if you want rsync to cleanup old .~tmp~ dirs that might be  lying  around.   Conflicts  with
              --inplace and --append.

              This option implies --no-inc-recursive since it needs the full file list in memory in order to be able to iterate over it at the end.

              This  option uses more memory on the receiving side (one bit per file transferred) and also requires enough free disk space on the receivâАР
              ing side to hold an additional copy of all the updated files.  Note also that you should not use an absolute path to --partial-dir  unless
              (1) there is no chance of any of the files in the transfer having the same name (since all the updated files will be put into a single diâАР
              rectory if the path is absolute) and (2) there are no mount points in the hierarchy (since the delayed updates will fail if they can't  be
              renamed into place).

              See  also the "atomic-rsync" perl script in the "support" subdir for an update algorithm that is even more atomic (it uses --link-dest and
              a parallel hierarchy of files).

       --prune-empty-dirs, -m
              This option tells the receiving rsync to get rid of empty directories from the file-list, including nested directories that have  no  non-
              directory  children.   This  is  useful  for avoiding the creation of a bunch of useless directories when the sending rsync is recursively
              scanning a hierarchy of files using include/exclude/filter rules.

              Note that the use of transfer rules, such as the --min-size option, does not affect what goes into the file list, and thus does not  leave
              directories empty, even if none of the files in a directory match the transfer rule.

              Because  the  file-list is actually being pruned, this option also affects what directories get deleted when a delete is active.  However,
              keep in mind that excluded files and directories can prevent existing items from being deleted due to an exclude both hiding source  files
              and protecting destination files.  See the perishable filter-rule option for how to avoid this.

              You can prevent the pruning of certain empty directories from the file-list by using a global "protect" filter.  For instance, this option
              would ensure that the directory "emptydir" was kept in the file-list:

                  --filter 'protect emptydir/'

              Here's an example that copies all .pdf files in a hierarchy, only creating the necessary destination directories to hold the  .pdf  files,
              and  ensures that any superfluous files and directories in the destination are removed (note the hide filter of non-directories being used
              instead of an exclude):

                  rsync -avm --del --include='*.pdf' -f 'hide,! */' src/ dest

              If you didn't want to remove superfluous destination files, the more time-honored options of --include='/' --exclude='' would work  fine
              in place of the hide-filter (if that is more natural to you).

       --progress
              This  option  tells  rsync to print information showing the progress of the transfer.  This gives a bored user something to watch.  With a
              modern rsync this is the same as specifying --info=flist2,name,progress, but any user-supplied settings for those info flags takes  preceâАР
              dence (e.g.  "--info=flist0 --progress").

              While rsync is transferring a regular file, it updates a progress line that looks like this:

                  782448  63%  110.64kB/s    0:00:04

              In this example, the receiver has reconstructed 782448 bytes or 63% of the sender's file, which is being reconstructed at a rate of 110.64
              kilobytes per second, and the transfer will finish in 4 seconds if the current rate is maintained until the end.

              These statistics can be misleading if rsync's delta-transfer algorithm is in use.  For example, if the sender's file consists of the basis
              file  followed  by  additional data, the reported rate will probably drop dramatically when the receiver gets to the literal data, and the
              transfer will probably take much longer to finish than the receiver estimated as it was finishing the matched part of the file.

              When the file transfer finishes, rsync replaces the progress line with a summary line that looks like this:

                  1,238,099 100%  146.38kB/s    0:00:08  (xfr#5, to-chk=169/396)

              In this example, the file was 1,238,099 bytes long in total, the average rate of transfer for the whole file was 146.38 kilobytes per secâАР
              ond over the 8 seconds that it took to complete, it was the 5th transfer of a regular file during the current rsync session, and there are
              169 more files for the receiver to check (to see if they are up-to-date or not) remaining out of the 396 total files in the file-list.

              In an incremental recursion scan, rsync won't know the total number of files in the file-list until it reaches the ends of the  scan,  but
              since it starts to transfer files during the scan, it will display a line with the text "ir-chk" (for incremental recursion check) instead
              of "to-chk" until the point that it knows the full size of the list, at which point it will switch to using "to-chk".  Thus,  seeing  "ir-
              chk"  lets  you  know that the total count of files in the file list is still going to increase (and each time it does, the count of files
              left to check will increase by the number of the files added to the list).

       -P     The -P option is equivalent to --partial --progress.  Its purpose is to make it much easier to specify these two options for a long transâАР
              fer that may be interrupted.

              There  is also a --info=progress2 option that outputs statistics based on the whole transfer, rather than individual files.  Use this flag
              without outputting a filename (e.g. avoid -v or specify --info=name0) if you want to see how the transfer is doing without  scrolling  the
              screen with a lot of names. (You don't need to specify the --progress option in order to use --info=progress2.)

              Finally,  you  can  get an instant progress report by sending rsync a signal of either SIGINFO or SIGVTALRM.  On BSD systems, a SIGINFO is
              generated by typing a Ctrl+T (Linux doesn't currently support a SIGINFO signal).  When the client-side process receives one of those  sigâАР
              nals,  it  sets a flag to output a single progress report which is output when the current file transfer finishes (so it may take a little
              time if a big file is being handled when the signal arrives).  A filename is output (if needed) followed by the --info=progress2 format of
              progress  info.   If  you  don't  know which of the 3 rsync processes is the client process, it's OK to signal all of them (since the non-
              client processes ignore the signal).

              CAUTION: sending SIGVTALRM to an older rsync (pre-3.2.0) will kill it.

       --password-file=FILE
              This option allows you to provide a password for accessing an rsync daemon via a file or via standard input if FILE is -.  The file should
              contain  just the password on the first line (all other lines are ignored).  Rsync will exit with an error if FILE is world readable or if
              a root-run rsync command finds a non-root-owned file.

              This option does not supply a password to a remote shell transport such as ssh; to learn how to do that, consult the remote shell's  docuâАР
              mentation.   When  accessing  an  rsync  daemon using a remote shell as the transport, this option only comes into effect after the remote
              shell finishes its authentication (i.e. if you have also specified a password in the daemon's config file).

       --early-input=FILE
              This option allows rsync to send up to 5K of data to the "early exec" script on its stdin.  One possible use of this data is to  give  the
              script a secret that can be used to mount an encrypted filesystem (which you should unmount in the the "post-xfer exec" script).

              The daemon must be at least version 3.2.1.

       --list-only
              This  option will cause the source files to be listed instead of transferred.  This option is inferred if there is a single source arg and
              no destination specified, so its main uses are: (1) to turn a copy command that includes a destination arg into a file-listing command, or
              (2)  to  be  able to specify more than one source arg (note: be sure to include the destination).  Caution: keep in mind that a source arg
              with a wild-card is expanded by the shell into multiple args, so it is never safe to try to list such an arg without  using  this  option.
              For example:

                  rsync -av --list-only foo* dest/

              Starting  with  rsync  3.1.0,  the  sizes output by --list-only are affected by the --human-readable option.  By default they will contain
              digit separators, but higher levels of readability will output the sizes with unit suffixes.  Note also that the column width for the size
              output has increased from 11 to 14 characters for all human-readable levels.  Use --no-h if you want just digits in the sizes, and the old
              column width of 11 characters.

              Compatibility note: when requesting a remote listing of files from an rsync that is version 2.6.3 or older, you may encounter an error  if
              you  ask  for  a  non-recursive listing.  This is because a file listing implies the --dirs option w/o --recursive, and older rsyncs don't
              have that option.  To avoid this problem, either specify the --no-dirs option (if you don't need to expand a directory's content), or turn
              on recursion and exclude the content of subdirectories: -r --exclude='/*/*'.

       --bwlimit=RATE
              This  option  allows  you to specify the maximum transfer rate for the data sent over the socket, specified in units per second.  The RATE
              value can be suffixed with a string to indicate a size multiplier, and may be a fractional value (e.g. "--bwlimit=1.5m").  If no suffix is
              specified, the value will be assumed to be in units of 1024 bytes (as if "K" or "KiB" had been appended).  See the --max-size option for a
              description of all the available suffixes.  A value of 0 specifies no limit.

              For backward-compatibility reasons, the rate limit will be rounded to the nearest KiB unit, so no rate smaller than 1024 bytes per  second
              is possible.

              Rsync  writes  data over the socket in blocks, and this option both limits the size of the blocks that rsync writes, and tries to keep the
              average transfer rate at the requested limit.  Some burstiness may be seen where rsync writes out a block of data and then sleeps to bring
              the average rate into compliance.

              Due  to  the internal buffering of data, the --progress option may not be an accurate reflection on how fast the data is being sent.  This
              is because some files can show up as being rapidly sent when the data is quickly buffered, while other can show up as very slow  when  the
              flushing of the output buffer occurs.  This may be fixed in a future version.

       `--stop-after=MINS
              This option tells rsync to stop copying when the specified number of minutes has elapsed.

              Rsync also accepts an earlier version of this option: --time-limit=MINS.

              For  maximal  flexibility, rsync does not communicate this option to the remote rsync since it is usually enough that one side of the conâАР
              nection quits as specified.  This allows the option's use even when only one side of the connection supports it.  You can tell the  remote
              side about the time limit using --remote-option (-M), should the need arise.

       `--stop-at=y-m-dTh:m
              This option tells rsync to stop copying when the specified point in time has been reached. The date & time can be fully specified in a nuâАР
              meric format of year-month-dayThour:minute (e.g. 2000-12-31T23:59) in the local timezone.  You may choose to separate the date numbers usâАР
              ing slashes instead of dashes.

              The  value  can  also  be  abbreviated  in a variety of ways, such as specifying a 2-digit year and/or leaving off various values.  In all
              cases, the value will be taken to be the next possible point in time where the supplied information matches.  If the value  specifies  the
              current time or a past time, rsync exits with an error.

              For  example,  "1-30"  specifies the next January 30th (at midnight local time), "14:00" specifies the next 2 P.M., "1" specifies the next
              1st of the month at midnight, "31" specifies the next month where we can stop on its 31st day, and ":59" specifies the  next  59th  minute
              after the hour.

              For  maximal  flexibility, rsync does not communicate this option to the remote rsync since it is usually enough that one side of the conâАР
              nection quits as specified.  This allows the option's use even when only one side of the connection supports it.  You can tell the  remote
              side  about  the  time limit using --remote-option (-M), should the need arise.  Do keep in mind that the remote host may have a different
              default timezone than your local host.

       --write-batch=FILE
              Record a file that can later be applied to another identical destination with --read-batch.  See the "BATCH MODE" section for details, and
              also the --only-write-batch option.

              This  option  overrides  the negotiated checksum & compress lists and always negotiates a choice based on old-school md5/md4/zlib choices.
              If you want a more modern choice, use the --checksum-choice (--cc) and/or --compress-choice (--zc) options.

       --only-write-batch=FILE
              Works like --write-batch, except that no updates are made on the destination system when creating the batch.  This lets you transport  the
              changes to the destination system via some other means and then apply the changes via --read-batch.

              Note  that  you  can  feel  free to write the batch directly to some portable media: if this media fills to capacity before the end of the
              transfer, you can just apply that partial transfer to the destination and repeat the whole process to get the rest of the changes (as long
              as you don't mind a partially updated destination system while the multi-update cycle is happening).

              Also  note  that  you only save bandwidth when pushing changes to a remote system because this allows the batched data to be diverted from
              the sender into the batch file without having to flow over the wire to the receiver (when pulling, the sender is remote,  and  thus  can't
              write the batch).

       --read-batch=FILE
              Apply  all  of  the  changes stored in FILE, a file previously generated by --write-batch.  If FILE is -, the batch data will be read from
              standard input. See the "BATCH MODE" section for details.

       --protocol=NUM
              Force an older protocol version to be used.  This is useful for creating a batch file that is compatible with an older version  of  rsync.
              For instance, if rsync 2.6.4 is being used with the --write-batch option, but rsync 2.6.3 is what will be used to run the --read-batch opâАР
              tion, you should use "--protocol=28" when creating the batch file to force the older protocol version to be used in the batch file (assumâАР
              ing you can't upgrade the rsync on the reading system).

       --iconv=CONVERT_SPEC
              Rsync  can  convert  filenames  between  character sets using this option.  Using a CONVERT_SPEC of "." tells rsync to look up the default
              character-set via the locale setting.  Alternately, you can fully specify what conversion to do by giving a local  and  a  remote  charset
              separated by a comma in the order --iconv=LOCAL,REMOTE, e.g. --iconv=utf8,iso88591.  This order ensures that the option will stay the same
              whether you're pushing or pulling files.  Finally, you can specify either --no-iconv or a CONVERT_SPEC of "-" to turn off any  conversion.
              The default setting of this option is site-specific, and can also be affected via the RSYNC_ICONV environment variable.

              For a list of what charset names your local iconv library supports, you can run "iconv --list".

              If  you  specify the --protect-args option (-s), rsync will translate the filenames you specify on the command-line that are being sent to
              the remote host.  See also the --files-from option.

              Note that rsync does not do any conversion of names in filter files (including include/exclude files).  It is up to  you  to  ensure  that
              you're  specifying matching rules that can match on both sides of the transfer.  For instance, you can specify extra include/exclude rules
              if there are filename differences on the two sides that need to be accounted for.

              When you pass an --iconv option to an rsync daemon that allows it, the daemon uses the charset specified in  its  "charset"  configuration
              parameter  regardless  of  the  remote  charset you actually pass.  Thus, you may feel free to specify just the local charset for a daemon
              transfer (e.g.  --iconv=utf8).

       --ipv4, -4 or --ipv6, -6
              Tells rsync to prefer IPv4/IPv6 when creating sockets or running ssh.  This affects sockets that rsync has direct control  over,  such  as
              the  outgoing  socket when directly contacting an rsync daemon, as well as the forwarding of the -4 or -6 option to ssh when rsync can deâАР
              duce that ssh is being used as the remote shell.  For other remote shells you'll need to specify the "--rsh SHELL -4" option directly  (or
              whatever ipv4/ipv6 hint options it uses).

              These options also exist in the --daemon mode section.

              If  rsync was complied without support for IPv6, the --ipv6 option will have no effect.  The rsync --version output will contain "no IPv6"
              if is the case.

       --checksum-seed=NUM
              Set the checksum seed to the integer NUM.  This 4 byte checksum seed is included in each block and MD4 file checksum calculation (the more
              modern  MD5 file checksums don't use a seed).  By default the checksum seed is generated by the server and defaults to the current time().
              This option is used to set a specific checksum seed, which is useful for applications that want repeatable block checksums, or in the case
              where the user wants a more random checksum seed.  Setting NUM to 0 causes rsync to use the default of time() for checksum seed.

DAEMON OPTIONS

The options allowed when starting an rsync daemon are as follows:

       --daemon
              This tells rsync that it is to run as a daemon.  The daemon you start running may be accessed using an rsync client using the host::module
              or rsync://host/module/ syntax.

              If standard input is a socket then rsync will assume that it is being run via inetd, otherwise it will detach from  the  current  terminal
              and  become  a  background daemon.  The daemon will read the config file (rsyncd.conf) on each connect made by a client and respond to reâАР
              quests accordingly.  See the rsyncd.conf(5) man page for more details.

       --address=ADDRESS
              By default rsync will bind to the wildcard address when run as a daemon with the --daemon option.  The  --address  option  allows  you  to
              specify a specific IP address (or hostname) to bind to.  This makes virtual hosting possible in conjunction with the --config option.  See
              also the "address" global option in the rsyncd.conf manpage.

       --bwlimit=RATE
              This option allows you to specify the maximum transfer rate for the data the daemon sends over the socket.  The client can still specify a
              smaller --bwlimit value, but no larger value will be allowed.  See the client version of this option (above) for some extra details.

       --config=FILE
              This  specifies  an  alternate  config  file  than  the  default.   This  is  only  relevant  when  --daemon is specified.  The default is
              /etc/rsyncd.conf unless the daemon is running over a remote shell program and the remote user is not the super-user; in that case the  deâАР
              fault is rsyncd.conf in the current directory (typically $HOME).

       --dparam=OVERRIDE, -M
              This  option can be used to set a daemon-config parameter when starting up rsync in daemon mode.  It is equivalent to adding the parameter
              at the end of the global settings prior to the first module's definition.  The parameter names can be specified without spaces, if you  so
              desire.  For instance:

                  rsync --daemon -M pidfile=/path/rsync.pid

       --no-detach
              When  running as a daemon, this option instructs rsync to not detach itself and become a background process.  This option is required when
              running as a service on Cygwin, and may also be useful when rsync is supervised by a program  such  as  daemontools  or  AIX's  System ReâАР
              source Controller.   --no-detach  is  also recommended when rsync is run under a debugger.  This option has no effect if rsync is run from
              inetd or sshd.

       --port=PORT
              This specifies an alternate TCP port number for the daemon to listen on rather than the default of 873.  See also the "port" global option
              in the rsyncd.conf manpage.

       --log-file=FILE
              This option tells the rsync daemon to use the given log-file name instead of using the "log file" setting in the config file.

       --log-file-format=FORMAT
              This  option  tells the rsync daemon to use the given FORMAT string instead of using the "log format" setting in the config file.  It also
              enables "transfer logging" unless the string is empty, in which case transfer logging is turned off.

       --sockopts
              This overrides the socket options setting in the rsyncd.conf file and has the same syntax.

       --verbose, -v
              This option increases the amount of information the daemon logs during its startup phase.  After the client connects,  the  daemon's  verâАР
              bosity level will be controlled by the options that the client used and the "max verbosity" setting in the module's config section.

       --ipv4, -4 or --ipv6, -6
              Tells rsync to prefer IPv4/IPv6 when creating the incoming sockets that the rsync daemon will use to listen for connections.  One of these
              options may be required in older versions of Linux to work around an IPv6 bug in the kernel (if you see an "address already in use"  error
              when nothing else is using the port, try specifying --ipv6 or --ipv4 when starting the daemon).

              These options also exist in the regular rsync options section.

              If  rsync was complied without support for IPv6, the --ipv6 option will have no effect.  The rsync --version output will contain "no IPv6"
              if is the case.

       --help, -h
              When specified after --daemon, print a short help page describing the options available for starting an rsync daemon.

FILTER RULES

       The filter rules allow for flexible selection of which files to transfer (include) and which files to skip (exclude).  The rules either  directly
       specify include/exclude patterns or they specify a way to acquire more include/exclude patterns (e.g. to read them from a file).

       As  the  list of files/directories to transfer is built, rsync checks each name to be transferred against the list of include/exclude patterns in
       turn, and the first matching pattern is acted on: if it is an exclude pattern, then that file is skipped; if it is an include pattern  then  that
       filename is not skipped; if no matching pattern is found, then the filename is not skipped.

       Rsync builds an ordered list of filter rules as specified on the command-line.  Filter rules have the following syntax:

           RULE [PATTERN_OR_FILENAME]
           RULE,MODIFIERS [PATTERN_OR_FILENAME]

       You  have  your  choice of using either short or long RULE names, as described below.  If you use a short-named rule, the ',' separating the RULE
       from the MODIFIERS is optional.  The PATTERN or FILENAME that follows (when present) must come after either a single space or an underscore  (_).
       Here are the available rule prefixes:

       exclude, '-'
              specifies an exclude pattern.

       include, '+'
              specifies an include pattern.

       merge, '.'
              specifies a merge-file to read for more rules.

       dir-merge, ':'
              specifies a per-directory merge-file.

       hide, 'H'
              specifies a pattern for hiding files from the transfer.

       show, 'S'
              files that match the pattern are not hidden.

       protect, 'P'
              specifies a pattern for protecting files from deletion.

       risk, 'R'
              files that match the pattern are not protected.

       clear, '!'
              clears the current include/exclude list (takes no arg)

       When  rules  are being read from a file, empty lines are ignored, as are whole-line comments that start with a '#' (filename rules that contain a
       hash are unaffected).

       Note that the --include & --exclude command-line options do not allow the full range of rule parsing as described above -- they  only  allow  the
       specification  of include / exclude patterns plus a "!" token to clear the list (and the normal comment parsing when rules are read from a file).
       If a pattern does not begin with "- " (dash, space) or "+ " (plus, space), then the rule will be interpreted as if "+ " (for an  include  option)
       or  "- "  (for  an exclude option) were prefixed to the string.  A --filter option, on the other hand, must always contain either a short or long
       rule name at the start of the rule.

       Note also that the --filter, --include, and --exclude options take one rule/pattern each.  To add multiple ones, you can repeat  the  options  on
       the command-line, use the merge-file syntax of the --filter option, or the --include-from / --exclude-from options.

INCLUDE/EXCLUDE PATTERN RULES

       You can include and exclude files by specifying patterns using the "+", "-", etc. filter rules (as introduced in the FILTER RULES section above).
       The include/exclude rules each specify a pattern that is matched against the names of the files that are going to be transferred.  These patterns
       can take several forms:

       o      if the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files, otherwise it is matched against the end
              of the pathname.  This is similar to a leading ^ in regular expressions.  Thus /foo would match a name of "foo" at either the "root of the
              transfer" (for a global rule) or in the merge-file's directory (for a per-directory rule).  An unqualified foo would match a name of "foo"
              anywhere in the tree because the algorithm is applied recursively from the top down; it behaves as if each path component gets a  turn  at
              being  the  end of the filename.  Even the unanchored "sub/foo" would match at any point in the hierarchy where a "foo" was found within a
              directory named "sub".  See the section on ANCHORING INCLUDE/EXCLUDE PATTERNS for a full discussion of  how  to  specify  a  pattern  that
              matches at the root of the transfer.

       o      if the pattern ends with a / then it will only match a directory, not a regular file, symlink, or device.

       o      rsync  chooses  between  doing a simple string match and wildcard matching by checking if the pattern contains one of these three wildcard
              characters: '*', '?', and '[' .

       o      a '*' matches any path component, but it stops at slashes.

       o      use '**' to match anything, including slashes.

       o      a '?' matches any character except a slash (/).

       o      a '[' introduces a character class, such as [a-z] or [[:alpha:]].

       o      in a wildcard pattern, a backslash can be used to escape a wildcard character, but it is matched literally when no wildcards are  present.
              This  means  that  there is an extra level of backslash removal when a pattern contains wildcard characters compared to a pattern that has
              none.  e.g. if you add a wildcard to "foo\bar" (which matches the backslash) you would need to use "foo\\bar*" to avoid the "\b"  becoming
              just "b".

       o      if the pattern contains a / (not counting a trailing /) or a "**", then it is matched against the full pathname, including any leading diâАР
              rectories.  If the pattern doesn't contain a / or a "**", then it is matched only against the final component of the  filename.  (Remember
              that the algorithm is applied recursively so "full filename" can actually be any portion of a path from the starting directory on down.)

       o      a  trailing  "dir_name/***"  will  match  both the directory (as if "dir_name/" had been specified) and everything in the directory (as if
              "dir_name/**" had been specified).  This behavior was added in version 2.6.7.

       Note that, when using the --recursive (-r) option (which is implied by -a), every subdir component of every path is visited left to  right,  with
       each directory having a chance for exclusion before its content.  In this way include/exclude patterns are applied recursively to the pathname of
       each node in the filesystem's tree (those inside the transfer).  The exclude patterns short-circuit the directory traversal stage as rsync  finds
       the files to send.

       For  instance,  to include "/foo/bar/baz", the directories "/foo" and "/foo/bar" must not be excluded.  Excluding one of those parent directories
       prevents the examination of its content, cutting off rsync's recursion into those paths and rendering the include for "/foo/bar/baz"  ineffectual
       (since rsync can't match something it never sees in the cut-off section of the directory hierarchy).

       The concept path exclusion is particularly important when using a trailing '*' rule.  For instance, this won't work:

           + /some/path/this-file-will-not-be-found
           + /file-is-included
           - *

       This  fails  because the parent directory "some" is excluded by the '*' rule, so rsync never visits any of the files in the "some" or "some/path"
       directories.  One solution is to ask for all directories in the hierarchy to be included by using a single rule: "+ */" (put it somewhere  before
       the  "- *"  rule), and perhaps use the --prune-empty-dirs option.  Another solution is to add specific include rules for all the parent dirs that
       need to be visited.  For instance, this set of rules works fine:

           + /some/
           + /some/path/
           + /some/path/this-file-is-found
           + /file-also-included
           - *

       Here are some examples of exclude/include matching:

       o      "- *.o" would exclude all names matching *.o

       o      "- /foo" would exclude a file (or directory) named foo in the transfer-root directory

       o      "- foo/" would exclude any directory named foo

       o      "- /foo/*/bar" would exclude any file named bar which is at two levels below a directory named foo in the transfer-root directory

       o      "- /foo/**/bar" would exclude any file named bar two or more levels below a directory named foo in the transfer-root directory

       o      The combination of "+ */", "+ *.c", and "- *" would include all directories and C source files but nothing else  (see  also  the  --prune-
              empty-dirs option)

       o      The  combination  of  "+ foo/", "+ foo/bar.c", and "- " would include only the foo directory and foo/bar.c (the foo directory must be exâАР
              plicitly included or it would be excluded by the "")

       The following modifiers are accepted after a "+" or "-":

       o      A / specifies that the include/exclude rule should  be  matched  against  the  absolute  pathname  of  the  current  item.   For  example,
              "-/ /etc/passwd"  would  exclude  the  passwd  file any time the transfer was sending files from the "/etc" directory, and "-/ subdir/foo"
              would always exclude "foo" when it is in a dir named "subdir", even if "foo" is at the root of the current transfer.

       o      A ! specifies that the include/exclude should take effect if the pattern fails to match.  For instance, "-! */" would exclude all  non-diâАР
              rectories.

       o      A C is used to indicate that all the global CVS-exclude rules should be inserted as excludes in place of the "-C".  No arg should follow.

       o      An  s  is  used to indicate that the rule applies to the sending side.  When a rule affects the sending side, it prevents files from being
              transferred.  The default is for a rule to affect both sides unless --delete-excluded was specified, in which case  default  rules  become
              sender-side only.  See also the hide (H) and show (S) rules, which are an alternate way to specify sending-side includes/excludes.

       o      An  r is used to indicate that the rule applies to the receiving side.  When a rule affects the receiving side, it prevents files from beâАР
              ing deleted.  See the s modifier for more info.  See also the protect (P) and risk (R) rules, which are an alternate way  to  specify  reâАР
              ceiver-side includes/excludes.

       o      A  p indicates that a rule is perishable, meaning that it is ignored in directories that are being deleted.  For instance, the -C option's
              default rules that exclude things like "CVS" and "*.o" are marked as perishable, and will not prevent a directory that was removed on  the
              source from being deleted on the destination.

       o      An  x indicates that a rule affects xattr names in xattr copy/delete operations (and is thus ignored when matching file/dir names).  If no
              xattr-matching rules are specified, a default xattr filtering rule is used (see the --xattrs option).

MERGE-FILE FILTER RULES

       You can merge whole files into your filter rules by specifying either a merge (.) or a dir-merge (:) filter rule (as  introduced  in  the  FILTER
       RULES section above).

       There  are  two  kinds  of merged files -- single-instance ('.') and per-directory (':').  A single-instance merge file is read one time, and its
       rules are incorporated into the filter list in the place of the "." rule.  For per-directory merge files, rsync will scan every directory that it
       traverses for the named file, merging its contents when the file exists into the current list of inherited rules.  These per-directory rule files
       must be created on the sending side because it is the sending side that is being scanned for the available files to transfer.  These  rule  files
       may also need to be transferred to the receiving side if you want them to affect what files don't get deleted (see PER-DIRECTORY RULES AND DELETE
       below).

       Some examples:

           merge /etc/rsync/default.rules
           . /etc/rsync/default.rules
           dir-merge .per-dir-filter
           dir-merge,n- .non-inherited-per-dir-excludes
           :n- .non-inherited-per-dir-excludes

       The following modifiers are accepted after a merge or dir-merge rule:

       o      A - specifies that the file should consist of only exclude patterns, with no other rule-parsing except for in-file comments.

       o      A + specifies that the file should consist of only include patterns, with no other rule-parsing except for in-file comments.

       o      A C is a way to specify that the file should be read in a CVS-compatible manner.  This turns on 'n', 'w', and '-',  but  also  allows  the
              list-clearing token (!) to be specified.  If no filename is provided, ".cvsignore" is assumed.

       o      A e will exclude the merge-file name from the transfer; e.g.  "dir-merge,e .rules" is like "dir-merge .rules" and "- .rules".

       o      An n specifies that the rules are not inherited by subdirectories.

       o      A  w specifies that the rules are word-split on whitespace instead of the normal line-splitting.  This also turns off comments.  Note: the
              space that separates the prefix from the rule is treated specially, so "- foo + bar" is parsed as two rules (assuming that  prefix-parsing
              wasn't also disabled).

       o      You  may  also specify any of the modifiers for the "+" or "-" rules (above) in order to have the rules that are read in from the file deâАР
              fault to having that modifier set (except for the ! modifier, which would not be useful).  For instance, "merge,-/ .excl" would treat  the
              contents  of .excl as absolute-path excludes, while "dir-merge,s .filt" and ":sC" would each make all their per-directory rules apply only
              on the sending side.  If the merge rule specifies sides to affect (via the s or r modifier or both), then the rules in the file  must  not
              specify sides (via a modifier or a rule prefix such as hide).

       Per-directory  rules  are inherited in all subdirectories of the directory where the merge-file was found unless the 'n' modifier was used.  Each
       subdirectory's rules are prefixed to the inherited per-directory rules from its parents, which gives the newest rules a higher priority than  the
       inherited  rules.   The  entire  set of dir-merge rules are grouped together in the spot where the merge-file was specified, so it is possible to
       override dir-merge rules via a rule that got specified earlier in the list of global rules.  When the list-clearing rule ("!")  is  read  from  a
       per-directory file, it only clears the inherited rules for the current merge file.

       Another  way  to prevent a single rule from a dir-merge file from being inherited is to anchor it with a leading slash.  Anchored rules in a per-
       directory merge-file are relative to the merge-file's directory, so a pattern "/foo" would only match the file "foo" in the directory  where  the
       dir-merge filter file was found.

       Here's an example filter file which you'd specify via --filter=". file":

           merge /home/user/.global-filter
           - *.gz
           dir-merge .rules
           + *.[ch]
           - .o
           - foo

       This  will  merge the contents of the /home/user/.global-filter file at the start of the list and also turns the ".rules" filename into a per-diâАР
       rectory filter file.  All rules read in prior to the start of the directory scan follow the global anchoring rules (i.e. a leading slash  matches
       at the root of the transfer).

       If a per-directory merge-file is specified with a path that is a parent directory of the first transfer directory, rsync will scan all the parent
       dirs from that starting point to the transfer directory for the indicated per-directory file.  For instance, here is a common filter (see -F):

           --filter=': /.rsync-filter'

       That rule tells rsync to scan for the file .rsync-filter in all directories from the root down through the parent directory of the transfer prior
       to the start of the normal directory scan of the file in the directories that are sent as a part of the transfer. (Note: for an rsync daemon, the
       root is always the same as the module's "path".)

       Some examples of this pre-scanning for per-directory files:

           rsync -avF /src/path/ /dest/dir
           rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir
           rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir

       The first two commands above will look for ".rsync-filter" in "/" and "/src" before the normal scan begins looking for the  file  in  "/src/path"
       and  its  subdirectories.   The  last command avoids the parent-dir scan and only looks for the ".rsync-filter" files in each directory that is a
       part of the transfer.

       If you want to include the contents of a ".cvsignore" in your patterns, you should use the rule ":C", which creates a dir-merge of the .cvsignore
       file,  but  parsed  in  a CVS-compatible manner.  You can use this to affect where the --cvs-exclude (-C) option's inclusion of the per-directory
       .cvsignore file gets placed into your rules by putting the ":C" wherever you like in your filter rules.  Without this, rsync would add  the  dir-
       merge rule for the .cvsignore file at the end of all your other rules (giving it a lower priority than your command-line rules).  For example:

           cat <<EOT | rsync -avC --filter='. -' a/ b
           + foo.o
           :C
           - .old
           EOT
           rsync -avC --include=foo.o -f :C --exclude='.old' a/ b

       Both of the above rsync commands are identical.  Each one will merge all the per-directory .cvsignore rules in the middle of the list rather than
       at the end.  This allows their dir-specific rules to supersede the rules that follow the :C instead of being subservient to all your  rules.   To
       affect  the  other  CVS  exclude  rules  (i.e. the default list of exclusions, the contents of $HOME/.cvsignore, and the value of $CVSIGNORE) you
       should omit the -C command-line option and instead insert a "-C" rule into your filter rules; e.g.  "--filter=-C".

LIST-CLEARING FILTER RULE

       You can clear the current include/exclude list by using the "!" filter rule (as introduced in the FILTER RULES  section  above).   The  "current"
       list  is either the global list of rules (if the rule is encountered while parsing the filter options) or a set of per-directory rules (which are
       inherited in their own sub-list, so a subdirectory can use this to clear out the parent's rules).

ANCHORING INCLUDE/EXCLUDE PATTERNS

       As mentioned earlier, global include/exclude patterns are anchored at the "root of the transfer" (as opposed to per-directory patterns, which are
       anchored  at  the  merge-file's  directory).  If you think of the transfer as a subtree of names that are being sent from sender to receiver, the
       transfer-root is where the tree starts to be duplicated in the destination directory.  This root governs where  patterns  that  start  with  a  /
       match.

       Because the matching is relative to the transfer-root, changing the trailing slash on a source path or changing your use of the --relative option
       affects the path you need to use in your matching (in addition to changing how much of the file tree is duplicated on the destination host).  The
       following examples demonstrate this.

       Let's  say  that  we want to match two source files, one with an absolute path of "/home/me/foo/bar", and one with a path of "/home/you/bar/baz".
       Here is how the various command choices differ for a 2-source transfer:

           Example cmd: rsync -a /home/me /home/you /dest
           +/- pattern: /me/foo/bar
           +/- pattern: /you/bar/baz
           Target file: /dest/me/foo/bar
           Target file: /dest/you/bar/baz

           Example cmd: rsync -a /home/me/ /home/you/ /dest
           +/- pattern: /foo/bar               (note missing "me")
           +/- pattern: /bar/baz               (note missing "you")
           Target file: /dest/foo/bar
           Target file: /dest/bar/baz

           Example cmd: rsync -a --relative /home/me/ /home/you /dest
           +/- pattern: /home/me/foo/bar       (note full path)
           +/- pattern: /home/you/bar/baz      (ditto)
           Target file: /dest/home/me/foo/bar
           Target file: /dest/home/you/bar/baz

           Example cmd: cd /home; rsync -a --relative me/foo you/ /dest
           +/- pattern: /me/foo/bar      (starts at specified path)
           +/- pattern: /you/bar/baz     (ditto)
           Target file: /dest/me/foo/bar
           Target file: /dest/you/bar/baz

       The easiest way to see what name you should filter is to just look at the output when using --verbose and put a / in front of the name  (use  the
       --dry-run option if you're not yet ready to copy any files).

PER-DIRECTORY RULES AND DELETE

       Without  a  delete  option, per-directory rules are only relevant on the sending side, so you can feel free to exclude the merge files themselves
       without affecting the transfer.  To make this easy, the 'e' modifier adds this exclude for you, as seen in these two equivalent commands:

           rsync -av --filter=': .excl' --exclude=.excl host:src/dir /dest
           rsync -av --filter=':e .excl' host:src/dir /dest

       However, if you want to do a delete on the receiving side AND you want some files to be excluded from being deleted, you'll need to be sure  that
       the receiving side knows what files to exclude.  The easiest way is to include the per-directory merge files in the transfer and use --delete-afâАР
       ter, because this ensures that the receiving side gets all the same exclude rules as the sending side before it tries to delete anything:

           rsync -avF --delete-after host:src/dir /dest

       However, if the merge files are not a part of the transfer, you'll need to either specify some global exclude rules (i.e. specified on  the  comâАР
       mand  line),  or  you'll need to maintain your own per-directory merge files on the receiving side.  An example of the first is this (assume that
       the remote .rules files exclude themselves):

           rsync -av --filter=': .rules' --filter='. /my/extra.rules'
              --delete host:src/dir /dest

       In the above example the extra.rules file can affect both sides of the transfer, but (on the sending side) the rules are subservient to the rules
       merged from the .rules files because they were specified after the per-directory merge rule.

       In  one  final example, the remote side is excluding the .rsync-filter files from the transfer, but we want to use our own .rsync-filter files to
       control what gets deleted on the receiving side.  To do this we must specifically exclude the per-directory merge files (so that they  don't  get
       deleted) and then put rules into the local files to control what else should not get deleted.  Like one of these commands:

           rsync -av --filter=':e /.rsync-filter' --delete \
               host:src/dir /dest
           rsync -avFF --delete host:src/dir /dest

BATCH MODE

       Batch  mode  can  be  used to apply the same set of updates to many identical systems.  Suppose one has a tree which is replicated on a number of
       hosts.  Now suppose some changes have been made to this source tree and those changes need to be propagated to the other hosts.  In order  to  do
       this  using  batch  mode,  rsync is run with the write-batch option to apply the changes made to the source tree to one of the destination trees.
       The write-batch option causes the rsync client to store in a "batch file" all the information needed to  repeat  this  operation  against  other,
       identical destination trees.

       Generating the batch file once saves having to perform the file status, checksum, and data block generation more than once when updating multiple
       destination trees.  Multicast transport protocols can be used to transfer the batch update files in parallel to many hosts at  once,  instead  of
       sending the same data to every host individually.

       To  apply the recorded changes to another destination tree, run rsync with the read-batch option, specifying the name of the same batch file, and
       the destination tree.  Rsync updates the destination tree using the information stored in the batch file.

       For your convenience, a script file is also created when the write-batch option is used: it will be named the same as the batch file  with  ".sh"
       appended.  This script file contains a command-line suitable for updating a destination tree using the associated batch file.  It can be executed
       using a Bourne (or Bourne-like) shell, optionally passing in an alternate destination tree pathname which is then used instead  of  the  original
       destination path.  This is useful when the destination tree path on the current host differs from the one used to create the batch file.

       Examples:

           $ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
           $ scp foo* remote:
           $ ssh remote ./foo.sh /bdest/dir/

           $ rsync --write-batch=foo -a /source/dir/ /adest/dir/
           $ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo

       In  these  examples,  rsync  is  used to update /adest/dir/ from /source/dir/ and the information to repeat this operation is stored in "foo" and
       "foo.sh".  The host "remote" is then updated with the batched data going into the directory /bdest/dir.  The differences between the two examples
       reveals some of the flexibility you have in how you deal with batches:

       o      The first example shows that the initial copy doesn't have to be local -- you can push or pull data to/from a remote host using either the
              remote-shell syntax or rsync daemon syntax, as desired.

       o      The first example uses the created "foo.sh" file to get the right rsync options when running the read-batch command on the remote host.

       o      The second example reads the batch data via standard input so that the batch file doesn't need to be copied to the remote  machine  first.
              This  example  avoids the foo.sh script because it needed to use a modified --read-batch option, but you could edit the script file if you
              wished to make use of it (just be sure that no other option is trying to use standard input, such as the "--exclude-from=-" option).

       Caveats:

       The read-batch option expects the destination tree that it is updating to be identical to the destination tree that was used to create the  batch
       update fileset.  When a difference between the destination trees is encountered the update might be discarded with a warning (if the file appears
       to be up-to-date already) or the file-update may be attempted and then, if the file fails to verify, the update discarded with  an  error.   This
       means  that it should be safe to re-run a read-batch operation if the command got interrupted.  If you wish to force the batched-update to always
       be attempted regardless of the file's size and date, use the -I option (when reading the batch).  If an error occurs, the destination  tree  will
       probably be in a partially updated state.  In that case, rsync can be used in its regular (non-batch) mode of operation to fix up the destination
       tree.

       The rsync version used on all destinations must be at least as new as the one used to generate the batch file.  Rsync will die with an  error  if
       the  protocol  version  in the batch file is too new for the batch-reading rsync to handle.  See also the --protocol option for a way to have the
       creating rsync generate a batch file that an older rsync can understand.  (Note that batch files changed format in version 2.6.3, so mixing  verâАР
       sions older than that with newer versions will not work.)

       When  reading  a batch file, rsync will force the value of certain options to match the data in the batch file if you didn't set them to the same
       as the batch-writing command.  Other options can (and should) be changed.  For instance --write-batch changes to  --read-batch,  --files-from  is
       dropped, and the --filter / --include / --exclude options are not needed unless one of the --delete options is specified.

       The code that creates the BATCH.sh file transforms any filter/include/exclude options into a single list that is appended as a "here" document to
       the shell script file.  An advanced user can use this to modify the exclude list if a change in what gets deleted by --delete is desired.  A norâАР
       mal user can ignore this detail and just use the shell script as an easy way to run the appropriate --read-batch command for the batched data.

       The original batch mode in rsync was based on "rsync+", but the latest version uses a new implementation.

SYMBOLIC LINKS

Three basic behaviors are possible when rsync encounters a symbolic link in the source directory.

By default, symbolic links are not transferred at all. A message “skipping non-regular” file is emitted for any symlinks that exist.

If –links is specified, then symlinks are recreated with the same target on the destination. Note that –archive implies –links.

If –copy-links is specified, then symlinks are “collapsed” by copying their referent, rather than the symlink.

       Rsync  can  also  distinguish "safe" and "unsafe" symbolic links.  An example where this might be used is a web site mirror that wishes to ensure
       that the rsync module that is copied does not include symbolic links to /etc/passwd in the public section of the site.  Using --copy-unsafe-links
       will  cause  any links to be copied as the file they point to on the destination.  Using --safe-links will cause unsafe links to be omitted altoâАР
       gether. (Note that you must specify --links for --safe-links to have any effect.)

       Symbolic links are considered unsafe if they are absolute symlinks (start with /), empty, or if they contain enough ".."   components  to  ascend
       from the directory being copied.

       Here's  a  summary  of how the symlink options are interpreted.  The list is in order of precedence, so if your combination of options isn't menâАР
       tioned, use the first line that is a complete subset of your options:

       --copy-links
              Turn all symlinks into normal files (leaving no symlinks for any other options to affect).

       --links --copy-unsafe-links
              Turn all unsafe symlinks into files and duplicate all safe symlinks.

       --copy-unsafe-links
              Turn all unsafe symlinks into files, noisily skip all safe symlinks.

       --links --safe-links
              Duplicate safe symlinks and skip unsafe ones.

       --links
              Duplicate all symlinks.

DIAGNOSTICS

       rsync occasionally produces error messages that may seem a little cryptic.  The one that seems to cause the most confusion is  "protocol  version
       mismatch -- is your shell clean?".

       This  message is usually caused by your startup scripts or remote shell facility producing unwanted garbage on the stream that rsync is using for
       its transport.  The way to diagnose this problem is to run your remote shell like this:

           ssh remotehost /bin/true > out.dat

       then look at out.dat.  If everything is working correctly then out.dat should be a zero length file.  If you are getting  the  above  error  from
       rsync  then  you will probably find that out.dat contains some text or data.  Look at the contents and try to work out what is producing it.  The
       most common cause is incorrectly configured shell startup scripts (such as .cshrc or .profile) that contain output statements for non-interactive
       logins.

       If you are having trouble debugging filter patterns, then try specifying the -vv option.  At this level of verbosity rsync will show why each inâАР
       dividual file is included or excluded.

EXIT VALUES

0 Success

1 Syntax or usage error

2 Protocol incompatibility

3 Errors selecting input/output files, dirs

       4      Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or  an  option  was
              specified that is supported by the client and not by the server.

       5      Error starting client-server protocol

       6      Daemon unable to append to log-file

       10     Error in socket I/O

       11     Error in file I/O

       12     Error in rsync protocol data stream

       13     Errors with program diagnostics

       14     Error in IPC code

       20     Received SIGUSR1 or SIGINT

       21     Some error returned by waitpid()

       22     Error allocating core memory buffers

       23     Partial transfer due to error

       24     Partial transfer due to vanished source files

       25     The --max-delete limit stopped deletions

       30     Timeout in data send/receive

       35     Timeout waiting for daemon connection

ENVIRONMENT VARIABLES

       CVSIGNORE
              The CVSIGNORE environment variable supplements any ignore patterns in .cvsignore files.  See the --cvs-exclude option for more details.

       RSYNC_ICONV
              Specify a default --iconv setting using this environment variable. (First supported in 3.0.0.)

       RSYNC_PROTECT_ARGS
              Specify  a  non-zero numeric value if you want the --protect-args option to be enabled by default, or a zero value to make sure that it is
              disabled by default. (First supported in 3.1.0.)

       RSYNC_RSH
              The RSYNC_RSH environment variable allows you to override the default shell used as the transport for rsync.   Command  line  options  are
              permitted after the command name, just as in the -e option.

       RSYNC_PROXY
              The  RSYNC_PROXY  environment variable allows you to redirect your rsync client to use a web proxy when connecting to a rsync daemon.  You
              should set RSYNC_PROXY to a hostname:port pair.

       RSYNC_PASSWORD
              Setting RSYNC_PASSWORD to the required password allows you to run authenticated rsync connections to an rsync daemon without  user  interâАР
              vention.   Note  that this does not supply a password to a remote shell transport such as ssh; to learn how to do that, consult the remote
              shell's documentation.

       USER or LOGNAME
              The USER or LOGNAME environment variables are used to determine the default username sent to an rsync daemon.   If  neither  is  set,  the
              username defaults to "nobody".

       HOME   The HOME environment variable is used to find the user's default .cvsignore file.

FILES

/etc/rsyncd.conf or rsyncd.conf

SEE ALSO

rsync-ssl(1), rsyncd.conf(5)

BUGS

times are transferred as *nix time_t values

When transferring to FAT filesystems rsync may re-sync unmodified files. See the comments on the –modify-window option.

file permissions, devices, etc. are transferred as native numerical values

see also the comments on the –delete option

Please report bugs! See the web site at https://rsync.samba.org/.

VERSION

This man page is current for version 3.2.3 of rsync.

INTERNAL OPTIONS

       The  options  --server and --sender are used internally by rsync, and should never be typed by a user under normal circumstances.  Some awareness
       of these options may be needed in certain scenarios, such as when setting up a login that can only run an rsync command.  For instance, the  supâАР
       port directory of the rsync distribution has an example script named rrsync (for restricted rsync) that can be used with a restricted ssh login.

CREDITS

rsync is distributed under the GNU General Public License. See the file COPYING for details.

A web site is available at https://rsync.samba.org/. The site includes an FAQ-O-Matic which may cover questions unanswered by this manual page.

We would be delighted to hear from you if you like this program. Please contact the mailing-list at rsync@lists.samba.org.

This program uses the excellent zlib compression library written by Jean-loup Gailly and Mark Adler.

THANKS

       Special  thanks go out to: John Van Essen, Matt McCutchen, Wesley W. Terpstra, David Dykstra, Jos Backus, Sebastian Krahmer, Martin Pool, and our
       gone-but-not-forgotten compadre, J.W. Schultz.

       Thanks also to Richard Brent, Brendan Mackay, Bill Waite, Stephen Rothwell and David Bell.  I've probably missed some people, my apologies  if  I
       have.

AUTHOR

       rsync  was  originally  written  by  Andrew Tridgell and Paul Mackerras.  Many people have later contributed to it. It is currently maintained by
       Wayne Davison.

       Mailing lists for support and development are available at https://lists.samba.org/.

rsync 3.2.3                                                            06 Aug 2020                                                              rsync(1)
Categories
Linux manpage

manpage top

TOP(1) User Commands TOP(1)

NAME

top – display Linux processes

SYNOPSIS

top -hv|-bcEeHiOSs1 -d secs -n max -u|U user -p pids -o field -w [cols]

The traditional switches `-‘ and whitespace are optional.

DESCRIPTION

       The  top program provides a dynamic real-time view of a running system.  It can display system summary information as well as a list of processes
       or threads currently being managed by the Linux kernel.  The types of system  summary  information  shown  and  the  types,  order  and  size  of
       information displayed for processes are all user configurable and that configuration can be made persistent across restarts.

       The  program  provides  a  limited  interactive  interface  for  process  manipulation  as  well  as a much more extensive interface for personal
       configuration  --  encompassing every aspect of its operation.  And while top is referred to throughout this document, you are free to  name  the
       program  anything  you  wish.   That  new  name,  possibly  an alias, will then be reflected on top's display and used when reading and writing a
       configuration file.

OVERVIEW

Documentation

The remaining Table of Contents

           OVERVIEW
              Operation
              Linux Memory Types
           1. COMMAND-LINE Options
           2. SUMMARY Display
              a. UPTIME and LOAD Averages
              b. TASK and CPU States
              c. MEMORY Usage
           3. FIELDS / Columns Display
              a. DESCRIPTIONS of Fields
              b. MANAGING Fields
           4. INTERACTIVE Commands
              a. GLOBAL Commands
              b. SUMMARY AREA Commands
              c. TASK AREA Commands
                 1. Appearance
                 2. Content
                 3. Size
                 4. Sorting
              d. COLOR Mapping
           5. ALTERNATE-DISPLAY Provisions
              a. WINDOWS Overview
              b. COMMANDS for Windows
              c. SCROLLING a Window
              d. SEARCHING in a Window
              e. FILTERING in a Window
           6. FILES
              a. PERSONAL Configuration File
              b. ADDING INSPECT Entries
              c. SYSTEM Configuration File
              d. SYSTEM Restrictions File
           7. STUPID TRICKS Sampler
              a. Kernel Magic
              b. Bouncing Windows
              c. The Big Bird Window
              d. The Ol' Switcheroo
           8. BUGS, 9. SEE Also

Operation

       When operating top, the two most important keys are the help (h or ?)  key  and  quit  (`q')  key.   Alternatively,  you  could  simply  use  the
       traditional interrupt key (^C) when you're done.

       When  started  for the first time, you'll be presented with these traditional elements on the main top screen: 1) Summary Area; 2) Fields/Columns
       Header; 3) Task Area.  Each of these will be explored in the sections that follow.  There is also an Input/Message line between the Summary  Area
       and Columns Header which needs no further explanation.

       The  main top screen is generally quite adaptive to changes in terminal dimensions under X-Windows.  Other top screens may be less so, especially
       those with static text.  It ultimately depends, however, on your particular window manager and terminal emulator.  There may  be  occasions  when
       their view of terminal size and current contents differs from top's view, which is always based on operating system calls.

       Following  any  re-size  operation,  if  a  top  screen  is corrupted, appears incomplete or disordered, simply typing something innocuous like a
       punctuation character or cursor motion key will usually restore it.  In extreme cases, the following sequence almost certainly will:
              key/cmd  objective
              ^Z       suspend top
              fg       resume top
              <Left>   force a screen redraw (if necessary)

       But if the display is still corrupted, there is one more step you could try.  Insert this  command  after  top  has  been  suspended  but  before
       resuming it.
              key/cmd  objective
              reset    restore your terminal settings

       Note:  the  width  of  top's  display  will be limited to 512 positions.  Displaying all fields requires approximately 250 characters.  Remaining
       screen width is usually allocated to any variable width columns currently visible.  The variable width columns, such as  COMMAND,  are  noted  in
       topic  3a.  DESCRIPTIONS  of  Fields.   Actual  output width may also be influenced by the -w switch, which is discussed in topic 1. COMMAND-LINE
       Options.

       Lastly, some of top's screens or functions require the use of cursor motion keys like the standard arrow keys plus the Home, End, PgUp  and  PgDn
       keys.  If your terminal or emulator does not provide those keys, the following combinations are accepted as alternatives:
              key      equivalent-keys
              Left     alt + h
              Down     alt + j
              Up       alt + k
              Right    alt + l
              Home     alt + ctrl + h
              PgDn     alt + ctrl + j
              PgUp     alt + ctrl + k
              End      alt + ctrl + l

       The Up and Down arrow keys have special significance when prompted for line input terminated with the <Enter> key.  Those keys, or their aliases,
       can be used to retrieve previous input lines which can then be edited and re-input.  And there are  four  additional  keys  available  with  line
       oriented input.
              key      special-significance
              Up       recall older strings for re-editing
              Down     recall newer strings or erase entire line
              Insert   toggle between insert and overtype modes
              Delete   character removed at cursor, moving others left
              Home     jump to beginning of input line
              End      jump to end of input line

Linux Memory Types

       For  our  purposes  there  are three types of memory, and one is optional.  First is physical memory, a limited resource where code and data must
       reside when executed or referenced.  Next is the optional swap file, where modified (dirty) memory can be saved and later retrieved if  too  many
       demands are made on physical memory.  Lastly we have virtual memory, a nearly unlimited resource serving the following goals:

          1. abstraction, free from physical memory addresses/limits
          2. isolation, every process in a separate address space
          3. sharing, a single mapping can serve multiple needs
          4. flexibility, assign a virtual address to a file

       Regardless  of  which  of  these  forms  memory  may take, all are managed as pages (typically 4096 bytes) but expressed by default in top as KiB
       (kibibyte).  The memory discussed under topic `2c. MEMORY Usage' deals with physical memory and the swap file for the system  as  a  whole.   The
       memory reviewed in topic `3. FIELDS / Columns Display' embraces all three memory types, but for individual processes.

       For  each  such  process, every memory page is restricted to a single quadrant from the table below.  Both physical memory and virtual memory can
       include any of the four, while the swap file only includes #1 through #3.  The memory in quadrant #4, when modified, acts as  its  own  dedicated
       swap file.

                                     Private | Shared
                                 1           |          2
            Anonymous  . stack               |
                       . malloc()            |
                       . brk()/sbrk()        | . POSIX shm*
                       . mmap(PRIVATE, ANON) | . mmap(SHARED, ANON)
                      -----------------------+----------------------
                       . mmap(PRIVATE, fd)   | . mmap(SHARED, fd)
          File-backed  . pgms/shared libs    |
                                 3           |          4

       The  following  may help in interpreting process level memory values displayed as scalable columns and discussed under topic `3a. DESCRIPTIONS of
       Fields'.

          %MEM - simply RES divided by total physical memory
          CODE - the `pgms' portion of quadrant 3
          DATA - the entire quadrant 1 portion of VIRT plus all
                 explicit mmap file-backed pages of quadrant 3
          RES  - anything occupying physical memory which, beginning with
                 Linux-4.5, is the sum of the following three fields:
                 RSan - quadrant 1 pages, which include any
                        former quadrant 3 pages if modified
                 RSfd - quadrant 3 and quadrant 4 pages
                 RSsh - quadrant 2 pages
          RSlk - subset of RES which cannot be swapped out (any quadrant)
          SHR  - subset of RES (excludes 1, includes all 2 & 4, some 3)
          SWAP - potentially any quadrant except 4
          USED - simply the sum of RES and SWAP
          VIRT - everything in-use and/or reserved (all quadrants)

       Note: Even though program images and shared libraries are considered private to a process, they will be accounted for  as  shared  (SHR)  by  the
       kernel.
  1. COMMAND-LINE OptionsThe command-line syntax for top consists of:

-hv|-bcEeHiOSs1 -d secs -n max -u|U user -p pids -o field -w [cols]

The typically mandatory switch (`-‘) and even whitespace are completely optional.

       -h | -v  :Help/Version
            Show library version and the usage prompt, then quit.

       -b  :Batch-mode operation
            Starts  top  in  Batch  mode,  which could be useful for sending output from top to other programs or to a file.  In this mode, top will not
            accept input and runs until the iterations limit you've set with the `-n' command-line option or until killed.

       -c  :Command-line/Program-name toggle
            Starts top with the last remembered `c' state reversed.  Thus, if top was displaying command lines, now that field will show program  names,
            and vice versa.  See the `c' interactive command for additional information.

       -d  :Delay-time interval as:  -d ss.t (secs.tenths)
            Specifies  the  delay  between  screen  updates,  and  overrides the corresponding value in one's personal configuration file or the startup
            default.  Later this can be changed with the `d' or `s' interactive commands.

            Fractional seconds are honored, but a negative number is not allowed.  In all cases, however, such changes are prohibited if top is  running
            in  Secure  mode,  except  for  root (unless the `s' command-line option was used).  For additional information on Secure mode see topic 6d.
            SYSTEM Restrictions File.

       -e  :Enforce-Task-Memory-Scaling as:  -e  k | m | g | t | p
            Instructs top to force task area memory to be scaled as:
               k - kibibytes
               m - mebibytes
               g - gibibytes
               t - tebibytes
               p - pebibytes

            Later this can be changed with the `e' command toggle.

       -E  :Enforce-Summary-Memory-Scaling as:  -E  k | m | g | t | p | e
            Instructs top to force summary area memory to be scaled as:
               k - kibibytes
               m - mebibytes
               g - gibibytes
               t - tebibytes
               p - pebibytes
               e - exbibytes

            Later this can be changed with the `E' command toggle.

       -H  :Threads-mode operation
            Instructs top to display individual threads.  Without this command-line option a summation of all threads in each process is  shown.   Later
            this can be changed with the `H' interactive command.

       -i  :Idle-process toggle
            Starts  top  with  the  last remembered `i' state reversed.  When this toggle is Off, tasks that have not used any CPU since the last update
            will not be displayed.  For additional information regarding this toggle see topic 4c. TASK AREA Commands, SIZE.

       -n  :Number-of-iterations limit as:  -n number
            Specifies the maximum number of iterations, or frames, top should produce before ending.

       -o  :Override-sort-field as:  -o fieldname
            Specifies the name of the field on which tasks will be sorted, independent of what is reflected in the configuration file.  You can  prepend
            a `+' or `-' to the field name to also override the sort direction.  A leading `+' will force sorting high to low, whereas a `-' will ensure
            a low to high ordering.

            This option exists primarily to support automated/scripted batch mode operation.

       -O  :Output-field-names
            This option acts as a form of help for the above -o option.  It will cause top to print each of the available  field  names  on  a  separate
            line, then quit.  Such names are subject to NLS (National Language Support) translation.

       -p  :Monitor-PIDs mode as:  -pN1 -pN2 ...  or  -pN1,N2,N3 ...
            Monitor  only processes with specified process IDs.  This option can be given up to 20 times, or you can provide a comma delimited list with
            up to 20 pids.  Co-mingling both approaches is permitted.

            A pid value of zero will be treated as the process id of the top program itself once it is running.

            This is a command-line option only and should you wish to return to normal operation, it is not necessary to quit and restart top  --   just
            issue any of these interactive commands: `=', `u' or `U'.

            The `p', `u' and `U' command-line options are mutually exclusive.

       -s  :Secure-mode operation
            Starts  top  with  secure  mode forced, even for root.  This mode is far better controlled through a system configuration file (see topic 6.
            FILES).

       -S  :Cumulative-time toggle
            Starts top with the last remembered `S' state reversed.  When Cumulative time mode is On, each process is listed with the cpu time  that  it
            and its dead children have used.  See the `S' interactive command for additional information regarding this mode.

       -u | -U  :User-filter-mode as:  -u | -U number or name
            Display  only processes with a user id or user name matching that given.  The `-u' option matches on  effective user whereas the `-U' option
            matches on any user (real, effective, saved, or filesystem).

            Prepending an exclamation point (`!') to the user id or name instructs top to display  only  processes  with  users  not  matching  the  one
            provided.

            The `p', `u' and `U' command-line options are mutually exclusive.

       -w  :Output-width-override as:  -w [ number ]
            In Batch mode, when used without an argument top will format output using the COLUMNS= and LINES= environment variables, if set.  Otherwise,
            width will be fixed at the maximum 512 columns.  With an argument, output width can be decreased or increased (up to 512) but the number  of
            rows is considered unlimited.

            In normal display mode, when used without an argument top will attempt to format output using the COLUMNS= and LINES= environment variables,
            if set.  With an argument, output width can only be decreased, not increased.  Whether using environment variables or an argument  with  -w,
            when not in Batch mode actual terminal dimensions can never be exceeded.

            Note:  Without  the use of this command-line option, output width is always based on the terminal at which top was invoked whether or not in
            Batch mode.

       -1  :Single/Separate-Cpu-States toggle
            Starts top with the last remembered Cpu States portion of the summary area reversed.  Either all cpu information  will  be  displayed  in  a
            single line or each cpu will be displayed separately, depending on the state of the NUMA Node command toggle ('2').

            See the `1' and '2' interactive commands for additional information.

2. SUMMARY Display

       Each  of the following three areas are individually controlled through one or more interactive commands.  See topic 4b. SUMMARY AREA Commands for
       additional information regarding these provisions.

2a. UPTIME and LOAD Averages

       This portion consists of a single line containing:
           program or window name, depending on display mode
           current time and length of time since last boot
           total number of users
           system load avg over the last 1, 5 and 15 minutes

2b. TASK and CPU States

This portion consists of a minimum of two lines. In an SMP environment, additional lines can reflect individual CPU state percentages.

       Line 1 shows total tasks or threads, depending on the state of the Threads-mode toggle.  That total is further classified as:
           running; sleeping; stopped; zombie

       Line 2 shows CPU state percentages based on the interval since the last refresh.

       As a default, percentages for these individual categories are displayed.  Where two labels are shown below, those for more recent kernel versions
       are shown first.
           us, user    : time running un-niced user processes
           sy, system  : time running kernel processes
           ni, nice    : time running niced user processes
           id, idle    : time spent in the kernel idle handler
           wa, IO-wait : time waiting for I/O completion
           hi : time spent servicing hardware interrupts
           si : time spent servicing software interrupts
           st : time stolen from this vm by the hypervisor

       In the alternate cpu states display modes, beyond the first tasks/threads line, an abbreviated summary is shown consisting of these elements:
                      a    b     c    d
           %Cpu(s):  75.0/25.0  100[ ...

       Where:  a)  is the `user' (us + ni) percentage; b) is the `system' (sy + hi + si) percentage; c) is the total; and d) is one of two visual graphs
       of those representations.  See topic 4b. SUMMARY AREA Commands and the `t' command for additional information on that special 4-way toggle.

2c. MEMORY Usage

       This portion consists of two lines which may express values in kibibytes (KiB) through exbibytes (EiB) depending on the scaling  factor  enforced
       with the `E' interactive command.

       As a default, Line 1 reflects physical memory, classified as:
           total, free, used and buff/cache

       Line 2 reflects mostly virtual memory, classified as:
           total, free, used and avail (which is physical memory)

       The avail number on line 2 is an estimation of physical memory available for starting new applications, without swapping.  Unlike the free field,
       it attempts to account for readily reclaimable page cache and memory slabs.  It is available  on  kernels  3.14,  emulated  on  kernels  2.6.27+,
       otherwise the same as free.

       In the alternate memory display modes, two abbreviated summary lines are shown consisting of these elements:
                      a    b          c
           GiB Mem : 18.7/15.738   [ ...
           GiB Swap:  0.0/7.999    [ ...

       Where: a) is the percentage used; b) is the total available; and c) is one of two visual graphs of those representations.

       In  the  case  of  physical memory, the percentage represents the total minus the estimated avail noted above.  The `Mem' graph itself is divided
       between used and any remaining memory not otherwise accounted for by avail.  See topic  4b.  SUMMARY  AREA  Commands  and  the  `m'  command  for
       additional information on that special 4-way toggle.

       This table may help in interpreting the scaled values displayed:
           KiB = kibibyte = 1024 bytes
           MiB = mebibyte = 1024 KiB = 1,048,576 bytes
           GiB = gibibyte = 1024 MiB = 1,073,741,824 bytes
           TiB = tebibyte = 1024 GiB = 1,099,511,627,776 bytes
           PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624 bytes
           EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976 bytes

3. FIELDS / Columns

3a. DESCRIPTIONS of Fields

       Listed  below are top's available process fields (columns).  They are shown in strict ascii alphabetical order.  You may customize their position
       and whether or not they are displayable with the `f' or `F' (Fields Management) interactive commands.

       Any field is selectable as the sort field, and you control whether they are sorted high-to-low or low-to-high.   For  additional  information  on
       sort provisions see topic 4c. TASK AREA Commands, SORTING.

       The  fields  related  to  physical memory or virtual memory reference `(KiB)' which is the unsuffixed display mode.  Such fields may, however, be
       scaled from KiB through PiB.  That scaling is influenced via the `e' interactive command or established for startup through a build option.

        1. %CPU  --  CPU Usage
           The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.

           In a true SMP environment, if a process is multi-threaded and top is not operating  in  Threads  mode,  amounts  greater  than  100%  may  be
           reported.  You toggle Threads mode with the `H' interactive command.

           Also  for multi-processor environments, if Irix mode is Off, top will operate in Solaris mode where a task's cpu usage will be divided by the
           total number of CPUs.  You toggle Irix/Solaris modes with the `I' interactive command.

           Note: When running in forest view mode (`V') with children collapsed (`v'), this field will  also  include  the  CPU  time  of  those  unseen
           children.  See topic 4c. TASK AREA Commands, CONTENT for more information regarding the `V' and `v' toggles.

        2. %MEM  --  Memory Usage (RES)
           A task's currently resident share of available physical memory.

           See `OVERVIEW, Linux Memory Types' for additional details.

        3. CGNAME  --  Control Group Name
           The name of the control group to which a process belongs, or `-' if not applicable for that process.

           This  will  typically  be the last entry in the full list of control groups as shown under the next heading (CGROUPS).  And as is true there,
           this field is also variable width.

        4. CGROUPS  --  Control Groups
           The names of the control group(s) to which a process belongs, or `-' if not applicable for that process.

           Control Groups provide for allocating resources (cpu, memory, network bandwidth, etc.) among installation-defined groups of processes.   They
           enable fine-grained control over allocating, denying, prioritizing, managing and monitoring those resources.

           Many  different  hierarchies  of  cgroups  can  exist simultaneously on a system and each hierarchy is attached to one or more subsystems.  A
           subsystem represents a single resource.

           Note: The CGROUPS field, unlike most columns, is not fixed-width.  When displayed, it plus any other variable width columns will be allocated
           all remaining screen width (up to the maximum 512 characters).  Even so, such variable width fields could still suffer truncation.  See topic
           5c. SCROLLING a Window for additional information on accessing any truncated data.

        5. CODE  --  Code Size (KiB)
           The amount of physical memory currently devoted to executable code, also known as the Text Resident Set size or TRS.

           See `OVERVIEW, Linux Memory Types' for additional details.

        6. COMMAND  --  Command Name or Command Line
           Display the command line used to start a task or the name of the associated program.  You toggle between command  line  and  name  with  `c',
           which is both a command-line option and an interactive command.

           When  you've chosen to display command lines, processes without a command line (like kernel threads) will be shown with only the program name
           in brackets, as in this example:
               [kthreadd]

           This field may also be impacted by the forest view display mode.  See the `V' interactive command for additional information  regarding  that
           mode.

           Note: The COMMAND field, unlike most columns, is not fixed-width.  When displayed, it plus any other variable width columns will be allocated
           all remaining screen width (up to the maximum 512 characters).  Even so, such variable width fields could still suffer truncation.   This  is
           especially  true  for  this field when command lines are being displayed (the `c' interactive command.)  See topic 5c. SCROLLING a Window for
           additional information on accessing any truncated data.

        7. DATA  --  Data + Stack Size (KiB)
           The amount of private memory reserved by a process.  It is also known as the Data Resident Set or DRS.  Such memory may not yet be mapped  to
           physical memory (RES) but will always be included in the virtual memory (VIRT) amount.

           See `OVERVIEW, Linux Memory Types' for additional details.

        8. ENVIRON  --  Environment variables
           Display all of the environment variables, if any, as seen by the respective processes.  These variables will be displayed in their raw native
           order, not the sorted order you are accustomed to seeing with an unqualified `set'.

           Note: The ENVIRON field, unlike most columns, is not fixed-width.  When displayed, it plus any other variable width columns will be allocated
           all  remaining  screen width (up to the maximum 512 characters).  Even so, such variable width fields could still suffer truncation.  This is
           especially true for this field.  See topic 5c. SCROLLING a Window for additional information on accessing any truncated data.

        9. Flags  --  Task Flags
           This column represents the task's current scheduling flags which are expressed in hexadecimal notation  and  with  zeros  suppressed.   These
           flags are officially documented in <linux/sched.h>.

       10. GID  --  Group Id
           The effective group ID.

       11. GROUP  --  Group Name
           The effective group name.

       12. LXC  --  Lxc Container Name
           The name of the lxc container within which a task is running.  If a process is not running inside a container, a dash (`-') will be shown.

       13. NI  --  Nice Value
           The  nice  value of the task.  A negative nice value means higher priority, whereas a positive nice value means lower priority.  Zero in this
           field simply means priority will not be adjusted in determining a task's dispatch-ability.

       14. NU  --  Last known NUMA node
           A number representing the NUMA node associated with the last used processor (`P').  When -1 is displayed it means that  NUMA  information  is
           not available.

           See the `'2' and `3' interactive commands for additional NUMA provisions affecting the summary area.

       15. OOMa  --  Out of Memory Adjustment Factor
           The  value,  ranging  from -1000 to +1000, added to the current out of memory score (OOMs) which is then used to determine which task to kill
           when memory is exhausted.

       16. OOMs  --  Out of Memory Score
           The value, ranging from 0 to +1000, used to select task(s) to kill when memory is exhausted.  Zero translates to `never  kill'  whereas  1000
           means `always kill'.

       17. P  --  Last used CPU (SMP)
           A  number  representing the last used processor.  In a true SMP environment this will likely change frequently since the kernel intentionally
           uses weak affinity.  Also, the very act of running top may break this weak affinity and cause  more  processes  to  change  CPUs  more  often
           (because of the extra demand for cpu time).

       18. PGRP  --  Process Group Id
           Every  process is member of a unique process group which is used for distribution of signals and by terminals to arbitrate requests for their
           input and output.  When a process is created (forked), it becomes a member of the process group of its parent.   By  convention,  this  value
           equals the process ID (see PID) of the first member of a process group, called the process group leader.

       19. PID  --  Process Id
           The  task's  unique  process  ID,  which  periodically  wraps, though never restarting at zero.  In kernel terms, it is a dispatchable entity
           defined by a task_struct.

           This value may also be used as: a process group ID (see PGRP); a session ID for the session leader (see SID);  a  thread  group  ID  for  the
           thread group leader (see TGID); and a TTY process group ID for the process group leader (see TPGID).

       20. PPID  --  Parent Process Id
           The process ID (pid) of a task's parent.

       21. PR  --  Priority
           The scheduling priority of the task.  If you see `rt' in this field, it means the task is running under real time scheduling priority.

           Under  linux,  real  time  priority  is  somewhat misleading since traditionally the operating itself was not preemptible.  And while the 2.6
           kernel can be made mostly preemptible, it is not always so.

       22. RES  --  Resident Memory Size (KiB)
           A subset of the virtual address space (VIRT) representing the non-swapped physical memory a task is currently using.  It is also the  sum  of
           the RSan, RSfd and RSsh fields.

           It  can  include private anonymous pages, private pages mapped to files (including program images and shared libraries) plus shared anonymous
           pages.  All such memory is backed by the swap file represented separately under SWAP.

           Lastly, this field may also include shared file-backed pages which, when modified, act as a dedicated swap file and thus  will  never  impact
           SWAP.

           See `OVERVIEW, Linux Memory Types' for additional details.

       23. RSan  --  Resident Anonymous Memory Size (KiB)
           A subset of resident memory (RES) representing private pages not mapped to a file.

       24. RSfd  --  Resident File-Backed Memory Size (KiB)
           A  subset of resident memory (RES) representing the implicitly shared pages supporting program images and shared libraries.  It also includes
           explicit file mappings, both private and shared.

       25. RSlk  --  Resident Locked Memory Size (KiB)
           A subset of resident memory (RES) which cannot be swapped out.

       26. RSsh  --  Resident Shared Memory Size (KiB)
           A subset of resident memory (RES) representing the explicitly shared anonymous shm*/mmap pages.

       27. RUID  --  Real User Id
           The real user ID.

       28. RUSER  --  Real User Name
           The real user name.

       29. S  --  Process Status
           The status of the task which can be one of:
               D = uninterruptible sleep
               I = idle
               R = running
               S = sleeping
               T = stopped by job control signal
               t = stopped by debugger during trace
               Z = zombie

           Tasks shown as running should be more properly thought of as ready to run  --  their task_struct is simply  represented  on  the  Linux  run-
           queue.  Even without a true SMP machine, you may see numerous tasks in this state depending on top's delay interval and nice value.

       30. SHR  --  Shared Memory Size (KiB)
           A  subset of resident memory (RES) that may be used by other processes.  It will include shared anonymous pages and shared file-backed pages.
           It also includes private pages mapped to files representing program images and shared libraries.

           See `OVERVIEW, Linux Memory Types' for additional details.

       31. SID  --  Session Id
           A session is a collection of process groups (see PGRP), usually established by the login shell.  A newly forked process joins the session  of
           its  creator.  By convention, this value equals the process ID (see PID) of the first member of the session, called the session leader, which
           is usually the login shell.

       32. SUID  --  Saved User Id
           The saved user ID.

       33. SUPGIDS  --  Supplementary Group IDs
           The IDs of any supplementary group(s) established at login or inherited from a task's parent.  They are displayed in a comma delimited list.

           Note: The SUPGIDS field, unlike most columns, is not fixed-width.  When displayed, it plus any other variable width columns will be allocated
           all remaining screen width (up to the maximum 512 characters).  Even so, such variable width fields could still suffer truncation.  See topic
           5c. SCROLLING a Window for additional information on accessing any truncated data.

       34. SUPGRPS  --  Supplementary Group Names
           The names of any supplementary group(s) established at login or inherited from a task's parent.  They are  displayed  in  a  comma  delimited
           list.

           Note: The SUPGRPS field, unlike most columns, is not fixed-width.  When displayed, it plus any other variable width columns will be allocated
           all remaining screen width (up to the maximum 512 characters).  Even so, such variable width fields could still suffer truncation.  See topic
           5c. SCROLLING a Window for additional information on accessing any truncated data.

       35. SUSER  --  Saved User Name
           The saved user name.

       36. SWAP  --  Swapped Size (KiB)
           The formerly resident portion of a task's address space written to the swap file when physical memory becomes over committed.

           See `OVERVIEW, Linux Memory Types' for additional details.

       37. TGID  --  Thread Group Id
           The  ID  of  the thread group to which a task belongs.  It is the PID of the thread group leader.  In kernel terms, it represents those tasks
           that share an mm_struct.

       38. TIME  --  CPU Time
           Total CPU time the task has used since it started.  When Cumulative mode is On, each process is listed with the cpu time that it and its dead
           children  have  used.   You  toggle  Cumulative  mode  with `S', which is both a command-line option and an interactive command.  See the `S'
           interactive command for additional information regarding this mode.

       39. TIME+  --  CPU Time, hundredths
           The same as TIME, but reflecting more granularity through hundredths of a second.

       40. TPGID  --  Tty Process Group Id
           The process group ID of the foreground process for the connected tty, or -1 if a process is not connected to a terminal.  By convention, this
           value equals the process ID (see PID) of the process group leader (see PGRP).

       41. TTY  --  Controlling Tty
           The  name  of the controlling terminal.  This is usually the device (serial port, pty, etc.) from which the process was started, and which it
           uses for input or output.  However, a task need not be associated with a terminal, in which case you'll see `?' displayed.

       42. UID  --  User Id
           The effective user ID of the task's owner.

       43. USED  --  Memory in Use (KiB)
           This field represents the non-swapped physical memory a task is using (RES) plus the swapped out portion of its address space (SWAP).

           See `OVERVIEW, Linux Memory Types' for additional details.

       44. USER  --  User Name
           The effective user name of the task's owner.

       45. VIRT  --  Virtual Memory Size (KiB)
           The total amount of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that have been  swapped  out
           and pages that have been mapped but not used.

           See `OVERVIEW, Linux Memory Types' for additional details.

       46. WCHAN  --  Sleeping in Function
           This  field  will  show  the name of the kernel function in which the task is currently sleeping.  Running tasks will display a dash (`-') in
           this column.

       47. nDRT  --  Dirty Pages Count
           The number of pages that have been modified since they were last written to auxiliary storage.  Dirty pages  must  be  written  to  auxiliary
           storage before the corresponding physical memory location can be used for some other virtual page.

           This field was deprecated with linux 2.6 and is always zero.

       48. nMaj  --  Major Page Fault Count
           The  number  of  major  page  faults  that  have occurred for a task.  A page fault occurs when a process attempts to read from or write to a
           virtual page that is not currently present in its address space.  A major page fault is when auxiliary storage access is involved  in  making
           that page available.

       49. nMin  --  Minor Page Fault count
           The  number  of  minor  page  faults  that  have occurred for a task.  A page fault occurs when a process attempts to read from or write to a
           virtual page that is not currently present in its address space.  A minor page fault does not involve auxiliary storage access in making that
           page available.

       50. nTH  --  Number of Threads
           The number of threads associated with a process.

       51. nsIPC  --  IPC namespace
           The Inode of the namespace used to isolate interprocess communication (IPC) resources such as System V IPC objects and POSIX message queues.

       52. nsMNT  --  MNT namespace
           The Inode of the namespace used to isolate filesystem mount points thus offering different views of the filesystem hierarchy.

       53. nsNET  --  NET namespace
           The Inode of the namespace used to isolate resources such as network devices, IP addresses, IP routing, port numbers, etc.

       54. nsPID  --  PID namespace
           The  Inode of the namespace used to isolate process ID numbers meaning they need not remain unique.  Thus, each such namespace could have its
           own `init/systemd' (PID #1) to manage various initialization tasks and reap orphaned child processes.

       55. nsUSER  --  USER namespace
           The Inode of the namespace used to isolate the user and group ID numbers.  Thus, a process could have a normal unprivileged user ID outside a
           user namespace while having a user ID of 0, with full root privileges, inside that namespace.

       56. nsUTS  --  UTS namespace
           The Inode of the namespace used to isolate hostname and NIS domain name.  UTS simply means "UNIX Time-sharing System".

       57. vMj  --  Major Page Fault Count Delta
           The number of major page faults that have occurred since the last update (see nMaj).

       58. vMn  --  Minor Page Fault Count Delta
           The number of minor page faults that have occurred since the last update (see nMin).

3b. MANAGING Fields

       After  pressing the interactive command `f' or `F' (Fields Management) you will be presented with a screen showing: 1) the `current' window name;
       2) the designated sort field; 3) all fields in their current order along with descriptions.  Entries marked with an asterisk  are  the  currently
       displayed fields, screen width permitting.

           •  As  the on screen instructions indicate, you navigate among the fields with the Up and Down arrow keys.  The PgUp, PgDn, Home and End keys
              can also be used to quickly reach the first or last available field.

           •  The Right arrow key selects a field for repositioning and the Left arrow key or the <Enter> key commits that field's placement.

           •  The `d' key or the <Space> bar toggles a field's display status, and thus the presence or absence of the asterisk.

           •  The `s' key designates a field as the sort field.  See topic 4c. TASK AREA Commands, SORTING for  additional  information  regarding  your
              selection of a sort field.

           •  The `a' and `w' keys can be used to cycle through all available windows and the `q' or <Esc> keys exit Fields Management.

       The  Fields  Management  screen can also be used to change the `current' window/field group in either full-screen mode or alternate-display mode.
       Whatever was targeted when `q' or <Esc> was pressed will be made current as you return to  the  top  display.   See  topic  5.  ALTERNATE-DISPLAY
       Provisions and the `g' interactive command for insight into `current' windows and field groups.

       Note:  Any window that has been scrolled horizontally will be reset if any field changes are made via the Fields Management screen.  Any vertical
       scrolled position, however, will not be affected.  See topic 5c. SCROLLING a Window for additional information regarding vertical and  horizontal
       scrolling.

4. INTERACTIVE Commands

       Listed  below is a brief index of commands within categories.  Some commands appear more than once  --  their meaning or scope may vary depending
       on the context in which they are issued.

         4a. Global-Commands
               <Ent/Sp> ?, =, 0,
               A, B, d, E, e, g, h, H, I, k, q, r, s, W, X, Y, Z
         4b. Summary-Area-Commands
               C, l, t, m, 1, 2, 3, 4, !
         4c. Task-Area-Commands
               Appearance:  b, J, j, x, y, z
               Content:     c, f, F, o, O, S, u, U, V, v
               Size:        #, i, n
               Sorting:     <, >, f, F, R
         4d. Color-Mapping
               <Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7
         5b. Commands-for-Windows
               -, _, =, +, A, a, g, G, w
         5c. Scrolling-a-Window
               C, Up, Dn, Left, Right, PgUp, PgDn, Home, End
         5d. Searching-in-a-Window
               L, &

4a. GLOBAL Commands

       The global interactive commands are always available in both full-screen mode and alternate-display mode.  However,  some  of  these  interactive
       commands are not available when running in Secure mode.

       If you wish to know in advance whether or not your top has been secured, simply ask for help and view the system summary on the second line.

         <Enter> or <Space>  :Refresh-Display
              These  commands  awaken  top  and  following  receipt of any input the entire display will be repainted.  They also force an update of any
              hotplugged cpu or physical memory changes.

              Use either of these keys if you have a large delay interval and wish to see current status,

          ? | h  :Help
              There are two help levels available.  The first will provide a reminder of all the basic interactive commands.  If top  is  secured,  that
              screen will be abbreviated.

              Typing `h' or `?' on that help screen will take you to help for those interactive commands applicable to alternate-display mode.

          =  :Exit-Display-Limits
              Removes  restrictions  on what is shown.  This command will reverse any `i' (idle tasks), `n' (max tasks) and `v' (hide children) commands
              that might be active.  It also provides for an exit from PID monitoring, User filtering, Other filtering, Locate  processing  and  Combine
              Cpus mode.

              Additionally, if the window has been scrolled it will be reset with this command.

          0  :Zero-Suppress toggle
              This  command determines whether zeros are shown or suppressed for many of the fields in a task window.  Fields like UID, GID, NI, PR or P
              are not affected by this toggle.

          A  :Alternate-Display-Mode toggle
              This command will switch between full-screen mode and alternate-display mode.  See topic  5.  ALTERNATE-DISPLAY  Provisions  and  the  `g'
              interactive command for insight into `current' windows and field groups.

          B  :Bold-Disable/Enable toggle
              This  command  will influence use of the bold terminfo capability and alters both the summary area and task area for the `current' window.
              While it is intended primarily for use with dumb terminals, it can be applied anytime.

              Note: When this toggle is On and top is operating in monochrome mode, the entire display will appear as normal text.  Thus, unless the `x'
              and/or `y' toggles are using reverse for emphasis, there will be no visual confirmation that they are even on.

       *  d | s  :Change-Delay-Time-interval
              You will be prompted to enter the delay time, in seconds, between display updates.

              Fractional  seconds  are  honored,  but  a  negative  number  is  not  allowed.   Entering  0  causes (nearly) continuous updates, with an
              unsatisfactory display as the system and tty driver try to keep up with top's demands.  The  delay  value  is  inversely  proportional  to
              system loading, so set it with care.

              If at any time you wish to know the current delay time, simply ask for help and view the system summary on the second line.

          E  :Enforce-Summary-Memory-Scale in Summary Area
              With this command you can cycle through the available summary area memory scaling which ranges from KiB (kibibytes or 1,024 bytes) through
              EiB (exbibytes or 1,152,921,504,606,846,976 bytes).

              If you see a `+' between a displayed number and the following label, it means that top was forced to truncate some portion of that number.
              By raising the scaling factor, such truncation can be avoided.

          e  :Enforce-Task-Memory-Scale in Task Area
              With  this  command  you can cycle through the available task area memory scaling which ranges from KiB (kibibytes or 1,024 bytes) through
              PiB (pebibytes or 1,125,899,906,842,624 bytes).

              While top will try to honor the selected target range, additional scaling might still be necessary in order to accommodate current values.
              If  you wish to see a more homogeneous result in the memory columns, raising the scaling range will usually accomplish that goal.  Raising
              it too high, however, is likely to produce an all zero result which cannot be suppressed with the `0' interactive command.

          g  :Choose-Another-Window/Field-Group
              You will be prompted to enter a number between 1 and 4 designating the field group which should be made the `current'  window.   You  will
              soon grow comfortable with these 4 windows, especially after experimenting with alternate-display mode.

          H  :Threads-mode toggle
              When  this  toggle  is  On, individual threads will be displayed for all processes in all visible task windows.  Otherwise, top displays a
              summation of all threads in each process.

          I  :Irix/Solaris-Mode toggle
              When operating in Solaris mode (`I' toggled Off), a task's cpu usage will be divided by the total number  of  CPUs.   After  issuing  this
              command, you'll be told the new state of this toggle.

       *  k  :Kill-a-task
              You will be prompted for a PID and then the signal to send.

              Entering  no  PID  or a negative number will be interpreted as the default shown in the prompt (the first task displayed).  A PID value of
              zero means the top program itself.

              The default signal, as reflected in the prompt, is SIGTERM.  However, you can send any signal, via number or name.

              If you wish to abort the kill process, do one of the following depending on your progress:
                  1) at the pid prompt, type an invalid number
                  2) at the signal prompt, type 0 (or any invalid signal)
                  3) at any prompt, type <Esc>

          q  :Quit

       *  r  :Renice-a-Task
              You will be prompted for a PID and then the value to nice it to.

              Entering no PID or a negative number will be interpreted as the default shown in the prompt (the first task displayed).  A  PID  value  of
              zero means the top program itself.

              A  positive  nice  value  will cause a process to lose priority.  Conversely, a negative nice value will cause a process to be viewed more
              favorably by the kernel.  As a general rule, ordinary users can only increase the nice value and are prevented from lowering it.

              If you wish to abort the renice process, do one of the following depending on your progress:
                  1) at the pid prompt, type an invalid number
                  2) at the nice prompt, type <Enter> with no input
                  3) at any prompt, type <Esc>

          W  :Write-the-Configuration-File
              This will save all of your options and toggles plus the current display mode and delay time.  By issuing this command just before quitting
              top, you will be able restart later in exactly that same state.

          X  :Extra-Fixed-Width
              Some  fields  are  fixed  width  and  not scalable.  As such, they are subject to truncation which would be indicated by a `+' in the last
              position.

              This interactive command can be used to alter the widths of the following fields:

                  field  default    field  default    field  default
                  GID       5       GROUP     8       WCHAN    10
                  RUID      5       LXC       8       nsIPC    10
                  SUID      5       RUSER     8       nsMNT    10
                  UID       5       SUSER     8       nsNET    10
                                    TTY       8       nsPID    10
                                    USER      8       nsUSER   10
                                                      nsUTS    10

              You will be prompted for the amount to be added to the default widths shown above.  Entering zero forces a return to those defaults.

              If you enter a negative number, top will automatically increase the column size as needed until there is no more truncated data.  You  can
              accelerate this process by reducing the delay interval or holding down the <Space> bar.

              Note:  Whether  explicitly  or  automatically  increased, the widths for these fields are never decreased by top.  To narrow them you must
              specify a smaller number or restore the defaults.

          Y  :Inspect-Other-Output
              After issuing the `Y' interactive command, you will be prompted for a target PID.  Typing a value or accepting the default  results  in  a
              separate  screen.   That  screen  can be used to view a variety of files or piped command output while the normal top iterative display is
              paused.

              Note: This interactive command is only fully realized when supporting entries have been manually added to the end of the top configuration
              file.  For details on creating those entries, see topic 6b. ADDING INSPECT Entries.

              Most of the keys used to navigate the Inspect feature are reflected in its header prologue.  There are, however, additional keys available
              once you have selected a particular file or command.  They are familiar to anyone who has used the pager `less' and  are  summarized  here
              for future reference.

                  key      function
                  =        alternate status-line, file or pipeline
                  /        find, equivalent to `L' locate
                  n        find next, equivalent to `&' locate next
                  <Space>  scroll down, equivalent to <PgDn>
                  b        scroll up, equivalent to <PgUp>
                  g        first line, equivalent to <Home>
                  G        last line, equivalent to <End>

          Z  :Change-Color-Mapping
              This  key  will  take  you to a separate screen where you can change the colors for the `current' window, or for all windows.  For details
              regarding this interactive command see topic 4d. COLOR Mapping.

         The commands shown with an asterisk (`') are not available in Secure mode, nor will they be shown on the level-1 help screen.

4b. SUMMARY AREA Commands

       The summary area interactive commands are always available in both full-screen mode and alternate-display mode.  They affect the beginning  lines
       of your display and will determine the position of messages and prompts.

       These  commands  always  impact just the `current' window/field group.  See topic 5. ALTERNATE-DISPLAY Provisions and the `g' interactive command
       for insight into `current' windows and field groups.

          C  :Show-scroll-coordinates toggle
              Toggle an informational message which is displayed whenever the message line is not otherwise being used.  For additional information  see
              topic 5c. SCROLLING a Window.

          l  :Load-Average/Uptime toggle
              This is also the line containing the program name (possibly an alias) when operating in full-screen mode or the `current' window name when
              operating in alternate-display mode.

          t  :Task/Cpu-States toggle
              This command affects from 2 to many summary area lines, depending on the state of the `1', `2' or `3' command toggles and whether  or  not
              top is running under true SMP.

              This  portion  of  the  summary area is also influenced by the `H' interactive command toggle, as reflected in the total label which shows
              either Tasks or Threads.

              This command serves as a 4-way toggle, cycling through these modes:
                  1. detailed percentages by category
                  2. abbreviated user/system and total % + bar graph
                  3. abbreviated user/system and total % + block graph
                  4. turn off task and cpu states display

              When operating in either of the graphic modes, the display becomes much more meaningful when  individual  CPUs  or  NUMA  nodes  are  also
              displayed.  See the the `1', `2' and `3' commands below for additional information.

          m  :Memory/Swap-Usage toggle
              This command affects the two summary area lines dealing with physical and virtual memory.

              This command serves as a 4-way toggle, cycling through these modes:
                  1. detailed percentages by memory type
                  2. abbreviated % used/total available + bar graph
                  3. abbreviated % used/total available + block graph
                  4. turn off memory display

          1  :Single/Separate-Cpu-States toggle
              This command affects how the `t' command's Cpu States portion is shown.  Although this toggle exists primarily to serve massively-parallel
              SMP machines, it is not restricted to solely SMP environments.

              When you see `%Cpu(s):' in the summary area, the `1' toggle is On and all cpu information is gathered in a single line.   Otherwise,  each
              cpu is displayed separately as: `%Cpu0, %Cpu1, ...'  up to available screen height.

          2  :NUMA-Nodes/Cpu-Summary toggle
              This  command  toggles between the `1' command cpu summary display (only) or a summary display plus the cpu usage statistics for each NUMA
              Node.  It is only available if a system has the requisite NUMA support.

          3  :Expand-NUMA-Node
              You will be invited to enter a number representing a NUMA Node.  Thereafter, a node summary plus the statistics for each cpu in that  node
              will  be  shown  until  the  `1',  `2'  or  `4' command toggle is pressed.  This interactive command is only available if a system has the
              requisite NUMA support.

          4  :Display-Cpus-Two-Abreast
              This command turns the `1' toggle Off for individual cpu display but prints the results two  abreast.   It  requires  a  terminal  with  a
              minimum  width  of  80  columns.  If a terminal's width is decreased below the minimum while top is running, top reverts to the normal `1'
              toggle Off state.

              To avoid truncation when displaying detailed cpu statistcs, as opposed to the graphic representations, a  minimum  width  of  165  columns
              would be required.

          !  :Combine-Cpus-Mode
              This command toggle is intended for massively parallel SMP environments where, even with the `4' command toggle, not all processors can be
              displayed.  With each press of `!' the number of additional cpu's combined is  doubled  thus  reducing  the  total  number  of  cpu  lines
              displayed.

              For  example,  with  the  first  press  of  `!' one additional cpu will be combined and displayed as `0-1, 2-3, ...' instead of the normal
              `%Cpu0, %Cpu1, %Cpu2, %Cpu3, ...'.  With a second `!' command toggle two additional cpus are combined and shown as `0-2, 3-5, ...'.   Then
              the third '!' press, combining four additional cpus, shows as `0-4, 5-9, ...', etc.

              Such  progression  continues until individual cpus are again displayed and impacts both the `1' and `4' toggles (one or two columns).  Use
              the `=' command to exit Combine Cpus mode.

       Note: If the entire summary area has been toggled Off for any window, you would be left with just the message line.  In that way, you  will  have
       maximized  available  task  rows  but  (temporarily)  sacrificed  the  program  name  in  full-screen  mode  or the `current' window name when in
       alternate-display mode.

4c. TASK AREA Commands

The task area interactive commands are always available in full-screen mode.

       The task area interactive commands are never available in alternate-display mode if the `current' window's task display has been toggled Off (see
       topic 5. ALTERNATE-DISPLAY Provisions).

       APPEARANCE of task window

          J  :Justify-Numeric-Columns toggle
              Alternates  between  right-justified  (the  default)  and left-justified numeric data.  If the numeric data completely fills the available
              column, this command toggle may impact the column header only.

          j  :Justify-Character-Columns toggle
              Alternates between left-justified (the default) and right-justified character data.  If the character data completely fills the  available
              column, this command toggle may impact the column header only.

         The following commands will also be influenced by the state of the global `B' (bold enable) toggle.

          b  :Bold/Reverse toggle
              This  command  will  impact  how  the  `x'  and  `y' toggles are displayed.  It may also impact the summary area when a bar graph has been
              selected for cpu states or memory usage via the `t' or `m' toggles.

          x  :Column-Highlight toggle
              Changes highlighting for the current sort field.  If you forget which field is being sorted this command  can  serve  as  a  quick  visual
              reminder, providing the sort field is being displayed.  The sort field might not be visible because:
                  1) there is insufficient Screen Width
                  2) the `f' interactive command turned it Off

              Note:  Whenever Searching and/or Other Filtering is active in a window, column highlighting is temporarily disabled.  See the notes at the
              end of topics 5d. SEARCHING and 5e. FILTERING for an explanation why.

          y  :Row-Highlight toggle
              Changes highlighting for "running" tasks.  For additional insight into this task state, see topic 3a.  DESCRIPTIONS  of  Fields,  the  `S'
              field (Process Status).

              Use of this provision provides important insight into your system's health.  The only costs will be a few additional tty escape sequences.

          z  :Color/Monochrome toggle
              Switches  the  `current'  window between your last used color scheme and the older form of black-on-white or white-on-black.  This command
              will alter both the summary area and task area but does not affect the state of the `x', `y' or `b' toggles.

       CONTENT of task window

          c  :Command-Line/Program-Name toggle
              This command will be honored whether or not the COMMAND column is currently visible.  Later, should that field come into view, the  change
              you applied will be seen.

          f | F  :Fields-Management
              These  keys display a separate screen where you can change which fields are displayed, their order and also designate the sort field.  For
              additional information on these interactive commands see topic 3b. MANAGING Fields.

          o | O  :Other-Filtering
              You will be prompted for the selection criteria which then determines which tasks will be shown in the `current'  window.   Your  criteria
              can be made case sensitive or case can be ignored.  And you determine if top should include or exclude matching tasks.

              See topic 5e. FILTERING in a window for details on these and additional related interactive commands.

          S  :Cumulative-Time-Mode toggle
              When Cumulative mode is On, each process is listed with the cpu time that it and its dead children have used.

              When Off, programs that fork into many separate tasks will appear less demanding.  For programs like `init' or a shell this is appropriate
              but for others, like compilers, perhaps not.  Experiment with two task windows sharing the same sort field but with different  `S'  states
              and see which representation you prefer.

              After  issuing this command, you'll be informed of the new state of this toggle.  If you wish to know in advance whether or not Cumulative
              mode is in effect, simply ask for help and view the window summary on the second line.

          u | U  :Show-Specific-User-Only
              You will be prompted for the uid or name of the user to display.  The -u option matches on  effective user whereas the -U  option  matches
              on any user (real, effective, saved, or filesystem).

              Thereafter,  in  that  task  window  only matching users will be shown, or possibly no processes will be shown.  Prepending an exclamation
              point (`!') to the user id or name instructs top to display only processes with users not matching the one provided.

              Different task windows can be used to filter different users.  Later, if you wish to monitor all users again in the `current' window,  re-
              issue this command but just press <Enter> at the prompt.

          V  :Forest-View-Mode toggle
              In this mode, processes are reordered according to their parents and the layout of the COMMAND column resembles that of a tree.  In forest
              view mode it is still possible to toggle between program name and command line (see the `c' interactive command) or between processes  and
              threads (see the `H' interactive command).

              Note:  Typing  any  key  affecting  the  sort order will exit forest view mode in the `current' window.  See topic 4c. TASK AREA Commands,
              SORTING for information on those keys.

          v  :Hide/Show-Children toggle
              When in forest view mode, this key serves as a toggle to collapse or expand the children of a parent.

              The toggle is applied against the first (topmost) process in the `current' window.  See  topic  5c.  SCROLLING  a  Window  for  additional
              information regarding vertical scrolling.

              If the target process has not forked any children, this key has no effect.  It also has no effect when not in forest view mode.

       SIZE of task window

          i  :Idle-Process toggle
              Displays  all  tasks  or  just  active tasks.  When this toggle is Off, tasks that have not used any CPU since the last update will not be
              displayed.  However, due to the granularity of the %CPU and TIME+ fields, some processes may still be displayed that appear to  have  used
              no CPU.

              If  this  command  is  applied  to the last task display when in alternate-display mode, then it will not affect the window's size, as all
              prior task displays will have already been painted.

          n | #  :Set-Maximum-Tasks
              You will be prompted to enter the number of tasks to display.  The lessor of your number and available screen rows will be used.

              When used in alternate-display mode, this is the command that gives you precise control over the  size  of  each  currently  visible  task
              display, except for the very last.  It will not affect the last window's size, as all prior task displays will have already been painted.

              Note:  If  you  wish to increase the size of the last visible task display when in alternate-display mode, simply decrease the size of the
              task display(s) above it.

       SORTING of task window

          For compatibility, this top supports most of the former top sort keys.  Since this is primarily a service to former top users, these  commands
          do not appear on any help screen.
                command   sorted-field                  supported
                A         start time (non-display)      No
                M         %MEM                          Yes
                N         PID                           Yes
                P         %CPU                          Yes
                T         TIME+                         Yes

          Before  using  any  of  the following sort provisions, top suggests that you temporarily turn on column highlighting using the `x' interactive
          command.  That will help ensure that the actual sort environment matches your intent.

          The following interactive commands will only be honored when the current sort field is visible.  The sort field might not be visible because:
                1) there is insufficient Screen Width
                2) the `f' interactive command turned it Off

             <  :Move-Sort-Field-Left
                 Moves the sort column to the left unless the current sort field is the first field being displayed.

             >  :Move-Sort-Field-Right
                 Moves the sort column to the right unless the current sort field is the last field being displayed.

          The following interactive commands will always be honored whether or not the current sort field is visible.

             f | F  :Fields-Management
                 These keys display a separate screen where you can change which field is used as the sort column, among other functions.  This can be a
                 convenient way to simply verify the current sort field, when running top with column highlighting turned Off.

             R  :Reverse/Normal-Sort-Field toggle
                 Using this interactive command you can alternate between high-to-low and low-to-high sorts.

          Note:  Field  sorting  uses  internal values, not those in column display.  Thus, the TTY and WCHAN fields will violate strict ASCII collating
          sequence.

4d. COLOR Mapping

       When you issue the `Z' interactive command, you will be presented with a separate screen.  That screen can be used to change the colors  in  just
       the `current' window or in all four windows before returning to the top display.

       The following interactive commands are available.
           4 upper case letters to select a target
           8 numbers to select a color
           normal toggles available
               B         :bold disable/enable
               b         :running tasks "bold"/reverse
               z         :color/mono
           other commands available
               a/w       :apply, then go to next/prior
               <Enter>   :apply and exit
               q         :abandon current changes and exit

       If  you  use  `a'  or `w' to cycle the targeted window, you will have applied the color scheme that was displayed when you left that window.  You
       can, of course, easily return to any window and reapply different colors or turn colors Off completely with the `z' toggle.

       The Color Mapping screen can also be used to change the `current' window/field group  in  either  full-screen  mode  or  alternate-display  mode.
       Whatever was targeted when `q' or <Enter> was pressed will be made current as you return to the top display.

5. ALTERNATE-DISPLAY Provisions

5a. WINDOWS Overview

       Field Groups/Windows:
          In  full-screen  mode  there  is  a single window represented by the entire screen.  That single window can still be changed to display 1 of 4
          different field groups (see the `g' interactive command, repeated below).  Each of the 4 field groups has  a  unique  separately  configurable
          summary area and its own configurable task area.

          In  alternate-display  mode, those 4 underlying field groups can now be made visible simultaneously, or can be turned Off individually at your
          command.

          The summary area will always exist, even if it's only the message line.  At any given time only one summary area can be  displayed.   However,
          depending on your commands, there could be from zero to four separate task displays currently showing on the screen.

       Current Window:
          The  `current' window is the window associated with the summary area and the window to which task related commands are always directed.  Since
          in alternate-display mode you can toggle the task display Off, some commands might be restricted for the `current' window.

          A further complication arises when you have toggled the first summary area line Off.  With the loss of the window name (the `l' toggled line),
          you'll not easily know what window is the `current' window.

5b. COMMANDS for Windows

  • | _ :Show/Hide-Window(s) toggles The `-‘ key turns the `current’ window’s task display On and Off. When On, that task area will show a minimum of the columns header you’ve established with the `f’ interactive command. It will also reflect any other task area options/toggles you’ve applied yielding zero or more tasks.
              The  `_'  key does the same for all task displays.  In other words, it switches between the currently visible task display(s) and any task
              display(s) you had toggled Off.  If all 4 task displays are currently visible, this interactive command will leave the summary area as the
              only display element.

       *  = | +  :Equalize/Reset-Window(s)
              The  `='  key  forces  the  `current' window's task display to be visible.  It also reverses any active `i' (idle tasks), `n' (max tasks),
              `u/U' (user filter), `o/O' (other filter), `v' (hide children), `L' (locate) and `!' (combine cpus) commands.  Also,  if  the  window  had
              been  scrolled,  it  will  be reset with this command.  See topic 5c. SCROLLING a Window for additional information regarding vertical and
              horizontal scrolling.

              The `+' key does the same for all windows.  The four task displays will reappear, evenly  balanced,  while  retaining  any  customizations
              previously applied beyond those noted for the `=' command toggle.

       *  A  :Alternate-Display-Mode toggle
              This command will switch between full-screen mode and alternate-display mode.

              The first time you issue this command, all four task displays will be shown.  Thereafter when you switch modes, you will see only the task
              display(s) you've chosen to make visible.

       *  a | w  :Next-Window-Forward/Backward
              This will change the `current' window, which in turn changes the window to which commands are directed.  These  keys  act  in  a  circular
              fashion so you can reach any desired window using either key.

              Assuming  the window name is visible (you have not toggled `l' Off), whenever the `current' window name loses its emphasis/color, that's a
              reminder the task display is Off and many commands will be restricted.

       *  g  :Choose-Another-Window/Field-Group
              You will be prompted to enter a number between 1 and 4 designating the field group which should be made the `current' window.

              In full-screen mode, this command is necessary to alter the `current' window.  In alternate-display mode, it is simply a  less  convenient
              alternative to the `a' and `w' commands.

          G  :Change-Window/Field-Group-Name
              You  will  be prompted for a new name to be applied to the `current' window.  It does not require that the window name be visible (the `l'
              toggle to be On).

         The interactive commands shown with an asterisk (`') have use beyond alternate-display mode.
              =, A, g    are always available
              a, w       act the same with color mapping
                         and fields management

5c. SCROLLING a Window

       Typically a task window is a partial view into a systems's total tasks/threads which shows only some of the available fields/columns.  With these
       scrolling keys, you can move that view vertically or horizontally to reveal any desired task or column.

       Up,PgUp  :Scroll-Tasks
           Move  the  view up toward the first task row, until the first task is displayed at the top of the `current' window.  The Up arrow key moves a
           single line while PgUp scrolls the entire window.

       Down,PgDn  :Scroll-Tasks
           Move the view down toward the last task row, until the last task is the only task displayed at the top of the  `current'  window.   The  Down
           arrow key moves a single line while PgDn scrolls the entire window.

       Left,Right  :Scroll-Columns
           Move the view of displayable fields horizontally one column at a time.

           Note:  As a reminder, some fields/columns are not fixed-width but allocated all remaining screen width when visible.  When scrolling right or
           left, that feature may produce some unexpected results initially.

           Additionally, there are special provisions for any variable width field when positioned as the last displayed  field.   Once  that  field  is
           reached via the right arrow key, and is thus the only column shown, you can continue scrolling horizontally within such a field.  See the `C'
           interactive command below for additional information.

       Home  :Jump-to-Home-Position
           Reposition the display to the un-scrolled coordinates.

       End  :Jump-to-End-Position
           Reposition the display so that the rightmost column reflects the last displayable field and the bottom task row represents the last task.

           Note: From this position it is still possible to scroll down and right using the arrow keys.  This is true until a single column and a single
           task is left as the only display element.

       C  :Show-scroll-coordinates toggle
           Toggle  an informational message which is displayed whenever the message line is not otherwise being used.  That message will take one of two
           forms depending on whether or not a variable width column has also been scrolled.

             scroll coordinates: y = n/n (tasks), x = n/n (fields)
             scroll coordinates: y = n/n (tasks), x = n/n (fields) + nn

           The coordinates shown as n/n are relative to the  upper  left  corner  of  the  `current'  window.   The  additional  `+ nn'  represents  the
           displacement  into  a  variable width column when it has been scrolled horizontally.  Such displacement occurs in normal 8 character tab stop
           amounts via the right and left arrow keys.

           y = n/n (tasks)
               The first n represents the topmost visible task and is controlled by scrolling keys.  The second n is updated  automatically  to  reflect
               total tasks.

           x = n/n (fields)
               The  first  n  represents  the  leftmost  displayed  column  and  is  controlled  by scrolling keys.  The second n is the total number of
               displayable fields and is established with the `f' interactive command.

       The above interactive commands are always available in full-screen mode but never available in alternate-display mode if the  `current'  window's
       task display has been toggled Off.

       Note:  When  any form of filtering is active, you can expect some slight aberrations when scrolling since not all tasks will be visible.  This is
       particularly apparent when using the Up/Down arrow keys.

5d. SEARCHING in a Window

You can use these interactive commands to locate a task row containing a particular value.

       L  :Locate-a-string
           You will be prompted for the case-sensitive string to locate starting from the current window coordinates.   There  are  no  restrictions  on
           search string content.

           Searches  are not limited to values from a single field or column.  All of the values displayed in a task row are allowed in a search string.
           You may include spaces, numbers, symbols and even forest view artwork.

           Keying <Enter> with no input will effectively disable the `&' key until a new search string is entered.

       &  :Locate-next
           Assuming a search string has been established, top will attempt to locate the next occurrence.

       When a match is found, the current window is repositioned vertically so the task row containing that string is  first.   The  scroll  coordinates
       message  can  provide  confirmation  of  such  vertical repositioning (see the `C' interactive command).  Horizontal scrolling, however, is never
       altered via searching.

       The availability of a matching string will be influenced by the following factors.

          a. Which fields are displayable from the total available,
             see topic 3b. MANAGING Fields.

          b. Scrolling a window vertically and/or horizontally,
             see topic 5c. SCROLLING a Window.

          c. The state of the command/command-line toggle,
             see the `c' interactive command.

          d. The stability of the chosen sort column,
             for example PID is good but %CPU bad.

       If a search fails, restoring the `current' window home (unscrolled) position, scrolling horizontally, displaying command-lines or choosing a more
       stable sort field could yet produce a successful `&' search.

       The  above  interactive commands are always available in full-screen mode but never available in alternate-display mode if the `current' window's
       task display has been toggled Off.

       Note: Whenever a Search is active in a window, top will turn column highlighting Off to prevent false  matches  on  internal  non-display  escape
       sequences.   Such  highlighting  will  be  restored  when  a  window's  search  string  is empty.  See the `x' interactive command for additional
       information on sort column highlighting.

5e. FILTERING in a Window

       You can use this `Other Filter' feature to establish selection criteria which will then determine which tasks are shown in the `current'  window.
       Such filters can be made presistent if preserved in the rcfile via the 'W' interactive command.

       Establishing  a filter requires: 1) a field name; 2) an operator; and 3) a selection value, as a minimum.  This is the most complex of top's user
       input requirements so, when you make a mistake, command recall will be your friend.  Remember the  Up/Down  arrow  keys  or  their  aliases  when
       prompted for input.

       Filter Basics

          1. field names are case sensitive and spelled as in the header

          2. selection values need not comprise the full displayed field

          3. a selection is either case insensitive or sensitive to case

          4. the default is inclusion, prepending `!' denotes exclusions

          5. multiple selection criteria can be applied to a task window

          6. inclusion and exclusion criteria can be used simultaneously

          7. the 1 equality and 2 relational filters can be freely mixed

          8. separate unique filters are maintained for each task window

          If  a  field is not turned on or is not currently in view, then your selection criteria will not affect the display.  Later, should a filtered
          field become visible, the selection criteria will then be applied.

       Keyboard Summary

         o  :Other-Filter (lower case)
             You will be prompted to establish a filter that ignores case when matching.

         O  :Other-Filter (upper case)
             You will be prompted to establish a case sensitive filter.

        ^O  :Show-Active-Filters (Ctrl key + `o')
             This can serve as a reminder of which filters are active in the `current' window.  A summary will be shown on the message  line  until  you
             press the <Enter> key.

         =  :Reset-Filtering in current window
             This clears all of your selection criteria in the `current' window.  It also has additional impact so please see topic 4a. GLOBAL Commands.

         +  :Reset-Filtering in all windows
             This clears the selection criteria in all windows, assuming you are in alternate-display mode.  As with the `=' interactive command, it too
             has additional consequences so you might wish to see topic 5b. COMMANDS for Windows.

       Input Requirements

          When prompted for selection criteria, the data you provide must take one of two forms.  There are 3 required pieces of information, with a 4th
          as optional.  These examples use spaces for clarity but your input generally would not.
                  #1           #2  #3              ( required )
                  Field-Name   ?   include-if-value
               !  Field-Name   ?   exclude-if-value
               #4                                  ( optional )

          Items  #1,  #3  and  #4 should be self-explanatory.  Item #2 represents both a required delimiter and the operator which must be one of either
          equality (`=') or relation (`<' or `>').

          The `=' equality operator requires only a partial match and that can reduce your `if-value' input requirements.  The  `>'  or  `<'  relational
          operators always employ string comparisons, even with numeric fields.  They are designed to work with a field's default justification and with
          homogeneous data.  When some field's numeric amounts have been subjected to scaling while others have not, that data is no longer homogeneous.

          If you establish a relational filter and you have changed the default Numeric or Character justification, that filter is likely to fail.  When
          a  relational  filter is applied to a memory field and you have not changed the scaling, it may produce misleading results.  This happens, for
          example, because `100.0m' (MiB) would appear greater than `1.000g' (GiB) when compared as strings.

          If your filtered results appear suspect, simply altering justification or scaling may yet achieve the desired objective.  See the `j', `J' and
          `e' interactive commands for additional information.

       Potential Problems

          These GROUP filters could produce the exact same results or the second one might not display anything at all, just a blank task window.
               GROUP=root        ( only the same results when )
               GROUP=ROOT        ( invoked via lower case `o' )

          Either  of  these  RES  filters  might  yield inconsistent and/or misleading results, depending on the current memory scaling factor.  Or both
          filters could produce the exact same results.
               RES>9999          ( only the same results when )
               !RES<10000        ( memory scaling is at `KiB' )

          This nMin filter illustrates a problem unique to scalable fields.  This particular field can display a  maximum  of  4  digits,  beyond  which
          values are automatically scaled to KiB or above.  So while amounts greater than 9999 exist, they will appear as 2.6m, 197k, etc.
               nMin>9999         ( always a blank task window )

       Potential Solutions

          These  examples  illustrate  how  Other Filtering can be creatively applied to achieve almost any desired result.  Single quotes are sometimes
          shown to delimit the spaces which are part of a filter or to represent a request for status (^O) accurately.  But if you used  them  with  if-
          values in real life, no matches would be found.

          Assuming  field  nTH  is  displayed,  the  first  filter  will result in only multi-threaded processes being shown.  It also reminds us that a
          trailing space is part of every displayed field.  The second filter achieves the exact same results with less typing.
               !nTH=` 1 '                ( ' for clarity only )
               nTH>1                     ( same with less i/p )

          With Forest View mode active and the COMMAND column in view, this filter effectively collapses child processes  so  that  just  3  levels  are
          shown.
               !COMMAND=`       `- '     ( ' for clarity only )

          The  final two filters appear as in response to the status request key (^O).  In reality, each filter would have required separate input.  The
          PR example shows the two concurrent filters necessary to display tasks with priorities of 20 or more, since some might be negative.   Then  by
          exploiting trailing spaces, the nMin series of filters could achieve the failed `9999' objective discussed above.
               `PR>20' + `!PR=-'         ( 2 for right result )
               `!nMin=0 ' + `!nMin=1 ' + `!nMin=2 ' + `!nMin=3 ' ...

       Note:  Whenever  Other  Filtering  is  active in a window, top will turn column highlighting Off to prevent false matches on internal non-display
       escape sequences.  Such highlighting will be restored when a window is no longer subject to filtering.   See  the  `x'  interactive  command  for
       additional information on sort column highlighting.

6. FILES

6a. PERSONAL Configuration File

This file is created or updated via the ‘W’ interactive command.

The legacy version is written as `$HOME/.your-name-4-top’ + `rc’ with a leading period.

       A  newly  created  configuration  file  is  written  as  procps/your-name-4-top'  +  `rc' without a leading period.  The procps directory will be
       subordinate to either $XDG_CONFIG_HOME when set as an absolute path or the $HOME/.config directory.

       While not intended to be edited manually, here is the general layout:
           global   # line  1: the program name/alias notation
             "      # line  2: id,altscr,irixps,delay,curwin
           per ea   # line  a: winname,fieldscur
           window   # line  b: winflags,sortindx,maxtasks,etc
             "      # line  c: summclr,msgsclr,headclr,taskclr
           global   # line 15: additional miscellaneous settings
             "      # any remaining lines are devoted to optional
             "      # active 'other filters' discussed in section 5e above
             "      # plus 'inspect' entries discussed in section 6b below

       If a valid absolute path to the rcfile cannot be established, customizations made to a running top will be impossible to preserve.

6b. ADDING INSPECT Entries

       To exploit the `Y' interactive command, you must add entries at the end of the top personal configuration file.  Such entries  simply  reflect  a
       file to be read or command/pipeline to be executed whose results will then be displayed in a separate scrollable, searchable window.

       If you don't know the location or name of your top rcfile, use the `W' interactive command to rewrite it and note those details.

       Inspect  entries  can  be  added  with  a redirected echo or by editing the configuration file.  Redirecting an echo risks overwriting the rcfile
       should it replace (>) rather than append (>>) to that file.  Conversely, when using an editor care must be taken not to corrupt  existing  lines,
       some of which will contain unprintable data or unusual characters.

       Those  Inspect  entries  beginning  with a `#' character are ignored, regardless of content.  Otherwise they consist of the following 3 elements,
       each of which must be separated by a tab character (thus 2 `\t' total):

         .type:  literal `file' or `pipe'
         .name:  selection shown on the Inspect screen
         .fmts:  string representing a path or command

       The two types of Inspect entries are not interchangeable.  Those designated `file' will be accessed using fopen and must reference a single  file
       in  the  `.fmts' element.  Entries specifying `pipe' will employ popen, their `.fmts' element could contain many pipelined commands and, none can
       be interactive.

       If the file or pipeline represented in your `.fmts' deals with the specific PID input or accepted when prompted, then the format string must also
       contain the `%d' specifier, as these examples illustrate.

         .fmts=  /proc/%d/numa_maps
         .fmts=  lsof -P -p %d

       For `pipe' type entries only, you may also wish to redirect stderr to stdout for a more comprehensive result.  Thus the format string becomes:

         .fmts=  pmap -x %d 2>&1

       Here  are  examples  of both types of Inspect entries as they might appear in the rcfile.  The first entry will be ignored due to the initial `#'
       character.  For clarity, the pseudo tab depictions (^I) are surrounded by an extra space but the actual tabs would not be.

         # pipe ^I Sockets ^I lsof -n -P -i 2>&1
         pipe ^I Open Files ^I lsof -P -p %d 2>&1
         file ^I NUMA Info ^I /proc/%d/numa_maps
         pipe ^I Log ^I tail -n100 /var/log/syslog | sort -Mr

       Except for the commented entry above, these next examples show what could be echoed to achieve similar results,  assuming  the  rcfile  name  was
       `.toprc'.  However, due to the embedded tab characters, each of these lines should be preceded by `/bin/echo -e', not just a simple an `echo', to
       enable backslash interpretation regardless of which shell you use.

         "pipe\tOpen Files\tlsof -P -p %d 2>&1" >> ~/.toprc
         "file\tNUMA Info\t/proc/%d/numa_maps" >> ~/.toprc
         "pipe\tLog\ttail -n200 /var/log/syslog | sort -Mr" >> ~/.toprc

       If any inspect entry you create produces output with unprintable characters they will be displayed in either the ^C notation or hexadecimal  <FF>
       form,  depending  on  their  value.   This  applies  to tab characters as well, which will show as `^I'.  If you want a truer representation, any
       embedded tabs should be expanded.  The following example takes what could have been a `file' entry but employs a `pipe' instead so as  to  expand
       the embedded tabs.

         # next would have contained `\t' ...
         # file ^I <your_name> ^I /proc/%d/status
         # but this will eliminate embedded `\t' ...
         pipe ^I <your_name> ^I cat /proc/%d/status | expand -

       Note:  Some  programs might rely on SIGINT to end.  Therefore, if a `pipe' such as the following is established, one must use Ctrl-C to terminate
       it in order to review the results.  This is the single occasion where a `^C' will not also terminate top.

         pipe ^I Trace ^I /usr/bin/strace -p %d 2>&1

       Lastly, while `pipe' type entries have been discussed in terms of pipelines and commands, there is nothing to prevent you from  including   shell
       scripts as well.  Perhaps even newly created scripts designed specifically for the `Y' interactive command.

       For  example,  as  the  number of your Inspect entries grows over time, the `Options:' row will be truncated when screen width is exceeded.  That
       does not affect operation other than to make some selections invisible.  However, if some choices are lost to truncation but you want to see more
       options, there is an easy solution hinted at below.

         Inspection Pause at pid ...
         Use:  left/right then <Enter> ...
         Options:  help  1  2  3  4  5  6  7  8  9  10  11 ...

       The  entries  in  the  top  rcfile  would have a number for the `.name' element and the `help' entry would identify a shell script you've written
       explaining what those numbered selections actually mean.  In that way, many more choices can be made visible.

6c. SYSTEM Configuration File

       This configuration file represents defaults for users who have not saved their own configuration file.  The format mirrors exactly  the  personal
       configuration file and can also include `inspect' entries as explained above.

       Creating it is a simple process.

       1. Configure top appropriately for your installation and preserve that configuration with the `W' interactive command.

       2. Add and test any desired `inspect' entries.

       3. Copy that configuration file to the /etc/ directory as `topdefaultrc'.

6d. SYSTEM Restrictions File

The presence of this file will influence which version of the help screen is shown to an ordinary user.

       More  importantly,  it  will  limit  what  ordinary  users  are  allowed to do when top is running.  They will not be able to issue the following
       commands.
           k        Kill a task
           r        Renice a task
           d or s   Change delay/sleep interval

       This configuration file is not created by top.  Rather, it is created manually and placed it in the /etc/ directory as `toprc'.

       It should have exactly two lines, as shown in this example:
           s        # line 1: secure mode switch
           5.0      # line 2: delay interval in seconds

7. STUPID TRICKS Sampler

       Many of these tricks work best when you give top a scheduling boost.  So plan on starting him with a nice value of -10, assuming you've  got  the
       authority.

7a. Kernel Magic

For these stupid tricks, top needs full-screen mode.

       •  The user interface, through prompts and help, intentionally implies that the delay interval is limited to tenths of a second.  However, you're
          free to set any desired delay.  If you want to see Linux at his scheduling best, try a delay of .09 seconds or less.

          For this experiment, under x-windows open an xterm and maximize it.  Then do the following:
            . provide a scheduling boost and tiny delay via:
                nice -n -10 top -d.09
            . keep sorted column highlighting Off so as to
              minimize path length
            . turn On reverse row highlighting for emphasis
            . try various sort columns (TIME/MEM work well),
              and normal or reverse sorts to bring the most
              active processes into view

          What you'll see is a very busy Linux doing what he's always done for you, but there was no program available to illustrate this.

       •  Under an xterm using `white-on-black' colors, on top's Color Mapping screen set the task color to black and be sure that task highlighting  is
          set to bold, not reverse.  Then set the delay interval to around .3 seconds.

          After bringing the most active processes into view, what you'll see are the ghostly images of just the currently running tasks.

       •  Delete  the  existing  rcfile, or create a new symlink.  Start this new version then type `T' (a secret key, see topic 4c. Task Area Commands,
          SORTING) followed by `W' and `q'.  Finally, restart the program with -d0 (zero delay).

          Your display will be refreshed at three times the rate of the former top, a 300% speed advantage.  As  top  climbs  the  TIME  ladder,  be  as
          patient as you can while speculating on whether or not top will ever reach the top.

7b. Bouncing Windows

For these stupid tricks, top needs alternate-display mode.

       •  With 3 or 4 task displays visible, pick any window other than the last and turn idle processes Off using the `i' command toggle.  Depending on
          where you applied `i', sometimes several task displays are bouncing and sometimes it's like an accordion, as top tries his  best  to  allocate
          space.

       •  Set  each  window's summary lines differently: one with no memory (`m'); another with no states (`t'); maybe one with nothing at all, just the
          message line.  Then hold down `a' or `w' and watch a variation on bouncing windows  --  hopping windows.

       •  Display all 4 windows and for each, in turn, set idle processes to Off using the `i' command toggle.  You've just entered the "extreme bounce"
          zone.

7c. The Big Bird Window

This stupid trick also requires alternate-display mode.

       •  Display  all  4  windows and make sure that 1:Def is the `current' window.  Then, keep increasing window size with the `n' interactive command
          until all the other task displays are "pushed out of the nest".

          When they've all been displaced, toggle between all visible/invisible windows using the `_' command toggle.  Then ponder this:
             is top fibbing or telling honestly your imposed truth?

7d. The Ol’ Switcheroo

This stupid trick works best without alternate-display mode, since justification is active on a per window basis.

       •  Start top and make COMMAND the last (rightmost) column displayed.  If necessary, use the `c' command  toggle  to  display  command  lines  and
          ensure that forest view mode is active with the `V' command toggle.

          Then  use  the up/down arrow keys to position the display so that some truncated command lines are shown (`+' in last position).  You may have
          to resize your xterm to produce truncation.

          Lastly, use the `j' command toggle to make the COMMAND column right justified.

          Now use the right arrow key to reach the COMMAND column.  Continuing with the right arrow key, watch closely the direction of travel  for  the
          command lines being shown.

             some lines travel left, while others travel right

             eventually all lines will Switcheroo, and move right

8. BUGS

Please send bug reports to ⟨procps@freelists.org⟩.

9. SEE Also

free(1), ps(1), uptime(1), atop(1), slabtop(1), vmstat(8), w(1)

procps-ng September 2020 TOP(1)

Categories
Linux manpage

manpage wc

WC(1) User Commands WC(1)

NAME

wc – print newline, word, and byte counts for each file

SYNOPSIS

       wc [OPTION]... [FILE]...
       wc [OPTION]... --files0-from=F

DESCRIPTION

       Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified.  A word is a non-zero-length sequence of
       characters delimited by white space.

       With no FILE, or when FILE is -, read standard input.

       The options below may be used to select which counts are printed, always in the following order: newline, word,  character,  byte,  maximum  line
       length.

       -c, --bytes
              print the byte counts

       -m, --chars
              print the character counts

       -l, --lines
              print the newline counts

       --files0-from=F
              read input from the files specified by NUL-terminated names in file F; If F is - then read names from standard input

       -L, --max-line-length
              print the maximum display width

       -w, --words
              print the word counts

       --help display this help and exit

       --version
              output version information and exit

AUTHOR

Written by Paul Rubin and David MacKenzie.

REPORTING BUGS

       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT

       Copyright © 2020 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.

SEE ALSO

       Full documentation <https://www.gnu.org/software/coreutils/wc>
       or available locally via: info '(coreutils) wc invocation'

GNU coreutils 8.32                                                   September 2020                                                                WC(1)