Unix列表命令'ls'可以输出数字chmod权限吗?

Jon*_*ley 171 unix permissions command-line

是否可以在列出目录时查看数字unix权限,例如644而不是符号输出-rw-rw-r--

谢谢.

mik*_*iku 328

使用此选项可显示八进制值(数字chmod权限)和文件名:

stat -c '%a %n' *
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有关更多选项,请参阅stat.

有关使用别名执行此操作的更有效方法,请参阅下面的评论.

  • 要将其创建为别名(例如下面:'cls'命令),请使用:```alias cls ="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}' "``` (29认同)
  • 我复制并粘贴来自danger89的行,发现奇怪的是输出开始于每行%0..o,而不是说755.如果有其他人遇到这个,原因似乎是0和o之间的隐藏字符.删除后,命令设置得很好.干杯! (6认同)
  • 这无法识别位t和s.您应该使用'stat'命令获取文件权限信息.手动计算会导致错误! (3认同)

JB.*_*JB. 139

我能想到的最近(保持简单)就是stat假设您知道要查找哪些文件.如果你不这样做,*可以找到大部分:

/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Run Code Online (Sandbox Code Playgroud)

它处理粘性,suid和公司开箱即用:

$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)

  • 这在Linux下工作得很好,我发现`stat -f'%A%N'*`在mac上做同样的事情(FreeBSD) (17认同)
  • 我猜这个论点是`stat`不是'ls`因此这不是正确的答案.但是,我认为这是所需输出背景下的正确答案.如果在管道中允许`awk`,那么在`-exec`中调用`stat`的地方应该允许`find`; 然后你可以直接使用`stat`而不用`*` (2认同)
  • 这更短,100%适用于任何系统 (2认同)

gho*_*g74 55

你可以使用GNU find.

find . -printf "%m:%f\n"
Run Code Online (Sandbox Code Playgroud)

  • 这也应该有`-maxdepth 1`选项,否则它遍历整个目录树. (5认同)

Moh*_*jib 31

您可以使用以下命令

stat -c "%a %n" *
Run Code Online (Sandbox Code Playgroud)

您也可以使用任何filenamedirectoryname代替*获得特定结果.

在Mac上,您可以使用

stat -f '%A %N' *
Run Code Online (Sandbox Code Playgroud)

  • 有帮助!你如何挖出 %A 甚至没有出现在 Mac 上的 man of stat 中? (2认同)

小智 16

@The MYYN

哇,好awk!但是suid,sgid和sticky bit怎么样?

您必须使用s和t扩展过滤器,否则它们将无法计数并且您得到错误的结果.要计算此特殊标志的八进制数,过程是相同的,但索引位于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
}'  
Run Code Online (Sandbox Code Playgroud)

测试:

touch blah
chmod 7444 blah
Run Code Online (Sandbox Code Playgroud)

将导致:

7444 -r-Sr-Sr-T 1 cheko cheko   0 2009-12-05 01:03 blah
Run Code Online (Sandbox Code Playgroud)

touch blah
chmod 7555 blah
Run Code Online (Sandbox Code Playgroud)

会给:

7555 -r-sr-sr-t 1 cheko cheko   0 2009-12-05 01:03 blah
Run Code Online (Sandbox Code Playgroud)

  • 不要使用lsmod作为别名..这是用于列出内核mod的已知posix命令. (5认同)
  • +1谢谢!我把它缩短为1行别名:`别名'lsmod = ls -al | awk'{k = 0; s = 0; for(i = 0; i <= 8; i ++){; k + =((substr (\ $ 1,I + 2,1)〜/ [rwxst] /)*2 ^(8-i)的);}; J = 4;对于(i = 4; I <= 10; I + = 3){; s + =((substr(\ $ 1,i,1)〜/ [stST] /)*j); j/= 2;}; if(k){; printf(\"%0o%0o \",s, K);};打印;}'"` (3认同)

Eri*_*lez 15

使用它来显示 Unix 数字权限值(八进制值)和文件名。

stat -c '%a %n' *
Run Code Online (Sandbox Code Playgroud)

使用它来显示 Unix 数字权限值(八进制值)和文件夹的 sgid 和粘滞位、所有者的用户名、组名、总大小(以字节为单位)和文件名。

stat -c '%a %A %U %G %s %n' *
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

%y如果您需要人类可读格式的上次修改时间,请添加。有关更多选项,请参阅stat

使用别名的更好版本

使用别名是完成您需要的更有效的方法,它还包括颜色。下面首先显示按组目录组织的结果,以彩色显示,以人类可读格式(例如,1K 234M 2G)的打印尺寸编辑您的~/.bashrc并为您的帐户添加别名或通过编辑全局/etc/profile.d/custom.sh

键入cls会显示新的 LS 命令结果。

alias cls="ls -lha --color=always -F --group-directories-first |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;}'"
Run Code Online (Sandbox Code Playgroud)

别名是最有效的解决方案

文件夹树

当您编辑 bashrc 或 custom.sh 时,请包含以下别名以查看图形表示,其中键入lstree将显示您当前的文件夹树结构

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"
Run Code Online (Sandbox Code Playgroud)

它会显示:

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz
Run Code Online (Sandbox Code Playgroud)


Eva*_*ois 5

您不使用 ls 来获取文件的权限信息。您使用 stat 命令。它会给你你想要的数值。“Unix Way”说您应该使用 ls (或“echo *”)和 stat 以及您喜欢的任何其他命令来发明自己的脚本,以您想要的格式提供信息。