Linux слишком много уровней символьных ссылок

Обновлено: 08.07.2024

и Linux не работает.

любая помощь очень ценится

я думаю, вы как-то закончили с

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

чтобы решить эту проблему, мы должны знать, что /bin/sh было раньше, обычно это указывает на bash или dash . Какой дистрибутив Linux вы используете?

есть другие оболочки, установленные нормально, как dash или zsh , но как система ищет sh при запуске я не вижу способа использовать их без внешней помощи.

я думаю, что вам нужно будет загрузить живую систему с компакт-диска или подключить жесткий диск к другому компьютеру;
И оттуда смонтируйте корневой диск и исправьте ссылку.
Если раковина была действительно удален "силой" в ls -sf , вам нужно откуда-то получить двоичный файл оболочки.

вы уверены насчет команды? В каком каталоге ты их?



Что такое символические и жесткие ссылки в Linux. Чем они отличаются. Как создавать ссылки. Использование команды ln.

Что такое ссылка на файл в Linux

Ссылка на файл в Linux — это указатель на файл. Если проводить аналогию с Windows, то ссылки чем-то похожи на ярлыки. То есть вы создаете ссылку, которая указывает на какой-либо файл или директорию, и можете разместить эту ссылку в другом каталоге. Обращаясь к такой ссылке, вы будете обращаться к настоящему файлу или каталогу.

Ссылки в Linux бывают двух типов: символические и жесткие. Не смотря на то, что оба типа называются ссылками, они имеют существенные отличия друг от друга. Поэтому очень важно понимать, как создавать и использовать тот или иной тип ссылок.

Что такое символические ссылки

Символическая ссылка (symbolic link) — это специальный файл, который является ссылкой на другой файл или каталог (их еще называют целевым файлом, целевым каталогом).

Символические ссылки также называют символьными, мягкими ссылками (soft links) или сим-ссылками (sym-link).

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

Возвращаясь к аналогии с ярлыками в Windows, символические ссылки это своего рода ярлыки на файлы. Можно создавать несколько символических ссылок на один файл и эти ссылки могут иметь разные имена.

Связь между символической ссылкой и файлом, на который она указывает, является «мягкой». Если удалить символическую ссылку, то файл, на который она указывает, не удаляется.

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

При создании символических ссылок можно указывать относительный путь до целевого файла. В таком случае ссылка считает, что относительный путь указан относительно каталога, в котором создана сама ссылка (но не относительно каталога, из которого она была создана).


Схематично отношение между файлом, символической ссылкой и данными, которые хранятся в файле, можно показать следующим образом:

Что такое жесткие ссылки

Жесткая ссылка (hard link) является своего рода синонимом для существующего файла. Когда вы создаете жесткую ссылку, создается дополнительный указатель на существующий файл, но не копия файла.

Жесткие ссылки выглядят в файловой структуре как еще один файл. Если вы создаете жесткую ссылку в том же каталоге, где находится целевой файл, то они должны иметь разные имена. Жесткая ссылка на файл должна находится в той же файловой системе, где и другие жесткие ссылки на этот файл.

Жесткие ссылки нельзя создавать для директорий.

Жесткая ссылка не может указывать на несуществующий файл.

Жесткие ссылки появились раньше, чем символические, но сейчас уже устаревают. В повседневной работе жесткие ссылки используются редко.


Схематично отношение между исходным файлом, жесткой ссылкой и данными можно показать следующей схемой:

Отличия символических ссылок от жестких

Кратко подведем итог, написанного выше.

Символическая ссылка:

  • Указывает на целевой файл или каталог. Фактически является небольшим файлом, содержащим путь до целевого файла.
  • Не содержит внутри себя содержимого самого файла. Содержит путь к целевому файлу.
  • Имеет собственные права доступа, которые не распространяются на целевой файл.
  • Удаление / переименование / перемещение целевого файла не обновляет автоматически ссылку. Ссылка начинает указывать на несуществующий файл, становится неработающей.
  • Изменение прав доступа у целевого файла не обновляет права доступа у ссылки.
  • Может быть создана для директории.
  • Ссылка и целевой файл имеют разные файловые индексы (inode) в файловой системе.
  • Может указывать на несуществующий файл.
  • Символическая ссылка может использовать относительный путь до целевого файла.

