Chmod が期待通りに動作しない

Chmod が期待通りに動作しない

このようにファイルの権限を変更しようとすると

 $ sudo chmod a+x *.* 

このエラーが表示される

 chmod: cannot access ‘*.*’: No such file or directory

そして、ディレクトリ内のすべてのファイルの権限を変更したい場合

 $ sudo chmod a+x directory/* 

同じエラーが表示される

 chmod: cannot access ‘directory/*’: No such file or directory

他のディレクトリで同じコマンドを試しても動作しますが、このディレクトリ/var/www/htmlでは動作しません。実行時にファイルごとに権限をa + xに変更しても動作しません。

 ls

権限エラーが表示される

 ls: cannot open directory .: Permission denied

答え1

Linuxのファイル拡張子は特別なものではなく、ファイル名の一部にすぎません。シェルがすべての文字に使用するファイルのグロブなので、代わりに*次のように使用できます。chmod a+x *.

答え2

問題lsは、ディレクトリに対する十分な権限がない可能性があるということです。https://stackoverflow.com/a/15800917/3501748状態: ディレクトリの内容を表示するには、実行権限セットが必要です。

cd1 レベル戻って、今来たディレクトリの権限を確認してください。 sudoルートにそのフォルダに対する権限がない場合は、フォルダにアクセスする権限は付与されません。sudo -u <username>役に立つかもしれません。

開始点の下のディレクトリ ツリーを再帰的に処理する必要がある場合は、 を使用しますchmod -R

答え3

まず、既存の回答を確認したいと思います。

  • UweBurger が言うように、*Ubuntu (または Unix 全般) では一般的なワイルドカードとして を使用します。 (directoryあなたの例では が空で、エラーが発生している可能性はありますかchmod: cannot access ‘directory/*’: No such file or directory?)
  • northern-bradley が示唆したように、Rのフラグを使用してchmodツリーを再帰的にトラバースし、現在のポイントの下にあるすべての権限を変更することができます。つまり、 を使用するchmod -R directoryか、権限がない場合は を使用しますsudo chmod -R directory(ただし、 を使用するときにシステムファイルの権限を誤って変更しないように注意してください)。sudochmod; あなた自身のユーザーにはそれを実行する権限がないため、最初の方法の方が安全です。

ただし、ディレクトリの権限をファイルと同じ方法で変更したくない場合もあることを付け加えておきます。公式文書ディレクトリの読み取り(r)権限は、その内容を表示できることを意味し( などを使用ls)、書き込み(w)権限は、ユーザーがそのディレクトリ内にファイルを作成/削除できることを意味し、実行(x)権限は、その内部への実行を意味しますcd。素晴らしい答えがありますここ新しい権限を再帰的に適用する際にファイルとディレクトリを区別する方法を提案していますxargsより速いと思われるが何も返さない場合のエラーを回避するためrに にフラグを追加し、権限が必要な場合はパイプの両半分に を使用する必要があります (ここでも、として を使用する場合は注意してください)。つまり、次のようになります。xargsfindrootsudochmodroot

sudo find [パス/ディレクトリ] -type d -print0 | sudo xargs -0r chmod [必要なディレクトリの権限]

sudo find [パス/ディレクトリ] -type f -print0 | sudo xargs -0r chmod [必要なファイルの権限]

どこに[desired-*-permissions]与えられるか明示的に777) または文字を使う(のようにa+x)。

関連情報