display file status
utility displays information about
the file pointed to by file
. Read, write, or
execute permissions of the named file are not required, but all directories
listed in the pathname leading to the file must be searchable. If no argument
displays information about
the file descriptor for standard input.
When invoked as
, only the target of
the symbolic link is printed. If the given argument is not a symbolic link and
option is not specified,
will print nothing and exit with
an error. If the
option is specified,
the output is canonicalized by following every symlink in every component of
the given path recursively.
resolve both absolute and relative paths, and return the absolute pathname
corresponding to file
. In this case, the
argument does not need to be a symbolic link.
The information displayed is obtained by calling
with the given argument and evaluating the returned structure. The default
format displays the st_dev
fields, in that order.
The options are as follows:
- As in
display a slash (‘
after each pathname that is a directory, an asterisk
*’) after each that is executable,
an at sign (‘
@’) after each symbolic
link, a percent sign (‘
each whiteout, an equal sign (‘
after each socket, and a vertical bar
|’) after each that is a FIFO. The
- Treat each argument as the hexadecimal representation of an NFS file
handle, and use
This requires root privileges.
The information reported by
refer to the target of file, if file is a
symbolic link, and not to file itself. If
the link is broken or the target does not exist, fall back on
and report information about the link.
- Do not force a newline to appear at the end of each piece of output.
- Suppress failure messages if calls to
fail. When run as
messages are automatically suppressed.
- Display information using the specified format. See the
Formats section for a
description of valid formats.
- Display output in
- Display raw information. That is, for all the fields in the
stat structure, display the raw,
numerical value (for example, times in seconds since the epoch,
- Display information in “shell output” format, suitable for
- Display timestamps using the specified format. This format is passed
- Display information in a more verbose way as known from some Linux
Format strings are similar to
formats in that they start with
, are then
followed by a sequence of formatting characters, and end in a character that
selects the field of the struct stat
to be formatted. If the
followed by one of
, then a newline character, a tab
character, a percent character, or the current file number is printed,
otherwise the string is examined for the following:
Any of the following optional flags:
- Selects an alternate output form for octal and hexadecimal output.
Non-zero octal output will have a leading zero, and non-zero hexadecimal
output will have “
0x” prepended to
- Asserts that a sign indicating whether a number is positive or negative
should always be printed. Non-negative numbers are not usually printed
with a sign.
- Aligns string output to the left of the field, instead of to the
- Sets the fill character for left padding to the
0’ character, instead of a
- Reserves a space at the front of non-negative signed output fields. A
+’ overrides a space if
both are used.
Then the following fields:
- An optional decimal digit string specifying the minimum field width.
- An optional precision composed of a decimal point
.’ and a decimal digit
string that indicates the maximum string length, the number of digits to
appear after the decimal point in floating point output, or the minimum
number of digits to appear in numeric output.
- An optional output format specifier which is one of
S. These represent signed decimal
output, octal output, unsigned decimal output, hexadecimal output,
floating point output, and string output, respectively. Some output
formats do not apply to all fields. Floating point output only applies to
timespec fields (the
The special output specifier
S may be
used to indicate that the output, if applicable, should be in string
format. May be used in combination with:
- Display date in
- Display actual device name.
- Display the flags of file as in
- Display group or user name.
- Display the mode of file as in
- Displays the name of file.
- Displays the type of file.
- Insert a “
-> ” into the
output. Note that the default output format for
Y is a string, but if specified
explicitly, these four characters are prepended.
- An optional sub field specifier (high, middle, low). Only applies to the
T output formats. It can be one of the
- “High” — specifies the major number for devices
d, the “user” bits
for permissions from the string form of
p, the file “type”
bits from the numeric forms of
and the long output form of
- “Low” — specifies the minor number for devices
d, the “other” bits
for permissions from the string form of
p, the “user”,
“group”, and “other” bits from the numeric
p, and the
-F style output character for file
type when used with
T (the use of
L for this is optional).
- “Middle” — specifies the “group”
bits for permissions from the string output form of
p, or the “suid”,
“sgid”, and “sticky” bits for the numeric
- A required field specifier, being one of the following:
The following five field specifiers are not drawn directly from the data in
struct stat, but are:
- Device upon which file resides
- file's inode number
- File type and permissions
- Number of hard links to file
- User ID and group ID of file's owner
- Device number for character and block device special files
- The time file was last accessed or
modified, or when the inode was last changed, or the birth time of the
- The size of file in bytes
- Number of blocks allocated for file
- Optimal file system I/O operation block size
- User defined flags for file.
- Inode generation number
- The name of the file.
- The absolute pathname corresponding to the file.
- The file type, either as in
-F or in a more descriptive form if
the sub field specifier
H is given.
- The target of a symbolic link.
- Expands to “major,minor” from the
rdev field for character or block
special devices and gives size output for all others.
and the field specifier are
required. Most field specifiers default to
as an output form, with the exception of
which defaults to
which default to
which default to
utilities exit 0 on
success, and >0 if an error occurs.
If no options are specified, the default format is "%d %i %Sp %l %Su %Sg %r
%z \"%Sa\" \"%Sm\" \"%Sc\" \"%SB\" %k
%b %#Xf %N".
> stat /tmp/bar
0 78852 -rw-r--r-- 1 root wheel 0 0 "Jul 8 10:26:03 2004" "Jul 8 10:26:03 2004" "Jul 8 10:28:13 2004" "Jan 1 09:00:00 1970" 16384 0 0 /tmp/bar
Given a symbolic link “foo” that points from
, you would use
> stat -F /tmp/foo
lrwxrwxrwx 1 jschauma cs 1 Apr 24 16:37:28 2002 /tmp/foo@ -> /
> stat -LF /tmp/foo
drwxr-xr-x 16 root wheel 512 Apr 19 10:57:54 2002 /tmp/foo/
To initialize some shell variables, you could use the
flag as follows:
% eval set `stat -s .cshrc`
% echo $st_size $st_mtimespec
$ eval $(stat -s .profile)
$ echo $st_size $st_mtimespec
In order to get a list of file types including files pointed to if the file is a
symbolic link, you could use the following format:
$ stat -f "%N: %HT%SY" /tmp/*
/tmp/bar: Symbolic Link -> /tmp/foo
/tmp/output25568: Regular File
/tmp/foo: Symbolic Link -> /
In order to get a list of the devices, their types and the major and minor
device numbers, formatted with tabs and linebreaks, you could use the
stat -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/*
Type: Block Device
Type: Character Device
In order to determine the permissions set on a file separately, you could use
the following format:
> stat -f "%Sp -> owner=%SHp group=%SMp other=%SLp" .
drwxr-xr-x -> owner=rwx group=r-x other=r-x
In order to determine the three files that have been modified most recently, you
could use the following format:
> stat -f "%m%t%Sm %N" /tmp/* | sort -rn | head -3 | cut -f2-
Apr 25 11:47:00 2002 /tmp/blah
Apr 25 10:36:34 2002 /tmp/bar
Apr 24 16:47:35 2002 /tmp/foo
To display a file's modification time:
> stat -f %m /tmp/foo
To display the same modification time in a readable format:
> stat -f %Sm /tmp/foo
Apr 27 11:15:33 2007
To display the same modification time in a readable and sortable format:
> stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo
To display the same in UTC:
$ TZ= stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo
utility appeared in
and FreeBSD 4.10
utility was written by
This man page was written by Jan Schaumann