Жесткая ссылка:

  • Является своего рода еще одним именем на файл.
  • Не может указывать на директорию.
  • Нельзя создавать жесткие ссылки между файлами разных файловых систем.
  • Не может указывать на несуществующий файл.
  • Жесткая ссылка и файл, для которого она создавалась, имеют одинаковые индексы (inode) в файловой системе.

Как создавать ссылки в Linux. Команда ln

Для создания ссылок в Linux используется команда ln (от слова link).

Синтаксис команды ln :

Обычно используется только одна опция -s . Полный список опций можно получить, выполнив команду man ln.

Создание символических ссылок

Чтобы создать символическую ссылку, нужно выполнить команду ln с опцией -s :

Например, создадим в текущем каталоге символическую ссылку с именем mylink на файл /home/pingvinus/myfile :

Выполнив команду ls -li , можно увидеть, что ссылка myfile указывает на файл /home/pingvinus/myfile

Обратите внимание, что ссылка и целевой файл имеют разные inode (792300 и 787622. См. число в начале строки).


Пример создания и использования символьной ссылки (при создании ссылки используется относительный путь до целевого файла, если такую ссылку переместить, то она будет невалидна):

Создание жестких ссылок

Чтобы создать жесткую ссылку нужно использовать команду ln без опции -s .

Например, создадим жесткую ссылку с именем hardlinktofile на файл myfile.txt :

Выведем список файлов:

Можно заметить, что hardlinktofile и myfile.txt имеют одинаковый inode=787622, так как являются фактически разными именами для одного файла (inode которого 787622).

Также видно, что на данный inode имеется 2 ссылки (см. цифру 2 в 3-м столбце). Если мы удалим исходный файл, то количество ссылок на него уменьшается на 1, то есть на самом деле файл не удаляется, так как на него больше, чем 1 ссылка. И мы по прежнему можем работать с файлом по имени hardlinktofile.

Обратите внимание, что после выполнения команды rm, количество ссылок на файл стало равно 1.


Пример создания и использования жесткой ссылки:

Как удалить ссылку

Ссылки, как и обычные файлы, можно удалять, используя команду rm :

Создание ссылок через файловый менеджер

Некоторые графические файловые менеджеры поддерживают создание символических ссылок. Чтобы создать символическую ссылку в таком файловом менеджере, достаточно кликнуть правой кнопкой мыши по файлу и выбрать в меню пункт Создать ссылку ( Create Link , Make Link ).

Ссылка создается в том же каталоге, где находится целевой файл. После создания ссылку можно переместить в другой каталог.

Резюме

Ссылки — это удобный инструмент при работе с файлами в Linux. Мы рассмотрели два вида ссылок, которые существуют в Linux. Рассмотрели отличия символических ссылок от жестких. Для создания ссылок используется команда ln . При повседневной работе обычно используются символические ссылки, в то время как жесткие ссылки используются редко.

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

1) Cлишком много уровней вложенности

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

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

2) Last-Modified

Существует параметр Last-Modified, который указывает дату последнего изменения контента на странице. Этот параметр используется поисковыми системами, так как он показывает, насколько свежий контент на сайте и, соответственно, степень необходимости переиндексации страницы. Робот, видя свежую дату, быстрее проиндексирует необходимую информацию. В случае некорректной настройки параметра Last-Modified робот может реже индексировать содержание сайта.

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


3) Сайт требует включенных Cookies

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


4) Корректность работы всех форм

Одной из самых важных форм на сайте является форма заявки (заявка на покупку, услугу, форма обратного звонка, форма отправки вопроса, отзыва и др.). Она должна работать идеально, поэтому перед запуском формы ее нужно тщательно протестировать.

