Bashスクリプトでファイルのグループ権限を確認したいと思います。特に、ファイルにグループ書き込み可能ビットがあることを確認する必要があります。
それはすべてです。とても簡単です。しかし:
- 持ち運びにも必要でした。
test -w <file
グループ書き込み可能かどうかはわかりません。- 出力は
ls -ld
人には問題ないようですが、スクリプトについては確信はありません。技術的には、drwxrwxr-x
グループビットの抽出などの出力を解析できますが、これは脆弱に見えます。 - OS Xと他のシステム間のインタフェースは
stat
完全に互換性がありません。 find <file> -perm ...
答えにはなりませんか?
ベストアンサー1
方法 #1 - 統計
このstat
コマンドを使用して許可ビットを取得できます。stat
ほとんどのUnix(私が知っている限り、AIXではなくOSX、BSD)で使用できます。これは私が見つけることができるOSXとBSDを除くほとんどのUnixで動作します。
$ stat -c "%a" <file>
はい
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
次のコマンドを使用します。
$ stat -c "%a" afile.txt
664
そして、簡単な方法を使用して、grep
グループの特権モードが6か7かを確認します。
$ stat -c "%a" afile.txt | grep ".[67]."
stat
OSXとBSDの場合は、この形式を使用してstat -f
それstat -x
に応じて解析する必要があります。オプションがstat
異なるため、このコマンドを1つにまとめてオペレーティングlsb_release -a
システムに応じて適切なバージョンを呼び出すことができます。理想的ではありませんが、可能です。lsb_release
イムを悟ったLinuxディストリビューションにのみ適用されます。だからその他のオプション他のUnixオペレーティングシステムをテストするように設計する必要があります。
方法 #2 - 検索
私の考えでは、このコマンドはあなたにもっと役立つと思います。使用find
してprintf
切り替えます。
はい
$ find a -prune -printf '%m\n'
664
方法 #3 - パール
扱うオペレーティングシステムによっては、Perl がより移植性に優れた方法かもしれません。
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
メモ:上記はPerlstat()
関数を使用してファイルシステムビットを照会します。
@pv
配列を捨て、出力を直接処理してよりコンパクトにすることができますstat()
。
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664