Как удалить символическую ссылку linux
Перейти к содержимому

Как удалить символическую ссылку linux

  • автор:

Как удалить символическую ссылку в Linux?

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

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

Перед удалением файла вы можете проверить, является ли он символической ссылкой, с помощью команды ls -l. Он также покажет вам файл или каталог, на который он указывает.

l в разрешениях (lrwxrwxrwx) подтверждает, что это символическая ссылка.

Удалить символическую ссылку с помощью команды unlink

Команда unlink используется для удаления одного файла из файловой системы. Чтобы удалить символическую ссылку в Linux, введите команду unlink , затем имя символической ссылки и нажмите Enter:

$ sudo unlink symbolic_link

Замените symbolic_link именем символической ссылки, которую вы хотите удалить. После этого вы можете использовать команду ls -l, чтобы убедиться, что символическая ссылка удалена.

Удалите символическую ссылку, указывающую на каталог, не используйте косую черту после имени каталога. Допустим, мы хотим удалить каталог символической ссылки с именем Docs, как показано на следующем снимке экрана:

Команда для удаления каталога символической ссылки будет:

$ sudo unlink Docs

Удалите символическую ссылку с помощью команды rm

Команду rm также можно использовать для удаления символической ссылки. Чтобы удалить символическую ссылку в Linux, введите команду rm, затем имя символической ссылки и нажмите Enter:

$ sudo rm zoom

После этого вы можете использовать команду ls -l, чтобы убедиться, что символическая ссылка удалена.

Вы также можете использовать флаг -i с командой rm для запроса подтверждения.

$ sudo rm -i zoom

При удалении символической ссылки, указывающей на каталог, не используйте косую черту после имени каталога. Допустим, мы хотим удалить каталог символической ссылки с именем Docs, как показано на следующем снимке экрана:

Команда для удаления каталога символической ссылки будет:

$ sudo rm Docs

После этого вы можете использовать команду ls -l, чтобы подтвердить, была ли удалена символическая ссылка.

Вот и все! В этом посте вы научились удалять символическую ссылку в ОС Linux с помощью команд unlink и rm. При удалении символической ссылки обязательно удаляйте только саму символическую ссылку, а не файл или каталог, на который она ссылается.

Все права защищены. © Linux-Console.net • 2019-2023

Как найти и удалить битые символические ссылки в Linux

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

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

Что именно является символической ссылкой?

Обычно называемые symlink(символической ссылкой) или soft link(мягкой ссылкой), символические ссылки представляют собой очень маленькие файлы. На самом деле символическая ссылка содержит только имя любого файла, на который она указывает, обычно вместе с путем к файловой системе (относительно текущего местоположения или абсолютного значения).

Если файл с именем file1 указывает на файл с именем /apps/files/file-2020, длина file1 будет составлять 21 символ, даже если размер файла file-2020 составляет 2 терабайта. Если он указывает на ./file-2020, длина его будет всего 11 символов. Если указывает на file-2020, то только девять.

Если вы выполните команду, подобную «vi file1» (где file1 — имя символической ссылки), вы в конечном итоге отредактируете любой файл, на который указывает file1, а не содержимое самой символической ссылки. Системы Linux знают, как работать с символическими ссылками, и просто делают правильные вещи. Точно так же, если вы используете такие команды, как cat, more, head или tail, вы будете просматривать содержимое указанного файла.

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

Когда ломаются ссылки

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

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

$ tail file1 tail: cannot open 'file1' for reading: No such file or directory

Если вы попытаетесь получить доступ к символической ссылке, которая указывает на себя (бывает и так), вы увидите что-то вроде этого:

$ cat loops cat: loopy: Too many levels of symbolic links $ ls -l loops lrwxrwxrwx 1 shs shs 7 May 25 18:01 loops -> loops

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

Нахождение сломанных символических ссылок

У команды find есть опция, которая позволяет вам найти символические ссылки, которые указывают на файлы, которые больше не существуют. Эта команда перечисляет символические ссылки в текущем каталоге:

$ find . -type l

буква l указывает команде поиска искать символические ссылки.

Команда, показанная ниже, с другой стороны, ищет в текущем каталоге символические ссылки, которые указывают на файлы, которые не существуют:

$ find . -xtype l