Часто, если сайт сделан на Bitrix, в исходном коде отображается 2 пары мета-тегов – с ftp и из админки. Необходимо удалить одни из них, чтобы очистить код от лишних элементов.

Устанавливайте проверки при вводе букв. Не забывайте ставить звездочку * к обязательным полям. Настройте выдачу предупреждения об ошибке, если поле заполнено некорректно. Обязательно выводите для пользователя уведомление о том, что его заявка отправлена. Для борьбы со спамом используйте по возможности простую, но эффективную капчу.

5) Чистота исходного кода

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

Также следует четко соблюдать структурирование тегов согласно стандарту: мета-теги должны быть все в верхней части страницы в определенном месте.

Я бы ожидал создания символической ссылки test/firefox/src , указывающей на test/src , однако вместо этого я получаю эту ошибку:

  • Что я делаю неправильно?
  • Нельзя ли создать символическую ссылку на одну папку, которая хранится в sibling из этой папки?
  • В чем смысл этого?

4 ответа

На первый взгляд, то, что вы предложили, вы пробовали для меня.

Пример

Сделайте символическую ссылку:

Запустив его во второй раз, вы получите следующее:

Итак, у вас, вероятно, есть что-то еще. Я подозреваю, что у вас есть круговая ссылка, где ссылка указывает на себя.

Вы можете использовать find для этого немного:

Как отмечает Дубу в комментарии, проблема заключается в ваших относительных путях. У меня была аналогичная проблема, символизирующая мою конфигурацию nginx от /usr/local/etc/nginx до /etc/nginx . Если вы создадите символическую ссылку следующим образом:

Фактически вы сделаете ссылку /etc /nginx -> /etc /nginx, потому что исходный путь относится к пути к ссылке. Решение так же просто, как использование абсолютных путей:

Символы относятся к родительскому каталогу ссылки, а не к текущему каталогу процесса ln .

Когда вы выполните:

(где test/firefox - это каталог), вы создаете символическую ссылку test/firefox/src , целью которой является test/src .

Этот test/src относится к каталогу test/firefox , поэтому это символическая ссылка на /top/dir/test/firefox/test/src .

Если вы хотите, чтобы символическая ссылка была ссылкой на /top/dir/test/src , вам нужно написать:

, хотя, как правило, это плохая идея сделать символические ссылки абсолютными путями, поскольку они легко разбиваются, когда каталоги переименовываются или файловые системы монтируются в другом месте.

С помощью GNU ln вы можете использовать его опцию -r , чтобы он мог выполнить вычисление самостоятельно:

Используйте абсолютный путь вместо относительного пути, тогда он будет работать.

Я пытаюсь переустановить pip с помощью easy_install .

Как я могу удалить символическую ссылку? Альтернативно/related-is pip уже установлен?

2 ответа

Рассматривая этот вопрос , я вижу, что предлагаемое решение не следует цепочке символических ссылок/обычных ссылок. Как я могу сделать это с Ruby?

Я построил библиотеку и хочу установить ее в /usr/local/lib с помощью coreutils install . Результат сборки выглядит следующим образом: libfoo.so -> libfoo.so.1 libfoo.so.1 -> libfoo.so.1.1 libfoo.so.1.1 Я хочу сохранить символические ссылки и install файлы, как есть на /usr/local/lib .

По какой-то причине /usr/local/bin/pip -это символическая ссылка, указывающая на саму себя, и easy_install запутывается, пытаясь написать на нее, вместо того, чтобы сначала просто удалить ее. Вы можете сделать это сами, запустив

затем повторите процесс установки.

Здесь norealfile.fa-это ссылка на себя.

Под linux, если вы это сделаете

В Mac OS вы получите "ls: /some/real/dir/norealfile.fa Нет такого файла или каталога"

Дайте мне знать, если у вас появится что-то еще на вашем OS. Детали реализации символической ссылки в различных OS могут диктовать точное поведение самоссылочных символических ссылок.

Похожие вопросы:

