fileutils
Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.
This manual is incomplete: No attempt is made to explain basic file concepts in a way suitable for novices. Thus, if you are interested, please get involved in improving this manual. The entire GNU community will benefit.
The GNU file utilities are mostly compatible with the POSIX.2 standard.
Please report bugs to `fileutils-bugs@gnu.ai.mit.edu'. Remember to include the version number, machine architecture, input files, and any other information needed to reproduce the bug: your input, what you expected, what you got, and why it is wrong. Diffs are welcome, but please include a description of the problem as well, since this is sometimes difficult to infer. See section `Bugs' in GNU CC.
This manual is based on the Unix man pages in the distribution, which were originally written by David MacKenzie and updated by Jim Meyering. Fran@,{c}ois Pinard did the initial conversion to Texinfo format. Karl Berry did the indexing, some reorganization, and editing of the results. Richard Stallman contributed his usual invaluable insights to the overall process.
Certain options are available in all of these programs (in fact, every GNU program should accept them). Rather than writing identical descriptions for each of the programs, they are described here.
Some GNU programs (at least cp
, install
, ln
, and
mv
) optionally make backups of files before writing new versions.
These options control the details of these backups. The options are also
briefly mentioned in the descriptions of the particular programs.
SIMPLE_BACKUP_SUFFIX
environment variable is used. And if SIMPLE_BACKUP_SUFFIX
is not
set, the default is `~', just as in Emacs.
VERSION_CONTROL
environment variable is used. And if VERSION_CONTROL
is not set,
the default backup type is `existing'.
This option corresponds to the Emacs variable `version-control';
the same values for method are accepted as in Emacs. This options
also more descriptive name. The valid methods (unique
abbreviations are accepted):
Each file has a set of permissions that control the kinds of access that users have to that file. The permissions for a file are also called its access mode. They can be represented either in symbolic form or as an octal number.
There are three kinds of permissions that a user can have for a file:
There are three categories of users who may have different permissions to perform any of the above operations on a file:
Files are given an owner and group when they are created. Usually the
owner is the current user and the group is the group of the directory
the file is in, but this varies with the operating system, the
filesystem the file is created on, and the way the file is created. You
can change the owner and group of a file by using the chown
and
chgrp
commands.
In addition to the three sets of three permissions listed above, a file's permissions have three special components, which affect only executable files (programs) and, on some systems, directories:
Symbolic modes represent changes to files' permissions as
operations on single-character symbols. They allow you to modify either
all or selected parts of files' permissions, optionally based on
their previous values, and perhaps on the current umask
as well
(see section The Umask and Protection).
The format of symbolic modes is:
[ugoa...][[+-=][rwxXstugo...]...][,...]
The following sections describe the operators and other details of symbolic modes.
The basic symbolic operations on a file's permissions are adding, removing, and setting the permission that certain users have to read, write, and execute the file. These operations have the following format:
users operation permissions
The spaces between the three parts above are shown for readability only; symbolic modes can not contain spaces.
The users part tells which users' access to the file is changed. It consists of one or more of the following letters (or it can be empty; see section The Umask and Protection, for a description of what happens then). When more than one of these letters is given, the order that they are in does not matter.
u
g
o
a
The operation part tells how to change the affected users' access to the file, and is one of the following symbols:
+
-
=
The permissions part tells what kind of access to the file should be changed; it is zero or more of the following letters. As with the users part, the order does not matter when more than one letter is given. Omitting the permissions part is useful only with the `=' operation, where it gives the specified users no access at all to the file.
r
w
x
For example, to give everyone permission to read and write a file, but not to execute it, use:
a=rw
To remove write permission for from all users other than the file's owner, use:
go-w
The above command does not affect the access that the owner of the file has to it, nor does it affect whether other users can read or execute the file.
To give everyone except a file's owner no permission to do anything with that file, use the mode below. Other users could still remove the file, if they have write permission on the directory it is in.
go=
Another way to specify the same thing is:
og-rxw
You can base a file's permissions on its existing permissions. To do this, instead of using `r', `w', or `x' after the operator, you use the letter `u', `g', or `o'. For example, the mode
o+g
adds the permissions for users who are in a file's group to the permissions that other users have for the file. Thus, if the file started out as mode 664 (`rw-rw-r--'), the above mode would change it to mode 666 (`rw-rw-rw-'). If the file had started out as mode 741 (`rwxr----x'), the above mode would change it to mode 745 (`rwxr--r-x'). The `-' and `=' operations work analogously.
In addition to changing a file's read, write, and execute permissions, you can change its special permissions. See section Structure of File Permissions, for a summary of these permissions.
To change a file's permission to set the user ID on execution, use `u' in the users part of the symbolic mode and `s' in the permissions part.
To change a file's permission to set the group ID on execution, use `g' in the users part of the symbolic mode and `s' in the permissions part.
To change a file's permission to stay permanently on the swap device, use `o' in the users part of the symbolic mode and `t' in the permissions part.
For example, to add set user ID permission to a program, you can use the mode:
u+s
To remove both set user ID and set group ID permission from it, you can use the mode:
ug-s
To cause a program to be saved on the swap device, you can use the mode:
o+t
Remember that the special permissions only affect files that are executable, plus, on some systems, directories (on which they have different meanings; see section Structure of File Permissions). Using `a' in the users part of a symbolic mode does not cause the special permissions to be affected; thus,
a+s
has no effect. You must use `u', `g', and `o' explicitly to affect the special permissions. Also, the combinations `u+t', `g+t', and `o+s' have no effect.
The `=' operator is not very useful with special permissions; for example, the mode:
o=t
does cause the file to be saved on the swap device, but it also removes all read, write, and execute permissions that users not in the file's group might have had for it.
There is one more special type of symbolic permission: if you use `X' instead of `x', execute permission is affected only if the file already had execute permission or is a directory. It affects directories' execute permission even if they did not initially have any execute permissions set.
For example, this mode:
a+X
gives all users permission to execute files (or search directories) if anyone could before.
The format of symbolic modes is actually more complex than described above (see section Setting Permissions). It provides two ways to make multiple changes to files' permissions.
The first way is to specify multiple operation and permissions parts after a users part in the symbolic mode.
For example, the mode:
og+rX-w
gives users other than the owner of the file read permission and, if it is a directory or if someone already had execute permission to it, gives them execute permission; and it also denies them write permission to it file. It does not affect the permission that the owner of the file has for it. The above mode is equivalent to the two modes:
og+rX og-w
The second way to make multiple changes is to specify more than one simple symbolic mode, separated by commas. For example, the mode:
a+r,go-w
gives everyone permission to read the file and removes write permission on it for all users except its owner. Another example:
u=rwx,g=rx,o=
sets all of the non-special permissions for the file explicitly. (It gives users who are not in the file's group no permission at all for it.)
The two methods can be combined. The mode:
a+r,g+x-w
gives all users permission to read the file, and gives users who are in the file's group permission to execute it, as well, but not permission to write to it. The above mode could be written in several different ways; another is:
u+r,g+rx,o+r,g-w
If the users part of a symbolic mode is omitted, it defaults to
`a' (affect all users), except that any permissions that are
set in the system variable umask
are not affected.
The value of umask
can be set using the
umask
command. Its default value varies from system to system.
Omitting the users part of a symbolic mode is generally not useful
with operations other than `+'. It is useful with `+' because
it allows you to use umask
as an easily customizable protection
against giving away more permission to files than you intended to.
As an example, if umask
has the value 2, which removes write
permission for users who are not in the file's group, then the mode:
+w
adds permission to write to the file to its owner and to other users who are in the file's group, but not to other users. In contrast, the mode:
a+w
ignores umask
, and does give write permission for
the file to all users.
File permissions are stored internally as 16 bit integers. As an alternative to giving a symbolic mode, you can give an octal (base 8) number that corresponds to the internal representation of the new mode. This number is always interpreted in octal; you do not have to add a leading 0, as you do in C. Mode 0055 is the same as mode 55.
A numeric mode is usually shorter than the corresponding symbolic mode, but it is limited in that it can not take into account a file's previous permissions; it can only set them absolutely.
The permissions granted to the user, to other users in the file's group, and to other users not in the file's group are each stored as three bits, which are represented as one octal digit. The three special permissions are also each stored as one bit, and they are as a group represented as another octal digit. Here is how the bits are arranged in the 16 bit integer, starting with the lowest valued bit:
Value in Corresponding Mode Permission Other users not in the file's group: 1 Execute 2 Write 4 Read Other users in the file's group: 10 Execute 20 Write 40 Read The file's owner: 100 Execute 200 Write 400 Read Special permissions: 1000 Save text image on swap device 2000 Set group ID on execution 4000 Set user ID on execution
For example, numeric mode 4755 corresponds to symbolic mode `u=rwxs,go=rx', and numeric mode 664 corresponds to symbolic mode `ug=rw,o=r'. Numeric mode 0 corresponds to symbolic mode `ugo='.
Our units of temporal measurement, from seconds on up to months, are so complicated, asymmetrical and disjunctive so as to make coherent mental reckoning in time all but impossible. Indeed, had some tyrannical god contrived to enslave our minds to time, to make it all but impossible for us to escape subjection to sodden routines and unpleasant surprises, he could hardly have done better than handing down our present system. It is like a set of trapezoidal building blocks, with no vertical or horizontal surfaces, like a language in which the simplest thought demands ornate constructions, useless particles and lengthy circumlocutions. Unlike the more successful patterns of language and science, which enable us to face experience boldly or at least level-headedly, our system of temporal calculation silently and persistently encourages our terror of time.
... It is as though architects had to measure length in feet, width in meters and height in ells; as though basic instruction manuals demanded a knowledge of five different languages. It is no wonder then that we often look into our own immediate past or future, last Tuesday or a week from Sunday, with feelings of helpless confusion. ...
--- Robert Grudin, Time and the Art of Living.
This section describes the textual date representations that GNU
programs accept. These are the strings you, as a user, can supply as
arguments to the various programs. The C interface (via the
getdate
function) is not described here.
Although the date syntax here can represent any possible time since zero A.D., computer integers are not big enough for such a (comparatively) long time. The earliest date semantically allowed on Unix systems is midnight, 1 January 1970 UCT.
A date is a string, possibly empty, containing many items separated by whitespace. The whitespace may be omitted when no ambiguity arises. The empty string means the beginning of today (i.e., midnight). Order of the items is immaterial. A date string may contain many flavors of items:
We describe each of these item types in turn, below.
A few numbers may be written out in words in most contexts. This is most useful for specifying day of the week items or relative items (see below). Here is the list: `first' for 1, `next' for 2, `third' for 3, `fourth' for 4, `fifth' for 5, `sixth' for 6, `seventh' for 7, `eighth' for 8, `ninth' for 9, `tenth' for 10, `eleventh' for 11 and `twelfth' for 12. Also, `last' means exactly -1.
When a month is written this way, it is still considered to be written numerically, instead of being "spelled in full"; this changes the allowed strings.
Alphabetic case is completely ignored in dates. Comments may be introduced between round parentheses, as long as included parentheses are properly nested. Hyphens not followed by a digit are currently ignored. Leading zeros on numbers are ignored.
A calendar date item specifies a day of the year. It is specified differently, depending on whether the month is specified numerically or literally. All these strings specify the same calendar date:
1970-09-17 # ISO 8601. 70-9-17 # This century assumed by default. 70-09-17 # Leading zeros are ignored. 9/17/72 # Common U.S. writing. 24 September 1972 24 Sept 72 # September has a special abbreviation. 24 Sep 72 # Three-letter abbreviations always allowed. Sep 24, 1972 24-sep-72 24sep72
The year can also be omitted. In this case, the last specified year is used, or the current year if none. For example:
9/17 sep 17
Here are the rules.
For numeric months, the ISO 8601 format `year-month-day' is allowed, where year is any positive number, month is a number between 01 and 12, and day is a number between 01 and 31. A leading zero must be present if a number is less than ten. If year is less than 100, then 1900 is added to it to force a date in this century. The construct `month/day/year', popular in the United States, is accepted. Also `month/day', omitting the year.
Literal months may be spelled out in full: `January', `February', `March', `April', `May', `June', `July', `August', `September', `October', `November' or `December'. Literal months may be abbreviated to their first three letters, possibly followed by an abbreviating dot. It is also permitted to write `Sept' instead of `September'.
When months are written literally, the calendar date may be given as any of the following:
day month year day month month day year day-month-year
Or, omitting the year:
month day
A time of day item in date strings specifies the time on a given day. Here are some examples, all of which represent the same time:
20:02:0 20:02 8:02pm 20:02-0500 # In EST (Eastern U.S. Standard Time).
More generally, the time of the day may be given as `hour:minute:second', where hour is a number between 0 and 23, minute is a number between 0 and 59, and second is a number between 0 and 59. Alternatively, `:second' can be omitted, in which case it is taken to be zero.
If the time is followed by `am' or `pm' (or `a.m.' or `p.m.'), hour is restricted to run from 1 to 12, and `:minute' may be omitted (taken to be zero). `am' indicates the first half of the day, `pm' indicates the second half of the day. In this notation, 12 is the predecessor of 1: midnight is `12am' while noon is `12pm'.
The time may alternatively be followed by a timezone correction, expressed as `shhmm', where s is `+' or `-', hh is a number of zone hours and mm is a number of zone minutes. When a timezone correction is given this way, it forces interpretation of the time in UTC, overriding any previous specification for the timezone or the local timezone. The minute part of the time of the day may not be elided when a timezone correction is used. This is the only way to specify a timezone correction by fractional parts of an hour.
Either `am'/`pm' or a timezone correction may be specified, but not both.
A timezone item specifies an international timezone, indicated by a small set of letters. Any included period is ignored. Military timezone designations use a single letter. Currently, only integral zone hours may be represented in a timezone item. See the previous section for a finer control over the timezone correction.
Here are many non-daylight-savings-time timezones, indexed by the zone hour value.
Here are many DST timezones, indexed by the zone hour value. Also, by following a non-DST timezone by the string `DST' in a separate word (that is, separated by some whitespace), the corresponding DST timezone may be specified.
The explicit mention of a day of the week will forward the date (only if necessary) to reach that day of the week in the future.
Days of the week may be spelled out in full: `Sunday', `Monday', `Tuesday', `Wednesday', `Thursday', `Friday' or `Saturday'. Days may be abbreviated to their first three letters, optionally followed by a period. The special abbreviations `Tues' for `Tuesday', `Wednes' for `Wednesday' and `Thur' or `Thurs' for `Thursday' are also allowed.
A number may precede a day of the week item to move forward supplementary weeks. It is best used in expression like `third monday'. In this context, `last day' or `next day' is also acceptable; they move one week before or after the day that day by itself would represent.
A comma following a day of the week item is ignored.
Relative items adjust a date (or the current date if none) forward or backward. The effects of relative items accumulate. Here are some examples:
1 year 1 year ago 3 years 2 days
The unit of time displacement may be selected by the string `year' or `month' for moving by whole years or months. These are fuzzy units, as years and months are not all of equal duration. More precise units are `fortnight' which is worth 14 days, `week' worth 7 days, `day' worth 24 hours, `hour' worth 60 minutes, `minute' or `min' worth 60 seconds, and `second' or `sec' worth one second. An `s' suffix on these units is accepted and ignored.
The unit of time may be preceded by a multiplier, given as an optionally signed number. Unsigned numbers are taken as positively signed. No number at all implies 1 for a multiplier. Following a relative item by the string `ago' is equivalent to preceding the unit by a multiplicator with value -1.
The string `tomorrow' is worth one day in the future (equivalent to `day'), the string `yesterday' is worth one day in the past (equivalent to `day ago').
The strings `now' or `today' are relative items corresponding to zero-valued time displacement, these strings come from the fact a zero-valued time displacement represents the current time when not otherwise change by previous items. They may be used to stress other items, like in `12:00 today'. The string `this' also has the meaning of a zero-valued time displacement, but is preferred in date strings like `this thursday'.
When a relative item makes the resulting date to cross the boundary between DST and non-DST (or vice-versa), the hour is adjusted according to the local time.
The precise intepretation of a pure decimal number is dependent of the context in the date string.
If the decimal number is of the form yyyymmdd and no other calendar date item (see section Calendar date item) appears before it in the date string, then yyyy is read as the year, mm as the month number and dd as the day of the month, for the specified calendar date.
If the decimal number is of the form hhmm and no other time of day item appears before it in the date string, then hh is read as the hour of the day and mm as the minute of the hour, for the specified time of the day. mm can also be omitted.
If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year.
getdate
getdate
was originally implemented by Steven M. Bellovin
(`smb@research.att.com') while at the University of North Carolina
at Chapel Hill. The code was later tweaked by a couple of people on
Usenet, then completely overhauled by Rich $alz (`rsalz@bbn.com')
and Jim Berets (`jberets@bbn.com') in August, 1990. Various
revisions for the GNU system were made by David MacKenzie, Jim Meyering,
and others.
This chapter was originally produced by Fran@,{c}ois Pinard (`pinard@iro.umontreal.ca') from the `getdate.y' source code, and then edited by K. Berry (`kb@cs.umb.edu').
This chapter describes the ls
command and its variants dir
and vdir
, which list information about files.
ls
: List directory contents
The ls
program lists information about files (of any type,
including directories). Options and file arguments can be intermixed
arbitrarily, as usual.
For non-option command-line arguments that are directories, by default
ls
lists the contents of directories, not recursively, and
omitting files with names beginning with .
. For other non-option
arguments, by default ls
lists just the file name. If no
non-option arguments are specified, ls
lists the contents of the
current directory.
By default, the output is sorted alphabetically. If standard output is a terminal, the output is in columns (sorted vertically); otherwise, they are listed one per line.
Because ls
is such a fundamental program, it has accumulated many
options over the years. They are described in the subsections below;
within each section, options are listed alphabetically (ignoring case).
The division of options into the subsections is not absolute, since some
options affect more than one aspect of ls
's operation.
The `-g' option is accepted but ignored, for compatibility with Unix. Also see section Common options.
These options determine which files ls
lists information for.
By default, any files and the contents of any directories on the command
line are shown.
These options affect the information that ls
displays. By
default, only file names are shown.
//DIRED// beg1 end1 beg2 end2 ...The begN and endN are unsigned integers which record the byte position of the beginning and end of each file name in the output. This makes it easy for Emacs to find the names, even when they contain unusual characters such as space or newline, without fancy searching. If directories are being listed recursively (
-R
), output a similar
line after each subdirectory:
//SUBDIRED// beg1 end1 ...
ls
, so we
provide this option for compatibility.)
POSIXLY_CORRECT
is set,
512-byte blocks are used (unless the `-k' option is given).
The blocks computed counts each hard link separately;
this is arguably a deficiency.
The permissions listed are similar to symbolic mode specifications
(see section Symbolic Modes). But ls
combines multiple bits into the
third character of each set of permissions as follows:
ls
.
POSIXLY_CORRECT
is set,
512-byte blocks are used instead, unless the `-k' option is given
(see section General output formatting).
For files that are NFS-mounted from an HP-UX system to a BSD system,
this option reports sizes that are half the correct values. On HP-UX
systems, it reports sizes that are twice the correct values for files
that are NFS-mounted from BSD systems. This is due to a flaw in HP-UX;
it also affects the HP-UX ls
program.
These options change the order in which ls
sorts the information
it outputs. By default, sorting is done by character code (e.g., ASCII
order).
These options affect the appearance of the overall output.
ls
when standard
output is not a terminal.
ls
if standard output is a terminal. It is always the default
for the dir
and d
programs.
date
's default; it's not
possible to change this, but you can extract out the date string with
cut
and then pass the result to date -d
. See section `date invocation' in Shell utilities.
This is most useful because the time output includes the seconds. (Unix
filesystems store file timestamps only to the nearest second, so this
option shows all the information there is.) For example, this can help
when you have a Makefile that is not regenerating files properly.
POSIXLY_CORRECT
.
ls
uses tabs where possible in the output, for efficiency. If
cols is zero, do not use tabs at all.
COLUMNS
is used if it is set; otherwise the default
is 80.
These options change how file names themselves are printed.
dir
: Briefly list directory contents
dir
(also installed as d
) is equivalent to ls -C
;
that is, files are by default listed in columns, sorted vertically.
See section ls
: List directory contents.
vdir
: Verbosely list directory contents
vdir
(also installed as v
)is equivalent to ls -l
;
that is, files are by default listed in long format.
dircolors
: Color setup for ls
dircolors
outputs a sequence of shell commands to set up the
terminal for color output from ls
(and dir
, etc.).
Typical usage:
eval `dircolors [option]... [file]`
If file is specified, dircolors
reads it to determine which
colors to use for which file types and extensions. Otherwise, a
precompiled database is used. For details on the format of these files,
run `dircolors --print-database'.
The output is a shell command to set the LS_COLORS
environment
variable. You can specify the shell syntax to use on the command line,
or dircolors
will guess it from the value of the SHELL
environment variable.
The program accepts the following options. Also see section Common options.
SHELL
environment variable is set and does not end with `csh' or
`tcsh'.
SHELL
ends with
csh
or tcsh
.
This chapter describes the commands for basic file manipulation: copying, moving (renaming), and deleting (removing).
cp
: Copy files and directories
cp
copies files (or, optionally, directories). The copy is
completely independent of the original. You can either copy one file to
another, or copy arbitrarily many files to a destination directory.
Synopsis:
cp [option]... source dest cp [option]... source... directory
If the last argument names an existing directory, cp
copies each
source file into that directory (retaining the same name).
Otherwise, if only two files are given, it copies the first onto the
second. It is an error if the last argument is not a directory and more
than two non-option arguments are given.
Generally, files are written just as they are read. For exceptions, see the `--sparse' option below.
By default, cp
does not copy directories (see `-r' below).
cp
generally refuses to copy a file onto itself, with the
following exception: if `--force --backup' is specified with
source and dest identical, and referring to a regular file,
cp
will make a backup file, either regular or numbered, as
specified in the usual ways (see section Backup options). This is useful when
you simply want to make a backup of an existing file before changing it.
The program accepts the following options. Also see section Common options.
cp
must be the name of an existing directory.
For example, the command:
cp --parents a/b/c existing_dircopies the file `a/b/c' to `existing_dir/a/b/c', creating any missing intermediate directories.
cp
may well hang indefinitely reading a FIFO, unless something else happens
to be writing it.
cp
detects holes in input source files via a crude
heuristic and makes the corresponding output file sparse as well.
The when value can be one of the following:
dd
: Convert and copy a file
dd
copies a file (from standard input to standard output, by
default) with a changeable I/O blocksize, while optionally performing
conversions on it. Synopsis:
dd [option]...
The program accepts the following options. Also see section Common options.
The numeric-valued options below (bytes and blocks) can be followed by a multiplier: `b'=512, `c'=1, `k'=1024, `w'=2, `xm'=m.
dd
truncates file to zero
bytes (or the size specified with `seek=').
dd
, unlike others, works
when an odd number of bytes are read--the last byte is simply copied
(since there is nothing to swap it with).
install
: Copy files and set attributes
install
copies files while setting their permission modes and, if
possible, their owner and group. Synopses:
install [option]... source dest install [option]... source... directory install -d [option]... directory...
In the first of these, the source file is copied to the dest target file. In the second, each of the source files are copied to the destination directory. In the last, each directory (and any missing parent directories) is created.
install
is similar to cp
, but allows you to control the
attributes of destination files. It is typically used in Makefiles to
copy programs into their destination directories. It refuses to copy
files onto themselves.
The program accepts the following options. Also see section Common options.
install
.
install
, which
gives directories that it creates the default attributes.)
chmod
, with 0 as the point of departure (see section File permissions). The default mode is 0755--read, write, and execute
for the owner, and read and execute for group and other.
install
has appropriate privileges (is run as root), set the
ownership of installed files or directories to owner. The default
is root
. owner may be either a user name or a numeric user
ID.
mv
: Move (rename) files
mv
moves or renames files (or directories). Synopsis:
mv [option]... source dest mv [option]... source... directory
If the last argument names an existing directory, mv
moves each
other given file into a file with the same name in that directory.
Otherwise, if only two files are given, it renames the first as
the second. It is an error if the last argument is not a directory
and more than two files are given.
mv
can move only regular files across filesystems.
If a destination file exists but is normally unwritable, standard input
is a terminal, and the `-f' or `--force' option is not given,
mv
prompts the user for whether to replace the file. (You might
own the file, or have write permission on its directory.) If the
response does not begin with `y' or `Y', the file is skipped.
The program accepts the following options. Also see section Common options.
rm
: Remove files or directories
rm
removes each given file. By default, it does not remove
directories. Synopsis:
rm [option]... [file]...
If a file is unwritable, standard input is a terminal, and the `-f'
or `--force' option is not given, or the `-i' or
`--interactive' option is given, rm
prompts the user
for whether to remove the file. If the response does not begin with
`y' or `Y', the file is skipped.
The program accepts the following options. Also see section Common options.
unlink
instead of rmdir
, and don't
require a directory to be empty before trying to unlink it. Only works
if you have appropriate privileges. Because unlinking a directory
causes any files in the deleted directory to become unreferenced, it is
wise to fsck
the filesystem after doing this.
One common question is how to remove files whose names being with a
`-'. GNU rm
, like every program that uses the getopt
function to parse its arguments, lets you use the `--' option to
indicate that all following arguments are non-options. To remove a file
called `-f' in the current directory, you could type either:
rm -- -f
or:
rm ./-f
The Unix rm
program's use of a single `-' for this purpose
predates the development of the getopt standard syntax.
This chapter describes commands which create special types of files (and
rmdir
, which removes directories, one special file type).
Although Unix-like operating systems have markedly fewer special file types than others, not everything can be treated only as the undifferentiated byte stream of normal files. For example, when a file is created or removed, the system must record this information, which it does in a directory---a special type of file. Although you can read directories as normal files, if you're curious, in order for the system to do its job it must impose a structure, a certain order, on the bytes of the file. Thus it is a "special" type of file.
Besides directories, other special file types include named pipes (FIFOs), symbolic links, sockets, and so-called special files.
ln
: Make links between files
ln
makes links between files. By default, it makes hard links;
with the `-s' option, it makes symbolic (or soft) links.
Synopses:
ln [option]... source [dest] ln [option]... source... directory
If the last argument names an existing directory, ln
links each
source file into a file with the same name in that directory.
(But see the description of the `--no-dereference' option below.)
If only one file is given, it links that file into the current directory.
Otherwise, if only two files are given, it links the first onto the
second. It is an error if the last argument is not a directory and more
than two files are given. By default, it does not remove existing
files.
A hard link is another name for an existing file; the link and the original are indistinguishable. (Technically speaking, they share the same inode, and the inode contains all the information about a file--indeed, it is not incorrect to say that the inode is the file.) On all existing implementations, you cannot make a hard links to directories, and hard links cannot cross filesystem boundaries. (These restrictions are not mandated by POSIX, however.)
Symbolic links (symlinks for short), on the other hand, are a special file type (which not all kernels support; in particular, system V release 3 (and older) systems lack symlinks) in which the link file actually refers to a different file, by name. When most operations (opening, reading, writing, and so on) are passed the symbolic link file, the kernel automatically dereferences the link and operates on the target of the link. But some operations (e.g., removing) work on the link file itself, rather than on its target. See section `Symbolic Links' in GNU C library.
The program accepts the following options. Also see section Common options.
ln
can
treat the destination just as it would a normal directory and create
the link in it. On the other hand, the destination can be viewed as a
non-directory--as the symlink itself. In that case, ln
must delete or backup that symlink before creating the new link.
The default is to treat a destination that is a symlink to a directory
just like a directory.
mkdir
: Make directories
mkdir
creates directories with the specified names. Synopsis:
mkdir [option]... name...
It is not an error if a name is already a directory; mkdir
simply proceeds. But if a name is an existing file and is
anything but a directory, mkdir
complains.
The program accepts the following options. Also see section Common options.
chmod
and uses 0777 (read, write and execute allowed for
everyone) minus the bits set in the umask for the point of the
departure. See section File permissions.
mkfifo
: Make FIFOs (named pipes)
mkfifo
creates FIFOs (also called named pipes) with the
specified names. Synopsis:
mkfifo [option] name...
A FIFO is a special file type that permits independent processes to communicate. One process opens the FIFO file for writing, and another for reading, after which data can flow as with the usual anonymous pipe in shells or elsewhere.
The program accepts the following option. Also see section Common options.
chmod
and uses 0666 (read and write allowed for everyone) minus
the bits set in the umask for the point of departure. See section File permissions.
mknod
: Make block or character special files
mknod
creates a FIFO, character special file, or block special
file with the specified name. Synopsis:
mknod [option]... name type [major minor]
Unlike the phrase "special file type" above, the term special
file has a technical meaning on Unix: something that can generate or
receive data. Usually this corresponds to a physical piece of hardware,
e.g., a printer or a disk. (These files are typically created at
system-configuration time.) The mknod
command is what creates
files of this type. Such devices can be read either a character at a
time or a "block" (many characters) at a time, hence we say there are
block special files and character special files.
The arguments after name specify the type of file to make:
When making a block or character special file, the major and minor device numbers must be given after the file type.
The program accepts the following option. Also see section Common options.
chmod
and uses 0666 minus the bits set in the umask as the point
of departure. See section File permissions.
rmdir
: Remove empty directories
rmdir
removes empty directories. Synopsis:
rmdir [option]... directory...
If any directory argument does not refer to an existing empty directory, it is an error.
The program accepts the following option. Also see section Common options.
See section rm
: Remove files or directories, for how to remove non-empty directories (recursively).
A file is not merely its contents, a name, and a file type (see section Special file types). A file also has an owner (a userid), a group (a group id), permissions (what the owner can do with the file, what people in the group can do, and what everyone else can do), various timestamps, and other information. Collectively, we call these a file's attributes.
These commands change file attributes.
chown
: Change file owner and group
chown
changes the user and/or group ownership of each given
file. Synopsis:
chown [option]... new-owner file...
The first non-option argument, new-owner, specifies the new owner and/or group, as follows (with no embedded white space):
[owner] [ [:.] [group] ]
Specifically:
chown
performs the same function as chgrp
.
The program accepts the following options. Also see section Common options.
lchown
system call is provided.
chgrp
: Change group ownership
chgrp
changes the group ownership of each given file to
group, which can be either a group name or a numeric group id.
Synopsis:
chgrp [option]... group file...
The program accepts the following options. Also see section Common options.
lchown
system call is provided.
chmod
: Change access permissions
chmod
changes the access permissions of the named files. Synopsis:
chmod [option]... mode file...
chmod
never changes the permissions of symbolic links, since
the chmod
system call cannot change their permissions.
This is not a problem since the permissions of symbolic links are
never used. However, for each symbolic link listed on the command
line, chmod
changes the permissions of the pointed-to file.
In contrast, chmod
ignores symbolic links encountered during
recursive directory traversals.
The first non-option argument, mode, specifies the new permissions. See the section below for details.
The program accepts the following options. Also see section Common options.
touch
: Change file timestamps
touch
changes the access and/or modification times of the
specified files. Synopsis:
touch [option]... file...
If the first file would be a valid argument to the `-t' option and no timestamp is given with any of the `-d', `-r', or `-t' options and the `--' argument is not given, that argument is interpreted as the time for the other files instead of as a file name.
Any file that does not exist is created empty.
If changing both the access and modification times to the current
time, touch
can change the timestamps for files that the user
running it does not own but has write permission for. Otherwise, the
user must own the files.
The program accepts the following options. Also see section Common options.
touch
.
No disk can hold an infinite amount of data. These commands report on
how much disk storage is in use or available. (This has nothing much to
do with how much main memory, i.e., RAM, a program is using when
it runs; for that, you want ps
or pstat
or swap
or some such command.)
df
: Report filesystem disk space usage
df
reports the amount of disk space used and available on
filesystems. Synopsis:
df [option]... [file]...
With no arguments, df
reports the space used and available on all
currently mounted filesystems (of all types). Otherwise, df
reports on the filesystem containing each argument file.
Disk space is shown in 1024-byte blocks by default, unless the
environment variable POSIXLY_CORRECT
is set, in which case
512-byte blocks are used (unless the `-k' option is given).
If an argument file is a disk device file containing a mounted
filesystem, df
shows the space available on that filesystem
rather than on the filesystem containing the device node (i.e., the root
filesystem). GNU df
does not attempt to determine the disk usage
on unmounted filesystems, because on most kinds of systems doing so
requires extremely nonportable intimate knowledge of filesystem
structures.
The program accepts the following options. Also see section Common options.
POSIXLY_CORRECT
.
sync
system call before getting any usage data.
This may make df
run significantly faster on systems with many
disks, but on some systems (notably SunOS) the results may be slightly
out of date. This is the default.
sync
system call before getting any usage data. On
some systems (notably SunOS), doing this yields more up to date results,
but in general this option makes df
much slower, especially when
there are many or very busy filesystems.
df
.
du
: Estimate file space usage
du
reports the amount of disk space used by the specified files
and for each subdirectory (of directory arguments). Synopsis:
du [option]... [file]...
With no arguments, du
reports the disk space for the current
directory. The output is in 1024-byte units by default, unless the
environment variable POSIXLY_CORRECT
is set, in which case
512-byte blocks are used (unless `-k' is specified).
The program accepts the following options. Also see section Common options.
POSIXLY_CORRECT
.
On BSD systems, du
reports sizes that are half the correct
values for files that are NFS-mounted from HP-UX systems. On HP-UX
systems, it reports sizes that are twice the correct values for
files that are NFS-mounted from BSD systems. This is due to a flaw
in HP-UX; it also affects the HP-UX du
program.
sync
: Synchronize data on disk with memory
sync
writes any data buffered in memory out to disk. This can
include (but is not limited to) modified superblocks, modified inodes,
and delayed reads and writes. This must be implemented by the kernel;
The sync
program does nothing but exercise the sync
system
call.
The kernel keeps data in memory to avoid doing (relatively slow) disk
reads and writes. This improves performance, but if the computer
crashes, data may be lost or the filesystem corrupted as a
result. sync
ensures everything in memory is written to disk.
Any arguments are ignored, except for a lone `--help' or `--version' (see section Common options).
Jump to: - - a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - r - s - t - u - v - w - y
getdate
touch
compatibility
csh
syntax for color setup
unlink
du
df
output, human-readable df
output
du
to
cp
ls
df -k
du -k
ls -k
ls -s
ln
mv
rm
sh
syntax for color setup
ls
output
This document was generated on 7 November 1998 using the texi2html translator version 1.52.