Linuxのコマンドラインからスクリプトを実行しようとして「実行できません」というエラーメッセージが表示されたり、ディレクトリにアクセスしようとしたらシステムによってブロックされたりした経験があるなら、おそらくそれらの操作を行う権限がないのでしょう。幸いなことに、適切な権限、またはスーパーユーザー(sudoを使用してアクセス可能)として操作する権限があれば、ファイルとディレクトリの権限を変更できます。
このハウツーでは、 chmodコマンドの使い方を解説します。これは、ファイルとディレクトリの所有者、ユーザーグループのメンバー、その他ユーザーのパーミッションを変更できる強力なコマンドです。また、以下のセクションでは、ユーザーがどのグループに属しているかを確認する方法と、Linuxにおける「その他」の意味についても説明します。
これらのコマンドに慣れるまでは、空のファイルやディレクトリの例を使って作業することをお勧めします。また、指示に注意深く従うように細心の注意を払う必要があります。
このハウツーで紹介するコマンドはすべて、ほとんどのLinuxマシンで動作します。Ubuntu LTSインストールを使用していますが、Raspberry Piでも実行できます。ハウツーはすべてターミナル経由で実行します。ほとんどのLinuxマシンでは、Ctrl、Alt、Tキーを押すことでターミナルウィンドウを開くことができます。
Linuxでファイルの権限を確認する方法
まず、テストディレクトリにテストファイルを作成し、デフォルトのパーミッションを確認しましょう。パーミッションを確認するには、lsコマンドに-l引数を追加して実行します。
1. test_directoryという新しいディレクトリを作成します。
$ mkdir test_directory
2.新しく作成したディレクトリに移動します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
$ cd test_directory
3. test1.txtという新しいテスト ファイルを作成します。
$ touch test1.txt
4. ls -lを使用してディレクトリの内容を一覧表示します。
$ ls -l
ls -lを使用すると、リストに返される項目について、より多くの情報が得られます。test1.txt が作成されているはずです。ここで注目すべきは、リストの最初の10文字です。テストファイルの場合は- rw- rw- r--です。
最初の「-」は、リスト上のオブジェクトがファイルであることを示します。ls -lを実行してディレクトリがリストされた場合、この最初の文字は「d」になります。次の9文字は3文字ずつ3組に分かれて並んでいます。
最初の3文字セットは所有者、2番目の3文字セットはユーザーグループ、最後の3文字セットはその他を表します。各3文字セットには、-、r、w、xのいずれかが含まれます。セットにrが含まれている場合、そのセットには読み取り権限が付与されています。awが含まれている場合、そのセットはファイルに書き込み可能であり、xが含まれている場合、そのセットはファイルをスクリプトまたはプログラムとして実行できます。
test1.txtの現在の権限は、所有者とグループメンバーには読み取りと書き込みが許可され、その他のメンバーには読み取り権限のみが許可されています。ファイルの実行権限は誰にもありません。
Linuxのファイル/ディレクトリの権限を素早く変更する方法
chmodコマンドを使用すると、所有者、グループ、その他のユーザーの読み取り、書き込み、実行権限のオン/オフを切り替えることができます。まずは、所有者とグループの権限を個別に変更してみましょう。
1. test_directory で、 test1.txtの現在の権限を一覧表示します。
$ ls -l
これらはtest1.txtを作成したときから変更されておらず、-rw-rw-r-- と表示されるはずです。
2.所有者の権限を読み取り専用に変更します。
$ chmod u-w test1.txt
3.ディレクトリの内容を一覧表示し、新しい権限設定を確認します。test1.txt の権限が -r--rw-r-- になっているはずです。これは、所有者にとってファイルが読み取り専用になったことを示しています。
$ ls -l
4.グループの権限を読み取り専用に変更します。所有者の権限変更と同様に、グループの権限設定を変更できます。書き込み権限を取り消すには、引数gwを使用します。
$ chmod g-w test1.txt
5.ディレクトリの内容を一覧表示して、新しい権限設定を表示します。
$ ls -l
ここで、 test1.txtの権限が -r--r--r-- と表示され、グループに対してファイルが読み取り専用になったことがわかります。
6.所有者の書き込み権限を有効にします。uwを使用して書き込み権限を削除する代わりに、直感的にu+w を使用して所有者に書き込み権限を付与できます。
$ chmod u+w test1.txt
7.ディレクトリの内容を一覧表示し、新しい権限設定を確認します。test1.txt の権限が -rw-r--r-- になっているはずです。これは、所有者に書き込み権限が付与されていることを示しています。
$ ls -l
Linuxで複数のファイル/ディレクトリの権限変更を適用する方法
前のセクションで使用した引数を組み合わせることで、1つのコマンドでLinuxファイルのパーミッションを複数回変更することもできます。このセクションでは、chmod引数に余分なスペースを追加しないことが重要です。余分なスペースを追加するとコマンドが失敗します。
最初のセクションでは、所有者とグループにuとgを使用しましたが、このセクションでは、他のユーザーの権限変更を対象とするためにoを追加します。同様に、読み取りと書き込みにrとwを使用しましたが、このセクションでは実行権限の変更にx を追加します。
1.ディレクトリの内容を一覧表示して、新しい権限設定を確認します。test1.txtの権限が -rw-r--r-- になっているはずです。
$ ls -l
2.所有者に実行権限を追加し、グループに書き込みと実行権限を追加で付与するように権限を変更します。カンマの後にスペースを入れないこと、またr、w、xを1つの引数で組み合わせることができることに注意してください。
$ chmod u+x,g+wx test1.txt
3.ディレクトリの内容を一覧表示し、新しい権限設定を確認します。test1.txtの権限が -rwxrwxr-- になっているはずです。これは、所有者とグループはファイルの読み取り、書き込み、実行が可能で、その他のユーザーは読み取りのみ可能であることを意味します。
$ ls -l
Linuxでファイル/ディレクトリの権限を再帰的に変更する方法
chmodコマンドは、ディレクトリに再帰的に変更を加えることができます。つまり、変更はディレクトリ内のファイルにも適用されます。これまで学んだことに加え、再帰引数-Rを使用して、これがどのように機能するかを確認してみましょう。
1.ホームディレクトリに移動し、内容を一覧表示します。
$ cd
$ ls -l
このハウツーの前のパートで説明した test_directory がリストされているはずです。test_directory の権限は drwxrwxr-x になっているはずです。
2.ディレクトリとその内容の両方の所有者とグループの権限を変更します。このコマンドを実行すると、 test_directoryとその中のファイルtest1.txtの両方に対する所有者とグループの書き込み権限が取り消されます。
$ chmod -R u-w,g-w test_directory
3.ホームディレクトリの内容を一覧表示して、test_directoryの権限を確認します。
$ ls -l
所有者とグループの権限では読み取りと実行は許可されますが、ディレクトリへの書き込みは許可されないことがわかります。
4. test_directoryに移動して、test1.txtの権限を確認します。
$ cd test_directory
$ ls -l
test1.txtの所有者とグループの権限が、ホスト ディレクトリへの再帰的な変更に合わせて変更され、書き込み権限が削除されていることがわかります。
Linuxグループの表示方法
ユーザー、グループ、その他について話すとき、通常、ユーザーはユーザーグループに属していることを意味します。ユーザーとグループは、同じ権限を持つことも、大きく異なる権限を持つこともできます。例えば、チームメンバーが特定のタスクを実行するために、より多くの権限が必要になる場合があります。ユーザーとグループに付与する権限は、グループに属していない他のユーザーに付与する権限とは異なります。
groupsコマンドを使用して、ユーザーが所属するグループを確認できます。
1.ターミナルを開き、「 groups 」と入力します。これにより、インストール時に利用可能なすべてのグループが一覧表示されます。
groups
2.ターミナルを開き、「groups」に続けてユーザー名を入力します。例えば、ここでは「Tom」がどのグループに属しているかを確認し、彼がtomとsudoのグループに属していることがわかります。
groups tom
このコマンドの出力は次のようになります。
tom : tom sudo
「その他」はグループではありません。「その他」とは、ファイルやディレクトリの所有者、またはアクセス権を持つグループに属していない人を指します。通常、「その他」はファイルやディレクトリへの読み取りアクセス権のみを持ちますが、これは変更可能です。これについては後ほど説明します。
Linuxのファイル権限を数値コードで変更する方法
Linuxのファイルパーミッションではr、w、xのいずれかを使う方が覚えやすいですが、chmodでは数値コードを使う人が多いです。chmodコマンドに3桁の数字を入力すると、各数字はユーザー、グループ、その他の順で異なるグループに適用されます。例えば、chmod 777は3つのグループすべてに完全な読み取り、書き込み、実行権限を与えますが、chmod 740はユーザーには完全な権限、グループには読み取り権限、その他には全く権限を与えません。
以下の表に各数字の意味を示します。
スワイプして水平にスクロールします
番号 | 権限 |
---|---|
0 | なし |
1 | 実行する |
2 | 書く |
3 | 実行と書き込み |
4 | 読む |
5 | 読み取りと実行 |
6 | 読み書き |
7 | すべて: 読み取り、書き込み、実行 |
chmodコマンドの基本的な使い方を習得すれば、ファイルとディレクトリのパーミッションを細かく制御できます。chmodには様々な引数を追加でき、様々なアプローチで操作できます。
例えば、+ と - の代わりに=を使う方法を調べてみると良いでしょう。権限のオン/オフを切り替えるのではなく、一部またはすべてのユーザーに対して権限を直接定義できるからです。chmod について調べて学ぶ際には、テスト用のファイルやディレクトリで練習することを忘れないでください。依存しているファイルの権限を誤ってすべて削除してしまうと、大変なことになります。