Linuxでファイルのパーミッションを再帰的に変更する方法!chmodとfindの使い方を解説
Linuxはマルチユーザー対応のオペレーティングシステムであるため、許可されたプロセスやユーザーだけが各ディレクトリやファイルへアクセスできるよう、ファイルパーミッションを設定・管理する仕組みが備わっています。Linuxを使っていると、「Permission denied(アクセスが拒否されました)」というエラーが表示されて、ファイルやディレクトリを編集できない場面に遭遇することがあります。これは必要な権限を持っていないことを意味します。本記事では、Linuxでファイルのパーミッションを再帰的に変更し、サブフォルダやファイルにも確実に同じ設定を適用する方法を解説します。
Linuxでファイルのパーミッションを確認する方法
ファイルやディレクトリの操作で「permission denied」エラーが発生した場合は、まずユーザー・グループ・その他に対してどのような権限が割り当てられているかを確認しましょう。
確認にはls -lコマンドを使用します。例えば、以下は「/var」ディレクトリ内の各ファイルやディレクトリのパーミッション表示です。
この出力には次のような情報が含まれています。
- 1列目はファイルおよびディレクトリのパーミッションを表します。先頭の文字は種類を示しており、
dはディレクトリ、lはシンボリックリンク、-は通常のファイルを意味します。 - 残りの9文字は3文字ずつ3つのグループに分かれ、それぞれ所有者(
u: user)、グループ(g: group)、その他のユーザー(o: others)の権限を示します。rは読み取り(read)、wは書き込み(write)、xは実行(execute)の権限を表します。
作業対象のファイルやディレクトリのパーミッションがわかれば、あとは簡単に変更できます。
chmodコマンドでパーミッションを変更する方法
Linuxでファイルのパーミッションを変更する最も簡単な方法がchmodコマンドです。基本的な構文は以下の通りです。
chmod {permission}{operator}{mode}
- Permission: 権限を与える対象(ユーザー、グループ、所有者、または全ユーザー)を指定します。
- Operator: 権限の付与方法を指定します。
+は権限の付与、-は権限の剥奪、=は指定した権限のみを設定します。 - Mode: 設定する権限の種類を指定します。
r(読み取り)、w(書き込み)、x(実行)のいずれかです。
例えば、「/var」ディレクトリ内のbackupsディレクトリへの書き込み権限を全ユーザーから奪うには、次のコマンドを実行します。
sudo chmod -w /var/backups
chmodコマンドによるパーミッション変更は有効ですが、このままでは指定したディレクトリやファイルのみが対象となり、その中身までは変更されません。
そこで便利なのが再帰的な変更です。ディレクトリとそのサブディレクトリ・配下のファイルすべてに対して、一括でパーミッションを適用できます。これには、chmodコマンドの再帰オプション-Rを使用します。
例として、「/var/backup」ディレクトリとその配下すべてのファイル・サブディレクトリから読み取り権限を再帰的に削除してみましょう。現在のパーミッションは以下の通りです。
drwxrwxrwx 2 root root 4096 Jul 15 06:25 backups
ここで、chmodを再帰的に実行してパーミッションを変更します。
sudo chmod -R -r /var/backups
実行後、パーミッションが変更されたことが確認できます。
findコマンドで再帰的にパーミッションを変更する
実際には、ファイルとディレクトリに同じパーミッションを設定することはあまりありません。というのも、ディレクトリにcdで移動するには実行(x)権限が必要ですが、ほとんどのファイルには実行権限は不要だからです。
この問題を解決できるのが、Linuxのfindユーティリティです。findを使えば、特定のファイルやディレクトリだけを検索し、それらにのみパーミッションを設定できます。
例として「/var/log」ディレクトリを見てみましょう。このディレクトリにはファイルとディレクトリが混在しています。
ファイルにのみ特定のパーミッションを設定するには、findコマンドに-type fオプションを付けて実行します。
コマンド例は以下の通りです。
sudo find /var/log/ -type f -exec chmod 777 {} ;
上記の例では、findコマンドで「/var/log」ディレクトリからファイルを検索し、見つかったすべてのファイルに対して、ユーザー・グループ・その他全員に読み取り・書き込み・実行権限(777)を設定しています。
同様の操作はディレクトリに対しても可能です。その場合は、-type dを指定してディレクトリのみを対象にします。
例:
sudo find /var/log/ -type d -exec chmod 755 {} ;
上記の例では、ファイルではなくディレクトリにのみ755のパーミッションを設定しています。
結果はls -laコマンドで確認できます。
確認すると、すべてのファイルには777、ディレクトリには755のパーミッションが設定されていることがわかります。
まとめ
Linuxでファイルのパーミッションを変更する方法を知っておくことは、不正なアクセスや改ざんからファイルやディレクトリを守るために欠かせないスキルです。さらに、ファイルの所有者を変更してアクセスを制限したり、ACL(アクセス制御リスト)を活用すれば、よりきめ細かな権限管理を行うこともできます。
-
Windows 10でファイルのアクセス許可を変更する方法を徹底解説
PCを家族や同僚など複数人で共有する場面は少なくありません。Windows 10では、システムレベルですべてのファイルアクセス許可を管理しており、他のユーザーからデータを保護できるようになっています。既定では、ユーザーが作成したファイルには簡単にアクセスできますが、管理者権限があればアクセス許可を変更し、他のユーザーが自分のファイルのみ編集できるよう制限することも可能です。この記事では、Windows 10でファイルのアクセス許可を変更する方法を、初心者にもわかりやすく詳しく解説します。 Windows 10でファイルのアクセス許可を変更する方法 Windows 10では、以下のようなシーン
-
Linuxでファイルを完全に削除する方法|復元不能にする5つのテクニック
Linuxオペレーティングシステムでは、削除したファイルはまずゴミ箱へ移動します。ゴミ箱を空にすると、ファイルはシステムから削除されたように見えます。しかし、データ復元ソフトの需要が高まる昨今、ゴミ箱から削除したファイルでも、ある程度まで復元できてしまうのが実情です。つまり、ゴミ箱から取り除かれたファイルは完全に消去されたわけではなく、単に見えなくなっただけなのです。ファイルはハードディスクのどこかに残り続け、不要な領域を占有します。新しいファイルが作成され、同じセクターに上書き保存されて初めて、物理的には完全に消去されることになります。貴重なディスク容量を回収し、ファイル破損を防ぐためにも、