Linux でファイルが書き込み可能かどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

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

はじめに

この実験では、Linux で様々な方法を使ってファイルが書き込み可能かどうかを確認する方法を学びます。まず、test -w コマンドを使って書き込み可能性を迅速に判断し、シェルスクリプトでのその使い方を理解します。

次に、ls -l コマンドを使ってファイルのパーミッションを詳細に確認し、出力を解釈して所有者、グループ、その他のパーミッションを理解します。最後に、stat コマンドを使ってファイルのアクセス情報をより包括的に調べます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") subgraph Lab Skills linux/echo -.-> lab-558714{{"Linux でファイルが書き込み可能かどうかを確認する方法"}} linux/test -.-> lab-558714{{"Linux でファイルが書き込み可能かどうかを確認する方法"}} linux/ls -.-> lab-558714{{"Linux でファイルが書き込み可能かどうかを確認する方法"}} linux/touch -.-> lab-558714{{"Linux でファイルが書き込み可能かどうかを確認する方法"}} linux/cd -.-> lab-558714{{"Linux でファイルが書き込み可能かどうかを確認する方法"}} end

test -w で書き込み可能性をテストする

このステップでは、test コマンドに -w オプションを指定して、ファイルまたはディレクトリに書き込む権限があるかどうかを確認する方法を学びます。Linux では、誰がファイルを読み取り、書き込み、実行できるかを決定するため、ファイルのパーミッションを理解することが重要です。

test コマンドは、条件をチェックし、終了ステータスとして 0(真)または 1(偽)を返すシェルの組み込みコマンドです。-w オプションは、現在のユーザーがファイルまたはディレクトリに書き込み可能かどうかを具体的にチェックします。

~/project ディレクトリに簡単なファイルを作成しましょう。存在しない場合に空のファイルを作成する touch コマンドを使用します。

まだ project ディレクトリにいない場合は、そこに移動します。

cd ~/project

次に、my_test_file.txt という名前のファイルを作成します。

touch my_test_file.txt

ls コマンドを使用して、ファイルが作成されたことを確認できます。

ls

出力に my_test_file.txt が表示されるはずです。

では、test -w コマンドを使用して、このファイルに書き込めるかどうかを確認しましょう。結果を表示するために echo コマンドと組み合わせます。

test -w my_test_file.txt && echo "Writable" || echo "Not writable"

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

  • test -w my_test_file.txt:これは my_test_file.txt が書き込み可能かどうかをチェックします。
  • && echo "Writable"test コマンドが真(終了ステータス 0)を返した場合、&& 演算子が次のコマンドを実行し、「Writable」を出力します。
  • || echo "Not writable"test コマンドが偽(終了ステータス 1)を返した場合、|| 演算子が次のコマンドを実行し、「Not writable」を出力します。

ホームディレクトリで labex ユーザーとしてファイルを作成したため、書き込み権限があるはずで、出力は次のようになります。

Writable

test -w コマンドは、シェルスクリプトでファイルに書き込む前にパーミッションをチェックし、潜在的なエラーを防ぐためによく使用されます。

Continue をクリックして次のステップに進みます。

ls -l でパーミッションを確認する

このステップでは、ls -l コマンドを使用して、ファイルやディレクトリの詳細情報(パーミッションを含む)を表示します。このコマンドは、Linux システム上で誰が何にアクセスできるかを理解するために不可欠です。

ls コマンドは、ファイルやディレクトリを一覧表示します。-l オプションは、「長い一覧」形式を提供し、パーミッション、所有者、サイズ、変更時刻が含まれます。

~/project ディレクトリにいることを確認します。

cd ~/project

次に、ls -l コマンドを実行して、このディレクトリ内のファイルの詳細を表示します。前のステップで作成した my_test_file.txt ファイルが表示されるはずです。

ls -l

出力は次のようになります。

-rw-rw-r-- 1 labex labex    0 Month Day HH:MM my_test_file.txt

出力の最初の部分(ファイルのパーミッションを表す部分)を分解してみましょう。

-rw-rw-r--

この 10 文字の文字列は、ファイルの種類と異なるユーザーに対するパーミッションを示しています。

  1. 最初の文字(この場合は -)は、ファイルの種類を示します。
    • -: 通常のファイル
    • d: ディレクトリ
    • l: シンボリックリンク
    • その他...
  2. 次の 9 文字は、3 文字ずつ 3 つのセットに分けられます。
    • 最初のセット (rw-): ファイルの所有者に対するパーミッション。
    • 2 番目のセット (rw-): ファイルが所属するグループに対するパーミッション。
    • 3 番目のセット (r--): その他のユーザー(システム上の他の全てのユーザー)に対するパーミッション。

