Поиск по сайту:

Как исправить: ошибка «Слишком много уровней символических ссылок»


Ошибка «Слишком много уровней символических ссылок» обычно указывает на проблему, когда символическая ссылка прямо или косвенно указывает на себя, создавая бесконечный цикл. Этот цикл предотвращает завершение операций, связанных с символической ссылкой, таких как чтение или просмотр содержимого. Понимание того, как правильно использовать команду ln в Linux для создания символических ссылок, имеет решающее значение для предотвращения этой ошибки.

В этом уроке вы узнаете:

  • Что вызывает ошибку «Слишком много уровней символических ссылок»
  • Как правильно создавать символические ссылки, используя абсолютные и относительные пути
  • Как диагностировать и исправлять циклы в символических ссылках

Понимание и предотвращение ошибки «Слишком много уровней символических ссылок»

Что вызывает эту ошибку?

Эта ошибка возникает, когда символическая ссылка ссылается сама на себя (напрямую или через другую символическую ссылку), что создает неразрешимый цикл ссылок. Эта ситуация аналогична серии направлений, которые возвращаются к исходной точке и никуда не ведут.

Пример проблемного создания символической ссылки:

  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. Эта команда пытается создать символическую ссылку testfile в testdir, которая указывает на ../testdir/testfile. Ссылка указывает на саму символическую ссылку, образуя цикл. данные-предохранитель="22189504506">

  5. Попытка получить доступ к символической ссылке приводит к ошибке:

    $ cat testdir/testfile

  6. Пример проблемного создания символической ссылки, вызывающего ошибку: слишком много уровней символических ссылок
    Это выведет: cat: testdir/config: Слишком много уровней символических ссылок

Правильное создание символических ссылок:

Чтобы избежать этой ошибки, вы должны убедиться, что цель символической ссылки правильно указывает на предполагаемый пункт назначения, а не на саму символическую ссылку или другую символическую ссылку, ведущую к ней.

Использование абсолютных путей:

  1. Создайте символическую ссылку, используя абсолютный путь:

    $ ln -s /tmp/symlink_test/testfile /tmp/symlink_test/testdir/testfile2
  2. Это создаст символическую ссылку testfile2 в testdir, которая абсолютно указывает на /tmp/symlink_test/testfile.

  3. При доступе к этой символической ссылке теперь должно корректно отображаться содержимое testfile2:

    $ cat /tmp/symlink_test/testdir/testfile2

    Будет правильно выведено: Это тестовый файл.

  4. Правильное создание символических ссылок с абсолютным путем

Использование относительных путей:

  1. Альтернативно, используйте относительный путь с умом:

    $ ln -s ../testfile /tmp/symlink_test/testdir/testfile3
  2. Это указывает testfile3 в testdir на testfile, используя относительный путь, ведущий на два уровня вверх, а затем на testfile.

  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.

Заключение

Правильное управление символическими ссылками важно для поддержания функциональной структуры файловой системы. Понимая, как правильно установить цели символических ссылок через абсолютные или относительные пути, вы можете предотвратить ошибки, связанные с бесконечными циклами разрешения, такие как «Слишком много уровней символических ссылок». Всегда проверяйте, что ваши символические ссылки указывают на правильные цели, и исправляйте все существующие ссылки, если вы столкнулись с этой ошибкой.

Статьи по данной тематике: