当我在 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
接近样式输出的格式字符串。解释来自:ls
man 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
=4w
=2x
=1
所以6 = 4+2 = r+w
,5 = 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