1つのコマンドでディレクトリのファイル許可を変更する方法


11

Unixで1つのコマンドでディレクトリのすべてのファイル許可を変更するにはどうすればよいですか?


ディレクトリ内のすべてのファイルのアクセス許可を変更しますか?これもネストされたディレクトリに入れますか?ディレクトリ自体の権限を変更しますか、それともファイルのみを変更しますか?最後に、質問を投稿する前に最初にこのサイトを検索してみましたか?
エーテル

回答:


21

ファイルまたはディレクトリエントリのアクセス権を非再帰的に変更するには、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したいと思っているのか、あるいは彼がまったくディレクトリに設定していると仮定しているのですか?この質問は、彼が許可を変更したいということを明記しているだけであり、特に何に変更したくないのかを明記しています。
リースムーア

@リースムーア:その通りです。質問者は、アクセス許可を再帰的に変更することについても何も言いませんでした。
ジョーイアダムス

1
通常は、+および-シンボリックモードのものを使用します。すなわち、chmod -R go=u,go-w /dir
ダニーザウアー

6

chmod-Rファイルとディレクトリのパーミッションを再帰的に変更することを意味するフラグがあります。

大文字の「X」を使用して、フォルダに対して正しいことを実行できます。「X」=「ファイルがディレクトリであるか、すでに一部のユーザーの実行権限がある場合のみ実行/検索します」

たとえば、chmod -R ug = rwX、o-rwxです。

ツリー全体が所有者と各ファイルのグループにアクセス可能になり、他の誰にもアクセスできなくなります。既に実行可能なファイルは、その後も実行可能になり、すべてのディレクトリには、ユーザーとグループの「x」が含まれ、他のディレクトリは含まれません。


chmod -R 444 somedirファイルを含むディレクトリで試してください。あなたが得るPermission denied-xフラグがディレクトリで取り出さ取得され、そしてディレクトリを読み続けることが必要だからです。
ジョーイアダムス

1
これに役立つ補足は、X = Y構文です。たとえば、chmod -R g = u dirを使用してグループ権限とユーザー権限を設定して、同等のグループとユーザーを設定できます。これは、実行可能ファイルを必要とするdirsなどの問題を回避しますが、「プレーン」ファイルは不要です。
ポールルーベル

3
chmod -R <file permission> *

のmanページからchmod

-R, --recursive
              change files and directories recursively

複数の方向のスイッチで使用chmod-Rます。サブディレクトリツリーには数百万のファイルが含まれており、これらのファイルのファイルアクセス許可を一度にまとめて変更する必要があります。

たとえば、ファイルの許可は 777、755、644など

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.