Can the Unix list command 'ls' output nume

2019-01-29 14:51发布

Is it possible when listing a directory to view numerical unix permissions such as 644 rather than the symbolic output -rw-rw-r--

Thanks.

10条回答
孤傲高冷的网名
2楼-- · 2019-01-29 15:20

You don't use ls to get a file's permission information. You use the stat command. It will give you the numerical values you want. The "Unix Way" says that you should invent your own script using ls (or 'echo *') and stat and whatever else you like to give the information in the format you desire.

查看更多
叼着烟拽天下
3楼-- · 2019-01-29 15:20

tl;dr: The quick answer to the question is, no ls cannot print numerical permissions, use stat.

Extended permissions will get lost in translation when fumbling around with awk.

e.g:

$ ls -la /usr/local/src/
total 8
drwxrwsr-x  2 root staff 4096 Oct 23 11:18 .
drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..

The proposed solution would print this:

$ ls -la /usr/local/src | awk '{>
total 8
765 drwxrwsr-x  2 root staff 4096 Oct 23 11:18 .
765 drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..

Which is utterly wrong.

stat on the other hand gets it right:

$ stat /usr/local/src File: /usr/local/src Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 801h/2049d Inode: 917803 Links: 2 Access: (2775/drwxrwsr-x) Uid: ( 0/ root) Gid: ( 50/ staff) Access: 2018-10-24 12:30:58.197907324 +0900 Modify: 2018-10-23 11:18:59.810677000 +0900 Change: 2018-10-23 11:18:59.810677000 +0900 Birth: -

Bonus from man stat:

$ stat -c %a /usr/local/src
2775

This has been tested on Debian stable.

查看更多
闹够了就滚
4楼-- · 2019-01-29 15:22

Building off of the chosen answer and the suggestion to use an alias, I converted it to a function so that passing a directory to list is possible.

# 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}"
}
查看更多
Root(大扎)
5楼-- · 2019-01-29 15:27

Use this to display the octal values (numerical chmod permissions) and file name:

stat -c '%a %n' *

enter image description here

For more options see stat.

For a more efficient way to do this using an alias, see my comment below.

查看更多
登录 后发表回答