Linux で chmod コマンドを使用する方法

  • Linux の chmod コマンドはファイルのアクセス権を制御するために使用され、ファイルへのアクセス、ディレクトリの検索、スクリプトの実行を許可するユーザーを指定できます。
  • Linux のファイルのアクセス権は、ユーザーごとに設定したり、グループの全メンバーに適用したりできます。
  • chmod コマンドは、アクセス権を設定するために、対象、変更内容、対象のアクセス権という構文を使用します。u、g、o、a などのインジケーターを使用して対象を指定し、+ と - の記号を使用してアクセス権を追加または削除できます。アクセス権は、読み取り、書き込み、および実行を表す r、w、x で表されます。

Linux のchmodコマンドを使用して、ファイルへのアクセス、ディレクトリの検索、スクリプトの実行を許可するユーザーを制御します。このコマンドは Linux のファイルのアクセス権を変更しますが、一見複雑に見えますが、仕組みがわかれば実際は非常に簡単です。

chmod はファイルのアクセス権を変更します

Linux では、ファイルまたはディレクトリに対して何ができるかは、一連のアクセス権によって制御されます。アクセス権のセットは 3 つあります。ファイルの所有者用、ファイルのグループのメンバー用、その他すべての人のためのセットです。

アクセス権は、ファイルまたはディレクトリに対して実行できるアクションを制御します。ファイルの読み取り、変更、またはスクリプトやプログラムの場合は実行を許可するか、または禁止します。ディレクトリの場合、アクセス権はディレクトリにcdできるユーザーと、ディレクトリ内でファイルを作成または変更できるユーザーを管理します。

chmodコマンドを使用して、これらのアクセス権をそれぞれ設定します。ファイルまたはディレクトリに設定されているアクセス権を確認するには、lsを使用できます。

ファイルのアクセス権の表示と理解

lsでファイルとディレクトリのファイルアクセス権を一覧表示するには、-l(長い形式)オプションを使用できます。

ls -l

各行の最初の文字は、リストされているエントリのタイプを示します。ダッシュ(-)の場合はファイルです。文字dの場合はディレクトリです。

次の 9 文字は、3 つのアクセス権のセットの設定を表しています。

  • 最初の 3 文字は、ファイルを所有するユーザーのアクセス権(ユーザーアクセス権)を示しています。
  • 真ん中の 3 文字は、ファイルのグループのメンバーのアクセス権(グループアクセス権)を示しています。
  • 最後の 3 文字は、最初の 2 つのカテゴリにない人のアクセス権(その他のアクセス権)を示しています。

各アクセス権のセットには 3 文字があります。文字は、アクセス権の有無を示すインジケーターです。ダッシュ(-)または文字のいずれかです。文字がダッシュの場合、そのアクセス権は付与されていません。文字がrw、またはxの場合、そのアクセス権が付与されています。

文字は次のとおりです。

  • r: 読み取りアクセス権。ファイルを開いて内容を表示できます。
  • w: 書き込みアクセス権。ファイルを編集、変更、削除できます。
  • x: 実行アクセス権。ファイルがスクリプトまたはプログラムの場合は、実行(実行)できます。

たとえば、

  • ---は、アクセス権がまったく付与されていないことを意味します。
  • rwxは、完全なアクセス権が付与されていることを意味します。読み取り、書き込み、および実行のインジケーターはすべて存在します。

スクリーンショットでは、最初の行はdで始まります。この行は「archive」というディレクトリを指します。ディレクトリの所有者は「dave」で、ディレクトリが属するグループの名前も「dave」です。

次の 3 文字はこのディレクトリのユーザーアクセス権です。これらは、所有者に完全なアクセス権があることを示しています。rwxの文字はすべて存在します。これは、ユーザーの dave にそのディレクトリの読み取り、書き込み、および実行アクセス権があることを意味します。

2 番目の 3 文字のセットはグループアクセス権で、r-xです。これらは、dave グループのメンバーがこのディレクトリの読み取りアクセス権と実行アクセス権を持っていることを示しています。つまり、ディレクトリ内のファイルとその内容を一覧表示でき、そのディレクトリにcd(実行)できます。書き込みアクセス権がないため、ファイルを作成、編集、削除することはできません。

最後の 3 文字のセットもr-xです。これらのアクセス権は、最初の 2 つのアクセス権のセットの対象とならない人に適用されます。これらのユーザー(「その他」と呼ばれます)はこのディレクトリに対して読み取りアクセス権と実行アクセス権を持っています。

つまり、グループメンバーとその他の人は読み取りアクセス権と実行アクセス権を持っています。所有者である dave ユーザーには書き込みアクセス権もあります。他のすべてのファイル(mh.sh スクリプトファイルを除く)の場合、dave と dave グループのメンバーはファイルの読み取りと書き込みのプロパティを持ち、その他の人は読み取りアクセス権のみを持ちます。

mh.sh スクリプトファイルの特別な場合、所有者 dave とグループメンバーは読み取り、書き込み、および実行アクセス権を持ち、その他の人は読み取りと実行アクセス権のみを持ちます。

アクセス権の構文を理解する

chmodを使用してアクセス権を設定するには、次を伝える必要があります。

  • 対象: アクセス権を設定する対象。
  • 変更内容: どの変更を加えますか? アクセス権を追加しますか、削除しますか?
  • 対象: どのアクセス権を設定しますか?

これらの値を表すインジケーターを使用し、u+xなどの短い「アクセス権のステートメント」を形成します。ここで、「u」は「ユーザー」(対象)、「+」は追加(変更内容)、「x」は実行アクセス権(対象)を意味します。

