Гид по технологиям

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

5 min read Linux Обновлено 14 Oct 2025
Найти и удалить сломанные symlinks в Linux
Найти и удалить сломанные symlinks в Linux

Иллюстрация сломанных символических ссылок

Символические ссылки (symlinks) упрощают управление файлами в Linux: одно приложение может записывать в один каталог, а ссылка перенаправляет данные в другой путь без правки конфигураций. Но ссылки могут „сломаться“, когда целевой файл или каталог удалён или перемещён. В этой статье показано, как найти такие сломанные ссылки и безопасно их удалить.

Инструменты для поиска и исправления сломанных ссылок

Есть два основных способа:

  • Утилита symlinks — удобный инструмент из репозиториев; показывает и может удалять dangling-ссылки.
  • Стандартный find — гибкий инструмент, который всегда установлен и позволяет тонко настраивать поиск.

Установка symlinks (локализовано):

# Для Debian/Ubuntu
sudo apt install symlinks

# Для Fedora/CentOS
sudo dnf install symlinks

Ключи symlinks:

  • -d — удалить dangling-ссылки.
  • -r — рекурсивно применить действие к поддиректориям.

Альтернатива: встроенный find. Он менее «дружелюбен», но мощный и переносимый.

Демонстрация: как ломается ссылка

Создаём файл и символическую ссылку к нему:

touch test-file.txt
ln -s test-file.txt linked-file.txt

Вы увидите ссылку в выводе ls -l.

Создание символической ссылки — вывод ls -l

Если удалить исходный файл, ссылка станет сломанной:

rm test-file.txt

Удаление исходного файла — ссылка остаётся сломанной

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

Чтение сломанной ссылки — пример вывода инструментов

Как найти и удалить сломанные ссылки: пошагово

  1. Отчёт с помощью symlinks
symlinks .

Точка “.” означает текущую директорию — замените на нужный путь. Пример вывода:

dangling: /home/jperkins/linked-file.txt -> test-file.txt

Это значит, что linked-file.txt указывает на несуществующий test-file.txt.

Удаление dangling-ссылок в той же директории:

symlinks -d .

symlinks выведет строки с пометкой deleted для удалённых ссылок.

  1. Поиск с помощью find

Показать ссылки, указывающие на несуществующие цели:

find . -xtype l

Удалить найденные ссылки (выполняйте осторожно):

find . -xtype l -delete

При использовании -delete вывод отсутствует — повторный запуск без -delete покажет, что ничего не найдено.

symlinks и find — примеры вывода

find показывает сломанные ссылки

find -delete удаляет сломанные ссылки без вывода

Полезные приёмы и безопасность

  • Всегда сначала выполняйте команды в режиме отчёта (symlinks без -d, find без -delete) — проверьте список.
  • Если вы не уверены, перенаправьте вывод в файл и просмотрите его: find . -xtype l > dangling.txt
  • Для ограниченного поиска используйте -maxdepth N или –mindepth для find.
  • Запуск от root (sudo) может понадобиться для системных директорий, но учтите риск удаления нужных ссылок.
  • На продуктивных серверах проводите аудит в нерабочее время и делайте резервные копии конфигураций.

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

Когда восстановление возможно и как действовать

  • Если ссылка указывает на файл, который был перемещён, попробуйте найти новый путь и либо восстановить исходный файл, либо обновить ссылку командой ln -sf NEW_TARGET LINK_NAME.
  • Если файл удалён без резервной копии — восстановить ссылку невозможно; нужно воссоздать содержимое.
  • Для сервисов: перезапустите сервисы, которые используют ссылки, после исправления путей.

Альтернативные подходы

  • Скрипт на bash с readlink + test -e: итерация по всем ссылкам и проверка существования цели позволяет более гибко логировать и принимать решения (например, переместить в карантин вместо удаления).
  • Использовать утилиты управления конфигурациями (Ansible/Chef) для проверки ожидаемых путей и автоматической коррекции ссылок в рамках инфраструктуры как кода.
  • Мониторинг: добавить проверку сломанных ссылок в регулярные проверочные задания (cron/monitoring) и оповещать администраторов.

Быстрый SOP для администратора

  1. Снять отчёт: symlinks /path/to/dir > report.txt или find /path/to/dir -xtype l > report.txt
  2. Просмотреть report.txt, обратить внимание на важные сервисные пути.
  3. Для каждого элемента в отчёте:
    • если целевой файл был перемещён — восстановить или обновить ссылку (ln -s/ln -sf).
    • если ссылка явно лишняя — удалить.
  4. Удалить безопасно: find /path/to/dir -xtype l -delete (только после проверки).
  5. Перезапустить зависимые сервисы и проверить логи.

Чек-лист по ролям

  • Системный администратор:

    • Сделать бэкап конфигураций.
    • Запустить поиск и просмотреть отчёт.
    • Удалять только после проверки.
  • Разработчик:

    • Проверить, не ломается ли сборка или деплой из-за удаляемой ссылки.
    • Если нужно — обновить конфигурации приложения.
  • Пользователь/оператор:

    • Сообщить владельцу приложения о найденных ссылках.
    • Не удалять системные ссылки без согласования.

Критерии приёмки

  • Отчёт по проверяемой директории не содержит элементов после выполнения команды просмотра.
  • Сервисы, зависящие от путей, работают корректно после исправлений.
  • Изменения задокументированы и сохранены в контрольной системе (лично или через CM).

Короткий словарь

  • Символическая ссылка (symlink) — специальный файл, указывающий на другой файл или каталог.
  • Жёсткая ссылка (hard link) — запись в файловой системе, указывающая на тот же inode, что и целевой файл.
  • Dangling/сломанная ссылка — ссылка, цель которой больше не существует.

Когда не удалять сломанные ссылки

  • Если ссылка создаётся и ожидается процессом, который позже создаст цель (например, при первичном запуске сервиса).
  • Если цель временно перемещена (нужен план восстановления).
  • Если ссылка используется для сигнализации или как флаг для процессов (редкий, но возможный кейс).

Заключение

Найти и удалить сломанные символические ссылки в Linux просто: используйте symlinks для удобства или find для гибкости. Всегда проверяйте результаты и действуйте осторожно на продуктивных системах — сначала отчёт, затем удаление. Документируйте изменения и, по возможности, включите регулярные проверки в план обслуживания.

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Добавить план питания в контекстное меню Windows
Windows

Добавить план питания в контекстное меню Windows

Потеря пакетов в Fallout 76 — как исправить
Игры

Потеря пакетов в Fallout 76 — как исправить

Восстановление данных Android: контакты и настройки
Android.

Восстановление данных Android: контакты и настройки

Скачать приватные Reels в Instagram
Инструкции

Скачать приватные Reels в Instagram

Как исправить ошибки WatchGuard VPN в Windows
VPN

Как исправить ошибки WatchGuard VPN в Windows

Как открыть файл M3U8 на любом устройстве
Мультимедиа

Как открыть файл M3U8 на любом устройстве