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

谢谢。


当前回答

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

stat -c '%a %n' *

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

stat -c '%a %A %U %G %s %n' *

如果需要人类可读格式的最后一次修改时间,则添加%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;}'"

文件夹树

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

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

它将显示:

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz

其他回答

它几乎可以。

 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

解决方案

奇怪的是仍然没有人提到(引用)ls的现代替代品-一个替代的和相当强大的工具。

通过使用exa命令和-l(相当于ls的-l)以及——octal-permissions选项,可以轻松实现所需的输出。


例子

下面是一个简单的例子,使用exa命令和——octal-permissions选项列出macOS机器上用户根目录(/)的内容:

exa -lh --octal-permissions /

结果:

注意,除了漂亮的彩色输出,exa还可以显示每个列的标题,这要归功于-h选项(长格式为——header)。

阅读man exa或官方在线文档,了解如何根据您的特定需求定制所需的输出。

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

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

stat -c '%a %n' *

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

stat -c '%a %A %U %G %s %n' *

如果需要人类可读格式的最后一次修改时间,则添加%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;}'"

文件夹树

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

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

它将显示:

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz