ディレクトリをリストするときに、シンボリック出力-rw-rw-r--ではなく、644などの数値のUNIXパーミッションを表示することは可能ですか?
ありがとう。
これを使用して、8進数値(数値のchmodパーミッション)とファイル名を表示します。
stat -c '%a %n' *
その他のオプションについては stat をご覧ください。
エイリアスを使用してこれを行うより効率的な方法については、以下のコメントを参照してください。
あなたが探しているファイルを知っていると仮定すると、私が考えることができる最も近い(それを十分にシンプルに保つ)はstat
です。そうでない場合、*
はそれらのほとんどを見つけることができます:
/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
を使用して、特定の結果を取得できます。
Macでは、次を使用できます
stat -f '%A %N' *
@The MYYN
すごい、ニースawk!しかし、suid、sgid、sticky bitはどうでしょうか?
Sとtでフィルターを拡張する必要があります。そうしないと、カウントされず、間違った結果が得られます。この特別なフラグの8進数を計算するための手順は同じですが、インデックスは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
}'
テスト用:
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 Way」では、ls(または「echo *」)とstatを使用して独自のスクリプトを作成する必要があると書かれています。
いいえ、数値のuid/guidのみを印刷できます。
tl; dr:質問に対する簡単な答えは、lsは数値の許可を出力できないことです。statを使用します。
Awkをいじくり回すと、拡張された許可が翻訳で失われます。
例えば:
$ 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 ..
提案されたソリューションはこれを印刷します:
$ 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 ..
これはまったく間違っています。
一方、statはそれを正しくします。
$ stat/usr/local/srcファイル:/ usr/local/srcサイズ:4096ブロック:8 IOブロック:4096ディレクトリデバイス:801h/2049d iノード:917803リンク:2アクセス:(2775/drwxrwsr -x)Uid:(0/root)Gid:(50/staff)アクセス:2018-10-24 12:30:58.197907324 +0900変更:2018-10-23 11:18:59.810677000 +0900変更:2018-10 -23 11:18:59.810677000 +0900出生:-
Man statからのボーナス:
$ stat -c %a /usr/local/src
2775
これはDebian安定版でテストされています。
選択した回答 と エイリアスを使用する提案 を基に構築し、ディレクトリをリストに渡すことができるように関数に変換しました。
# 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}"
}