Я использую virtualenv и разрабатываю некоторые пирамидальные приложения. Когда я пытаюсь использовать ../bin/python setup.py Я получаю: bash: ../bin/python/: слишком много уровней символических.

Я запускаю virtualenv burrito и получаю ошибку, что существует слишком много уровней символических ссылок. Я понятия не имею, что это значит. mkvirtualenv --python /usr/local/bin/Python3 mantis.

Эта проблема убивает меня, и я чувствую, что перепробовал все. Во-первых, проблема возникла при обновлении до Capistrano 3. Capistrano теперь использует /usr/bin/env перед каждой командой при.

Рассматривая этот вопрос , я вижу, что предлагаемое решение не следует цепочке символических ссылок/обычных ссылок. Как я могу сделать это с Ruby?

Я построил библиотеку и хочу установить ее в /usr/local/lib с помощью coreutils install . Результат сборки выглядит следующим образом: libfoo.so -> libfoo.so.1 libfoo.so.1 -> libfoo.so.1.1.

После установки Opencv 2.4.9 я обнаружил, что он создал много символических ссылок в /usr/local/lib. Скажем, для libopencv_core.so.2.4.9, когда я использую ls -l , он показал . libopencv_core.so.

Я несколько новичок в Ubuntu, поэтому мои навыки отладки на этой платформе очень ограничены. Короче говоря, я столкнулся с проблемами, связанными с gcc. Я столкнулся с некоторыми ошибками с помощью.

После слияния у меня возник конфликт символических ссылок: $ git status [SKIP] both added: file.txt [SKIP] Git diff не показывает целевые значения: $ git diff [SKIP] diff --cc file.txt index.

Вчера я попытался обновить версию MySQL на Centos 6 с 5.5 до 10.2, потому что сервер сказал, что 5.5 больше не поддерживается После этого я не могу подключиться к базе данных MySQL, и все мои.

Я получаю ошибку(слишком много уровней символьных ссылок) при настройке виртуальной среды в Django web application framework. Я попытался посмотреть следующий вопрос и ответ на stack overflow.

Каталог как файл-список имен других файлов, которым сопоставлены номера индексных дескрипторов, не запрещает иметь два разных имени файла, указывающих на одни и те же метаданные . Такой эффект носит название жесткой ссылки, создать которую можно при помощи команды ln.

Жесткие и символические ссылки в Linux

Жесткая ссылка

$ touch readme

$ ls -li readme

$ ln readme readme.txt

$ touch README

$ ls -li readne readme.txt README

Более того, оба имени являются равнозначными, и нет возможности узнать, какое из них создано первым, из чего нужно заключить, что первое и единственное имя файла уже является его жесткой ссылкой (на номер индексного дескриптора).

При добавлении файлу нового имени (жесткой ссылки) в его метаданных увеличивается счетчик количества имен, а при удалении файла сначала удаляется имя и уменьшается счетчик количества имен, и только при удалении последнего имени высвобождаются метаданные и данные файла.

Счетчик имен файла

$ ln readme read.me

$ ls -li read*

$ rm readme

$ ls -li read*

$ rm readme.txt

$ ls -li read*

Удаление открытого файла

Нужно заметить, что удаление файла — двухшаговая операция, состоящая из удаления имени файла, а затем — удаления метаданных (и высвобождения блоков, занимавшихся этим файлом).

Удаление метаданных файла не выполняется вообще, если у файла еще остались имена (жесткие ссылки), и не происходит сразу, если файл открыт каким-либо процессом.

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

Команда df измеряет доступное (свободное, disk free) место на файловой системе указанного файла, тогда как команда du, наоборот, измеряет занимаемое (disk usage) указанным файлом место на его файловой системе.

$ df -h .

Файл.система Размер Использовано Дост Использовано% Смонтировано в

/dev/mapper/ubuntu-root 455G 400G 32G 93% /

$ du -sh astra-linux-l.3-special-edition-snolensk-disk3-devel.iso

$ rm astra-linux-l.3-special-edition-snolensk-disk3-devel.iso

