了解 Linux 文件系统模式

了解 Linux 文件系统模式

我读了 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;
    }

}

相关内容