それぞれの 3 文字のセット内では、以下の意味があります。

  • r: 読み取り権限(ファイルの内容を表示したり、ディレクトリの内容を一覧表示したりすることができます)。
  • w: 書き込み権限(ファイルを変更したり、ディレクトリ内でファイルを作成/削除したりすることができます)。
  • x: 実行権限(ファイルをプログラムとして実行したり、ディレクトリにアクセスしたりすることができます)。
  • -: 権限が付与されていないことを示します。

したがって、パーミッションが -rw-rw-r--my_test_file.txt の場合、

  • 所有者 (labex) は読み取り (r) と書き込み (w) の権限を持っています。
  • グループ (labex) は読み取り (r) と書き込み (w) の権限を持っています。
  • その他のユーザーは読み取り (r) 権限のみを持っています。

この出力は、前のステップで test -w コマンドが labex ユーザーに対して「Writable」を返した理由を確認するものです。所有者 (labex) が書き込み権限 (w) を持っているからです。

ls -l の出力を理解することは、Linux でファイルとパーミッションを管理する上で基本的なことです。

Continue をクリックして次に進みます。

stat でファイルアクセスを調査する

このステップでは、stat コマンドを使用して、ファイルまたはファイルシステムに関する詳細情報を取得します。ls -l は概要をすぐに把握できますが、stat はファイルのメタデータ(アクセス時間、変更時間、状態変更時間など)をより詳細に提供します。

~/project ディレクトリにいることを確認します。

cd ~/project

次に、先ほど作成した my_test_file.txt ファイルに対して stat コマンドを使用しましょう。

stat my_test_file.txt

出力は非常に詳細で、次のようになるかもしれません。

  File: my_test_file.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: ---h/---d       Inode: ---         Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Modify: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Change: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
 Birth: -

stat が提供するいくつかの重要な情報を見てみましょう。

  • File: ファイルの名前。
  • Size: ファイルのサイズ(バイト単位)。
  • Access: (0664/-rw-rw-r--): この行は、8 進数 (0664) とシンボリック (-rw-rw-r--) の両方の形式でパーミッションを示しています。これは ls -l で見たパーミッションと一致します。
  • Uid: ( 5000/ labex): ファイルの所有者のユーザー ID (UID) とユーザー名。
  • Gid: ( 5000/ labex): ファイルが所属するグループのグループ ID (GID) とグループ名。
  • Access: ファイルが最後にアクセス(読み取り)された時間。
  • Modify: ファイルの内容が最後に変更された時間。
  • Change: ファイルのメタデータ(パーミッション、所有者など)が最後に変更された時間。
  • Birth: ファイルの作成時間(すべてのファイルシステムで利用できるとは限りません)。

stat コマンドは、ls -l よりもファイルのプロパティを詳細に調べることができます。正確なタイムスタンプや、異なる形式でのファイルの所有者とパーミッションに関する詳細情報が必要な場合に特に便利です。

また、stat にオプションを指定して特定の情報を取得することもできます。たとえば、8 進数形式のアクセスパーミッションのみを表示するには、次のようにします。

stat -c "%a" my_test_file.txt

このコマンドは -c オプションを使用してカスタム形式を指定しています。"%a" は 8 進数形式のアクセスパーミッションの形式指定子です。出力は次のようになります。

664

これは、完全な stat 出力に表示される 8 進数のパーミッション 0664 と一致します(先頭のゼロは省略されることが多い)。

Continue をクリックしてこの実験を完了します。

まとめ

この実験では、Linux で test -w コマンドを使用してファイルが書き込み可能かどうかを確認する方法を学びました。このコマンドは、書き込み権限を判断する簡単で効果的な方法であり、シェルスクリプトでエラーを防ぐためによく使用されます。ファイルを作成し、test -w&& および || 演算子と組み合わせて、ファイルが書き込み可能かどうかを表示する練習を行いました。

また、ls -l コマンドを使用してファイルのパーミッションを確認する方法を調べました。このコマンドは、ファイルの所有者、グループ、およびパーミッションに関する詳細情報を人間が読みやすい形式で提供します。最後に、stat コマンドを使用してファイルのアクセス詳細を調査する方法を学びました。このコマンドは、ファイルの状態に関するより包括的な情報(アクセス、変更、および状態変更のタイムスタンプを含む)を提供します。