我读了 10 多篇文章,试图理解 Linux 文件系统。有一点我试图理解,但却无法理解。请原谅我听起来很愚蠢:
列出文件详细信息时,我会得到文件的数字“模式”,它指的是文件的权限。以下是一些示例模式:
33206
16822
不知何故,这些似乎需要转换为八进制,看起来像这样:
0777
从那里,人们显然可以推断出人类可读的权限,例如:
drwxr-xr-x
-rwxr--r--
我正在尝试弄清楚如何从第一步过渡到第三步。但我完全迷路了。
答案1
第一组数字可能与文件的权限集无关。如果您使用获取此信息,ls -l
则该数字对应于文件大小(以字节为单位)。
八进制值不会以这种格式显示,但“人类可读”会显示。我记住八进制的方式是,四位数字中的第一位与特殊位(setuid、setgid、sticky)有关,这些位用于更高级的用途,所以我不会立即担心它们。然后,每个人类可读的 rwx 集合构成接下来 3 位数字的值,这些数字按所有者、组和所有人排序。r=4、w=2 和 x=1,因此读/写为 4+2=6。
这Ubuntu 帮助页面我认为非常清楚。
我还建议使用ls -lh
列出文件,因为文件大小已转换为人类可读的单位,因此它的输出以千字节、兆字节和千兆字节为单位。
答案2
如果您所说的“十进制表示法”是指“八进制表示法”:八进制和字符表示法都可以在 *nix 用户之间进行交流。
特别要注意的是,八进制和字符的权限可以分为 3 个部分。如下所示:
rwx | r-x | r-x
7 | 5 | 5
现在看看每个字母的位置。
在第一部分中,它是真、真、真(或集合、集合、集合)。八进制中的数字 7 是多少?111。
第二个权限?设置、取消设置、设置。八进制 5?101。如您所见,八进制表示法(以位为单位)对应于要设置/取消设置的字母。
至于这 3 组权限,即所有者、该用户的组以及其他用户和组的权限。在上面的例子中,所有者可以读写和执行,但所有者组中的用户和其他用户不能写入,他们只能读取和执行文件。
答案3
您可以使用以下方法获取八进制值:
stat -c "%a %n" file
然而网上有大量的文件权限计算器:
还有更多...
答案4
感谢其他答案提供的所有帮助和提示。我利用这些和其他一些发现在 JS 中拼凑出以下转换解决方案:
converter = {
listing: {
'0': '---',
'1': '--x',
'2': '-w-',
'3': '-wx',
'4': 'r--',
'5': 'r-x',
'6': 'rw-',
'7': 'rwx'
},
modeToRWX(mode) {
let octal = this.modeToOctal(mode);
let rwx = this.octalToRWX(octal);
return rwx;
},
modeToOctal(mode) {
let octal = '0' + (mode & 0o777).toString(8);
return octal;
},
octalToRWX(octal) {
if (!octal) { return void 0; }
const list = this.listing;
let full = String((octal.length === 4) ? octal : '0' + octal);
let a = list[String(octal).charAt(1)];
let b = list[String(octal).charAt(2)];
let c = list[String(octal).charAt(3)];
return a + b + c;
}
}