stat
在 MacOS 中,stat 用法与 Linux 有差异。
在 macOS 中学习 Linux 命令有不少坑,比如 sed 等命令。
在 macOS 中实际上为 BSD Unix 的衍生版本。
在 Linux 中,实际上是 GNU / Linux 系统。
stat
stat ,查看文件系统信息。无论对于命令行操作,还是对于后端开发者,甚至在前端工程化领域,都是非常重要的命令或操作系统 API 。
bash
$ stat README.md
File: README.md
Size: 5201 Blocks: 16 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 657197 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ shanyue) Gid: ( 1000/ shanyue)
Access: 2022-06-17 10:45:18.954000816 +0800
Modify: 2022-06-17 11:29:45.580831556 +0800
Change: 2022-06-17 12:24:25.276142164 +0800
Birth: 2022-06-14 19:10:22.779976895 +0800$ stat README.md
File: README.md
Size: 5201 Blocks: 16 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 657197 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ shanyue) Gid: ( 1000/ shanyue)
Access: 2022-06-17 10:45:18.954000816 +0800
Modify: 2022-06-17 11:29:45.580831556 +0800
Change: 2022-06-17 12:24:25.276142164 +0800
Birth: 2022-06-14 19:10:22.779976895 +0800重要属性 :
regular file: 普通文件Size: 文件体积Inode: 每个文件的 Inode 编号,Inode 在分区内具有唯一性Links: 文件硬链接个数,为 2,代表有两个相同 Inode 的文件 ( 默认为 1 ,代表没有硬链接 )Access Mode: mode,文件访问模式或权限Uid / Gid: owner,文件所属用户与组 IDAccess: atime,文件访问时间Modify: mtime,文件内容修改时间 ( 在 HTTP 服务器中,常以此作为 last-modified 响应头 )Change: ctime,文件修改时间 ( 包括属性,比如 mode 和 owner,也包括 mtime,因此 ctime 总比 mtime 大 )Birth: 某些操作系统其值为-
每个字段的详细释义,请查看 stat
stat -c
使用 stat -c 可指定文件某个属性进行输出。
bash
$ stat -c --format=FORMAT$ stat -c --format=FORMAT有以下格式可选 :
%aaccess rights in octal%Aaccess rights in human readable form%fraw mode in hex%Ffile type%ggroup ID of owner%Ggroup name of owner%hnumber of hard links%iinode number%nfile name%stotal size, in bytes- ...
bash
$ stat -c "%a" README.md
644
$ stat -c "%F" README.md
regular file
$ stat -c "%A" README.md
-rw-r--r--
$ stat -c "%y" README.md
2022-06-17 12:21:06.028463373 +0800
$ stat -c "%Y" README.md
1655439666$ stat -c "%a" README.md
644
$ stat -c "%F" README.md
regular file
$ stat -c "%A" README.md
-rw-r--r--
$ stat -c "%y" README.md
2022-06-17 12:21:06.028463373 +0800
$ stat -c "%Y" README.md
1655439666文件类型
在 Linux 中一切都是文件,可以通过 stat -c "%F" 查看文件类型。
Linux 中有六种典型的文件类型,其中 symbolic link,即符号链接是一种特殊的文件类型,而硬链接,只是文件的一个属性。
bash
$ stat -c "%F" README.md
regular file
$ stat -c "%F" node_modules/
directory
$ stat -c "%F" /usr/local/bin/npm
symbolic link
$ stat -c "%F" /dev/null
character special file
$ stat -c "%F" /dev/pts/0
character special file
$ stat -c "%F" /dev/vda
block special file
$ stat -c "%F" /var/run/docker.sock
socket$ stat -c "%F" README.md
regular file
$ stat -c "%F" node_modules/
directory
$ stat -c "%F" /usr/local/bin/npm
symbolic link
$ stat -c "%F" /dev/null
character special file
$ stat -c "%F" /dev/pts/0
character special file
$ stat -c "%F" /dev/vda
block special file
$ stat -c "%F" /var/run/docker.sock
socket也可以使用 ls -lah 查看文件类型,第一个字符表示文件类型 :
-: regular file,普通文件d: directory,目录文件l: symbolic link,符号链接s: socket,套接字文件,一般以.sock作为后缀 ( 可把.sock理解为 API,可以像 HTTP 一样对它请求数据 )b: block special file,块设备文件c: character special file,字符设备文件
bash
# 注意首字母为 c,代表字符设备文件
$ ls -lah /dev/null
crw-rw-rw- 1 root root 1, 3 Sep 29 2019 /dev/null
# 在 /dev 目录,能够找到诸多字符设备文件与块设备文件
$ ls -lah /dev# 注意首字母为 c,代表字符设备文件
$ ls -lah /dev/null
crw-rw-rw- 1 root root 1, 3 Sep 29 2019 /dev/null
# 在 /dev 目录,能够找到诸多字符设备文件与块设备文件
$ ls -lah /dev
Ayingotts's notes