在列出目录时,是否可以查看数字Unix权限,如644,而不是符号输出-rw-rw-r——?
谢谢。
在列出目录时,是否可以查看数字Unix权限,如644,而不是符号输出-rw-rw-r——?
谢谢。
当前回答
解决方案
奇怪的是仍然没有人提到(引用)ls的现代替代品-一个替代的和相当强大的工具。
通过使用exa命令和-l(相当于ls的-l)以及——octal-permissions选项,可以轻松实现所需的输出。
例子
下面是一个简单的例子,使用exa命令和——octal-permissions选项列出macOS机器上用户根目录(/)的内容:
exa -lh --octal-permissions /
结果:
注意,除了漂亮的彩色输出,exa还可以显示每个列的标题,这要归功于-h选项(长格式为——header)。
阅读man exa或官方在线文档,了解如何根据您的特定需求定制所需的输出。
其他回答
它几乎可以。
ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf("%0o ",k);print}'
@The 我卖
哇,漂亮的awk!但是suid, sgid和sticky bit呢?
你必须用s和t扩展你的过滤器,否则它们就不算数,你会得到错误的结果。要计算这个特殊标志的八进制数,程序是相同的,但是索引是4 7和10。有执行位设置的文件可能的标志是——s——s——t,没有执行位设置的文件可能的标志是——s——s——t
ls -l | awk '{
k = 0
s = 0
for( i = 0; i <= 8; i++ )
{
k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
}
j = 4
for( i = 4; i <= 10; i += 3 )
{
s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
j/=2
}
if ( k )
{
printf( "%0o%0o ", s, k )
}
print
}'
为测试:
touch blah
chmod 7444 blah
会导致:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
and
touch blah
chmod 7555 blah
将:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
可以使用以下命令
stat -c "%a %n" *
此外,您可以使用任何文件名或目录名而不是*来获得特定的结果。
在Mac上,你可以使用
stat -f '%A %N' *
根据选择的答案和使用别名的建议,我将其转换为一个函数,以便将目录传递给list。
# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
LLS_PATH=$1
ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf(\"%0o \",k);print}"
}
你可以使用GNU find。
find . -printf "%m:%f\n"