使用できる「対象」の値は次のとおりです。

  • u: ユーザー。ファイルの所有者を意味します。
  • g: グループ。ファイルが属するグループのメンバーを意味します。
  • o: その他。ugのアクセス権の対象とならない人を意味します。
  • a: すべて。上記のすべてを意味します。

これらのいずれも使用されない場合、chmodは「a」が使用されたかのように動作します。

使用できる「変更内容」の値は次のとおりです。

  • -: マイナス記号。アクセス権を削除します。
  • +: プラス記号。アクセス権を付与します。アクセス権は既存のアクセス権に追加されます。このアクセス権のみを設定する場合は、以下で説明する=オプションを使用します。
  • =: 等号。アクセス権を設定し、その他を削除します。

使用できる「対象」の値は次のとおりです。

  • r: 読み取りアクセス権。
  • w: 書き込みアクセス権。
  • x: 実行アクセス権。

アクセス権の設定と変更

全員がフルアクセス権を持つファイルがあるとします。

ls -l new_ file.txt

ユーザーの dave に読み取りと書き込みのアクセス権を、グループとその他のユーザーには読み取りアクセス権のみを付与します。次のコマンドを使用して実行できます。

chmod u=rw,og=r new_file.txt

「=」演算子を使用すると、既存のアクセス権をすべて消去してから、指定したアクセス権を設定できます。

このファイルの新しいアクセス権を確認してみましょう。

ls -l new_file.txt

予想どおり、既存のアクセス権は削除され、新しいアクセス権が設定されました。

既存のアクセス権の設定を削除せずにアクセス権を追加するのはどうでしょうか? それも簡単にできます。

編集が完了したスクリプトファイルがあるとします。すべてのユーザーが実行できるようにする必要があります。現在のアクセス権は次のようになります。

ls -l new_script.sh

次のコマンドで、すべてのユーザーの実行アクセス権を追加できます。

chmod a+x new_script.sh

アクセス権を確認すると、実行アクセス権がすべてのユーザーに付与され、既存のアクセス権はそのまま残っていることがわかります。

ls -l new_script.sh

「a+x」ステートメントの「a」を使用せずに同じ結果を得ることもできました。次のコマンドでも同じように機能します。

chmod +x new_script.sh

複数のファイルのアクセス権の設定

複数のファイルに一度にアクセス権を適用できます。

現在のディレクトリにあるファイルは次のとおりです。

ls -l

「.page」拡張子を持つファイルから「その他」ユーザーの読み取りアクセス権を削除するとします。次のコマンドで実行できます。

chmod o-r *.page

その結果を確認してみましょう。

ls -l

ご覧のとおり、読み取りアクセス権は「その他」カテゴリのユーザーの「.page」ファイルから削除されました。他のファイルには影響しません。

サブディレクトリ内のファイルを含める場合は、-R(再帰的)オプションを使用できます。

chmod -R o-r *.page

数値による省略記法

chmodを使用するもう 1 つの方法は、所有者、グループ、およびその他に付与するアクセス権を 3 桁の数値で指定することです。左端の桁は所有者のアクセス権を表します。中央の桁はグループ メンバーのアクセス権を表します。右端の桁はその他のユーザーのアクセス権を表します。

使用できる桁とその意味を次に示します。

  • 0: (000) アクセス権なし。
  • 1: (001) 実行アクセス権。
  • 2: (010) 書き込みアクセス権。
  • 3: (011) 書き込みアクセス権と実行アクセス権。
  • 4: (100) 読み取りアクセス権。
  • 5: (101) 読み取りアクセス権と実行アクセス権。
  • 6: (110) 読み取りアクセス権と書き込みアクセス権。
  • 7: (111) 読み取り、書き込み、実行アクセス権。

3 つのアクセス権のそれぞれは、10 進数の 2 進数表現のビットの 1 つで表されます。つまり、2 進数で 101 になる 5 は、読み取りと実行を意味します。2 進数で 010 になる 2 は、書き込みアクセス権を意味します。

この方法を使用すると、必要なアクセス権を設定します。既存のアクセス権にアクセス権を追加しません。そのため、読み取りアクセス権と書き込みアクセス権がすでに設定されている場合は、7 (111) を使用して実行アクセス権を追加する必要があります。1 (001) を使用すると、読み取りアクセス権と書き込みアクセス権が削除され、実行アクセス権が追加されます。

「その他」カテゴリのユーザーの「.page」ファイルに読み取りアクセス権を再び追加しましょう。ユーザーとグループのアクセス権も設定する必要があるため、すでに設定されているアクセス権に設定する必要があります。これらのユーザーはすでに読み取りアクセス権と書き込みアクセス権を持っており、これは 6 (110) です。「その他」に読み取りアクセス権を持たせたいので、4 (100) に設定する必要があります。

次のコマンドでこれを実行できます。

chmod 664 *.page

これにより、ユーザー、グループ メンバー、その他に必要なアクセス権が設定されます。ユーザーとグループ メンバーのアクセス権は、すでに設定されているアクセス権にリセットされ、その他には読み取りアクセス権が復元されます。

ls -l

高度なオプション

chmodのマニュアルページを読むと、SETUID と SETGID ビット、および制限付き削除または「スティッキー」ビットに関連する高度なオプションがいくつかあることがわかります。

chmodが必要なケースの 99% には、ここで説明するオプションで十分です。

プロセスは終了コード 0 で終了しました