You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于rpm --dump输出的7位八进制文件权限位含义及复现方法的问询

关于rpm --dump输出的7位八进制权限位,我给你捋清楚!

一、先搞懂这7位数字到底是什么

其实这7位就是文件完整的模式位(st_mode),用7位八进制格式输出(前面补零凑够7位),比我们平时看的4位权限位包含了更多信息,拆开来细说:

  • 前3位(八进制高位):主要对应文件类型和一些不常用的系统标志,比如:
    • 开头是010的是普通文件,004是目录,012是符号链接,002是字符设备,006是块设备,001是管道,014是套接字——这些其实就是Linux内核里定义的文件类型掩码(S_IFMT)对应的八进制值。
  • 后4位:就是我们天天见的权限位啦!第4位是特殊权限(setuid=4、setgid=2、sticky=1),后面三位依次是所有者、组、其他用户的读写执行权限。

举几个直观的例子:

  • 普通文件权限644,对应的7位就是0100644
  • 带sticky位的目录权限755,对应的7位是0041755
  • 带setuid的可执行文件权限755,对应的7位是0104755

二、用命令行工具轻松复现这个字符串

不用复杂脚本,用系统自带的工具或者简单脚本就能搞定:

1. Linux下用GNU stat直接输出

这是最简单的方法,直接指定格式化参数输出7位八进制的完整模式位:

stat -c "%07o" /你要查看的文件路径

比如我创建一个测试文件试试:

$ touch test.txt && chmod 644 test.txt
$ stat -c "%07o" test.txt
0100644

和rpm --dump输出的mode字段完全一模一样!

2. 用Python快速实现

如果需要用脚本批量处理,Python一行代码就能搞定:

import os
print(f"{os.stat('/目标文件路径').st_mode:07o}")

运行后直接输出7位的权限字符串。

3. 用Perl实现

Perl的话也很简单,借助File::stat模块就能完成:

use File::stat;
printf("%07o\n", stat('/目标文件路径')->mode);

同样能得到和rpm --dump一致的结果。

额外说一句

你提到查到AIX的6位格式,其实核心逻辑差不多,只是不同系统对模式位的高位定义略有区别,但Linux下rpm的7位就是把文件的st_mode完整转成7位八进制(补前导零),用stat的%07o直接就能拿到,完全不用额外处理。

内容的提问来源于stack exchange,提问作者Alois Mahdal

火山引擎 最新活动