Linux поиск битых ссылок

Как найти и удалить битые символические ссылки в 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 являются стандартными и не отражают разрешения для файла, на который указывает символическая ссылка.

Читайте также:  Secret net studio astra linux

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

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

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

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

Чтобы избежать ошибок, когда команда пытается просмотреть файлы или каталоги, на которые у вас нет разрешения, вы можете отправить весь вывод ошибок в /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

Источник

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

Символические ссылки, еще называемые мягкими, существуют не только в Windows, но и в Linux. По сути, символическая ссылка в Linux представляет собой файл, который ссылается на другой файл (в Linux вообще все объекты являются файлами) . Если файл будет удален, перемещен или переименован, указывающая на него символическая ссылка останется на диске, равно как и удаление символической ссылки не приведет к удалению файла.

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

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

Читайте также:  Kali linux firewall отключить

Ubuntu link

если же ссылка битая, то на нее «накладывается» еще один значок — крестик в красном кружке.

Битая ссылка

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

Рабочие симлинки

Если ссылка битая, ее название и название объекта, на который она ссылается, будут иметь красный цвет.

Битые симлинки

Поиск и удаление символических ссылок

Для поиска мягких ссылок в Linux очень удобно использовать команду find, точнее find . -type l , выводящую их список в текущем каталоге и всех вложенных в него папках.

Find

При этом команда с данным набором параметров не различает рабочие и нерабочие ссылки, чтобы получить список только битых ссылок, вместо параметра type нужно использовать параметр -xtype, вот так:

find . -xtype l

Find xtype

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

Отказано в доступе

SUDO здесь не поможет, решить эту проблему можно сбросив все ошибки в /dev/null .

Добавьте к уже известной команде перенаправление:

find . -xtype l 2>/dev/null

Поскольку символические ссылки занимают очень мало места, их можно вообще не трогать.

Если всё же хотите их удалить, добавьте чрез пробел к указанной выше команде аргумент -delete.

Link delete

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

В общем, если и удалять битые симлинки, то делать это нужно только в тех системных каталогах, назначение которых вам известно. Так, тест с удалением всех битых символических ссылок в Ubuntu 20.04, установленной на виртуальную машину VirtualBox, нарушило работу дополнений гостевой ОС, в результате чего в виртуальной системе оказалось доступным только разрешение VGA, составляющее всего 640×480 пикселей.

Источник

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

Как найти все неработающие символические ссылки на Ubuntu. В Linux найдите плохие символические ссылки и удалите битые символические ссылки. Пользователи могут легко определить битые символические ссылки с помощью команды find. Его можно использовать для перечисления всех неработающих символических ссылок в Linux Ubuntu System.

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

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

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

Читайте также:  Linux commands for networking

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

Использование команды find

Пользователи Ubuntu могут использовать команду find для вывода списка всех неработающих символических ссылок:

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

1. -L Следовать по символическим ссылкам — Когда find проверяет или печатает информацию о файлах, используемая информация должна быть взята из свойств файла, на который указывает ссылка, а не из самой ссылки (если это не битая символическая ссылка или поиск не может проверить файл, на который указывает ссылка). Использование этой опции подразумевает -noleaf.

Если вы позже используете опцию -P, -noleaf все равно будет действовать. Если -L действует, и find обнаруживает символическую ссылку на подкаталог во время его поиска, будет найден подкаталог, на который указывает символическая ссылка. Когда действует опция -L, предикат -type всегда будет сопоставляться с типом файла, на который указывает символическая ссылка, а не с самой ссылкой (если символическая ссылка не нарушена). Действия, которые могут привести к разрыву символических ссылок во время выполнения поиска (например, -delete), могут привести к путанице в поведении. Использование -L заставляет предикаты -lname и -ilname всегда возвращать false.

2. -xtype c — аналогично -type, если файл не является символической ссылкой. Для символических ссылок: если указана опция -H или -P, true, если файл является ссылкой на файл типа c; если задана опция -L, true, если c равно `l ‘. Другими словами, для символических ссылок -xtype проверяет тип файла, который не проверяет -type.

3. -тип с — Файл имеет тип с. Где c — l или символическая ссылка; это никогда не верно, если действует опция -L или опция -follow, если только символическая ссылка не нарушена. Если вы хотите искать символические ссылки, когда действует -L, используйте -xtype.

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

sudo add-apt-repository universe
sudo apt install symlinks

символические ссылки: сканирование / изменение символических ссылок. Команда использования — «symlinks [-cdorstv] dirlist». Команда использует следующие флаги:

1. -c == изменить абсолютные / грязные ссылки на относительные
2. -d == удалить оборванные ссылки
3. -o == предупреждать о ссылках в файловых системах
4. -r == рекурсировать в подкаталоги
5. -s == сокращать длинные ссылки (отображается в выходных данных, только если -c не указан)
6. -t == показать, что будет сделано с помощью -c
7. -v == подробный (показать все символические ссылки)

После установки запустите команду как:

Источник

Оцените статью
Adblock
detector