Чтобы избежать ошибок, когда команда пытается просмотреть файлы или каталоги, на которые у вас нет разрешения, вы можете отправить весь вывод ошибок в /dev/null следующим образом:

$ find . -xtype l 2>/dev/null

Вы также можете найти неработающие символические ссылки с помощью такой команды. Она длиннее предыдущей, но делает тоже самое:

$ find . -type l ! -exec test -e <> \; -print 2>/dev/null

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

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

$ find . -xtype l 2>/dev/null -exec rm <> \;

Часть этой команды rm <> превращается в команду «удалить файл».

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

$ rm file1 $ ln -s /apps/data/newfile file1

удалить символические ссылки

Thank you for reading this post, don’t forget to subscribe!

С имво­ли­че­ская ссыл­ка, так­же извест­ная как symlink, пред­став­ля­ет собой спе­ци­аль­ный тип фай­ла, кото­рый ука­зы­ва­ет на дру­гой файл или ката­лог. Это что-то вро­де ярлы­ка в Windows. Сим­воль­ная ссыл­ка может ука­зы­вать на файл или ката­лог в той же или дру­гой фай­ло­вой систе­ме или разделе.

В этой ста­тье мы пока­жем вам , как уда­лить сим­во­ли­че­ские ссыл­ки в систе­мах Linux/ UNIX с помо­щью команд rm, unlink и find.

Прежде чем вы начнете

Что­бы уда­лить сим­во­ли­че­скую ссыл­ку, вам необ­хо­ди­мо иметь пра­ва на запись в ката­лог, содер­жа­щий сим­во­ли­че­скую ссыл­ку. В про­тив­ном слу­чае вы полу­чи­те ошиб­ку «Operation not permitted».

Когда вы уда­ля­е­те сим­во­ли­че­скую ссыл­ку, файл, на кото­рый она ука­зы­ва­ет, не затрагивается.

Исполь­зуй­те коман­ду ls -l, что­бы про­ве­рить, явля­ет­ся ли дан­ный файл сим­во­ли­че­ской ссыл­кой, и най­ти файл или ката­лог, на кото­рый ука­зы­ва­ет сим­во­ли­че­ская ссылка.

Поиск и удаление битых символьных ссылок в Linux

На этом уроке мы рассмотрим, как найти битые (т.е. неработающие) символьные ссылки, проанализировать их и удалить из Linux-системы, если это необходимо.

Оглавление:

  1. Символьные ссылки
    • Создание символьных ссылок
  2. Битые символьные ссылки
    • Поиск битых символьных ссылок (команда find)
    • Анализ битых символьных ссылок
    • Удаление битых символьных ссылок
  3. Утилита symlinks
  4. Заключение

Символьные ссылки

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

Предположим, например, что в вашем домашнем каталоге под названием user есть символьная ссылка, указывающая на файл под названием text-file.txt, который находится где-то в другом месте файловой системы. Команды, которые вы применяете к символьной ссылке, автоматически применяются и к файлу, на который она ссылается, т.е. если вы попытаетесь использовать команду cat или less вместе с символьной ссылкой, то увидите содержимое файла text-file.txt.

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

Мы можем легко увидеть некоторые символьные ссылки, применив к корневому каталогу команду ls . На тестовой машине с Debian 11 они выделены бледно-зеленым цветом:

Мы можем рассмотреть их подробнее, добавив опцию -l (long listing):

В начале каждой строки стоит буква l (link), которая обозначает, что данный объект является символьной ссылкой. Часть после -> показывает объект, на который указывает ссылка. В нашем примере целевыми объектами являются каталоги.

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

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

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

Для этого открываем терминал (например, с помощью сочетания клавиш Ctrl+Alt+T) и создаем новый файл ravesli.cpp:

Затем открываем этот файл любым текстовым редактором, например, nano:

Добавляем следующий код:

std :: cout << "Hello from Ravesli.com!" << std :: endl ;

Нажимаем Ctrl+O для сохранения изменений и Ctrl+X для выхода из редактора.

Скомпилируем нашу программу при помощи компилятора g++:

g++ ravesli.cpp -o ravesli

Теперь переместим скомпилированный файл нашей программы к другим бинарным файлам в каталог /bin:

sudo mv ravesli /bin

Осталось создать символьную ссылку и связать её с /bin/ravesli. Для этого вводим команду ln (link) вместе с параметром -s (symbolic) и целевым объектом ( /bin/ravesli) с названием ссылки ( hello ):

