はじめに
この実験では、さまざまなコマンドラインツールを使用して、Linux でファイルが読み取り可能かどうかを確認する方法を学びます。まず、基本的な test -r コマンドを使用して、読み取り権限をプログラム的にチェックし、条件式でのその使い方を理解します。
次に、ls -l コマンドを使ってファイルの権限を視覚的に確認し、権限文字列とその意味について理解を深めます。最後に、stat コマンドを使って、ファイルのアクセス権限やその他のメタデータを含む詳細な情報を取得します。これらの手順を完了することで、Linux 環境でのファイルの読み取り可能性を判断する実践的なスキルを身につけることができます。
test -r で読み取り可能性をテストする
このステップでは、test コマンドに -r オプションを指定して、ファイルに対する読み取り権限があるかどうかを確認する方法を学びます。
test コマンドは、条件式を評価するシェルの組み込みコマンドです。シェルスクリプトで判断を行うためによく使用されます。-r オプションは、ファイルが存在し、現在のユーザーが読み取り可能かどうかを具体的にチェックします。
これをテストするために、簡単なファイルを作成しましょう。echo コマンドを使用して、~/project ディレクトリに my_file.txt という名前のファイルにいくつかのテキストを入れます。
以下のコマンドを入力し、Enter キーを押します。
echo "This is a test file." > ~/project/my_file.txt
このコマンドは、~/project/my_file.txt ファイルを作成し、その中に文字列 "This is a test file." を書き込みます。> 記号は、echo コマンドの出力を指定されたファイルにリダイレクトします。
では、test -r を使用して、このファイルを読み取ることができるかどうかを確認しましょう。test コマンド自体は、条件が真の場合には出力を生成しません。通常、echo などの他のコマンドと組み合わせて結果を確認します。
以下のコマンドを入力し、Enter キーを押します。
test -r ~/project/my_file.txt && echo "File is readable."
&& 演算子は、「左側のコマンドが成功する(終了ステータスがゼロを返す)場合のみ、右側のコマンドを実行する」ことを意味します。test -r ~/project/my_file.txt が真である(つまり、ファイルが読み取り可能である)場合、echo コマンドが実行されます。
以下の出力が表示されるはずです。
File is readable.
では、存在しないファイルをチェックしてみましょう。
以下のコマンドを入力し、Enter キーを押します。
test -r ~/project/non_existent_file.txt && echo "This won't be printed."
~/project/non_existent_file.txt が存在しないため、test -r は非ゼロの終了ステータス(失敗)を返し、echo コマンドは実行されません。このコマンドからは出力が表示されないはずです。
test コマンドは、Linux でのスクリプト作成における基本的なツールです。-r などのさまざまなオプションの使い方を理解することは、操作を試行する前にファイルの権限と存在をチェックできる堅牢なスクリプトを作成するために重要です。
続ける をクリックして次のステップに進みます。
ls -l で権限を確認する
前のステップでは、test -r を使ってファイルが読み取り可能かどうかを確認しました。今度は、ls コマンドに -l オプションを指定して、ファイルの詳細な権限を確認しましょう。
ls コマンドはディレクトリの内容を一覧表示します。-l オプションは「長い一覧」形式を提供し、これにはファイルの種類、権限、ハードリンクの数、所有者、グループ、サイズ、変更時刻、およびファイル名に関する情報が含まれます。
前のステップで作成した my_file.txt ファイルの権限を見てみましょう。~/project ディレクトリにいることを確認してください。pwd コマンドを使って現在のディレクトリを確認できます。
pwd
/home/labex/project と表示されるはずです。
では、以下のコマンドを入力して Enter キーを押します。
ls -l my_file.txt
次のような出力が表示されます。
-rw-rw-r-- 1 labex labex XX Month XX XX:XX my_file.txt
この出力の最初の部分、つまりファイルの種類と権限を表す部分を分解してみましょう。
-rw-rw-r--
この 10 文字の文字列は、ファイルの権限に関する多くの情報を伝えてくれます。
最初の文字はファイルの種類を示します。
-は通常のファイルを意味します。dはディレクトリを意味します。lはシンボリックリンクを意味します。- (他にも種類がありますが、これらが最も一般的です。)
次の 9 文字は 3 文字ずつ 3 つのセットに分けられます。
- 最初のセット (
rw-) はファイルの 所有者 の権限を示します。 - 2 番目のセット (
rw-) はファイルが所属する グループ の権限を示します。 - 3 番目のセット (
r--) は その他のユーザー(それ以外の全員)の権限を示します。
- 最初のセット (
それぞれの 3 文字のセット内では、
- 最初の文字は 読み取り 権限 (
r) を示します。ハイフン (-) がある場合は、読み取り権限が拒否されています。 - 2 番目の文字は 書き込み 権限 (
w) を示します。ハイフン (-) がある場合は、書き込み権限が拒否されています。 - 3 番目の文字は 実行 権限 (
x) を示します。ハイフン (-) がある場合は、実行権限が拒否されています。
したがって、権限が -rw-rw-r-- の my_file.txt の場合、
- 所有者 (
labex) は読み取り (r) と書き込み (w) の権限を持っていますが、実行 (-) 権限はありません。 - グループ (
labex) は読み取り (r) と書き込み (w) の権限を持っていますが、実行 (-) 権限はありません。 - その他のユーザーは読み取り (
r) 権限を持っていますが、書き込み (-) または実行 (-) 権限はありません。
この出力から、所有者 (labex) が読み取り権限を持っていることが確認できます。これが前のステップで test -r が機能した理由です。
ls -l の出力を理解することは、Linux でファイルやディレクトリを管理し、誰がアクセスできるかを制御するための基本です。
続ける をクリックして次に進みます。
stat でファイルアクセスを調査する
このステップでは、stat コマンドを使用して、ファイルに関する詳細情報を取得します。これには、ファイルのアクセス時刻、変更時刻、状態変更時刻、およびシンボリック形式と数値形式の両方の権限が含まれます。
ls -l は権限の概要を把握するのに便利ですが、stat はファイルのメタデータをより詳細に調べることができます。
~/project ディレクトリに先ほど作成した my_file.txt ファイルに対して stat を使用してみましょう。
以下のコマンドを入力し、Enter キーを押します。
stat ~/project/my_file.txt
次のような出力が表示されます。
File: /home/labex/project/my_file.txt
Size: XX Blocks: X IO Block: XXXX regular file
Device: XXh/XXd Inode: XXXXXXXX Links: X
Access: (0664/-rw-rw-r--) Uid: ( XXXX/ labex) Gid: ( XXXX/ labex)
Access: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Modify: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Change: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Birth: -
出力のいくつかの重要な行を見てみましょう。
File: ファイルの名前。Size: ファイルのサイズ(バイト単位)。Access: (0664/-rw-rw-r--): この行は、権限を 2 つの形式で示しています。0664: これは権限の数値(8 進数)表現です。各桁はそれぞれ所有者、グループ、その他のユーザーの権限を表します。- 所有者の
6:rwx(読み取り = 4、書き込み = 2、実行 = 0)-> 4 + 2 + 0 = 6 - グループの
6:rwx(読み取り = 4、書き込み = 2、実行 = 0)-> 4 + 2 + 0 = 6 - その他のユーザーの
4:rwx(読み取り = 4、書き込み = 0、実行 = 0)-> 4 + 0 + 0 = 4 - 先頭の
0は、通常 8 進数表記を示すために使用されます。
- 所有者の
-rw-rw-r--: これは権限のシンボリック表現で、ls -lで学んだものです。
UidとGid: ファイルの所有者とグループのユーザー ID とグループ ID と、それらの名前。Access、Modify、Change: これらの行は、ファイルのタイムスタンプを示しています。Access: ファイルが最後にアクセス(読み取り)された時刻。Modify: ファイルの内容が最後に変更された時刻。Change: ファイルのメタデータ(権限、所有者、グループなど)が最後に変更された時刻。
stat コマンドは、ファイルのプロパティに関する詳細情報が必要な場合、特にスクリプト作成や権限の問題のトラブルシューティングに非常に便利です。
これで、Linux でファイルの権限とアクセス情報を調べる 3 つの異なる方法 test -r、ls -l、stat を学びました。これらはコマンドラインでファイルを操作するための必須ツールです。
続ける をクリックして、この実験を完了します。
まとめ
この実験では、test コマンドに -r オプションを指定して、Linux でファイルが読み取り可能かどうかを確認する方法を学びました。ファイルを作成し、test -r を && 演算子と組み合わせて使用し、ファイルの読み取り可能性に基づいて条件付きでメッセージを出力する練習を行いました。また、test -r は存在しないファイルに対しては false を返し、それ以降のコマンドが実行されないことを確認しました。このステップでは、シェルスクリプトでプログラム的にファイルの権限を確認する基本的な方法を実証しました。



