Mac OS X 10.6 /usr/bin/stat 命令,显示的默认输出是什么?

Mac OS X 10.6 /usr/bin/stat 命令,显示的默认输出是什么?

当我运行 stat 命令时,输出实际上显示什么?我知道您可以指定格式,但我正在对从 OS X 到 NetApp SMB 的 rsync 进行故障排除,并试图找出正在复制和未复制的内容。

# stat /Volumes/Media/MediaBank/WEB_D/41/zoomify/41999V21.jpg
234881039 281475121196473 -rwxr--r-- 1 mbank wheel 0 378716 "Aug  9 19:17:50 2010" "Jan  3 12:56:26 2010" "Apr 26 09:34:13 2010" "Dec 27 23:35:32 2009" 16384 768 0 /Volumes/Media/MediaBank/WEB_D/41/zoomify/41999V21.jpg

这是通过 rsync 同步到 SAN 的副本。

# stat /Volumes/SAN_Media/MediaBank1/WEB_D/41/zoomify/41999V21.jpg
771751969 10654547399 -rwx------ 1 root wheel 0 378716 "Aug  9 09:39:45 2010" "Jan  3 12:56:26 2010" "Jul 23 17:52:30 2010" "Jan  3 12:56:26 2010" 33028 744 0 /Volumes/SAN_Media/MediaBank1/WEB_D/41/zoomify/41999V21.jpg

我对输出格式的猜测是这样的......

unknown1 unknown2 permissions unknown3 uid gid linkcount bytes time1 time2 time3 time4 unknown4 unknown5 unknown6 fullpath .. 

至于时间,我猜其中三个必须是atime,mtime和ctime,但是为什么会有第四个,哪一个是哪一个?

答案1

我不是 OS X 用户,但我熟悉 FreeBSD。它的 stat 输出看起来与您的相同,但如果您想澄清一些内容以方便阅读,请使用stat -x your_path

哦,那些田野是什么?也许吧。此代码片段来自 OS X 文档帮助:

struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
     dev_t    st_dev;    /* device inode resides on */
     ino_t    st_ino;    /* inode's number */
     mode_t   st_mode;   /* inode protection mode */
     nlink_t  st_nlink;  /* number or hard links to the file */
     uid_t    st_uid;    /* user-id of owner */
     gid_t    st_gid;    /* group-id of owner */
     dev_t    st_rdev;   /* device type, for special file inode */
     struct timespec st_atimespec;  /* time of last access */
     struct timespec st_mtimespec;  /* time of last data modification */
     struct timespec st_ctimespec;  /* time of last file status change */
     off_t    st_size;   /* file size, in bytes */
     quad_t   st_blocks; /* blocks allocated for file */
     u_long   st_blksize;/* optimal file sys I/O ops blocksize */
     u_long   st_flags;  /* user defined flags for file */
     u_long   st_gen;    /* file generation number */
 };

答案2

结合 Janne 和 Gordon 的回答:

不使用标志进行调用stat

$ stat Report.docx 
234881026 23858800 -rw-r--r-- 1 will staff 0 176083 "Apr 29 11:44:25 2012" "Apr 29 11:14:56 2012" "Apr 29 11:14:56 2012" "Apr 27 19:22:39 2012" 4096 344 0 Report.docx

调用stat -x提供了人类可读的标签,但仅定义了 4 个日期中的 3 个:

$ stat -x Report.docx 
  File: "Report.docx"
  Size: 176083       FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/    will)  Gid: (   20/   staff)
Device: 14,2   Inode: 23858800    Links: 1
Access: Sun Apr 29 11:44:25 2012
Modify: Sun Apr 29 11:14:56 2012
Change: Sun Apr 29 11:14:56 2012

打电话stat -s可以给我们一个更好的答案:

$ stat -s Report.docx 
st_dev=234881026 st_ino=23858800 st_mode=0100644 st_nlink=1 st_uid=501 st_gid=20 st_rdev=0 st_size=176083 st_atime=1335663865 st_mtime=1335662096 st_ctime=1335662096 st_birthtime=1335518559 st_blksize=4096 st_blocks=344 st_flags=0

这里我们看到四个日期:st_atime,,,,。st_mtimest_ctimest_birthtime

st_birthtime在详细()输出中缺少-x- 对我来说,这与createdFinder 显示的日期相匹配。


看看手册页,第二个记录的结构(when _DARWIN_FEATURE_64_BIT_INODE is defined)显示了四个日期,并在下面对其进行了定义。

 The time-related fields of struct stat are as follows:

 st_atime         Time when file data last accessed.  Changed by the mknod(2), utimes(2) and read(2)
                  system calls.

 st_mtime         Time when file data last modified.  Changed by the mknod(2), utimes(2) and write(2)
                  system calls.

 st_ctime         Time when file status was last changed (inode data modification).  Changed by the
                  chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2) and write(2)
                  system calls.

 st_birthtime     Time of file creation. Only set once when the file is created. This field is only
                  available in the 64 bit inode variants. On filesystems where birthtime is not avail-
                  able, this field holds the ctime instead.

因此,根据您的架构,第四个日期要么是创建日期(64 位时),要么是重复的ctime

答案3

stat(1) 的输出将根据系统/文件系统是 64 位还是 32 位而有所不同。(如果您返回 4 个日期时间,则它是 64 位)。

stat(2) 和 lstat(2)(stat(1) 实际上默认使用后者)的手册页显示了所有字段,但由于某种原因,stat(1) 并没有按照那里列出的顺序返回它们。

看起来没有选项的 stat(1) 的顺序是:

  • 设备ID
  • Inode 编号
  • 权限(模式)
  • 硬链接数(通常为 1)
  • 文件用户 ID(所有者)
  • 文件组标识
  • 设备ID
  • 大小(以字节为单位)
  • 上次访问时间
  • 上次(内容)修改时间
  • 上次权限更改时间
  • 创建时间
  • 文件的理想块大小
  • 为文件分配 512 字节大小的块
  • 文件上设置的标志(参见 chflags(2))

答案4

stat -r将(以“原始”形式打印信息,例如自纪元以来的秒数)的输出与stat -s(带有标签,适用于设置 shell 变量)进行比较。如果我正确解析它(使用 OS X v10.6),则字段为:设备编号、inode 编号(/文件 ID 编号)、权限模式、链接数、所有者、组、rdev(字符和块特殊文件的设备)、字节大小、访问时间、修改时间、更改时间、诞生(即 inode 创建)时间、块大小、块数、文件标志,以及最后的名称(/路径)。

请注意,在非 OS X 原生文件系统(即非 HFS+ 或 HFSX)上不会跟踪所有时间;对于通过 SMB 访问的文件,我预计报告的一些时间会被弥补。

相关内容