我执行了一个git commit
命令,它给了我以下回复:
7 files changed, 93 insertions(+), 15 deletions(-)
mode change 100644 => 100755 assets/internal/fonts/icomoon.svg
mode change 100644 => 100755 assets/internal/fonts/icomoon.ttf
mode change 100644 => 100755 assets/internal/fonts/icomoon.woff
我知道文件可以具有用户/组/其他 rwx 权限,并且可以表示为三个字节,例如“644”或“755”。但是为什么git在这里显示六个字节?
我已阅读以下文章,但没有找到答案:
显示的值是Git 存储的 16 位文件模式,遵循POSIX 类型和模式的布局:
该文件没有提到目录;它们使用对象类型 0100 表示。
六位数值中的每一位都是八进制,代表三位;16 位因此需要六位数字,其中第一位仅代表一位:
Git 不存储任意模式,只允许值的子集,来自通常的 POSIX 类型和模式(八进制,12 用于符号链接,10 用于常规文件,04 用于目录),git 添加 16用于 Git 链接。使用四个八进制数字附加模式。对于文件,您只会看到 100755 或 100644(尽管 100664 在技术上也是可能的);目录是 040000(忽略权限),符号链接 120000。根本不支持 set-user-ID、set-group-ID 和粘滞位(它们将存储在未使用的位中)。
另请参阅此相关答案。
传统上,Unix 文件系统使用 16 位来保存 4 位中的类型(例如常规文件、目录、字符特殊设备...) 9 位用户/组/其他权限、粘性位、SUID 位和 SGID 位.
您看到的是八进制,因此最右边的 5 位数字的值可以是 0 - 7(代表 3 位,总共 15 位),而左边的数字是最后一位的 0 或 1。
在 Linux 系统上
man -s 7 inode
(即inode(7))应该在文件类型和模式部分告诉你这个。