ウェブサイト検索

修正方法:シンボリックリンクのレベルが多すぎるエラー


「シンボリックリンクのレベルが多すぎる」というエラーは、通常、シンボリックリンクが直接的または間接的に自分自身を指していて、無限ループを作成している問題を示しています。このループにより、シンボリックリンクに関わる操作、例えば内容の読み取りやリスト表示などの完了が妨げられます。このエラーを防ぐためには、Linuxでシンボリックリンクを作成する際にlnコマンドを正しく使用することが重要です。

このチュートリアルでは、あなたは学びます:

  • 「シンボリックリンクの階層が多すぎる」というエラーの原因は何ですか?
  • 絶対パスと相対パスを使用してシンボリックリンクを正しく作成する方法
  • シンボリックリンクのループを診断し修正する方法

「シンボリックリンクの階層が多すぎます」というエラーの理解と防止

このエラーの原因は何ですか?

このエラーは、シンボリックリンクが自分自身を指している(直接または別のシンボリックリンクを通じて)場合に発生し、解決できない参照ループを作ります。この状況は、出発点に戻る一連の指示を与えられることに例えられ、どこにも行かないことになります。

問題のあるシンボリックリンク作成の例:

  1. ディレクトリを作成し、そのディレクトリに移動します:

    mkdir /tmp/symlink_test
    cd /tmp/symlink_test
  2. ファイルとディレクトリを作成します:

    echo "This is a test file." > testfile
    mkdir testdir
  3. testdir に自分自身を指すシンボリックリンクを作成する(誤り):

    ln -s testfile testdir/testfile

    このコマンドは、testdir内にtestfileというシンボリックリンクを作成しようとします。このリンクは../testdir/testfileを指しています。この参照はシンボリックリンク自体に戻り、ループを形成します。

  4. シンボリックリンクにアクセスしようとするとエラーが発生します:

    cat testdir/testfile

  5. これにより出力されます: cat: testdir/config: シンボリックリンクが多すぎます

シンボリックリンクの正しい作成方法:

このエラーを避けるためには、シンボリックリンクのターゲットが正しく意図された宛先を指していることを確認し、シンボリックリンク自体やそれに至る別のシンボリックリンクを指さないようにする必要があります。

絶対パスの使用:

  1. 絶対パスを使用してシンボリックリンクを作成します:

    ln -s /tmp/symlink_test/testfile /tmp/symlink_test/testdir/testfile2
  2. これにより、testdirに絶対に/tmp/symlink_test/testfileを指すシンボリックリンクtestfile2が作成されます。

  3. このシンボリックリンクにアクセスすると、testfile2の内容が正しく表示されるはずです:

    cat /tmp/symlink_test/testdir/testfile2

    これはテストファイルです。

相対パスの使用:

  1. あるいは、相対パスを賢く使ってください:

    ln -s ../testfile /tmp/symlink_test/testdir/testfile3
  2. これは、相対パスを使用して、2つのレベル上に移動し、その後testfileに移動することで、testdir内のtestfile3をtestfileに指し示しています。

  3. シンボリックリンクを確認中:

    cat testdir/testfile3

    これは正しく出力されます: これはテストファイルです。

シンボリックリンクの作成を簡素化: 正しいパス構文を覚える - 著者のノート

シンボリックリンクを扱い、相対パスまたは絶対パスを正しく使用することを忘れないための私の最良の戦略は、この構文を覚えることです。

ln -s <path to original file from the target directory whether relative or absolute> <target file or directory> 

では、/home/linuxconfig/ ディレクトリ内のこの例を考えてみましょう:

mkdir test
echo "linuxconfig.org" > orig_file
ln -s ../orig_file test/
ln -s ../orig_file test/sym_file1
ln -s /home/linuxconfig/../../tmp/../home/linuxconfig/orig_file test/sym_file2
ln -s ../../../home/linuxconfig/orig_file test/sym_file3
tree test/

上記の例からわかるように、相対パスと絶対パスを組み合わせることもでき、シンボリックリンクは元のファイルを正しく指している限り機能します。これは理解しにくい概念ですが、最初の引数はターゲットディレクトリから元のファイルへのパスと考えてください。ターゲットディレクトリにいる場合、lnコマンドに渡す最初の引数のパスはそこから正しくなければなりません。相対パスと絶対パスについてより良い理解を得るために、私たちのbashスクリプトチュートリアルの一部として相対パス vs 絶対パスのセクションを参照してください。

結論

シンボリックリンクを正しく管理することは、機能的なファイルシステム構造を維持するために不可欠です。シンボリックリンクのターゲットを絶対パスまたは相対パスのいずれかを通じて適切に設定する方法を理解することで、「シンボリックリンクが多すぎます」というような無限解決ループに関連するエラーを防ぐことができます。常にシンボリックリンクが正しいターゲットを指していることを確認し、このエラーに遭遇した場合は既存のリンクを見直してください。

関連記事: