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