修正方法: シンボリック リンクのレベルが多すぎるエラー
「シンボリック リンクのレベルが多すぎます」というエラーは通常、シンボリック リンクが直接または間接的にそれ自体を指し、無限ループを作成する問題を示します。このループにより、コンテンツの読み取りやリスト表示など、シンボリックリンクに関連する操作が完了できなくなります。このエラーを防ぐには、Linux で ln
コマンドを適切に使用してシンボリック リンクを作成する方法を理解することが重要です。
このチュートリアルでは次のことを学びます:
- 「シンボリック リンクのレベルが多すぎます」エラーの原因
- 絶対パスと相対パスを使用してシンボリック リンクを適切に作成する方法
- シンボリック リンクのループを診断して修正する方法
「シンボリック リンクのレベルが多すぎます」エラーの理解と防止
このエラーの原因は何ですか?
このエラーは、シンボリック リンクが (直接または別のシンボリック リンクを通じて) それ自体を参照し、解決できない参照ループを作成するときに発生します。この状況は、出発点にループバックしてどこにも導けない一連の指示を与えられたことに似ています。
問題のあるシンボリックリンク作成の例:
-
ディレクトリを作成し、そこに変更します。
$ mkdir /tmp/symlink_test $ cd /tmp/symlink_test
ファイルとディレクトリを作成します。
$ echo "This is a test file." > testfile $ mkdir testdir
testdir
内にそれ自体を指すシンボリック リンクを作成します (誤り)。$ ln -s testfile testdir/testfile
シンボリックリンクにアクセスしようとすると、エラーが発生します。
$ cat testdir/testfile
このコマンドは、../testdir/testfile
を指すシンボリックリンク testfile
を testdir
内に作成しようとします。参照はシンボリックリンク自体を指し、ループを形成します。データヒューズ="22189504506">
これにより、次の出力が表示されます: cat: testdir/config: シンボリック リンクのレベルが多すぎます
シンボリックリンクを正しく作成する:
このエラーを回避するには、シンボリックリンクのターゲットが意図した宛先を正しく指しており、シンボリックリンク自体や、シンボリックリンクにつながる別のシンボリックリンクに戻っていないことを確認する必要があります。
絶対パスの使用:
絶対パスを使用してシンボリック リンクを作成します。
$ ln -s /tmp/symlink_test/testfile /tmp/symlink_test/testdir/testfile2
-
このシンボリックリンクにアクセスすると、
testfile2
の内容が正しく表示されるようになります。$ cat /tmp/symlink_test/testdir/testfile2
これにより、「これはテスト ファイルです。」と正しく出力されます。
これにより、testdir
内に /tmp/symlink_test/testfile
を絶対に指すシンボリックリンク testfile2
が作成されます。
相対パスの使用:
あるいは、相対パスを賢明に使用してください。
$ ln -s ../testfile /tmp/symlink_test/testdir/testfile3
シンボリックリンクを確認する:
$ cat testdir/testfile3
これにより、正しく出力されます: これはテスト ファイルです。
これは、2 レベル上に移動してから testfile
に移動する相対パスを使用して、testdir
内の testfile3
を testfile
にポイントします。
シンボリック リンクの作成の簡素化: 正しいパス構文の覚え方 – 著者のメモ
シンボリック リンクを扱い、相対パスまたは絶対パスを使用するかどうかに関係なく、シンボリック リンクを正しく使用するための私の最善の戦略は、次の構文を覚えておくことです。
$ 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 スクリプト チュートリアルの一部として「相対パスと絶対パス」セクションを参照することを検討してください。
結論
機能的なファイル システム構造を維持するには、シンボリック リンクを正しく管理することが不可欠です。絶対パスまたは相対パスを使用してシンボリックリンクのターゲットを適切に設定する方法を理解することで、「シンボリック リンクのレベルが多すぎます」などの無限解決ループに関連するエラーを防ぐことができます。このエラーが発生した場合は、シンボリックリンクが正しいターゲットを指していることを常に確認し、既存のリンクを修正してください。