$ df -h .

Файл.система Размер Использовано Дост Использовано% Смонтировано в

/dev/mapper/ubuntu-root 455G 400G 32G 93% /

$ lsof astra-linux-l.3-special-editrion-snolensk-disk3-devel.iso

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

fuseiso 16925 john 3r REG 252,0 2947385344 20316584 astra-linux-1.3-special-edition-

$ kill 16925

$ df -h .

Файл.система Размер Использовано Дост Использовано% Смонтировано в

/dev/mapper/ubuntu-root 455G 397G 35G 92% /

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

Имена каталогов

$ mkdir folder

$ ls -ldi folder

20357139 drwxr-xr-x 2 john john 4096 апр. 1 01:58 folder

$ cd folder

/folder$ ls -lai

20357139 drwxr-xr-x 2 john john 4096 ноя. 1 01:58 .

20332580 drwxr-xr-x 4 john john 4096 ноя. 1 01:58 . .

/folder$ mkdir child

/folder$ cd child

/folder/chlld$ ls -lai

20357140 drwxr-xr-x 2 john john 4096 ноя. 1 02:01 .

20357139 drwxr-xr-x 3 john john 4096 ноя. 1 02:01 . .

/folder/chlld$ cd . ./. .

$ stat folder/

Размер: 4096 Блоков: 8 Блок B/B: 4096 каталог

Устройство: fc00h/64512d Inode: 20357139 Ссылки: 3

$ rmdir folder

rmdlr: не удалось удалить «folder»: Каталог не пуст

Существенным ограничением жесткой ссылки в дереве каталогов, куда смонтирована более чем одна файловая система, является локальность жесткой ссылки в пределах своей файловой системы в силу локальной значимости номеров индексных дескрипторов.

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

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

Символическая ссылка

$ ln -s read.me readme.1st

$ ls -li read*

20319944 lrwxrwxrwx 1 john john 6 ноя. 2 00:02 readme.1st -> read.me ★

В случае с символической ссылкой при удалении целевого файла сама ссылка будет указывать в никуда и называться «сиротой» (orhpan). Попытка прочитать такую ссылку приводит к странным, на первый взгляд, результатам: файл «существует» для команды ls, но команда просмотра содержимого Cat говорит об обратном. Ничего удивительного, если помнить, что ls работает с именами файлов, a cat — с их данными (которые действительно не существуют).

Сиротская ссылка

$ rm read.me

$ ls read*

$ cat readme.1st

cat: readme.1st: Нет такого файла или каталога

$ ls -l read*

Irwxrwxrwx 1 john john 6 ноя. 2 00:02 readme.1st -> read.me

$ cat read.me

cat: read.me: Нет такого файла или каталога

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

Кольцевые ссылки

$ ln -s readme.1st read.me

$ cat read.me
cat: read.me: Слишком много уровней символьных ссылок

Сценарии запуска служб и их каталогизация по уровням исполнения

$ ls -l /etc/rc? 1 .d

/etc/rc2.d:
lrwxrwxrwx 1 root root 20 окт. 12 2018 /etc/rc2.d/S19postgresql -> .. /init.d/postgresql
lrwxrwxrwx 1 root root 17 ноя. 31 2018 /etc/rc2.d/S20postflx -> ../init.d/postftx
/etc/rc6.d:
lrwxrwxrwx 1 root root 17 ноя. 31 2018 /etc/rc6.d/K20postftx -> . ./init.d/postftx
lrwxrwxrwx 1 root root 20 окт. 12 2018 /etc/rc6.d/K21postgresql -> ../init.d/postgresql

В этом примере сценарии postfix и postgresql имеют вторичные имена, начинающиеся с K в каталоге rc6.d, и другие вторичные имена, начинающиеся с S в каталоге rc2.d. Это символизирует необходимость запускать (start) службы postfix и postgresql при переключении системы на уровень исполнения № 2 и уничтожать (kill) процессы этих служб при переключении системы на уровень исполнения № 6.

Читайте также: