Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Linux chmodの再帰的変更:ファイルやディレクトリのパーミッションを一括変更する方法

Linuxのchmodコマンドを使えば、すべてのファイルとディレクトリのパーミッションを再帰的に変更できます。この記事では、その具体的な方法をわかりやすく解説します。

以下のようなエラーに遭遇したことはありませんか?

111 [Permission Denied]
"Linux-Screw" [Permission Denied]
"Linux-Screw" [readonly]

システムファイルを編集する場合は、sudoを使うのが基本です。これにより、システムの設定や文脈を壊すことなく安全に編集できます。一方、日常的に扱うユーザーファイルについては、パーミッション自体を変更するのが最適なアプローチです。chmodはまさにそのためのコマンドで、権限を昇格させることなく、必要なときに必要なファイルへアクセスできるようにしてくれます。

chmodとは?

chmod(change mode)は、指定したファイルの「ファイルモードビット」を変更するコマンドです。パーミッションはシンボリック表記または8進数(オクタル)表記のどちらかで指定できます。

chmodの基本構文

chmod [OPTION] MODE FILE
または
chmod [OPTION] OCTAL-MODE FILE

主なオプション:
[-c], --changes
 変更があったファイルのみ詳細を表示
[-f], --silent, --quiet
 ほとんどのエラーメッセージを非表示にする
[-v], --verbose
 処理したすべてのファイルに対して診断情報を出力
[-R], --recursive
 ファイルとディレクトリを再帰的に変更する

これらが利用可能な主なオプションです。「MODE」にはシンボリックによる参照を指定します。たとえば、ファイルに実行権限を追加したい場合は、次のように入力します。

chmod +x [FILE]

これだけで実行権限が付与されます。基本を押さえたところで、実際にフォルダ構造を修正し、アクセスできる状態にしていきましょう。

chmodで再帰的にパーミッションを変更する

フォルダ内で作業しているとき、単一のファイルだけのパーミッションを変更すれば済むケースはむしろ少ないものです。通常は「対象のファイル」に加えて、「現在のフォルダ内のすべてのファイル」と「サブディレクトリ全体」のパーミッションをまとめて変更する必要があります。

そこで便利なのが chmod -R オプションです。-R を付けると、配下のすべてのファイルとディレクトリを再帰的に処理できます。

chmod -R 755 *
ls -altrR

パーミッション変更後の状態を確認すると、次のようになります。

Linux chmodの再帰的変更:ファイルやディレクトリのパーミッションを一括変更する方法

chmod -R の実行例

なお、なぜ -altrh が筆者のお気に入りのデフォルトオプションなのか気になる方は、ls コマンドに関する解説記事もぜひ参考にしてください。

さて、出力を見ると、ディレクトリとファイルが 755、つまり rwx r-x r-x に変更されていることがわかります。このディレクトリは、自分がそのグループ(ユーザーグループ)に属しているためアクセス可能であり、さらに所有者(ユーザー)でもあるため自由に操作できます。以前のユーザーが残したフォルダを整理する場合は、chown コマンドでファイルの所有権を変更しておくとよいでしょう。

注意点:umaskとの関係

ただし、上記のchmodの使い方にはひとつ落とし穴があります。umask を0022のような一般的なデフォルト値に設定している場合、ディレクトリとファイルでは作成時のパーミッションが異なるのです。

  • ディレクトリ: 755で作成される → cd(change directory)コマンドが正しく機能する
  • ファイル: 644で作成される(ディレクトリより1つ権限が少ない)→ 通常のファイルには実行権限が不要なため

つまり、ディレクトリには移動(cd)のために実行権限が必要ですが、普通のファイルには不要だということです。この違いを反映させるには、find-exec を組み合わせるのが効果的です。

findと組み合わせてchmodを再帰的に実行する

find <dir> -type d -exec chmod 755 {} \;
find <dir> -type f -exec chmod 644 {} \;
Linux chmodの再帰的変更:ファイルやディレクトリのパーミッションを一括変更する方法

find + chmod による再帰的なパーミッション変更

-type d はディレクトリのみ、-type f はファイルのみを対象にします。これにより、すべてがデフォルトのumaskの規則に沿った状態になります。つまり「実行権限を持たないファイル」と「実行権限を持つディレクトリ」という理想的な構成が完成します。

まとめ

ファイルのパーミッションは意外と厄介な存在ですが、chmodを使えば簡単に整理できます。パーミッションの変更方法をマスターすれば、ディレクトリやファイルを本当に自分のものとして管理できるようになります。シェルコマンドでLinux環境を自在に操作するスキルをさらに磨きたい方は、他のチュートリアル記事もぜひチェックしてみてください。

  1. chmod 777とは?Linuxにおける意味と正しい使い方を徹底解説

    この記事では、ユーザー(所有者)、グループ、その他のユーザーのすべてに全権限を付与するLinuxコマンド「chmod 777」について詳しく解説します。 Linux初心者の方、Web開発者、システム管理者であれば、次のようなコマンドを入力するよう指示された経験があるかもしれません。 chmod 777 /path/to/file/or/folder システム上でコマンドを実行するとき(特にrootユーザーとして作業する場合は!)には、そのコマンドが何を行うのかを必ず理解しておくべきです。では、「chmod 777」とは一体何なのでしょうか? Linuxにおけるパーミッションの基本 まずは、以下

  2. Windows 10でファイルのアクセス許可を変更する方法を徹底解説

    PCを家族や同僚など複数人で共有する場面は少なくありません。Windows 10では、システムレベルですべてのファイルアクセス許可を管理しており、他のユーザーからデータを保護できるようになっています。既定では、ユーザーが作成したファイルには簡単にアクセスできますが、管理者権限があればアクセス許可を変更し、他のユーザーが自分のファイルのみ編集できるよう制限することも可能です。この記事では、Windows 10でファイルのアクセス許可を変更する方法を、初心者にもわかりやすく詳しく解説します。 Windows 10でファイルのアクセス許可を変更する方法 Windows 10では、以下のようなシーン