ln –s /bin/ravesli hello

Мы только что связали бинарный файл с символьной ссылкой.

Битые символьные ссылки

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

Для наглядной демонстрации такого поведения я специально создал символьную ссылку hello в каталоге ~/Документы:

Видно, что ссылка указывает на программу под названием ravesli в каталоге /bin. Если мы запустим символьную ссылку, то запустится связанная с ней программа:

Далее обратимся к программе напрямую:

Как и ожидалось, мы получили тот же результат. А теперь давайте удалим файл программы:

sudo rm /bin/ravesli

Цвет символьной ссылки изменился. Она выделена красным, потому что Linux знает, что ссылка — битая. При этом система продолжает отображать объект, на который указывала ссылка, чтобы мы могли заменить файл, перекомпилировать программу или сделать другие, необходимые для восстановления символьной ссылки действия.

Обратите внимание, что если мы снова попытаемся запустить символьную ссылку, то получим ошибку ссылки, а не объекта, на который указывает ссылка:

Поиск битых символьных ссылок (команда find)

В большинстве современных версий команды find есть опция -xtype , которая упрощает поиск битых символьных ссылок. Использование команды find с опцией -xtype и флагом l (link) позволит искать и возвращать битые ссылки:

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

Если мы соединим вышеприведенную команду с командой wc -l (lines), то сможем подсчитать строки, что аналогично подсчету битых символьных ссылок:

find . -xtype l | wc -l

Как вы можете видеть, у нас есть 1 битая символьная ссылка.

Анализ битых символьных ссылок

Прежде чем удалять все битые символьные ссылки, внимательно изучите результаты команды find . Подумайте, есть ли веская причина для какой-либо из найденных символьных ссылок быть битой.

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

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

Битая символьная ссылка может быть признаком неудачной установки программного обеспечения. В этом случае вместо удаления символьной ссылки вам следует либо исправить её вручную, либо повторить установку. Когда вы исправите необходимые битые ссылки, то повторите команду поиска битых ссылок. Если всё сделано правильно, исправленные символьные ссылки не должны будут больше отображаться в результатах поиска.

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

Удаление битых символьных ссылок

Опция -exec (execute) запускает некоторую команду, которая будет выполняться на результатах поиска, полученных от команды find . Мы собираемся использовать команду rm для удаления каждой поврежденной символьной ссылки. Часть <> заменяется именем битой символьной ссылки по мере обнаружения каждой из них с помощью команды find .

Мы должны использовать точку с запятой ( ; ), чтобы завершить список команд, которые мы хотим запустить при помощи -exec . Обратная косая черта ( \ ) используется для экранирования точки с запятой, благодаря чему она будет рассматривается как часть команды find :

find . -xtype l -exec rm <> \;

Как вы можете видеть, команда была выполнена без каких-либо признаков того, что что-то произошло. Чтобы убедиться, что битые ссылки удалены, мы повторяем команду для их поиска:

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

Утилита symlinks

symlinks — это мощная утилита для управления и исправления битых символьных ссылок. Поскольку symlinks не входит в стандартную поставку большинства дистрибутивов Linux, то вам придется установить данный инструмент вручную.

Команда установки данной утилиты (в Debian 11) будет выглядеть следующим образом:

sudo aptitude install symlinks

Примечание: Если вы используете Ubuntu, то перед установкой symlinks вам нужно будет добавить репозиторий universe в список репозиториев вашей системы:

sudo add-apt-repository universe

После успешной установки symlinks вам необходимо проверить наличие битых ссылок в вашей системе. Для этого введите следующее:

Если в вашей системе присутствует битая (dangling) ссылка, вы получите вывод, который выглядит как на вышеприведенном скриншоте.

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

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

dangling: /home/diego/Документы/hello -> /bin/ravesli

Чтобы быстро удалить полученную ранее битую символьную ссылку, вы можете использовать флаг -d (delete):

Чтобы удалить битые символьные ссылки в каталоге /home, введите:

symlinks -d /home

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

dangling: /home/diego/Документы/hello -> /bin/ravesli
deleted: /home/diego/Документы/hello -> /bin/ravesli

Чтобы произвести рекурсивный поиск и удаление битых символьных ссылок в заданном каталоге, используйте флаги -dr (d = delete, r = recursive):

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *