はじめに
この実験では、Linux のファイルがシンボリックリンクかどうかを判断する方法を学びます。これを達成するための 3 つの異なる方法を探索します。
まず、test
コマンドと -L
オプションを使用して、プログラム的にファイルの種類をチェックします。次に、ls -l
コマンドの出力を調べることで、リンク情報を検証します。最後に、readlink
コマンドを使用して、シンボリックリンクが指すターゲットファイルまたはディレクトリを解決する方法を学びます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Linux のファイルがシンボリックリンクかどうかを判断する方法を学びます。これを達成するための 3 つの異なる方法を探索します。
まず、test
コマンドと -L
オプションを使用して、プログラム的にファイルの種類をチェックします。次に、ls -l
コマンドの出力を調べることで、リンク情報を検証します。最後に、readlink
コマンドを使用して、シンボリックリンクが指すターゲットファイルまたはディレクトリを解決する方法を学びます。
このステップでは、test
コマンドと -L
オプションを使用して、ファイルがシンボリックリンクかどうかをテストする方法を学びます。
シンボリックリンク(またはシンリンク)は、別のファイルまたはディレクトリを指す特殊な種類のファイルです。Windows のショートカットのようなものと考えてください。シンボリックリンクにアクセスすると、実際にはそれが指すファイルまたはディレクトリにアクセスしています。
まず、簡単なファイルを作成しましょう。~/project
ディレクトリにいることを確認してください。
echo "This is the original file." > original_file.txt
次に、original_file.txt
へのシンボリックリンクを作成しましょう。シンボリックリンクの名前は my_symlink
とします。
ln -s original_file.txt my_symlink
ln
: リンクを作成するために使用されるコマンド。-s
: このオプションは、ln
にシンボリックリンク(ハードリンクではなく)を作成するよう指示します。original_file.txt
: シンボリックリンクが指すターゲットファイル。my_symlink
: 作成するシンボリックリンクの名前。これで、test
コマンドを使用して、my_symlink
がシンボリックリンクかどうかをチェックできます。test
コマンドは、ファイルの種類をチェックしたり、値を比較したりするために使用されます。直接出力は生成されませんが、終了ステータスが成功(0)または失敗(0 以外)を示します。
test
を echo
と組み合わせて結果を確認できます。
test -L my_symlink && echo "my_symlink is a symbolic link" || echo "my_symlink is NOT a symbolic link"
test -L my_symlink
: これは my_symlink
がシンボリックリンクかどうかをチェックします。&&
: これは論理 AND 演算子です。&&
の前のコマンドが成功する(終了ステータス 0)場合、&&
の後のコマンドが実行されます。||
: これは論理 OR 演算子です。||
の前のコマンドが失敗する(終了ステータス 0 以外)場合、||
の後のコマンドが実行されます。my_symlink
は確かにシンボリックリンクなので、出力は次のようになります。
my_symlink is a symbolic link
次に、通常のファイル、例えば original_file.txt
をテストしてみましょう。
test -L original_file.txt && echo "original_file.txt is a symbolic link" || echo "original_file.txt is NOT a symbolic link"
出力は次のようになります。
original_file.txt is NOT a symbolic link
これにより、test -L
がシンボリックリンクを正しく識別することが確認されました。
このステップでは、ls -l
コマンドを使用してシンボリックリンクとそのターゲットを識別する方法を学びます。
ls
コマンドは、ファイルやディレクトリを一覧表示するために使用されます。-l
オプションは「詳細一覧」形式を提供し、各ファイルに関する詳細情報、例えばパーミッション、所有者、サイズ、変更時刻などが含まれます。
シンボリックリンクに対して ls -l
を使用すると、リンク自体が表示され、それが指すものも示されます。
前のステップで original_file.txt
と my_symlink
を作成した ~/project
ディレクトリにいることを確認してください。
次に、ls -l
コマンドを実行します。
ls -l
以下のような出力が表示されるはずです。
total 4
-rw-rw-r-- 1 labex labex 25 Feb 28 10:00 original_file.txt
lrwxrwxrwx 1 labex labex 15 Feb 28 10:00 my_symlink -> original_file.txt
my_symlink
の出力を分解してみましょう。
l
は、これがシンボリックリンクであることを示しています。通常のファイルの場合は -
になります。rwxrwxrwx
) は、シンボリックリンクではしばしば全パーミッションとして表示されますが、実際のパーミッションはターゲットファイルによって決まります。1
です。labex
です。15
) は、ターゲットパス (original_file.txt
) の文字数です。my_symlink
: シンボリックリンクの名前。-> original_file.txt
: この部分は、my_symlink
が original_file.txt
を指していることを明確に示しています。これを original_file.txt
の出力と比較してみましょう。
-
は、これが通常のファイルであることを示しています。rw-rw-r--
) は、誰がファイルを読み取り、書き込み、実行できるかを示しています。1
) は、このファイルのデータを指すハードリンクの数を示しています。25
) は、ファイル内容の実際のサイズ(バイト)です。ls -l
を使用することは、シンボリックリンクを迅速に識別し、それがどこを指しているかを確認するための非常に一般的な方法です。
このステップでは、readlink
コマンドを使用してシンボリックリンクのターゲットを見つける方法を学びます。
ls -l
は視覚的な概要を把握するのに便利ですが、readlink
コマンドはシンボリックリンクを解決し、そのターゲットパスを出力するように特別に設計されています。これは、スクリプト内で、または他のファイル情報を必要とせずにターゲットパスだけが必要な場合に特に有用です。
~/project
ディレクトリにいることを確認してください。
前のステップで作成したシンボリックリンク my_symlink
に対して readlink
コマンドを使用します。
readlink my_symlink
出力は、シンボリックリンクが指すパスになります。
original_file.txt
これにより、my_symlink
が実際に original_file.txt
を指していることが確認されます。
readlink
コマンドには便利なオプション -f
があり、これはすべてのシンボリックリンクを再帰的にたどり、最終的なターゲットの絶対パスに解決します。これは、シンボリックリンクのチェーンがある場合に役立ちます。
my_symlink
を指す別のシンボリックリンクを作成しましょう。
ln -s my_symlink another_link
ここで、-f
オプションを使用せずに readlink
を another_link
に対して使用すると、直近のターゲットが表示されます。
readlink another_link
出力:
my_symlink
しかし、another_link
に対して readlink -f
を使用すると、チェーン (another_link
-> my_symlink
-> original_file.txt
) をたどり、最終的なターゲットの絶対パスが表示されます。
readlink -f another_link
出力:
/home/labex/project/original_file.txt
これは、元のファイルへの完全なパスを示しています。readlink -f
コマンドは、リンクが他のリンクの中にネストされている場合でも、リンクの最終的な目的地を見つけるのに非常に強力です。
これで、シンボリックリンクを操作する 3 つの方法を学びました。test -L
を使用してファイルがリンクかどうかをチェックする方法、ls -l
を使用してリンクの詳細とターゲットを確認する方法、そして readlink
を使用してターゲットパスを解決する方法です。
この実験では、Linux でファイルがシンボリックリンクかどうかを確認する方法を学びました。まず、通常のファイルとそれを指すシンボリックリンクを作成しました。次に、test
コマンドと -L
オプションを使用して、指定されたファイルがシンボリックリンクかどうかをプログラム的に判断し、その終了ステータスを論理演算子 (&&
と ||
) と組み合わせて結果を表示する方法を確認しました。
また、ls -l
コマンドを使用してシンボリックリンクを視覚的に検証する方法も学びました。このコマンドは、パーミッションフィールドの先頭に 'l' を表示し、リンクのターゲットを示します。最後に、readlink
コマンドを使ってシンボリックリンクのターゲットパスを解決する方法を調べ、スクリプトや自動化におけるその有用性を理解しました。