Unix列表命令“ls”可以输出数字的chmod权限吗?
当列出一个目录来查看数字unix权限(如644)而不是符号输出时是否有可能执行-rw-rw -r–
谢谢。
它几乎可以..
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}'
最近我可以想到(保持简单)是stat
,假设你知道你正在寻找哪些文件。 如果你不这样做, *
可以find其中的大部分:
/usr/bin$ stat -c '%a %n' * 755 [ 755 a2p 755 a2ps 755 aclocal ...
它处理粘性,suid和公司开箱:
$ stat -c '%a %n' /tmp /usr/bin/sudo 1777 /tmp 4755 /usr/bin/sudo
你可以使用GNU find。
find . -printf "%m:%f\n"
您可以使用以下命令
stat -c "%a %n" *
也可以使用任何filename
或directoryname
filename
而不是*
来获得特定的结果。
在Mac上,您可以使用
stat -f '%A %N' *
@ MYYN
哇,好awk! 但是,怎么样,撒旦和粘性?
你必须用s和t扩展你的filter,否则它们将不会被计数,而你得到错误的结果。 为了计算这个特殊标志的八进制数,过程是相同的,但索引是在4 7和10处。设置了执行位的文件的可能标志是---s--s--t
amd执行位集是---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 }'
testing:
touch blah chmod 7444 blah
将导致:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
和
touch blah chmod 7555 blah
会给:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
您不要使用ls来获取文件的权限信息。 你使用stat命令。 它会给你你想要的数值。 “Unix方式”说,你应该使用ls(或“echo *”)和stat来创build自己的脚本,以及其他任何你喜欢用你想要的格式来提供信息的脚本。
不,它只能打印商品的uid / guid。
根据所选的答案和使用别名的build议 ,我将其转换为函数,以便将目录传递给列表是可能的。
# 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}" }