Найти и удалить неработающие символические ссылки в Linux
Удалите неработающие программные ссылки или символические ссылки.
Некоторое время назад мы объяснили что такое мягкая ссылка и жесткая ссылка на практических примерах. Иногда вы можете забыть удалить неиспользуемые программные или символические ссылки, которые ни на что не указывают. Сохранение неиспользуемых ссылок в файловой системе не причиняет вреда системе, за исключением того, что они занимают немного места на диске. Поэтому нет смысла их хранить. Просто найдите и удалите неработающие символические ссылки в вашей системе Linux.
Найдите неработающие символические ссылки и удалите их в Linux
В Linux может быть много способов найти неработающие символические или программные ссылки. Здесь я привел два метода.
1. Найдите и удалите неработающие программные ссылки с помощью утилиты «Симлинки».
Симлинки — это утилита командной строки, предназначенная для обслуживания символических ссылок. Он сканирует заданный каталог и выводит список символических ссылок, если таковые имеются.
Symlinks доступен в официальных репозиториях многих дистрибутивов Linux.
Чтобы установить символические ссылки в CentOS, запустите:
sudo yum install symlinks
В Fedora:
sudo dnf install symlinks
В Debian, Ubuntu, Linux Mint:
sudo apt-get install symlinks
В Ubuntu вам необходимо включить репозиторий [universe]
.
sudo add-apt-repository universe
После установки символических ссылок выполните следующую команду, чтобы найти и удалить неработающие символические ссылки:
symlinks -dr <directory-path>
Приведенная выше команда просканирует неработающие символические ссылки в данном каталоге и удалит их.
Здесь,
d
— удалить висящие символические ссылкиr
— рекурсивный
Позвольте мне показать вам пример. Я собираюсь создать файл с именем "abc"
в текущем каталоге.
touch abc
Затем я создаю символическую ссылку под названием 'xyz'
для файла abc
:
ln -s abc xyz
Теперь удалите сам файл, то есть abc
.
rm abc
Как вы, возможно, уже знаете, после того, как мы удалили сам файл, символическая ссылка не имеет никакой ценности. Потому что это всего лишь ярлык, и теперь он сломан.
Чтобы найти неработающие символические ссылки, запустите:
symlinks .
Пожалуйста, обратите внимание на точку (.
) в конце. Это значит, что мы ищем битые ссылки в текущем каталоге.
Пример вывода:
dangling: /home/sk/xyz -> abc
Здесь xyz
висит, потому что мы удалили фактический исходный файл "abc"
. Итак, давайте удалим эту неработающую ссылку с помощью команды:
symlinks -dr .
Пример вывода:
dangling: /home/sk/xyz -> abc
deleted: /home/sk/xyz -> abc
Найдите и удалите неработающие символические ссылки с помощью утилиты символических ссылок.
Наконец, запустите команду symlinks
еще раз, чтобы убедиться, что остались неработающие ссылки.
2. Найдите и удалите неработающие программные ссылки с помощью команды «найти».
Мы также можем использовать команду find
для удаления неработающих символических ссылок.
Чтобы найти неработающие символические ссылки, но не удалять их, выполните:
find . -xtype l
Эта команда выведет список неработающих символических ссылок в текущем каталоге. Если вы хотите выполнить поиск неработающих символических ссылок по определенному пути, например /usr/local/
, выполните:
find /usr/local/ -xtype l
Выход:
Найдите неработающие символические ссылки с помощью команды find
Приведенная выше команда будет искать неработающие ссылки в /usr/local/
и его подкаталогах. Как вы можете видеть в приведенном выше выводе, существует много неработающих символических ссылок.
Альтернативно, используйте следующую команду, чтобы вывести список неиспользуемых символических ссылок:
find /usr/local/ -xtype l ! -exec test -e {} \; -print
Также можно проверить, куда указывают неработающие ссылки. Хорошей практикой является убедиться, что мы удаляем нужные символические ссылки.
find /usr/local/ -xtype l -exec ls -l {} \+
Пример вывода:
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/drracket -> /home/sk/racket/bin/drracket
lrwxrwxrwx 1 root root 27 Jan 21 08:53 /usr/local/bin/gracket -> /home/sk/racket/bin/gracket
lrwxrwxrwx 1 root root 32 Jan 21 08:53 /usr/local/bin/gracket-text -> /home/sk/racket/bin/gracket-text
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/mred -> /home/sk/racket/bin/mred
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/mred-text -> /home/sk/racket/bin/mred-text
lrwxrwxrwx 1 root root 23 Jan 21 08:53 /usr/local/bin/mzc -> /home/sk/racket/bin/mzc
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/mzpp -> /home/sk/racket/bin/mzpp
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/mzscheme -> /home/sk/racket/bin/mzscheme
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/mztext -> /home/sk/racket/bin/mztext
lrwxrwxrwx 1 root root 30 Jan 21 08:53 /usr/local/bin/pdf-slatex -> /home/sk/racket/bin/pdf-slatex
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/plt-games -> /home/sk/racket/bin/plt-games
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-help -> /home/sk/racket/bin/plt-help
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-r5rs -> /home/sk/racket/bin/plt-r5rs
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-r6rs -> /home/sk/racket/bin/plt-r6rs
lrwxrwxrwx 1 root root 34 Jan 21 08:53 /usr/local/bin/plt-web-server -> /home/sk/racket/bin/plt-web-server
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/racket -> /home/sk/racket/bin/racket
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/raco -> /home/sk/racket/bin/raco
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/scribble -> /home/sk/racket/bin/scribble
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/setup-plt -> /home/sk/racket/bin/setup-plt
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/slatex -> /home/sk/racket/bin/slatex
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/slideshow -> /home/sk/racket/bin/slideshow
lrwxrwxrwx 1 root root 27 Jan 21 08:53 /usr/local/bin/swindle -> /home/sk/racket/bin/swindle
Чтобы удалить все неработающие ссылки одновременно, запустите:
sudo find /usr/local/ -xtype l -delete
Или,
sudo find /usr/local/ -xtype l ! -exec test -e {} \; -delete
Замените /usr/local/
своим собственным путем.
Рекомендуем прочитать:
- Как составить список символических ссылок в Linux
Надеюсь, поможет.