ファイルの権限

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux のファイル権限の世界に深く入ります。chowntouchchmod という 3 つの重要なコマンドを探索します。これらのツールは、Linux システム上のファイルやディレクトリへのアクセスを管理するために不可欠です。この実験の終わりまでに、ファイルの作成、ファイルの所有者の変更、ファイル権限の変更についてしっかりと理解できるようになります。これらのコマンドを理解することで、システム上のファイルの読み取り、書き込み、実行を許可するユーザーを制御できるようになります。

達成目標

この実験を完了した後、以下のことができるようになります。

  • chmod を使用してファイル権限を変更する
  • chown を使用してファイルの所有者を変更する
  • touch を使用して新しいファイルを作成し、既存のファイルのタイムスタンプを更新する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"]) shell(("Shell")) -.-> shell/SystemInteractionandConfigurationGroup(["System Interaction and Configuration"]) shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chown("Ownership Changing") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") shell/ControlFlowGroup -.-> shell/cond_expr("Conditional Expressions") shell/SystemInteractionandConfigurationGroup -.-> shell/globbing_expansion("Globbing and Pathname Expansion") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills shell/comments -.-> lab-270252{{"ファイルの権限"}} linux/touch -.-> lab-270252{{"ファイルの権限"}} linux/chown -.-> lab-270252{{"ファイルの権限"}} linux/chmod -.-> lab-270252{{"ファイルの権限"}} linux/mkdir -.-> lab-270252{{"ファイルの権限"}} shell/cond_expr -.-> lab-270252{{"ファイルの権限"}} shell/globbing_expansion -.-> lab-270252{{"ファイルの権限"}} linux/sudo -.-> lab-270252{{"ファイルの権限"}} end

新しいファイルの作成

まずは、touch コマンドを使用して新しいファイルを作成しましょう。この汎用性の高いコマンドは、新しい空のファイルを作成したり、既存のファイルのタイムスタンプを更新したりすることができます。これを、ファイルを「触る」迅速な方法と考えてください。つまり、ファイルを作成したり、最後にアクセスした時間を更新したりすることができます。

まず、正しいディレクトリにいることを確認しましょう。project ディレクトリで作業します。

cd ~/project

cd コマンドは「change directory」(ディレクトリを変更する)の略です。~ 記号はホームディレクトリを表し、/project は移動したいサブディレクトリを指定します。project ディレクトリが存在しない場合、このコマンドは失敗する可能性があります。不確かな場合は、最初にディレクトリを作成するのが一般的な良い習慣です。ただし、この実験環境では、ディレクトリはすでに存在するはずです。

では、example.txt という名前の新しいファイルを作成しましょう。

touch example.txt

このコマンドは、現在のディレクトリに example.txt という名前の空のファイルを作成します。ファイルが作成されたことを確認するには、ls コマンドを使用します。

ls

ls は「list」(一覧表示)の略です。現在の場所にあるファイルとディレクトリを表示します。出力に example.txt が表示されるはずです。表示されない場合は、touch コマンドを正しく実行したこと、および実際に ~/project ディレクトリにいることを再確認してください。

ファイルの所有者を変更する

ファイルを作成したので、次はその所有者を変更する方法を学びましょう。chown コマンドを使用すると、ファイルのユーザーとグループの所有者を変更できます。所有者は、ファイルの管理権限を持つユーザーを決定します。

まず、example.txt ファイルの現在の所有者を確認しましょう。

ls -l example.txt

ls -l コマンド(長い形式での一覧表示)は、ファイルの権限、所有者、グループなど、ファイルに関する詳細情報を提供します。次のような出力が表示されるはずです。

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

この出力を分解してみましょう。

  1. -rw-rw-r-- はファイルの権限を表します(ステップ 4 で詳しく説明します)。最初の文字はファイルの種類を示します(通常のファイルは -、ディレクトリは d など)。残りの文字は、所有者、グループ、その他のユーザーの読み取り、書き込み、実行権限を表します。
  2. 最初の labex はファイルの現在の所有者です。これはファイルを所有するユーザー名です。
  3. 2 番目の labex はファイルの現在のグループです。グループは、権限を共有できるユーザーの集合です。
  4. 0 はファイルのサイズ(バイト)です。ファイルが空なので、サイズはゼロです。
  5. Jul 29 15:11 は最後に変更された日付と時刻です。
  6. example.txt はファイル名です。

