xref: /freebsd/usr.bin/stat/stat.1 (revision 38f0b757fd84d17d0fc24739a7cda160c4516d81)
1.\"	$NetBSD: stat.1,v 1.28 2010/04/05 21:25:01 joerg Exp $
2.\"
3.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to The NetBSD Foundation
7.\" by Andrew Brown and Jan Schaumann.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28.\" POSSIBILITY OF SUCH DAMAGE.
29.\"
30.\" $FreeBSD$
31.\"
32.Dd April 22, 2012
33.Dt STAT 1
34.Os
35.Sh NAME
36.Nm stat ,
37.Nm readlink
38.Nd display file status
39.Sh SYNOPSIS
40.Nm
41.Op Fl FLnq
42.Op Fl f Ar format | Fl l | r | s | x
43.Op Fl t Ar timefmt
44.Op Ar
45.Nm readlink
46.Op Fl fn
47.Op Ar
48.Sh DESCRIPTION
49The
50.Nm
51utility displays information about the file pointed to by
52.Ar file .
53Read, write, or execute permissions of the named file are not required, but
54all directories listed in the pathname leading to the file must be
55searchable.
56If no argument is given,
57.Nm
58displays information about the file descriptor for standard input.
59.Pp
60When invoked as
61.Nm readlink ,
62only the target of the symbolic link is printed.
63If the given argument is not a symbolic link and the
64.Fl f
65option is not specified,
66.Nm readlink
67will print nothing and exit with an error.
68If the
69.Fl f
70option is specified, the output is canonicalized by following every symlink
71in every component of the given path recursively.
72.Nm readlink
73will resolve both absolute and relative paths, and return the absolute pathname
74corresponding to
75.Ar file .
76In this case, the argument does not need to be a symbolic link.
77.Pp
78The information displayed is obtained by calling
79.Xr lstat 2
80with the given argument and evaluating the returned structure.
81The default format displays the
82.Fa st_dev ,
83.Fa st_ino ,
84.Fa st_mode ,
85.Fa st_nlink ,
86.Fa st_uid ,
87.Fa st_gid ,
88.Fa st_rdev ,
89.Fa st_size ,
90.Fa st_atime ,
91.Fa st_mtime ,
92.Fa st_ctime ,
93.Fa st_birthtime ,
94.Fa st_blksize ,
95.Fa st_blocks ,
96and
97.Fa st_flags
98fields, in that order.
99.Pp
100The options are as follows:
101.Bl -tag -width indent
102.It Fl F
103As in
104.Xr ls 1 ,
105display a slash
106.Pq Ql /
107immediately after each pathname that is a directory,
108an asterisk
109.Pq Ql *
110after each that is executable,
111an at sign
112.Pq Ql @
113after each symbolic link,
114a percent sign
115.Pq Ql %
116after each whiteout,
117an equal sign
118.Pq Ql =
119after each socket,
120and a vertical bar
121.Pq Ql |
122after each that is a FIFO.
123The use of
124.Fl F
125implies
126.Fl l .
127.It Fl L
128Use
129.Xr stat 2
130instead of
131.Xr lstat 2 .
132The information reported by
133.Nm
134will refer to the target of
135.Ar file ,
136if file is a symbolic link, and not to
137.Ar file
138itself.
139If the link is broken or the target does not exist,
140fall back on
141.Xr lstat 2
142and report information about the link.
143.It Fl n
144Do not force a newline to appear at the end of each piece of output.
145.It Fl q
146Suppress failure messages if calls to
147.Xr stat 2
148or
149.Xr lstat 2
150fail.
151When run as
152.Nm readlink ,
153error messages are automatically suppressed.
154.It Fl f Ar format
155Display information using the specified format.
156See the
157.Sx Formats
158section for a description of valid formats.
159.It Fl l
160Display output in
161.Nm ls Fl lT
162format.
163.It Fl r
164Display raw information.
165That is, for all the fields in the
166.Vt stat
167structure,
168display the raw, numerical value (for example, times in seconds since the
169epoch, etc.).
170.It Fl s
171Display information in
172.Dq shell output
173format,
174suitable for initializing variables.
175.It Fl x
176Display information in a more verbose way as known from some
177.Tn Linux
178distributions.
179.It Fl t Ar timefmt
180Display timestamps using the specified format.
181This format is
182passed directly to
183.Xr strftime 3 .
184.El
185.Ss Formats
186Format strings are similar to
187.Xr printf 3
188formats in that they start with
189.Cm % ,
190are then followed by a sequence of formatting characters, and end in
191a character that selects the field of the
192.Vt "struct stat"
193which is to be formatted.
194If the
195.Cm %
196is immediately followed by one of
197.Cm n , t , % ,
198or
199.Cm @ ,
200then a newline character, a tab character, a percent character,
201or the current file number is printed, otherwise the string is
202examined for the following:
203.Pp
204Any of the following optional flags:
205.Bl -tag -width indent
206.It Cm #
207Selects an alternate output form for octal and hexadecimal output.
208Non-zero octal output will have a leading zero, and non-zero
209hexadecimal output will have
210.Dq Li 0x
211prepended to it.
212.It Cm +
213Asserts that a sign indicating whether a number is positive or negative
214should always be printed.
215Non-negative numbers are not usually printed
216with a sign.
217.It Cm -
218Aligns string output to the left of the field, instead of to the right.
219.It Cm 0
220Sets the fill character for left padding to the
221.Ql 0
222character, instead of a space.
223.It space
224Reserves a space at the front of non-negative signed output fields.
225A
226.Sq Cm +
227overrides a space if both are used.
228.El
229.Pp
230Then the following fields:
231.Bl -tag -width indent
232.It Ar size
233An optional decimal digit string specifying the minimum field width.
234.It Ar prec
235An optional precision composed of a decimal point
236.Sq Cm \&.
237and a decimal digit string that indicates the maximum string length,
238the number of digits to appear after the decimal point in floating point
239output, or the minimum number of digits to appear in numeric output.
240.It Ar fmt
241An optional output format specifier which is one of
242.Cm D , O , U , X , F ,
243or
244.Cm S .
245These represent signed decimal output, octal output, unsigned decimal
246output, hexadecimal output, floating point output, and string output,
247respectively.
248Some output formats do not apply to all fields.
249Floating point output only applies to
250.Vt timespec
251fields (the
252.Cm a , m ,
253and
254.Cm c
255fields).
256.Pp
257The special output specifier
258.Cm S
259may be used to indicate that the output, if
260applicable, should be in string format.
261May be used in combination with:
262.Bl -tag -width indent
263.It Cm amc
264Display date in
265.Xr strftime 3
266format.
267.It Cm dr
268Display actual device name.
269.It Cm f
270Display the flags of
271.Ar file
272as in
273.Nm ls Fl lTdo .
274.It Cm gu
275Display group or user name.
276.It Cm p
277Display the mode of
278.Ar file
279as in
280.Nm ls Fl lTd .
281.It Cm N
282Displays the name of
283.Ar file .
284.It Cm T
285Displays the type of
286.Ar file .
287.It Cm Y
288Insert a
289.Dq Li " -\*[Gt] "
290into the output.
291Note that the default output format
292for
293.Cm Y
294is a string, but if specified explicitly, these four characters are
295prepended.
296.El
297.It Ar sub
298An optional sub field specifier (high, middle, low).
299Only applies to
300the
301.Cm p , d , r ,
302and
303.Cm T
304output formats.
305It can be one of the following:
306.Bl -tag -width indent
307.It Cm H
308.Dq High
309\[em]
310specifies the major number for devices from
311.Cm r
312or
313.Cm d ,
314the
315.Dq user
316bits for permissions from the string form of
317.Cm p ,
318the file
319.Dq type
320bits from the numeric forms of
321.Cm p ,
322and the long output form of
323.Cm T .
324.It Cm L
325.Dq Low
326\[em]
327specifies the minor number for devices from
328.Cm r
329or
330.Cm d ,
331the
332.Dq other
333bits for permissions from the string form of
334.Cm p ,
335the
336.Dq user ,
337.Dq group ,
338and
339.Dq other
340bits from the numeric forms of
341.Cm p ,
342and the
343.Nm ls Fl F
344style output character for file type when used with
345.Cm T
346(the use of
347.Cm L
348for this is optional).
349.It Cm M
350.Dq Middle
351\[em]
352specifies the
353.Dq group
354bits for permissions from the
355string output form of
356.Cm p ,
357or the
358.Dq suid ,
359.Dq sgid ,
360and
361.Dq sticky
362bits for the numeric forms of
363.Cm p .
364.El
365.It Ar datum
366A required field specifier, being one of the following:
367.Bl -tag -width indent
368.It Cm d
369Device upon which
370.Ar file
371resides
372.Pq Fa st_dev .
373.It Cm i
374.Ar file Ns 's
375inode number
376.Pq Fa st_ino .
377.It Cm p
378File type and permissions
379.Pq Fa st_mode .
380.It Cm l
381Number of hard links to
382.Ar file
383.Pq Fa st_nlink .
384.It Cm u , g
385User ID and group ID of
386.Ar file Ns 's
387owner
388.Pq Fa st_uid , st_gid .
389.It Cm r
390Device number for character and block device special files
391.Pq Fa st_rdev .
392.It Cm a , m , c , B
393The time
394.Ar file
395was last accessed or modified, or when the inode was last changed, or
396the birth time of the inode
397.Pq Fa st_atime , st_mtime , st_ctime , st_birthtime .
398.It Cm z
399The size of
400.Ar file
401in bytes
402.Pq Fa st_size .
403.It Cm b
404Number of blocks allocated for
405.Ar file
406.Pq Fa st_blocks .
407.It Cm k
408Optimal file system I/O operation block size
409.Pq Fa st_blksize .
410.It Cm f
411User defined flags for
412.Ar file .
413.It Cm v
414Inode generation number
415.Pq Fa st_gen .
416.El
417.Pp
418The following five field specifiers are not drawn directly from the
419data in
420.Vt "struct stat" ,
421but are:
422.Bl -tag -width indent
423.It Cm N
424The name of the file.
425.It Cm R
426The absolute pathname corresponding to the file.
427.It Cm T
428The file type, either as in
429.Nm ls Fl F
430or in a more descriptive form if the
431.Ar sub
432field specifier
433.Cm H
434is given.
435.It Cm Y
436The target of a symbolic link.
437.It Cm Z
438Expands to
439.Dq major,minor
440from the
441.Va rdev
442field for character or block
443special devices and gives size output for all others.
444.El
445.El
446.Pp
447Only the
448.Cm %
449and the field specifier are required.
450Most field specifiers default to
451.Cm U
452as an output form, with the
453exception of
454.Cm p
455which defaults to
456.Cm O ;
457.Cm a , m ,
458and
459.Cm c
460which default to
461.Cm D ;
462and
463.Cm Y , T ,
464and
465.Cm N
466which default to
467.Cm S .
468.Sh EXIT STATUS
469.Ex -std stat readlink
470.Sh EXAMPLES
471If no options are specified, the default format is
472"%d %i %Sp %l %Su %Sg %r %z \e"%Sa\e" \e"%Sm\e" \e"%Sc\e" \e"%SB\e" %k %b %#Xf %N".
473.Bd -literal -offset indent
474\*[Gt] stat /tmp/bar
4750 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
476.Ed
477.Pp
478Given a symbolic link
479.Dq foo
480that points from
481.Pa /tmp/foo
482to
483.Pa / ,
484you would use
485.Nm
486as follows:
487.Bd -literal -offset indent
488\*[Gt] stat -F /tmp/foo
489lrwxrwxrwx 1 jschauma cs 1 Apr 24 16:37:28 2002 /tmp/foo@ -\*[Gt] /
490
491\*[Gt] stat -LF /tmp/foo
492drwxr-xr-x 16 root wheel 512 Apr 19 10:57:54 2002 /tmp/foo/
493.Ed
494.Pp
495To initialize some shell variables, you could use the
496.Fl s
497flag as follows:
498.Bd -literal -offset indent
499\*[Gt] csh
500% eval set `stat -s .cshrc`
501% echo $st_size $st_mtimespec
5021148 1015432481
503
504\*[Gt] sh
505$ eval $(stat -s .profile)
506$ echo $st_size $st_mtimespec
5071148 1015432481
508.Ed
509.Pp
510In order to get a list of file types including files pointed to if the
511file is a symbolic link, you could use the following format:
512.Bd -literal -offset indent
513$ stat -f "%N: %HT%SY" /tmp/*
514/tmp/bar: Symbolic Link -\*[Gt] /tmp/foo
515/tmp/output25568: Regular File
516/tmp/blah: Directory
517/tmp/foo: Symbolic Link -\*[Gt] /
518.Ed
519.Pp
520In order to get a list of the devices, their types and the major and minor
521device numbers, formatted with tabs and linebreaks, you could use the
522following format:
523.Bd -literal -offset indent
524stat -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/*
525[...]
526Name: /dev/wt8
527        Type: Block Device
528        Major: 3
529        Minor: 8
530
531Name: /dev/zero
532        Type: Character Device
533        Major: 2
534        Minor: 12
535.Ed
536.Pp
537In order to determine the permissions set on a file separately, you could use
538the following format:
539.Bd -literal -offset indent
540\*[Gt] stat -f "%Sp -\*[Gt] owner=%SHp group=%SMp other=%SLp" .
541drwxr-xr-x -\*[Gt] owner=rwx group=r-x other=r-x
542.Ed
543.Pp
544In order to determine the three files that have been modified most recently,
545you could use the following format:
546.Bd -literal -offset indent
547\*[Gt] stat -f "%m%t%Sm %N" /tmp/* | sort -rn | head -3 | cut -f2-
548Apr 25 11:47:00 2002 /tmp/blah
549Apr 25 10:36:34 2002 /tmp/bar
550Apr 24 16:47:35 2002 /tmp/foo
551.Ed
552.Pp
553To display a file's modification time:
554.Bd -literal -offset indent
555\*[Gt] stat -f %m /tmp/foo
5561177697733
557.Ed
558.Pp
559To display the same modification time in a readable format:
560.Bd -literal -offset indent
561\*[Gt] stat -f %Sm /tmp/foo
562Apr 27 11:15:33 2007
563.Ed
564.Pp
565To display the same modification time in a readable and sortable format:
566.Bd -literal -offset indent
567\*[Gt] stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo
56820070427111533
569.Ed
570.Pp
571To display the same in UTC:
572.Bd -literal -offset indent
573\*[Gt] sh
574$ TZ= stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo
57520070427181533
576.Ed
577.Sh SEE ALSO
578.Xr file 1 ,
579.Xr ls 1 ,
580.Xr lstat 2 ,
581.Xr readlink 2 ,
582.Xr stat 2 ,
583.Xr printf 3 ,
584.Xr strftime 3
585.Sh HISTORY
586The
587.Nm
588utility appeared in
589.Nx 1.6
590and
591.Fx 4.10 .
592.Sh AUTHORS
593.An -nosplit
594The
595.Nm
596utility was written by
597.An Andrew Brown
598.Aq atatat@NetBSD.org .
599This man page was written by
600.An Jan Schaumann
601.Aq jschauma@NetBSD.org .
602