Linuxにある程度慣れていると、現在のファイルのパーミッションは記号表記で、設定の際は数字表記でやることが多いだろう。 で、いつも記号表記でばかり確認しているのだが、ふと数字表記で現在のパーミッションを取得できるのかなと思い調べてみた。 個人的には大体lsで調べるのだが、残念ながらそういったオプションは無いらしい。
1. statコマンドを用いる場合
statコマンドで、以下のように指定することでファイルのパーミッションを数字表記で取得できるようだ。
stat PATH -c '%a'
[root@BS-PUB-CENT7-01 ~]# ls -la ./test.pl
-rw-r--r--. 1 root root 99 5月 20 11:26 ./test.pl
[root@BS-PUB-CENT7-01 ~]# stat ./test.pl -c '%a'
644
これを利用してlsと組み合わせることで、以下のようにlsの表記とセットで表示させることができる。 (ファイル名にスペースが含まれないことが前提になる)
ls -la | awk 'NR>1{cmd="stat "$NF" -c %a";cmd|getline c;close(cmd);print c,$0}'
[root@BS-PUB-CENT7-01 ~]# ls -la
合計 60
dr-xr-x---. 8 root root 4096 5月 20 16:06 .
dr-xr-xr-x. 17 root root 4096 1月 20 00:01 ..
-rw-------. 1 root root 1537 5月 16 09:50 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwxr-xr-x. 4 root root 31 5月 16 10:03 .config
drwxr-xr-x. 6 root root 89 5月 20 11:29 .cpan
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
-rw-------. 1 root root 40 5月 20 16:06 .lesshst
drwxr-xr-x. 3 root root 18 5月 16 09:59 .local
drwxr-----. 3 root root 18 5月 16 09:58 .pki
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 2539 5月 20 11:26 .viminfo
drwxr-xr-x. 15 root root 4096 5月 16 10:09 DevAudit
-rw-------. 1 root root 986 1月 1 2016 anaconda-ks.cfg
drwxr-xr-x. 5 root root 36 5月 20 11:29 perl5
-rw-r--r--. 1 root root 99 5月 20 11:26 test.pl
-rw-r--r--. 1 root root 28 5月 18 08:50 test1.txt
-rw-r--r--. 1 root root 86 5月 18 08:40 test2.txt
[root@BS-PUB-CENT7-01 ~]# ls -la | awk 'NR>1{cmd="stat "$NF" -c %a";cmd|getline c;close(cmd);print c,$0}'
550 dr-xr-x---. 8 root root 4096 5月 20 16:06 .
555 dr-xr-xr-x. 17 root root 4096 1月 20 00:01 ..
600 -rw-------. 1 root root 1537 5月 16 09:50 .bash_history
644 -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
644 -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
644 -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
755 drwxr-xr-x. 4 root root 31 5月 16 10:03 .config
755 drwxr-xr-x. 6 root root 89 5月 20 11:29 .cpan
644 -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
600 -rw-------. 1 root root 40 5月 20 16:06 .lesshst
755 drwxr-xr-x. 3 root root 18 5月 16 09:59 .local
740 drwxr-----. 3 root root 18 5月 16 09:58 .pki
644 -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
600 -rw-------. 1 root root 2539 5月 20 11:26 .viminfo
755 drwxr-xr-x. 15 root root 4096 5月 16 10:09 DevAudit
600 -rw-------. 1 root root 986 1月 1 2016 anaconda-ks.cfg
755 drwxr-xr-x. 5 root root 36 5月 20 11:29 perl5
644 -rw-r--r--. 1 root root 99 5月 20 11:26 test.pl
644 -rw-r--r--. 1 root root 28 5月 18 08:50 test1.txt
644 -rw-r--r--. 1 root root 86 5月 18 08:40 test2.txt
2. findコマンドで出力させる
findコマンドで、printfオプションで%mを用いることで、数字表記でのパーミッションを表示させることも可能だ。 以下の例では、カレントディレクトリ配下のファイル・ディレクトリに対してパーミッションやサイズ、ユーザ名等を取得している。
find . -maxdepth 1 -printf "%m %u:%g %s %p \n"
[root@BS-PUB-CENT7-01 ~]# find . -maxdepth 1 -printf "%m %u:%g %s %p \n"
550 root:root 4096 .
644 root:root 18 ./.bash_logout
644 root:root 176 ./.bash_profile
644 root:root 176 ./.bashrc
644 root:root 100 ./.cshrc
644 root:root 129 ./.tcshrc
600 root:root 986 ./anaconda-ks.cfg
600 root:root 1537 ./.bash_history
755 root:root 4096 ./DevAudit
740 root:root 18 ./.pki
755 root:root 31 ./.config
755 root:root 18 ./.local
644 root:root 28 ./test1.txt
644 root:root 86 ./test2.txt
644 root:root 99 ./test.pl
600 root:root 2539 ./.viminfo
755 root:root 89 ./.cpan
755 root:root 36 ./perl5
600 root:root 47 ./.lesshst
とりあえず2個。 lsとstat組み合わせた方が読みやすいかもしれない。