如何查看文件包含setuid、setgid及粘滞位的完整八进制权限?
如何查看文件包含setuid、setgid及粘滞位的完整八进制权限?
嘿,这个问题问到点子上了!你目前用的stat -c "%a" foo.bar确实只能输出常规的三位八进制权限(所有者、组、其他用户的读写执行权限),但要把setuid、setgid和粘滞位这几个特殊权限的第四位也显示出来,其实只需要调整一下stat的格式化参数就行。
方法一:强制显示四位八进制权限
直接用%04a替代%a,这个格式化参数会强制输出四位八进制数,即使第四位是0也会显示出来:
stat -c "%04a" foo.bar
比如,如果你查看/usr/bin/passwd这个带setuid位的文件,执行命令后会输出4755——这里的第一位4就代表setuid位生效。
第四位数值的含义
这第一位的数值是由三个特殊位的标志相加得到的:
4:对应setuid位(让程序以文件所有者的身份运行)2:对应setgid位(让程序以文件所属组的身份运行,对目录来说,新创建的文件会继承该目录的组)1:对应粘滞位(对目录来说,只有文件所有者或root才能删除目录里的文件,比如/tmp)
举个例子,如果一个文件同时有setuid和setgid位,第四位就是6(4+2),对应的八进制权限会是6755。
额外技巧:同时查看权限字符串和八进制数
如果你想直观对照权限字符串(比如-rwsr-xr-x)和完整八进制权限,可以用这个命令:
stat -c "%A %04a %n" foo.bar
输出会类似这样:
-rwsr-xr-x 4755 /usr/bin/passwd
这样你就能一眼看到权限字符串里的s(setuid)对应八进制的4,理解起来更直观。
备注:内容来源于stack exchange,提问作者Caesar
相关产品推荐
相关产品推荐

