このようにファイルの権限を変更しようとすると
$ 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状態: ディレクトリの内容を表示するには、実行権限セットが必要です。
cd
1 レベル戻って、今来たディレクトリの権限を確認してください。 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
(ただし、 を使用するときにシステムファイルの権限を誤って変更しないように注意してください)。sudo
にchmod
; あなた自身のユーザーにはそれを実行する権限がないため、最初の方法の方が安全です。
ただし、ディレクトリの権限をファイルと同じ方法で変更したくない場合もあることを付け加えておきます。公式文書ディレクトリの読み取り(r
)権限は、その内容を表示できることを意味し( などを使用ls
)、書き込み(w
)権限は、ユーザーがそのディレクトリ内にファイルを作成/削除できることを意味し、実行(x
)権限は、その内部への実行を意味しますcd
。素晴らしい答えがありますここ新しい権限を再帰的に適用する際にファイルとディレクトリを区別する方法を提案していますxargs
。より速いと思われるが何も返さない場合のエラーを回避するためr
に にフラグを追加し、権限が必要な場合はパイプの両半分に を使用する必要があります (ここでも、として を使用する場合は注意してください)。つまり、次のようになります。xargs
find
root
sudo
chmod
root
sudo find [パス/ディレクトリ] -type d -print0 | sudo xargs -0r chmod [必要なディレクトリの権限]
sudo find [パス/ディレクトリ] -type f -print0 | sudo xargs -0r chmod [必要なファイルの権限]
どこに[desired-*-permissions]
与えられるか明示的に(777
) または文字を使う(のようにa+x
)。