では、ファイルの所有者を root ユーザーに変更しましょう。root は Linux システムの管理者アカウントで、特別な権限を持っています。

sudo chown root:root example.txt

このコマンドの動作は次の通りです。

  • sudo は、コマンドを root 権限で実行します。おそらくパスワードの入力を求められます。chown はシステムのセキュリティに影響を与える可能性のある強力なコマンドなので、昇格した権限が必要です。sudo を使用しないと、「Permission denied」(権限が拒否されました)というエラーが表示されます。
  • chown は所有者を変更するコマンドです。
  • root:root は新しい所有者とグループを指定します(両方とも root に設定されています)。構文は owner:group です。
  • example.txt は対象のファイルです。

変更を確認しましょう。

ls -l example.txt

これで、所有者とグループが両方とも root に変更されているはずです。

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

root の代わりに labex が表示される場合は、chown コマンドを実行する際に sudo を使用し、パスワードを正しく入力したことを確認してください。

ディレクトリの所有者を変更する

chown コマンドは、ディレクトリ全体とその中身の所有者を変更することもできます。実際に試してみましょう。これは、すべてのファイルとサブディレクトリが同じ所有者を持つようにする必要がある複雑なディレクトリ構造を管理する場合に特に便利です。

まず、いくつかのファイルを持つ新しいディレクトリを作成しましょう。

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

これらのコマンドを分解してみましょう。

  • mkdir -p new-dir/subdir は、new-dir ディレクトリとそのサブディレクトリ subdir を作成します。-p オプションは、必要に応じて親ディレクトリを作成するよう mkdir に指示します。-p を使用しない場合、new-dir が存在しなければ、new-dir/subdir の作成は失敗します。
  • echo "Hello, world" > new-dir/file1.txt は、new-dir ディレクトリ内に file1.txt という名前のファイルを作成し、その中に「Hello, world」というテキストを書き込みます。> 記号はリダイレクトに使用されます。echo コマンドの出力を指定されたファイルにリダイレクトします。
  • echo "Another file" > new-dir/subdir/file2.txt も同様に、new-dir/subdir ディレクトリ内に file2.txt という名前のファイルを作成し、その中に「Another file」というテキストを書き込みます。

では、現在の所有者を確認しましょう。

ls -lR new-dir

ls -lR は、new-dir の内容を再帰的に一覧表示します。-R オプション(再帰的)は、lsnew-dir 内のすべてのファイルとサブディレクトリおよびその内容を一覧表示させます。

次のような表示がされるはずです。

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

これは、new-dir ディレクトリ、そのサブディレクトリ subdir、および file1.txtfile2.txt のすべてのファイルが labex によって所有されていることを示しています。

では、new-dir とそのすべての内容の所有者を root ユーザーに変更しましょう。

sudo chown -R root:root new-dir

このコマンドでは、

  • -R オプションは、chown に再帰的に操作するよう指示し、new-dir 内のすべてのファイルとサブディレクトリの所有者を変更します。これは重要です。-R を使用しない場合、new-dir ディレクトリの所有者のみが変更され、その中のファイルとサブディレクトリは依然として labex によって所有されたままになります。

変更を確認しましょう。

ls -lR new-dir

これで次のように表示されるはずです。

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

ご覧のように、ディレクトリとそのすべての内容の所有者が root に変更されました。これは、ディレクトリ構造内の所有者を広範囲に変更するための -R オプションの強力さを示しています。

ファイルの権限を変更する

Linux では、ファイルの権限は一連の文字または数字で表されます。これらの権限の読み方と変更方法を探ってみましょう。権限を理解することは、ファイルを保護し、不正アクセスを防ぐために不可欠です。

まず、example.txt ファイルの現在の権限を見てみましょう。

ls -l example.txt

次のような表示がされるかもしれません。

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

