はじめに
この実験では、シェルでさまざまなファイルテストを実行する方法を学びます。ファイルテストは、ファイルシステム内のファイルやディレクトリの属性を確認するために不可欠なツールです。この実験を終えるまでに、一般的なファイルテストコマンドとその使用方法に習熟することができます。これは、Linux 環境でファイルを扱う上で非常に重要な基礎スキルとなります。
この実験では、シェルでさまざまなファイルテストを実行する方法を学びます。ファイルテストは、ファイルシステム内のファイルやディレクトリの属性を確認するために不可欠なツールです。この実験を終えるまでに、一般的なファイルテストコマンドとその使用方法に習熟することができます。これは、Linux 環境でファイルを扱う上で非常に重要な基礎スキルとなります。
ファイル操作を始める前に、作業環境を理解することが重要です。Linux では、常に特定のディレクトリ内で作業を行うため、ファイルシステム上の現在地を把握しておく必要があります。
WebIDE でターミナルを開きます。ここにコマンドを入力していきます。
test_file.txt という名前の新しいファイルを作成します。
touch test_file.txt
touch コマンドは空のファイルを作成するために使用されます。ファイルが既に存在する場合、内容は変更せずにファイルのタイムスタンプ(更新日時)のみを更新します。
ファイルに内容を追加します。
echo "This is a test file for our lab." > test_file.txt
このコマンドは、echo を使ってテキストを出力し、> を使ってその出力をファイルにリダイレクト(書き込み)します。> を使用すると、ファイル内の既存の内容がすべて上書きされるため、注意が必要です。
ファイルの内容を確認します。
cat test_file.txt
cat は「concatenate(連結する)」の略ですが、ファイルの内容を表示するためによく使われます。「This is a test file for our lab.」というメッセージが表示されるはずです。
もし間違えてしまったり、最初からやり直したい場合は、いつでも rm test_file.txt でファイルを削除して、ステップ 1 からやり直すことができます。
ファイルを作成できたので、次はファイルが存在するかどうかを確認する方法を学びましょう。これは、ファイルに対して操作を行う前に、シェルスクリプトでよく行われる処理です。
file_exists.sh という名前の新しいスクリプトファイルを作成します。
touch file_exists.sh
ファイルに以下の内容を追加します。
#!/bin/bash
filename="test_file.txt"
if [ -e "$filename" ]; then
echo "$filename exists"
else
echo "$filename does not exist"
fi
内容を解説します:
#!/bin/bash はシバン(shebang)と呼ばれます。これは、このファイルが bash スクリプトであることをシステムに伝えます。filename に "test_file.txt" を代入します。if 文でファイルの存在を確認します。-e は、ファイルが存在する場合に真(true)を返すテスト演算子です。echo でメッセージを表示します。ファイルを保存してエディタを閉じます。
スクリプトに実行権限を付与します。
chmod +x file_exists.sh
スクリプトを実行します。
./file_exists.sh
「test_file.txt exists」という出力が表示されるはずです。
次に、存在しないファイルでテストしてみましょう。まず、テストファイルの名前を変更します。
mv test_file.txt non_existent.txt
このコマンドは test_file.txt を non_existent.txt にリネームします。
元のファイル名 "test_file.txt" をチェックするようにスクリプトを修正(または確認)します。
nano file_exists.sh
filename 変数が "test_file.txt" になっていることを確認してください。
再度スクリプトを実行します。
./file_exists.sh
「test_file.txt does not exist」という出力が表示されるはずです。
このスクリプトは、ファイルの存在を確認する方法を示しています。これは、スクリプトが存在するかどうかわからないファイルを扱う際に非常に重要です。
ファイルの存在確認と同様に、ディレクトリ(フォルダ)が存在するかどうかも確認できます。これは、スクリプトで特定のディレクトリが必要な場合に役立ちます。
dir_exists.sh という名前の新しいスクリプトファイルを作成します。
touch dir_exists.sh
ファイルに以下の内容を追加します。
#!/bin/bash
dirname="test_directory"
if [ -d "$dirname" ]; then
echo "$dirname exists"
else
echo "$dirname does not exist"
fi
このスクリプトはファイルの存在確認スクリプトとよく似ていますが、-e の代わりに -d を使用しています。-d テストは、特に対象がディレクトリであるかどうかを確認します。
ファイルを保存してエディタを閉じます。
スクリプトに実行権限を付与します。
chmod +x dir_exists.sh
スクリプトを実行します。
./dir_exists.sh
「test_directory does not exist」という出力が表示されるはずです。
それでは、ディレクトリを作成してから再度スクリプトを実行してみましょう。
mkdir test_directory
./dir_exists.sh
今度は「test_directory exists」という出力が表示されるはずです。
mkdir は新しいディレクトリを作成するコマンドです。
このスクリプトは、ディレクトリの存在を確認する方法を示しています。これは、ディレクトリの作成、変更、削除を行うスクリプトにおいて特に有用です。
Linux では、すべてのファイルとディレクトリに、誰が読み取り、書き込み、実行できるかを決定する権限(パーミッション)が設定されています。このステップでは、ファイル権限、特にファイルが読み取り可能かどうかを確認する方法を学びます。
まず、ファイルの名前を元の名前に戻しましょう。
mv non_existent.txt test_file.txt
file_readable.sh という名前の新しいスクリプトファイルを作成します。
touch file_readable.sh
ファイルに以下の内容を追加します。
#!/bin/bash
filename="test_file.txt"
if [ -r "$filename" ]; then
echo "You have read permission for $filename"
else
echo "You do not have read permission for $filename"
fi
このスクリプトでは -r テストを使用しています。これは、現在のユーザーがそのファイルを読み取れるかどうかを確認します。
ファイルを保存してエディタを閉じます。
スクリプトに実行権限を付与します。
chmod +x file_readable.sh
スクリプトを実行します。
./file_readable.sh
「You have read permission for test_file.txt」という出力が表示されるはずです。
次に、読み取り権限を削除して、再度スクリプトを実行してみましょう。
chmod -r test_file.txt
./file_readable.sh
今度は「You do not have read permission for test_file.txt」という出力が表示されるはずです。
chmod -r は、ファイルから読み取り権限(read permission)を削除します。
読み取り権限を元に戻します。
chmod +r test_file.txt
ファイルを読み取れない状態のまま放置しないよう、権限を元に戻しておくことが重要です。
このスクリプトは、ファイルの権限を確認する方法を示しています。ファイル権限の理解と管理は、システムのセキュリティとスクリプトの正常な動作のために不可欠です。
この実験では、シェルにおける基本的なファイルシステム操作を学びました。ファイルやディレクトリの存在確認、およびファイル権限をテストするスクリプトを作成しました。これらのスキルは、Linux 環境でファイルやディレクトリを扱う際の基礎であり、より複雑なシェルスクリプトを作成するための土台となります。
学んだ内容:
これらのスキルは、Linux システムを使い続け、より高度なシェルスクリプトを開発していく上で非常に役立ちます。スクリプト内でのエラーを避けるために、操作を行う前には必ずファイルやディレクトリの存在を確認することを忘れないでください。また、機密データやシステムファイルを扱う際は、常にファイル権限に注意を払うようにしましょう。
さらに学習を進めるには、より高度なファイルテストを調べたり、ループや関数といった他のシェルスクリプトの構造を学んだりして、これらを組み合わせてより複雑で強力なスクリプトを作成することに挑戦してみてください。