ファイルのグループ権限を確認する方法

ファイルのグループ権限を確認する方法

Bashスクリプトでファイルのグループ権限を確認したいと思います。特に、ファイルにグループ書き込み可能ビットがあることを確認する必要があります。

それはすべてです。とても簡単です。しかし:

  1. 持ち運びにも必要でした。
  2. test -w <fileグループ書き込み可能かどうかはわかりません。
  3. 出力はls -ld人には問題ないようですが、スクリプトについては確信はありません。技術的には、drwxrwxr-xグループビットの抽出などの出力を解析できますが、これは脆弱に見えます。
  4. OS Xと他のシステム間のインタフェースはstat完全に互換性がありません。
  5. 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]."

statOSXと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

おすすめ記事