- Linux / UNIX find files with symbolic links
- find command -L option – follow symbolic links
- Как вывести список всех символических ссылок в каталоге Linux
- Список всех символических ссылок с помощью команды поиска
- Синтаксис
- Примеры
- Список всех символических ссылок из всей файловой системы
- Список всех символических ссылок в текущем рабочем каталоге
- Список всех символических ссылок в любом каталоге
- Список всех символических ссылок в каталоге с помощью флага Maxdepth
- Заключение
- Поиск и удаление битых символьных ссылок в Linux
- Символьные ссылки
- Создание символьных ссылок
- Битые символьные ссылки
- Поиск битых символьных ссылок (команда find)
- Анализ битых символьных ссылок
- Удаление битых символьных ссылок
- Утилита symlinks
- Заключение
Linux / UNIX find files with symbolic links
Q . How do I find file with symbolic links. Find command is not working for me. So how do I find files across symbolic links under CentOS 5.0?
A . Find command search for files in a directory hierarchy. You need to tell find command to follow symbolic links. When find examines or prints information about files, the information used shall be taken from the properties of the file to which the link points, not from the link itself (unless it is a broken symbolic link or find is unable to examine the file to which the link points).
find command -L option – follow symbolic links
When the -L option is in effect, the -type predicate will always match against the type of the file that a symbolic link points to rather than the link itself (unless the symbolic link is broken). Using -L causes the -lname and -ilname predicates always to return false.
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
Type command as follows:
find -L /path/to/searh “files”
For example find all *.jpg:
$ find -L /data -iname «*.jpg»
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Источник
Как вывести список всех символических ссылок в каталоге Linux
Символьная ссылка, также известная как символическая ссылка или программная ссылка, — это тип файла, который может содержать местоположение файла или каталога в любой файловой системе Linux. Вы создали пару символических ссылок в файловой системе Linux. И иногда возникает необходимость перечислить все символические ссылки. Этот пост предоставляет вам пошаговое руководство о том, как составить список всех символических ссылок в файловой системе Linux или в конкретном каталоге Linux.
Из пары способов перечислить все символические ссылки в каталоге Linux, мы рассмотрим самый надежный и лучший способ, используя команду find.
Список всех символических ссылок с помощью команды поиска
Команда «Найти» пригодится при поиске любого типа файла или папки в операционной системе Linux.
Синтаксис
Чтобы найти символические ссылки в любой операционной системе Linux, используйте следующий синтаксис:
В приведенной выше команде
— это место или имя каталога, в котором вы хотите искать символическую ссылку,
-type ссылается на тип файла,
while l представляет тип файла ссылки.
Хорошо, давайте посмотрим на примеры и посмотрим, как мы можем получить список символических ссылок по-разному, рассмотрев пару примеров:
Примеры
Используя команду find, мы можем перечислить символические ссылки из всей файловой системы или в определенном каталоге. Давайте посмотрим на каждый пример:
Список всех символических ссылок из всей файловой системы
Чтобы вывести список всех символических ссылок из всей файловой системы, вы можете выполнить следующую команду поиска, указав «/» в качестве пути:
Символ «/» в приведенной выше команде представляет всю файловую систему, а команда find будет искать символические ссылки по всей системе и выводить их список в терминале.
Список всех символических ссылок в текущем рабочем каталоге
Точно так же, если вы хотите найти и перечислить все символические ссылки в текущем рабочем каталоге, просто укажите «.» как путь к команде поиска, как показано ниже:
В приведенной выше команде символ «.» сообщает команде find найти символические ссылки в текущем рабочем каталоге.
Список всех символических ссылок в любом каталоге
Чтобы перечислить все символические ссылки в любом каталоге, просто укажите путь к каталогу для команды find, как показано ниже:
Команда find будет искать символические ссылки только в каталоге / var / www / и перечислять все символические ссылки в этом каталоге.
Список всех символических ссылок в каталоге с помощью флага Maxdepth
Вы могли заметить, что все вышеперечисленные команды отображали символические ссылки в нужном каталоге. А также отображали все символические ссылки из подкаталогов.
Итак, что, если вы не хотите вдаваться в подробности? Вы просто хотите иметь символические ссылки в указанном каталоге. Решение этой проблемы не в ракетостроении, и мы можем быстро указать глубину, используя флаг maxdepth.
Например, чтобы установить глубину поиска на один уровень, команда find будет выглядеть так:
Вы можете увидеть результат, показанный на скриншоте выше. Команда find показала только символические ссылки текущего рабочего каталога вместо всех подкаталогов.
Заключение
В этом посте представлено несколько способов и дается краткое объяснение того, как перечислить все символические ссылки в файловой системе Linux или в конкретном каталоге Linux. Используя команду find, мы научились находить и перечислять все символические ссылки и устанавливать максимальный уровень глубины с помощью флага maxdepth. Если вы хотите узнать больше о команде find, не стесняйтесь читать справочную страницу find с помощью команды «man find».
Источник
Поиск и удаление битых символьных ссылок в Linux
Обновл. 14 Сен 2021 |
На этом уроке мы рассмотрим, как найти битые (т.е. неработающие) символьные ссылки, проанализировать их и удалить из Linux-системы, если это необходимо.
Символьные ссылки
Символьные ссылки (или «мягкие ссылки», «симлинки») представляют собой некое подобие ярлыков, которые могут указывать на файлы и каталоги. В окне файлового менеджера (или в консоле терминала) символьная ссылка выглядит так же, как и обычный файл или каталог. Файл или каталог, на который указывает символьная ссылка, может находиться в любом месте файловой системы.
Предположим, например, что в вашем домашнем каталоге под названием user есть символьная ссылка, указывающая на файл под названием text-file.txt, который находится где-то в другом месте файловой системы. Команды, которые вы применяете к символьной ссылке, автоматически применяются и к файлу, на который она ссылается, т.е. если вы попытаетесь использовать команду cat или less вместе с символьной ссылкой, то увидите содержимое файла text-file.txt.
Linux содержит большое количество символьных ссылок. Установщики приложений часто используют символьные ссылки для создания связей с исполняемыми файлами. При обновлении программного обеспечения, бинарный файл заменяется новой версией, и все символьные ссылки продолжают работать как и раньше до тех пор, пока имя нового файла совпадает со старым.
Мы можем легко увидеть некоторые символьные ссылки, применив к корневому каталогу команду ls . На тестовой машине с Debian 11 они выделены бледно-зеленым цветом:
Мы можем рассмотреть их подробнее, добавив опцию -l (long listing):
В начале каждой строки стоит буква l (link), которая обозначает, что данный объект является символьной ссылкой. Часть после -> показывает объект, на который указывает ссылка. В нашем примере целевыми объектами являются каталоги.
В символьных ссылках не используются права доступа к файлу (иными словами, они всегда имеют форму rwxrwxrwx ). В реальности, права доступа к символьным ссылкам определяются правами доступа к тому файлу, на который указывает символьная ссылка.
Создание символьных ссылок
Прежде, чем создавать символьную ссылку, предлагаю написать небольшую программку, которую мы свяжем с нашей ссылкой.
Для этого открываем терминал (например, с помощью сочетания клавиш Ctrl+Alt+T) и создаем новый файл ravesli.cpp:
Затем открываем этот файл любым текстовым редактором, например, nano:
Добавляем следующий код:
Нажимаем Ctrl+O для сохранения изменений и Ctrl+X для выхода из редактора.
Скомпилируем нашу программу при помощи компилятора g++:
g++ ravesli.cpp -o ravesli
Теперь переместим скомпилированный файл нашей программы к другим бинарным файлам в каталог /bin:
sudo mv ravesli /bin
Осталось создать символьную ссылку и связать её с /bin/ravesli. Для этого вводим команду ln (link) вместе с параметром -s (symbolic) и целевым объектом ( /bin/ravesli) с названием ссылки ( hello ):
ln –s /bin/ravesli hello
Мы только что связали бинарный файл с символьной ссылкой.
Битые символьные ссылки
Символьная ссылка становится битой (или «висячей»), если связанный с ней файл удаляется или перемещается в другое место. Если кто-то вручную удалит файл, не зная, что на него указывают символьные ссылки, то эти символьные ссылки больше не будут работать. Они будут похожи на дорожные знаки, указывающие на город, который снесли бульдозерами.
Для наглядной демонстрации такого поведения я специально создал символьную ссылку hello в каталоге
Видно, что ссылка указывает на программу под названием ravesli в каталоге /bin. Если мы запустим символьную ссылку, то запустится связанная с ней программа:
Далее обратимся к программе напрямую:
Как и ожидалось, мы получили тот же результат. А теперь давайте удалим файл программы:
sudo rm /bin/ravesli
Цвет символьной ссылки изменился. Она выделена красным, потому что Linux знает, что ссылка — битая. При этом система продолжает отображать объект, на который указывала ссылка, чтобы мы могли заменить файл, перекомпилировать программу или сделать другие, необходимые для восстановления символьной ссылки действия.
Обратите внимание, что если мы снова попытаемся запустить символьную ссылку, то получим ошибку ссылки, а не объекта, на который указывает ссылка:
Поиск битых символьных ссылок (команда find)
В большинстве современных версий команды find есть опция -xtype , которая упрощает поиск битых символьных ссылок. Использование команды find с опцией -xtype и флагом l (link) позволит искать и возвращать битые ссылки:
Стоит отметить, что по умолчанию поиск является рекурсивным, поэтому он автоматически выполняется для всех подкаталогов.
Если мы соединим вышеприведенную команду с командой wc -l (lines), то сможем подсчитать строки, что аналогично подсчету битых символьных ссылок:
find . -xtype l | wc -l
Как вы можете видеть, у нас есть 1 битая символьная ссылка.
Анализ битых символьных ссылок
Прежде чем удалять все битые символьные ссылки, внимательно изучите результаты команды find . Подумайте, есть ли веская причина для какой-либо из найденных символьных ссылок быть битой.
Иногда проблема может заключаться в символьной ссылке, а не в целевом файле: если символьная ссылка была создана неправильно, то она может ни на что не указывать, но при этом целевой файл существует. В таком случае пересоздание символьной ссылки станет решением проблемы.
Также возможно, что явно битая символьная ссылка используется в качестве чего-то другого, например, индикатора блокировки. Или что цель присутствует только периодически, и это ожидаемое (и желаемое) поведение конкретного программного обеспечения. Возможно, целевой файл копируется с другой машины или облака, выполняет свою функцию, а затем снова удаляется, только для того, чтобы быть замененным другой программой в следующем цикле.
Битая символьная ссылка может быть признаком неудачной установки программного обеспечения. В этом случае вместо удаления символьной ссылки вам следует либо исправить её вручную, либо повторить установку. Когда вы исправите необходимые битые ссылки, то повторите команду поиска битых ссылок. Если всё сделано правильно, исправленные символьные ссылки не должны будут больше отображаться в результатах поиска.
В целях безопасности лучше проводить удаление символьных ссылок в рамках ваших собственных каталогов. Будьте крайне осторожны при выполнении этих команд от имени root или в системных каталогах.
Удаление битых символьных ссылок
Опция -exec (execute) запускает некоторую команду, которая будет выполняться на результатах поиска, полученных от команды find . Мы собираемся использовать команду rm для удаления каждой поврежденной символьной ссылки. Часть <> заменяется именем битой символьной ссылки по мере обнаружения каждой из них с помощью команды find .
Мы должны использовать точку с запятой ( ; ), чтобы завершить список команд, которые мы хотим запустить при помощи -exec . Обратная косая черта ( \ ) используется для экранирования точки с запятой, благодаря чему она будет рассматривается как часть команды find :
find . -xtype l -exec rm <> \;
Как вы можете видеть, команда была выполнена без каких-либо признаков того, что что-то произошло. Чтобы убедиться, что битые ссылки удалены, мы повторяем команду для их поиска:
Нет никаких совпадающих результатов, что означает, что битые символьные ссылки были удалены.
Утилита symlinks
symlinks — это мощная утилита для управления и исправления битых символьных ссылок. Поскольку symlinks не входит в стандартную поставку большинства дистрибутивов Linux, то вам придется установить данный инструмент вручную.
Команда установки данной утилиты (в Debian 11) будет выглядеть следующим образом:
sudo aptitude install symlinks
Примечание: Если вы используете Ubuntu, то перед установкой symlinks вам нужно будет добавить репозиторий universe в список репозиториев вашей системы:
sudo add-apt-repository universe
После успешной установки symlinks вам необходимо проверить наличие битых ссылок в вашей системе. Для этого введите следующее:
Если в вашей системе присутствует битая (dangling) ссылка, вы получите вывод, который выглядит как на вышеприведенном скриншоте.
Символ . (точка) обозначает текущий рабочий каталог. Если вы хотите получить информацию о битых символьных ссылках, например, в каталоге /home, то можете сделать это, введя следующую команду:
Если в вашей системе присутствует битая ссылка, вы получите примерно следующий результат:
dangling: /home/diego/Документы/hello -> /bin/ravesli
Чтобы быстро удалить полученную ранее битую символьную ссылку, вы можете использовать флаг -d (delete):
Чтобы удалить битые символьные ссылки в каталоге /home, введите:
symlinks -d /home
На этот раз вывод будет не только перечислять найденные битые ссылки, но также сообщать, что ссылка теперь удалена, например:
dangling: /home/diego/Документы/hello -> /bin/ravesli
deleted: /home/diego/Документы/hello -> /bin/ravesli
Чтобы произвести рекурсивный поиск и удаление битых символьных ссылок в заданном каталоге, используйте флаги -dr (d = delete, r = recursive):
Заключение
Символьные ссылки важны для Linux, поскольку они облегчают процесс определения путей и управления ими на вашем компьютере. Но если об этом не позаботиться, то битые символьные ссылки могут занять огромный кусок вашего системного хранилища, и вы даже не узнаете об этом. В таких ситуациях в игру вступают такие утилиты, как symlinks и команда find . Также старайтесь всегда уделять время просмотру списка символьных ссылок, прежде чем запускать команду для их удаления.
Поделиться в социальных сетях:
Источник