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 FHLnq 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 H 128Treat each argument as the hexadecimal representation of an NFS file handle, 129and use 130.Xr fhstat 2 131instead of 132.Xr lstat 2 . 133This requires root privileges. 134.It Fl L 135Use 136.Xr stat 2 137instead of 138.Xr lstat 2 . 139The information reported by 140.Nm 141will refer to the target of 142.Ar file , 143if file is a symbolic link, and not to 144.Ar file 145itself. 146If the link is broken or the target does not exist, 147fall back on 148.Xr lstat 2 149and report information about the link. 150.It Fl n 151Do not force a newline to appear at the end of each piece of output. 152.It Fl q 153Suppress failure messages if calls to 154.Xr stat 2 155or 156.Xr lstat 2 157fail. 158When run as 159.Nm readlink , 160error messages are automatically suppressed. 161.It Fl f Ar format 162Display information using the specified format. 163See the 164.Sx Formats 165section for a description of valid formats. 166.It Fl l 167Display output in 168.Nm ls Fl lT 169format. 170.It Fl r 171Display raw information. 172That is, for all the fields in the 173.Vt stat 174structure, 175display the raw, numerical value (for example, times in seconds since the 176epoch, etc.). 177.It Fl s 178Display information in 179.Dq shell output 180format, 181suitable for initializing variables. 182.It Fl x 183Display information in a more verbose way as known from some 184.Tn Linux 185distributions. 186.It Fl t Ar timefmt 187Display timestamps using the specified format. 188This format is 189passed directly to 190.Xr strftime 3 . 191.El 192.Ss Formats 193Format strings are similar to 194.Xr printf 3 195formats in that they start with 196.Cm % , 197are then followed by a sequence of formatting characters, and end in 198a character that selects the field of the 199.Vt "struct stat" 200which is to be formatted. 201If the 202.Cm % 203is immediately followed by one of 204.Cm n , t , % , 205or 206.Cm @ , 207then a newline character, a tab character, a percent character, 208or the current file number is printed, otherwise the string is 209examined for the following: 210.Pp 211Any of the following optional flags: 212.Bl -tag -width indent 213.It Cm # 214Selects an alternate output form for octal and hexadecimal output. 215Non-zero octal output will have a leading zero, and non-zero 216hexadecimal output will have 217.Dq Li 0x 218prepended to it. 219.It Cm + 220Asserts that a sign indicating whether a number is positive or negative 221should always be printed. 222Non-negative numbers are not usually printed 223with a sign. 224.It Cm - 225Aligns string output to the left of the field, instead of to the right. 226.It Cm 0 227Sets the fill character for left padding to the 228.Ql 0 229character, instead of a space. 230.It space 231Reserves a space at the front of non-negative signed output fields. 232A 233.Sq Cm + 234overrides a space if both are used. 235.El 236.Pp 237Then the following fields: 238.Bl -tag -width indent 239.It Ar size 240An optional decimal digit string specifying the minimum field width. 241.It Ar prec 242An optional precision composed of a decimal point 243.Sq Cm \&. 244and a decimal digit string that indicates the maximum string length, 245the number of digits to appear after the decimal point in floating point 246output, or the minimum number of digits to appear in numeric output. 247.It Ar fmt 248An optional output format specifier which is one of 249.Cm D , O , U , X , F , 250or 251.Cm S . 252These represent signed decimal output, octal output, unsigned decimal 253output, hexadecimal output, floating point output, and string output, 254respectively. 255Some output formats do not apply to all fields. 256Floating point output only applies to 257.Vt timespec 258fields (the 259.Cm a , m , 260and 261.Cm c 262fields). 263.Pp 264The special output specifier 265.Cm S 266may be used to indicate that the output, if 267applicable, should be in string format. 268May be used in combination with: 269.Bl -tag -width indent 270.It Cm amc 271Display date in 272.Xr strftime 3 273format. 274.It Cm dr 275Display actual device name. 276.It Cm f 277Display the flags of 278.Ar file 279as in 280.Nm ls Fl lTdo . 281.It Cm gu 282Display group or user name. 283.It Cm p 284Display the mode of 285.Ar file 286as in 287.Nm ls Fl lTd . 288.It Cm N 289Displays the name of 290.Ar file . 291.It Cm T 292Displays the type of 293.Ar file . 294.It Cm Y 295Insert a 296.Dq Li " -\*[Gt] " 297into the output. 298Note that the default output format 299for 300.Cm Y 301is a string, but if specified explicitly, these four characters are 302prepended. 303.El 304.It Ar sub 305An optional sub field specifier (high, middle, low). 306Only applies to 307the 308.Cm p , d , r , 309and 310.Cm T 311output formats. 312It can be one of the following: 313.Bl -tag -width indent 314.It Cm H 315.Dq High 316\[em] 317specifies the major number for devices from 318.Cm r 319or 320.Cm d , 321the 322.Dq user 323bits for permissions from the string form of 324.Cm p , 325the file 326.Dq type 327bits from the numeric forms of 328.Cm p , 329and the long output form of 330.Cm T . 331.It Cm L 332.Dq Low 333\[em] 334specifies the minor number for devices from 335.Cm r 336or 337.Cm d , 338the 339.Dq other 340bits for permissions from the string form of 341.Cm p , 342the 343.Dq user , 344.Dq group , 345and 346.Dq other 347bits from the numeric forms of 348.Cm p , 349and the 350.Nm ls Fl F 351style output character for file type when used with 352.Cm T 353(the use of 354.Cm L 355for this is optional). 356.It Cm M 357.Dq Middle 358\[em] 359specifies the 360.Dq group 361bits for permissions from the 362string output form of 363.Cm p , 364or the 365.Dq suid , 366.Dq sgid , 367and 368.Dq sticky 369bits for the numeric forms of 370.Cm p . 371.El 372.It Ar datum 373A required field specifier, being one of the following: 374.Bl -tag -width indent 375.It Cm d 376Device upon which 377.Ar file 378resides 379.Pq Fa st_dev . 380.It Cm i 381.Ar file Ns 's 382inode number 383.Pq Fa st_ino . 384.It Cm p 385File type and permissions 386.Pq Fa st_mode . 387.It Cm l 388Number of hard links to 389.Ar file 390.Pq Fa st_nlink . 391.It Cm u , g 392User ID and group ID of 393.Ar file Ns 's 394owner 395.Pq Fa st_uid , st_gid . 396.It Cm r 397Device number for character and block device special files 398.Pq Fa st_rdev . 399.It Cm a , m , c , B 400The time 401.Ar file 402was last accessed or modified, or when the inode was last changed, or 403the birth time of the inode 404.Pq Fa st_atime , st_mtime , st_ctime , st_birthtime . 405.It Cm z 406The size of 407.Ar file 408in bytes 409.Pq Fa st_size . 410.It Cm b 411Number of blocks allocated for 412.Ar file 413.Pq Fa st_blocks . 414.It Cm k 415Optimal file system I/O operation block size 416.Pq Fa st_blksize . 417.It Cm f 418User defined flags for 419.Ar file . 420.It Cm v 421Inode generation number 422.Pq Fa st_gen . 423.El 424.Pp 425The following five field specifiers are not drawn directly from the 426data in 427.Vt "struct stat" , 428but are: 429.Bl -tag -width indent 430.It Cm N 431The name of the file. 432.It Cm R 433The absolute pathname corresponding to the file. 434.It Cm T 435The file type, either as in 436.Nm ls Fl F 437or in a more descriptive form if the 438.Ar sub 439field specifier 440.Cm H 441is given. 442.It Cm Y 443The target of a symbolic link. 444.It Cm Z 445Expands to 446.Dq major,minor 447from the 448.Va rdev 449field for character or block 450special devices and gives size output for all others. 451.El 452.El 453.Pp 454Only the 455.Cm % 456and the field specifier are required. 457Most field specifiers default to 458.Cm U 459as an output form, with the 460exception of 461.Cm p 462which defaults to 463.Cm O ; 464.Cm a , m , 465and 466.Cm c 467which default to 468.Cm D ; 469and 470.Cm Y , T , 471and 472.Cm N 473which default to 474.Cm S . 475.Sh EXIT STATUS 476.Ex -std stat readlink 477.Sh EXAMPLES 478If no options are specified, the default format is 479"%d %i %Sp %l %Su %Sg %r %z \e"%Sa\e" \e"%Sm\e" \e"%Sc\e" \e"%SB\e" %k %b %#Xf %N". 480.Bd -literal -offset indent 481\*[Gt] stat /tmp/bar 4820 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 483.Ed 484.Pp 485Given a symbolic link 486.Dq foo 487that points from 488.Pa /tmp/foo 489to 490.Pa / , 491you would use 492.Nm 493as follows: 494.Bd -literal -offset indent 495\*[Gt] stat -F /tmp/foo 496lrwxrwxrwx 1 jschauma cs 1 Apr 24 16:37:28 2002 /tmp/foo@ -\*[Gt] / 497 498\*[Gt] stat -LF /tmp/foo 499drwxr-xr-x 16 root wheel 512 Apr 19 10:57:54 2002 /tmp/foo/ 500.Ed 501.Pp 502To initialize some shell variables, you could use the 503.Fl s 504flag as follows: 505.Bd -literal -offset indent 506\*[Gt] csh 507% eval set `stat -s .cshrc` 508% echo $st_size $st_mtimespec 5091148 1015432481 510 511\*[Gt] sh 512$ eval $(stat -s .profile) 513$ echo $st_size $st_mtimespec 5141148 1015432481 515.Ed 516.Pp 517In order to get a list of file types including files pointed to if the 518file is a symbolic link, you could use the following format: 519.Bd -literal -offset indent 520$ stat -f "%N: %HT%SY" /tmp/* 521/tmp/bar: Symbolic Link -\*[Gt] /tmp/foo 522/tmp/output25568: Regular File 523/tmp/blah: Directory 524/tmp/foo: Symbolic Link -\*[Gt] / 525.Ed 526.Pp 527In order to get a list of the devices, their types and the major and minor 528device numbers, formatted with tabs and linebreaks, you could use the 529following format: 530.Bd -literal -offset indent 531stat -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/* 532[...] 533Name: /dev/wt8 534 Type: Block Device 535 Major: 3 536 Minor: 8 537 538Name: /dev/zero 539 Type: Character Device 540 Major: 2 541 Minor: 12 542.Ed 543.Pp 544In order to determine the permissions set on a file separately, you could use 545the following format: 546.Bd -literal -offset indent 547\*[Gt] stat -f "%Sp -\*[Gt] owner=%SHp group=%SMp other=%SLp" . 548drwxr-xr-x -\*[Gt] owner=rwx group=r-x other=r-x 549.Ed 550.Pp 551In order to determine the three files that have been modified most recently, 552you could use the following format: 553.Bd -literal -offset indent 554\*[Gt] stat -f "%m%t%Sm %N" /tmp/* | sort -rn | head -3 | cut -f2- 555Apr 25 11:47:00 2002 /tmp/blah 556Apr 25 10:36:34 2002 /tmp/bar 557Apr 24 16:47:35 2002 /tmp/foo 558.Ed 559.Pp 560To display a file's modification time: 561.Bd -literal -offset indent 562\*[Gt] stat -f %m /tmp/foo 5631177697733 564.Ed 565.Pp 566To display the same modification time in a readable format: 567.Bd -literal -offset indent 568\*[Gt] stat -f %Sm /tmp/foo 569Apr 27 11:15:33 2007 570.Ed 571.Pp 572To display the same modification time in a readable and sortable format: 573.Bd -literal -offset indent 574\*[Gt] stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo 57520070427111533 576.Ed 577.Pp 578To display the same in UTC: 579.Bd -literal -offset indent 580\*[Gt] sh 581$ TZ= stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo 58220070427181533 583.Ed 584.Sh SEE ALSO 585.Xr file 1 , 586.Xr ls 1 , 587.Xr lstat 2 , 588.Xr readlink 2 , 589.Xr stat 2 , 590.Xr printf 3 , 591.Xr strftime 3 592.Sh HISTORY 593The 594.Nm 595utility appeared in 596.Nx 1.6 597and 598.Fx 4.10 . 599.Sh AUTHORS 600.An -nosplit 601The 602.Nm 603utility was written by 604.An Andrew Brown Aq Mt atatat@NetBSD.org . 605This man page was written by 606.An Jan Schaumann Aq Mt jschauma@NetBSD.org . 607