特定のフォルダに対する権限の確認と変更

特定のフォルダに対する権限の確認と変更

シェルスクリプトでフォルダの権限を確認して変更しようとしています。ただし、権限がすでに変更されていても、権限を変更しようとしています。

if [ "$(stat -c '%s' /usr/local/src)" == "755" ]; 
then  
echo "Approved!"
else
echo "Wait please, we're changing the permissions"
sudo chmod -R 755 /usr/local/src
fi

間違い:

Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john: 
sudo: unable to resolve host john

正しいパスワードを入力しました。私は一度も受けたことがありませんがApproved!、なぜですか?

答え1

なぜ効果があったのかわかりませんが、この方法'%s'で変更したところ、'%a'問題が解決しました。 :)

答え2

あなたは何をしているのかを理解する必要があります。

man stat

とりわけ、フォーマット順序が生成されます。

  The valid format sequences for files (without --file-system):

   %a     access rights in octal

   %A     access rights in human readable form

   (...)

   %s     total size, in bytes

ご覧のとおり%sサイズです。/usr/local/srcディレクトリとしてのサイズはです4096。あなたが探しているのはアクセス権%aなので%A

それによる出力は次のようになります。

$ stat -c '%a' /usr/local/src/
2775

または、最初のオクテットが03桁の数字です。

$ stat -c '%A' /usr/local/src/
drwxrwsr-x

スクリプトでは、次の行は次のようになります。

if [ "$(stat -c '%s' /usr/local/src)" == "755" ]; 

置き換えられた出力を文字列と"$(stat -c '%s' /usr/local/src)"比較します"755"。この問題をデバッグする簡単な方法は、左側のみを実行して結果を確認することです。

$ stat -c '%s' /usr/local/src/
4096

ご覧のとおり、同様の形式(4桁)ですが、アクセス権を示す結果ではありません。ただし、権限は98進数なので設定できません。 8進表現には8つの代表数字、つまり0〜7のみがあります。それでは、冒頭で紹介したmanコマンドページを確認してみましょう。stat

これで、スクリプトを修正する方法を簡単に把握できます。

関連情報