Unixで1つのコマンドでディレクトリのすべてのファイル許可を変更するにはどうすればよいですか?
Unixで1つのコマンドでディレクトリのすべてのファイル許可を変更するにはどうすればよいですか?
回答:
ファイルまたはディレクトリエントリのアクセス権を非再帰的に変更するには、chmod
次のコマンドを使用します(特定のオプションの詳細については、man chmodを参照してください)。
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
ファイル/ディレクトリの所有者を再帰的に変更するには(すべての子孫に影響します):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
ディレクトリ内のすべてのファイルのアクセス許可ビットを再帰的に変更するには:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
すべてのディレクトリの許可ビットを変更するには:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
これを行うことができればいいと思います:
chmod -R 755 dir
ただし、これには問題があります。ファイルとディレクトリを同じように扱います。上記のコマンドは、すべてのユーザーがディレクトリを一覧表示および読み取り可能にしますが、すべてのファイルを実行可能にします。これは通常、実行したくないことです。
に変更すると644
、別の問題が発生します。
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
問題は644
、ディレクトリリストビットを削除することであり、この副作用により、ファイルツリーのさらなる走査が妨げられます。を使用してこの問題を回避できますがsudo
、ルート以外のユーザーにはまったく役に立たないディレクトリになってしまいます。
要点は、chmod -R
いくつかの場合(たとえばchmod -R g-r
)でうまく-x
機能しますが、ファイルやディレクトリを無差別に操作するため、ビットをいじりたい場合はそうではありません。
644
は彼が設定-x
したいと思っているのか、あるいは彼がまったくディレクトリに設定していると仮定しているのですか?この質問は、彼が許可を変更したいということを明記しているだけであり、特に何に変更したくないのかを明記しています。
chmod -R go=u,go-w /dir
chmod
-R
ファイルとディレクトリのパーミッションを再帰的に変更することを意味するフラグがあります。
大文字の「X」を使用して、フォルダに対して正しいことを実行できます。「X」=「ファイルがディレクトリであるか、すでに一部のユーザーの実行権限がある場合のみ実行/検索します」
たとえば、chmod -R ug = rwX、o-rwxです。
ツリー全体が所有者と各ファイルのグループにアクセス可能になり、他の誰にもアクセスできなくなります。既に実行可能なファイルは、その後も実行可能になり、すべてのディレクトリには、ユーザーとグループの「x」が含まれ、他のディレクトリは含まれません。
chmod -R 444 somedir
ファイルを含むディレクトリで試してください。あなたが得るPermission denied
-xフラグがディレクトリで取り出さ取得され、そしてディレクトリを読み続けることが必要だからです。