ディレクトリをリストするときに、シンボリック出力-rw-rw-r--ではなく、644などの数値のUNIXアクセス許可を表示することは可能ですか?
ありがとう。
ディレクトリをリストするときに、シンボリック出力-rw-rw-r--ではなく、644などの数値のUNIXアクセス許可を表示することは可能ですか?
ありがとう。
回答:
それはほとんどできる..
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}'
chmod 777 dir
コマンドが許可を次のように出力した後767
私が考えることができる最も近い(それを十分に単純に保つ)は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
stat -f '%A %N' *
うまく機能します
stat
はないls
ので、これは正しい答えではありません。しかし、これは望ましい出力のコンテキストでは正しい答えだと思います。awk
がパイプで許可されている場合はfind
、stat
が呼び出される場所で許可する必要があり-exec
ます。その後、stat
直接使用することができます*
stat -c '%a %n' * **/*
。
次のコマンドを使用できます
stat -c "%a %n" *
また、特定の結果を取得するために、任意のfilename
またはのdirectoryname
代わりに使用できます*
。
Macでは、
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4に記載されている情報のみを使用する場合、コマンドはになりますstat -f "%Lp %N" *
。%Lp
と同じものを印刷するように見えます%A
。
@The MYYN
うわー、すてきなawk!しかし、suid、sgid、stickyビットはどうですか?
フィルターを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
alias "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;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
これを使用して、Unixの数値許可値(8進値)とファイル名を表示します。
stat -c '%a %n' *
これを使用して、Unixの数値許可値(8進数値)とフォルダーのsgidおよびスティッキービット、所有者のユーザー名、グループ名、合計サイズ(バイト単位)、およびファイル名を表示します。
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を使用することはありません。statコマンドを使用します。必要な数値が表示されます。「Unix Way」は、ls(または 'echo *')とstatを使用して独自のスクリプトを作成し、必要な形式で情報を提供するために他に好きなものを作成する必要があることを示しています。
オフ構築選ばれた解答とエイリアスを使用するための提案リストにディレクトリを渡すことは可能であるように、私は関数に変換します。
# 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}"
}
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}'"