Поиск по сайту:

Найти и удалить неработающие символические ссылки в 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

Надеюсь, поможет.

Статьи по данной тематике