-rw-rw-r-- の部分がファイルの権限を表しています。ここで、数値表記と記号表記が登場します。分解してみましょう。

  • 最初の文字 (-) は、これが通常のファイルであることを示しています。他の一般的な指示子としては、ディレクトリの場合は d、シンボリックリンクの場合は l があります。
  • 次の 3 文字 (rw-) は、所有者の権限を表しています(読み取りと書き込みはできますが、実行はできません)。
    • r は読み取り権限を表します。所有者はファイルを開いて読むことができます。
    • w は書き込み権限を表します。所有者はファイルを変更することができます。
    • x は実行権限を表します。所有者はファイルを実行することができます(プログラムまたはスクリプトの場合)。- は権限が拒否されていることを意味します。
  • 次の 3 文字 (rw-) はグループの権限です。上記と同じ意味を持ち、ファイルのグループのメンバーに適用されます。
  • 最後の 3 文字 (r--) はその他のユーザー(それ以外のすべてのユーザー)の権限です。同じ意味を持ち、所有者でもファイルのグループのメンバーでもないユーザーに適用されます。

では、chmod コマンドを使用してこれらの権限を変更しましょう。chmod は「change mode」(モードを変更する)の略で、これらの権限を変更することができます。まずは数値表記から始めましょう。

sudo chmod 700 example.txt

このコマンドでは、

  • 700 は権限の数値表記です。
    • 最初の数字 (7) は所有者の権限を表します。
    • 2 番目の数字 (0) はグループの権限を表します。
    • 3 番目の数字 (0) はその他のユーザーの権限を表します。

各数字は 0 から 7 の数値で、読み取り (4)、書き込み (2)、実行 (1) の権限の値を足し合わせて計算されます。

  • 4: 読み取り権限
  • 2: 書き込み権限
  • 1: 実行権限
  • 0: 権限なし

したがって、7(最初の数字)は所有者に読み取り (4)、書き込み (2)、実行 (1) の権限を与えます。4 + 2 + 1 = 7
0(2 番目の数字)はグループに権限を与えません(0 + 0 + 0 = 0)。
0(3 番目の数字)はその他のユーザーに権限を与えません(0 + 0 + 0 = 0)。

したがって、700 は次の意味を持ちます。所有者: 読み取り、書き込み、実行。グループ: なし。その他のユーザー: なし。

変更を確認しましょう。

ls -l example.txt

これで次のように表示されるはずです。

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

所有者は現在 rwx(読み取り、書き込み、実行)の権限を持っていますが、グループとその他のユーザーは権限を持っていません。

ディレクトリの権限を変更する

ディレクトリの権限を変更する方法は、ファイルの権限を変更する方法と似ています。新しいディレクトリを作成し、その権限を変更することで練習してみましょう。ディレクトリの権限は、誰がディレクトリの内容を一覧表示できるか、ディレクトリ内に新しいファイルを作成できるか、およびディレクトリ内の既存のファイルにアクセスできるかを制御します。

まず、新しいディレクトリを作成し、標準ではない権限を設定しましょう。

mkdir ~/test-dir
chmod 700 ~/test-dir

では、現在の権限を確認しましょう。

ls -ld ~/test-dir

ls -l-d オプションは、ls にディレクトリ自体を一覧表示するよう指示します。-d を使用しない場合、lstest-dir の中身(現在は空です)を一覧表示します。次のように表示されるはずです。

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

先頭の d は、これがディレクトリであることを示しています。rwx------ は、所有者に読み取り、書き込み、実行の権限があり、グループとその他のユーザーには権限がないことを示しています。ディレクトリに関しては、

  • 読み取り権限 (r) で、ls を使用してディレクトリの内容を一覧表示できます。
  • 書き込み権限 (w) で、ディレクトリ内に新しいファイルやサブディレクトリを作成できます。
  • 実行権限 (x) で、ディレクトリ内のファイルやサブディレクトリにアクセスできます(つまり、cd で移動できます)。

では、権限を変更しましょう。

chmod -R 755 ~/test-dir

このコマンドでは、

  • -R は、すべてのファイルとサブディレクトリに再帰的に変更を適用します(この場合はディレクトリが空ですが)。ディレクトリを扱う際には、後でファイルを追加する可能性があるため、現在空であっても -R を含めるのが良い習慣です。
  • 755 は、所有者に読み取り、書き込み、実行の権限を与え、グループとその他のユーザーには読み取りと実行の権限を与えます。

755 を分解してみましょう。

  • 所有者 (7): 読み取り (4) + 書き込み (2) + 実行 (1) = 7
  • グループ (5): 読み取り (4) + 実行 (1) = 5
  • その他のユーザー (5): 読み取り (4) + 実行 (1) = 5

変更を確認しましょう。

ls -ld ~/test-dir

これで次のように表示されるはずです。

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

