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

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

Команды Linux для навигации в терминале

  1. &&. Строго говоря, это не команда. Если вы хотите выполнить сразу несколько команд, поставьте между ними двойной амперсанд вот так: первая_команда && вторая_команда. Терминал выполнит команды по порядку. Вы можете ввести столько команд, сколько захотите.
  2. alias. Присваивает созданные вами названия длинным командам, которые вы не можете запомнить. Введите alias длинная_команда короткая_команда.
  3. cd. Изменяет текущую терминальную папку. Когда вы запускаете терминал, он использует вашу домашнюю папку. Введите cd адрес_папки, и терминал будет работать с файлами, которые там находятся.
  4. clear. Очищает окно терминала от всех сообщений.
  5. history. Отображает все недавно введённые вами команды. Кроме того, вы можете переключаться между недавними командами с помощью клавиш «Вверх» и «Вниз». Если вы не хотите, чтобы введённая вами команда была записана, поставьте перед ней пробел так: ваша_команда.
  6. man. Отображает руководство по программам и командам Linux. Введите man имя_пакетаили man ваша_команда.
  7. whatis. Отображает краткое описание какой-либо программы. Введите команду и название программы whatis имя_пакета.
Команды Linux для навигации в терминале

Поиск файлов

  • find
  • locate
  • whereis

Первая команда с которой мы ознакомимся, это команда «find«. Позволяет выполнять поиск файлов в каталогах. Синтаксис команды очень просто и имеет вид:

find путь -опции

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

-name — поиск файла согласно шаблону

-user — поиск файлов определенного пользователя

-type — поиск по типу файла

-mtime — поиск по времени создания или модификации

Теперь рассмотрим пару примеров использования команды find.

find ~ -type f -size +100M

Этой командой мы выполним поиск всех файлов в домашнем каталоге пользователя размером больше 100 мегабайт. Опция -type f указывает, что искать мы будем файлы, опция -size +100M указывает, что искать файлы размер которых больше 100 мегабайт.

Читайте также:  iOS 11 Beta 8 и iOS 11 Public beta 7 доступны для обновления

find ~ -type f -mtime +300

Теперь мы ищем файлы которые были изменены или созданы более 30ти дней назад. Опция —mtime +30 указывает нам а то, что нужно искать файлы старше 30ти дней.

Поиск файлов

Также есть опция которая указывает глубину поиска в каталогах -maxdepth. Так как команда find ищет только в том каталоге в котором вы указали. С помощью переменно -maxdepth можно задать глубину поиска в подкаталогах.

locate

locate не имеет такого сильного функционала как find, однако обладает другими преимуществами. Если вам нужно очень быстро найти файл, то используя команду locate вы это сделаете в разы быстрее чем при помощи команды find. Дело в том, что locate использует специальную базу и поиск производится не по файловой системе, а по базе. Для начала работы c командой locate вам нужно обновить базу данных, делается это командой updatedb. Выполнять нужно от имени суперпользователя. Также базу нужно периодически обновлять, так как в неё не будут добавлены файлы, которые были созданы после момента последнего выполнения обновления базы.

Пару примеров использования locate

  • locate file — поиск файла с именем file
  • locate .txt — найти все файлы с расширением txt
  • locate file -i — регистр файлов учитывает поэтому, чтобы снять это ограничение, вводим опцию -i
  • locate file -c — вывод количества найденных файлов
  • locate file -n 5 — ограничение вывода в 5 результатов

Довольно простой синтаксис и очень быстрый поиск. Только не забывайте использовать updatedb.

whereis

Не совсем поиск файлов, однако тоже полезная команда. Позволяет найти бинарные файлы, исходники и страницы документации программы установленной в системе. Синтаксис очень простой: whereis имя_программы.

При помощи этих 3х команд вы сможете эффективно и быстро искать файлы в вашей системе. Запомните основные опции(ключи) и приемы работы с командами, таким образом ваша работа станет еще эффективней

Возможно вам будет интересно: Просмотр содержимого файлов. Linux для начинающих. Создание, удаление, копирование файлов. Linux для начинающих.

Читайте также:  105 команд для работы с сервером Linux по SSH

Практика

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

Продолжение доступно только участникам Вариант 1. Присоединись к сообществу «», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

1 год

8460 р.

1 месяц

790 р.

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «»

Когда ломаются ссылки

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

Если вы попытаетесь использовать символическую ссылку, которая указывает на несуществующий файл, вы получите ошибку, подобную этой:

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

Организация файловой системы Linux

В Linux на каждый раздел можно установить свою ФС, которая отвечает за порядок и способ организации информации. В основе файловых систем лежит набор правил, определяющий, где и каким образом хранятся данные. Следующий «слой» ФС — практический (технический) способ организации информации на каждом конкретном типе носителя (опять же, учитывая правила, заложенные в основу системы).

Читайте также:  iPhone 11/X(s/r)/8/7/6 не обновляется iOS по воздуху или через iTunes

От выбора файловой системы зависят:

  • скорость работы с файлами;
  • их сохранность;
  • скорость записи;
  • размер файлов.

Тип ФС также определяет, будут ли данные храниться в оперативной памяти (ОП) и как именно пользователь сможет изменить конфигурацию ядра.

Файловая система (ФС) — архитектура хранения данных, которые могут находиться в разделах жесткого диска и ОП. Выдает пользователю доступ к конфигурации ядра. Определяет, какую структуру принимают файлы в каждом из разделов, создает правила для их генерации, а также управляет файлами в соответствии с особенностями каждой конкретной ФС.

ФС Linux — пространство раздела, поделенное на блоки определенного размера. Он определяется кратностью размеру сектора. Соответственно, это могут быть 1024, 2048, 4096 или 8120 байт. Важно помнить, что размер каждого блока известен изначально, ограничен максимальным размером ФС и зависит от требований, которые выдвигает пользователь к каждому из блоков.

Для обмена данными существует сразу два способа. Первый из них — виртуальная файловая система (VFS). С помощью данного типа ФС происходит совместная работа ядра и приложений, установленных в системе. VFS позволяет пользователю работать, не учитывая особенности каждой конкретной ФС. Второй способ — драйверы файловых систем. Именно они отвечают за связь между «железом» и софтом.

Список файловых систем, которые поддерживаются ядром, находится в файле /proc/filesystems:

[email protected]:~$ cat /proc/filesystems nodev sysfs nodev rootfs nodev ramfs nodev bdev nodev proc nodev cpuset nodev cgroup nodev cgroup2 nodev tmpfs nodev devtmpfs nodev debugfs nodev tracefs nodev securityfs nodev sockfs nodev bpf nodev pipefs nodev hugetlbfs nodev devpts ext3 ext2 ext4 squashfs vfat nodev ecryptfs fuseblk nodev fuse nodev fusectl nodev pstore nodev mqueue nodev autofs