ウェブサイト検索

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


「シンボリック リンクのレベルが多すぎます」というエラーは通常、シンボリック リンクが直接または間接的にそれ自体を指し、無限ループを作成する問題を示します。このループにより、コンテンツの読み取りやリスト表示など、シンボリックリンクに関連する操作が完了できなくなります。このエラーを防ぐには、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
  4. このコマンドは、../testdir/testfile を指すシンボリックリンク testfiletestdir 内に作成しようとします。参照はシンボリックリンク自体を指し、ループを形成します。データヒューズ="22189504506">

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

    $ cat testdir/testfile

  6. シンボリック リンクのレベルが多すぎるエラーを引き起こす問題のあるシンボリック リンクの作成例
    これにより、次の出力が表示されます: 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

    これにより、「これはテスト ファイルです。」と正しく出力されます。

  4. 絶対パスを使用したシンボリックリンクの正しい作成

相対パスの使用:

  1. あるいは、相対パスを賢明に使用してください。

    $ ln -s ../testfile /tmp/symlink_test/testdir/testfile3
  2. これは、2 レベル上に移動してから testfile に移動する相対パスを使用して、testdir 内の testfile3testfile にポイントします。

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

    $ cat testdir/testfile3

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

  4. 相対パスを使用したシンボリックリンクの正しい作成

シンボリック リンクの作成の簡素化: 正しいパス構文の覚え方 – 著者のメモ

シンボリック リンクを扱い、相対パスまたは絶対パスを使用するかどうかに関係なく、シンボリック リンクを正しく使用するための私の最善の戦略は、次の構文を覚えておくことです。

$ 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 スクリプト チュートリアルの一部として「相対パスと絶対パス」セクションを参照することを検討してください。

結論

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

関連記事: