UNIX/Linux:文件权限号是多少?

UNIX/Linux:文件权限号是多少?

当我在 Windows-10 WSL Ubuntu 应用程序上请求文件权限时,我会这样做:

ls -ltra

我得到的信息如下:

-rwxrwxrwx 1 scampsd scampsd 42034 Mar 29 15:26 Filename.cs
drwxrwxrwx 1 scampsd scampsd  4096 Mar 29 15:26 .

现在,正如另一个 StackOverflow 问题,我得到与所谓的“文件权限号”相关的信息,在这种情况下是 644。

是否有一个 UNIX/Linux 命令行命令可以启动以便得到“644”作为答案,而不是这个rwx---...东西?

答案1

如果只想获取单个文件或目录的八进制码,可以使用stat(以文件.zshrc为例):

❯ ls -ltra
...
-rw-r--r--  1 main main      4520 Jan 25 10:39 .zshrc
...

❯ stat -c '%a' .zshrc
644

在这种情况下,我们使用-c来告诉stat我们想要使用自定义格式字符串,然后将我们的格式字符串设置为'%a',以八进制格式打印文件权限。

如果您想要类似于的输出ls,您可以这样做:

❯ stat -c '%a %h %U %G %s %y %n' .zshrc
644 1 main main 4520 2022-01-25 10:39:26.000000000 -0800 .zshrc

这使用尽可能stat接近样式输出的格式字符串。解释来自:lsman stat

%a     access rights in octal (note '#' and '0' printf flags)
%h     number of hard links
%U     user name of owner
%G     group name of owner
%s     total size, in bytes
%y     time of last data modification, human-readable
%n     file name

答案2

您可以使用以下stat命令:

mtak@rubiks:~$ stat connect.log
  File: connect.log
  Size: 6593077     Blocks: 12880      IO Block: 4096   regular file
Device: 810h/2064d  Inode: 243067      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    mtak)   Gid: ( 1000/    mtak)
Access: 2022-01-12 15:24:31.270000000 +0100
Modify: 2021-12-02 09:28:00.430000000 +0100
Change: 2021-12-02 09:28:00.430000000 +0100
 Birth: -

在输出的第 4 行,您可以看到八进制形式的权限。

或者使用格式化选项%a仅获取八进制权限:

mtak@rubiks:~$ stat -c '%a' connect.log
644

你甚至可以伪造自己的类似 ls 的输出:

mtak@E2QJZJW2:~$ stat -c '%a %n' /bin/*
755 /bin/2to3-2.7
777 /bin/GET
777 /bin/HEAD
777 /bin/NF

不过,学习在八进制表示形式和人类可读形式之间进行转换可能会对你有所帮助。这是一个简单的补充,其中:

  • r=4
  • w=2
  • x=1

所以6 = 4+2 = r+w5 = 4+1 = r+x等等。

答案3

为 macOS 用户添加答案。stat 二进制文件似乎不同,我没有选项-c。但是,尽管如此,该-x选项还是可以完成工作的:

stats -x config
  File: "config"
  Size: 168          FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/    coil)  Gid: (   20/   staff)
Device: 1,4   Inode: 100330096    Links: 1
Access: Sun Feb  5 08:24:43 2023
Modify: Sun Feb  5 08:24:09 2023
Change: Sun Feb  5 08:24:14 2023
 Birth: Sun Feb  5 08:24:06 2023

相关内容