これは、権限の変更を明確に示しています。最初は所有者のみがアクセスできる状態 (700) から、所有者が完全なアクセス権を持ち、その他のユーザーが読み取りと実行できる状態 (755) に変わりました。これで、誰でも test-dir の内容を一覧表示し、その中のファイルにアクセスできますが、新しいファイルを作成したり既存のファイルを変更したりすることは、所有者のみができます。

権限の記号表記を使用する

数値表記は簡潔ですが、記号表記は特に単一の権限を変更したい場合に、より直感的です。記号表記では、ユーザー、グループ、その他のユーザーを表す文字と、権限を追加または削除する演算子を使用します。

まず、いくつかの内容を持つ新しいスクリプトファイルを作成しましょう。

cd ~/project
echo '#!/bin/bash\necho "Hello, World"' > script.sh

このコマンドは 2 つのことを行います。

  1. script.sh という名前の新しいファイルを作成します。.sh 拡張子はシェルスクリプトに一般的に使用されます。シェルスクリプトは、一連のコマンドが順番に実行される実行可能ファイルです。
  2. このファイルに 2 行を書き込みます。
    • #!/bin/bash(シバンと呼ばれます)は、これが bash スクリプトであることをシステムに伝えます。シバン行は、スクリプトを実行するために使用するインタープリターを指定します。この場合、/bin/bash は Bash インタープリターのパスです。
    • echo "Hello, World" は、スクリプトが実行されたときに「Hello, World」を出力するコマンドです。echo コマンドは、その後に続くテキストを表示するだけです。
    • \n は改行文字で、ファイル内のコマンドが別々の行になるようにします。

では、初期の権限を確認しましょう。

ls -l script.sh

次のような表示がされるはずです。

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

ご覧のように、最初はスクリプトは所有者とグループに読み取りと書き込みの権限があり、その他のユーザーには読み取り権限のみがあります。プログラムとして実行するには実行権限が必要ですが、まだ持っていません。

スクリプトを実行してみましょう。

./script.sh

スクリプトにまだ実行権限がないため、「Permission denied」(権限が拒否されました)というエラーが表示されるはずです。./ の部分は、シェルに現在のディレクトリにあるスクリプトを実行するよう指示します。

では、記号表記を使用して所有者に実行権限を追加しましょう。

chmod u+x script.sh

このコマンドでは、

  • u はユーザー(所有者)を指します。他のオプションとしては、グループの場合は g、その他のユーザーの場合は o、すべて(ユーザー、グループ、その他のユーザー)の場合は a があります。
  • +x は実行権限を追加します。+ 記号は権限を追加し、- 記号は権限を削除します。

したがって、u+x は「所有者に実行権限を追加する」ことを意味します。

変更を確認しましょう。

ls -l script.sh

これで次のように表示されるはずです。

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

所有者は現在 rwx(読み取り、書き込み、実行)の権限を持っています。

では、スクリプトをもう一度実行してみましょう。

./script.sh

今度は、「Hello, World」という出力が表示されるはずです。

この例は、スクリプトに実行権限を追加する必要がある理由と、これらの権限を追加する前後の違いを明確に示しています。記号表記を使用すると、数値表記全体を再計算することなく、特定の権限を簡単に変更できます。

まとめ

この実験では、ファイル権限を管理するための重要な Linux コマンドを学びました。

  1. touch を使用して新しいファイルを作成し、既存のファイルを更新しました。
  2. chown を使ってファイルやディレクトリの所有者を変更する方法を学びました。これには、ディレクトリ構造全体に対する再帰的な変更も含まれます。
  3. chmod を数値表記と記号表記の両方で使用して、ファイルやディレクトリの権限を変更する練習をしました。所有者、グループ、その他のユーザーに対する異なる権限レベルを理解しました。
  4. 権限が重要な理由の実用的な例を見ました。たとえば、スクリプトを実行するには実行権限が必要です。
  5. chmod の数値表記と記号表記の違い、およびそれぞれが適している状況を明確にしました。

これらのコマンドは、Linux システムのセキュリティを維持し、アクセスを制御するために不可欠です。権限を変更する際には、特に sudo を使用するときは常に注意してください。誤った変更は、システムのセキュリティと機能に重大な影響を与える可能性があります。コマンドを実行する前に必ず再確認し、行っている変更の影響を理解してください。