はじめに
この実験では、Linux で様々な方法を使ってファイルが実行可能かどうかを判断する方法を学びます。まず、test コマンドと -x オプションを使って実行権限をチェックし、その終了ステータスをどのように解釈するかを理解します。
次に、ls -l コマンドを使って詳細なファイル権限を表示し、実行可能フラグを特定する方法を調べます。最後に、stat コマンドを使ってファイルのアクセス情報を調べ、実行可能性を確認する別の方法を学びます。
test -x で実行可能性をテストする
このステップでは、test コマンドと -x オプションを使ってファイルが実行可能かどうかをチェックする方法を学びます。test コマンドは、条件式を評価するシェルの組み込みコマンドです。-x オプションは、具体的に実行権限をチェックします。
まず、~/project ディレクトリに簡単なテキストファイルを作成しましょう。echo コマンドを使って、my_script.sh という名前のファイルにいくつかのテキストを入れます。
echo "echo 'Hello from the script!'" > ~/project/my_script.sh
では、このファイルが実行可能かどうかをチェックしましょう。デフォルトでは、このように新しいファイルを作成すると、実行権限は付与されません。
test -x コマンドの後にファイルのパスを指定して実行します。
test -x ~/project/my_script.sh
このコマンドを実行した後、テストが成功した場合(つまり、ファイルが実行可能ではない場合)、何も出力されません。もしファイルが実行可能であれば、test -x はステータス 0 を返します。これは、シェルスクリプトでは通常「真」または「成功」と解釈されますが、デフォルトではターミナルに何も表示されません。
test コマンドの結果を確認するには、$? を使って前のコマンドの終了ステータスをチェックできます。終了ステータスが 0 の場合は、テストが真であることを意味し(ファイルが実行可能)、ゼロ以外のステータス(通常は 1)は、テストが偽であることを意味します(ファイルが実行可能ではない)。
echo $?
1 という出力が表示され、my_script.sh は現在実行可能ではないことを示しています。
では、chmod コマンドを使ってファイルを実行可能にしましょう。chmod は、ファイルやディレクトリの権限を変更するために使用されます。+x を使って、ファイルの所有者に実行権限を追加します。
chmod +x ~/project/my_script.sh
では、再度実行可能性をテストしましょう。
test -x ~/project/my_script.sh
そして、終了ステータスを確認します。
echo $?
今度は、出力が 0 になり、ファイルが現在実行可能であることが確認できます。
最後に、スクリプトを実行して出力を確認してみましょう。
~/project/my_script.sh
次のように表示されるはずです。
Hello from the script!
これにより、ファイルを正常に実行可能にして実行できたことが確認できます。
ls -l で権限を確認する
このステップでは、ls -l コマンドを使って詳細なファイル権限を表示する方法を学びます。このコマンドは、長いリスト形式でファイルやディレクトリの様々な属性を表示します。属性には、権限、所有者、サイズ、変更時刻などが含まれます。
もしまだ ~/project ディレクトリにいない場合は、移動しましょう。cd コマンドを使うことができます。
cd ~/project
では、ls -l コマンドを使ってこのディレクトリ内のファイルを一覧表示しましょう。
ls -l
次のような出力が表示されるはずです(日付や時刻などの詳細は異なる場合があります)。
-rwxr-xr-x 1 labex labex 30 <date> <time> my_script.sh
出力の最初の部分、つまりファイル権限を表す -rwxr-xr-x を分解してみましょう。この 10 文字の文字列は、誰がファイルに対して何ができるかについて多くの情報を提供します。
最初の文字はファイルの種類を示します。
-: 通常のファイル(例えば、my_script.sh)d: ディレクトリl: シンボリックリンク
次の 9 文字は 3 文字ずつ 3 つのグループに分けられ、それぞれ次の権限を表します。
- 所有者: ファイルを所有するユーザー(この場合は
labex)。 - グループ: ファイルを所有するグループ(同じく
labex)。 - その他: システム上の他のすべてのユーザー。
それぞれの 3 文字のグループ内で、権限は次のように表されます。
r: 読み取り権限(ファイルの内容を表示できる)w: 書き込み権限(ファイルを変更または削除できる)x: 実行権限(ファイルをプログラムとして実行できる)-: 権限が付与されていないことを示す
したがって、-rwxr-xr-x の場合:
- 所有者 (
labex) はrwx権限を持っています:読み取り、書き込み、実行。 - グループ (
labex) はr-x権限を持っています:読み取りと実行ができますが、書き込みはできません。 - その他のユーザーは
r-x権限を持っています:読み取りと実行ができますが、書き込みはできません。
この出力は、前のステップで chmod +x を使用した後、所有者 (labex) が my_script.sh に対して実行権限 (x) を持っていることを確認しています。
また、ls -l を使ってディレクトリの権限を確認することもできます。たとえば、~/project ディレクトリ自体の権限を見てみましょう。
ls -ld ~/project
-d オプションは、ls にディレクトリ自体を一覧表示するように指示します。出力は次のようになるかもしれません。
drwxr-xr-x 2 labex labex 4096 <date> <time> /home/labex/project
ここで、最初の文字 d はディレクトリであることを示しています。権限 rwxr-xr-x は次の意味を持ちます。
- 所有者 (
labex) はディレクトリに対して読み取り、書き込み、実行の権限を持っています。ディレクトリに対する「実行」権限は、ディレクトリに入り、その内容にアクセスできることを意味します。 - グループ (
labex) とその他のユーザーは、ディレクトリに対して読み取りと実行の権限を持っていますが、書き込みはできません。
ls -l の出力を理解することは、Linux でファイルと権限を操作する上で基本的なことです。
stat でファイルアクセスを調べる
このステップでは、stat コマンドを使ってファイルに関する詳細情報を取得します。この情報には、ファイルのアクセス時刻、変更時刻、状態変更時刻、および ls -l よりも構造化された形式の権限情報が含まれます。
stat コマンドは、ファイルの状態を表示します。スクリプト作成や正確なタイムスタンプが必要な場合に特に便利です。
前のステップで作成した my_script.sh ファイルに対して stat を使用してみましょう。~/project ディレクトリにいることを確認するか、ファイルの完全なパスを指定してください。
stat ~/project/my_script.sh
次のような出力が表示されるはずです。
File: /home/labex/project/my_script.sh
Size: 30 Blocks: 8 IO Block: 4096 regular file
Device: <device_id> Inode: <inode_number> Links: 1
Access: (<permissions>/-rwxr-xr-x) Uid: ( 5000/ labex) Gid: ( 5000/ labex)
Access: <date> <time>.<nanoseconds> +<timezone_offset>
Modify: <date> <time>.<nanoseconds> +<timezone_offset>
Change: <date> <time>.<nanoseconds> +<timezone_offset>
Birth: -
出力のいくつかの重要な行を見てみましょう。
File: ファイルの名前とパス。Size: ファイルのサイズ(バイト単位)。Access: (<permissions>/-rwxr-xr-x): この行は、ファイルの権限を 8 進数形式(例:0755はrwxr-xr-xに対応)とls -lで見たシンボリック形式の両方で表示します。また、ファイルの所有者とグループのユーザー ID (Uid) とグループ ID (Gid) も表示します。Access: ファイルが最後にアクセス(読み取り)された時刻。Modify: ファイルの内容が最後に変更された時刻。Change: ファイルのメタデータ(権限、所有者など)が最後に変更された時刻。Birth: ファイルの作成時刻(すべてのファイルシステムで利用できるとは限りません)。
stat コマンドは、ls -l と比較して、ファイル情報をより詳細に表示します。タイムスタンプや権限の数値表現を調べる必要がある場合に特に役立ちます。
ディレクトリに対しても stat を使用できます。
stat ~/project
出力は似ていますが、File の種類がディレクトリであることを示します。
~/project ディレクトリ内のさまざまなファイルやディレクトリに対して stat を試して、出力の違いを確認してみてください。
まとめ
この実験では、Linux で test -x コマンドを使用してファイルが実行可能かどうかを確認する方法を学びました。簡単なスクリプトファイルを作成し、test -x を使用して終了ステータス (echo $?) を確認し、最初の非実行可能状態(終了ステータス 1)を確認しました。その後、chmod +x を使用して実行権限を追加し、test -x と echo $? で変更を確認し、終了ステータス 0 を確認しました。
また、ファイル権限を確認する代替方法も調べました。ls -l を使用して、権限文字列、特に 'x' 文字を解釈し、実行可能ファイルを識別する方法を学びました。最後に、stat コマンドを使用して、アクセス権限を含む詳細なファイル情報を表示し、実行可能性を確認する別の方法を学びました。



