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

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

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

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

Символическая или символьная ссылка — симлинк, symbolic link, её называют также мягкой или softlink Линукс — это файл, содержащий в себе указание (то есть адрес в дереве каталогов) на другой файл, директорию, устройство или канал. В других операционных системах, например, в Windows, они называются ярлыками. Символические ссылки нужно отличать от жёстких ссылок или hard link в Linux. Для хардлинк из Linux в Windows аналогов нет.

Взаимосвязь между софтлинк, целевым ресурсом и директорией, в которой он лежит, похожа на доступ по ссылке в Google Документах: вы не можете увидеть все чужие документы, но спокойно открываете, комментируете или редактируете те документы, на которые вам дали ссылку и предоставили соответствующий допуск. Это очень удобно, если ресурс расположен в недоступной пользователю директории из-за ограничения прав: в пользовательскую папку можно добавить символьную ссылку на любой ресурс. Или если нужно обеспечить доступ сразу нескольким пользователям — в пользовательском каталоге каждого размещают свои символьные ссылки. Распространённый способ применения — создание линка на глубоко расположенный объект для облегчения доступа.

Для примера, иконки программ на рабочем столе, запускающие приложение, — это символические cсылки на глубоко вложенный файл, созданные, чтобы не проходить весь путь к нему при каждом запуске программы. Любые действия, которые пользователь производит со связанным объектом (чтение, редактирование, копирование, перезапись и другие) не влияют на символьную ссылку. Но через софтлинк невозможно удалить целевой объект, так как это действие повлияет на неё саму. Символьная ссылка может быть связана с другой символьной ссылкой, и далее по цепочке неограниченной длины. ОС в таком случае идёт по цепочке линков, пока не достигнет конечной цели.

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

В итоге если софтлинки не удаляются одновременно с целевым объектом, то система засоряется «забытыми» softlink.

Как убедиться, что перед вами символьная ссылка

Проверяем файл с помощью ls: в терминале вводим команду ls с флагом -l (символизирует симлинк) — пробел — адрес проверяемого файла:

ls -l <имя_файла_в_дереве_каталогов>

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

Ответ на запрос принимает вид:

l <имя_файла_в_дереве_каталогов> -> /адрес/связанного/объекта

Слева от стрелки — файл и его статус (символ «l» подтверждает, что это симлинк), справа — объект, на который он указывает.

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

Внимание!

Не удаляйте объект без проверки.

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

Рассмотрим три метода их удаления. Это команды:

  • rm
  • unlink
  • find -delete

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

Удаление с помощью rm (remove)

Основные правила для синтаксиса те же, что и обычно:

1. Чтобы удалить одиночный линк, введите в терминале:

rm <имя_символьной_сcылки>

Команда не запрашивает подтверждение и не выводит результат действия.

2. Для удаления двух и более мягких сcылок введите их через пробел после rm:

rm <сим_линк_1> <сим_линк_2>

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

3. Чтобы система запросила подтверждение действия (это не происходит автоматически) добавляем к команде флаг -i:

rm -i <имя символической_ссылки>

Пример запроса на подтверждение:

rm: remove symbolic link 'имя_символической_ссылки'?

Соглашаемся, выбирая Yes: вводим Y и нажимаем «Ввод». 

4. Даже если симлинк ссылается на каталог, её нельзя заканчивать символом «слеш»: команда вызовет ошибку:

rm <символьный_линк_на_папку/>
rm: cannot remove 'символьный_линк_на_папку/': Is a directory

5. Никогда не добавляйте флаги -f и -rf при удалении софтлинк. Эти параметры удаляют файлы и папки принудительно, даже защищённые от записи.

Если вы отдадите команду вида:

rm -f сим_линк_на_директорию/

то будет удалено содержимое связанной директории.

Удаление через unlink

Unlink — утилита, удаляющая один указанный файл, в нашем случае — символическую ссылку. Её синтаксис стандартный (команда — пробел — имя softlink):

unlink <имя_символического_линка>

Эта команда, как и предыдущая, заканчивается нулём и не выводит результат.

Не добавляйте косую черту в конце имени линка. Unlink не удаляет каталоги, и указание со слешем приведёт к ошибке.

Как найти и в дальнейшем удалить softlink

1. После удаления целевых связанных объектов символические ссылки становятся сломанными, нерабочими, но не удаляются и засоряют файловую систему. А иногда нужно удалить рабочие линки, так как они больше не используются. Чтобы найти их все в определённом каталоге, используют команду find с флагом -type l (буква l означает, что тип искомых файлов — софтлинк). После find указывают директорию поиска:

find /путь/к/дир -type l

Поиск будет вестись в указанном каталоге и его подкаталогах. Вывод результата принимает вид:

/путь/к/дир/сим_линк_1
/путь/к/дир/родительская_папка_1/сим_линк_2
/путь/к/дир/родительская_папка_1/дочерняя_папка_2/сим_линк_3

2. Чтобы найти битые симлинки, вместо -type l добавляют флаг -xtype l:

find /путь/к/дир -xtype l

3. Чтобы исключить вложенные папки из поиска, добавьте флаг -maxdepth 1, указывающий максимальную глубину поиска:

find /путь/к/каталогу -maxdepth 1 -type l

Значение «1» запрещает поиск в дочерних папках.

Вывод результата:

/путь/к/каталогу/cимлинк_1
/путь/к/каталогу/cимлинк_2

4. Все найденные на предыдущих этапах символические ссылки удаляют уже описанными методами unlink и rm, приписывая их к команде вручную. Эти способы хороши тем, что дают возможность проконтролировать их удаление: увидеть всю массу ссылок, выбрать ненужные и удалить их избирательно.

5. Если вы обнаружили, что find нашла только битые ссылки, то можно удалить их пакетно, повторив команду find с флагом -delete. Методом можно пользоваться и при первичном поиске, но только с флагом -xtype l или если вы уверены, что все символические ссылки по указанному адресу нерабочие:

find /путь/к/директории -xtype l -delete

Итоги

Удаление ненужных или сломанных линков освобождает ресурсы и очищает систему от ненужных элементов, но важна осторожность. Помним, что удаление функциями remove, unlink и find -delete необратимо, восстановить удалённые данные обычными способами будет невозможно. Unlink по умолчанию способна удалять защищённые от записи данные, remove также может делать это, но с помощью дополнительного параметра.

Что будем искать? Например,VPS-сервер

Мы в социальных сетях