find и grep в Linux как инструмент для администрирования

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

Как найти и вывести все символические ссылки на диске?

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

Вы можете вывести список всех символических ссылок на диске с помощью команды:

dir /AL /S C:\ | find «SYMLINK»

  • /A – вывести файлы с атрибутом L (симлинк);
  • /S –выполнить команду рекурсивно для всех вложенных каталогов;
  • C:\ — укажите имя диска, на котором нужно найти все символические ссылки (если вы не хотите сканировать весь диск, укажите путь к нужному каталогу)

Также можно вывести список всех символических ссылок на диске с помощью PowerShell. Для этого нужно просканировать все каталоги и найти NTFS объекты с атрибутом ReparsePoint:

Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction ‘silentlycontinue’ | Where { $_.Attributes -match «ReparsePoint»}

Как удалить каталоги с помощью rm

Чтобы удалить пустой каталог, используйте опцию -d (directory). Вы можете использовать подстановочные знаки (* и ?) В именах каталогов так же, как и в именах файлов.

rm -d directory

Предоставление более одного имени каталога удаляет все указанные пустые каталоги.

rm -d directory1 directory2 /path/to/directory3

Чтобы удалить не пустые каталоги, используйте параметр -r (рекурсивный). Чтобы было ясно, это удаляет каталоги и все файлы и подкаталоги, содержащиеся в них.

rm -r directory1 directory2 directory3

Если каталог или файл защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить не пустые каталоги и подавить эти приглашения, используйте вместе параметры -r (рекурсивный) и -f (принудительный).

rm -rf directory

Как удалить каталоги с помощью rm

Здесь требуется осторожность. Ошибка в команде rm -rf может привести к потере данных или неисправности системы. Это опасно, и осторожность — лучшая политика. Чтобы получить представление о структуре каталогов и файлах, которые будут удалены командой rm -rf, используйте команду tree.

Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.

sudo apt-get install tree

Выполнение команды tree дает простую для понимания диаграмму структуры каталогов и файлов под каталогом, из которого она запускается.

Вы также можете указать путь к команде tree чтобы он запускал дерево из другого каталога в файловой системе.

tree path/to/directory

Команда rm также имеет параметры —one-file-system, —no-preserve-root, —preserve-root, но они рекомендуются только для опытных пользователей. Если вы что-то не так, вы можете случайно удалить все ваши системные файлы.

Удалить символические ссылки с помощью команды rm

Команда rm удаляет указанные файлы и каталоги.

Чтобы удалить символическую ссылку, вызовите команду rm с символическим именем ссылки в качестве аргумента:

Читайте также:  Ввод значений пользователем в Bash с помощью команды read

В случае успеха команда завершается с нуля и не выводит никаких данных.

С rm его помощью вы можете удалить более одной символической ссылки одновременно. Для этого передайте имена символических ссылок в качестве аргументов через пробел:

Чтобы получить запрос перед удалением символической ссылки, используйте параметр -i:

Для подтверждения нажмите клавишу y и нажмите Enter.

Если символическая ссылка указывает на каталог, не добавляйте косую черту / в конце. В противном случае вы получите ошибку:

Если имя аргумента заканчивается на /, команда rm предполагает, что файл является каталогом. Ошибка возникает из-за того, что при использовании без опции -d или -r rm yt удалит каталоги.

Чтобы быть в безопасности, никогда не используйте вариант -r при удалении символических ссылок с командой rm. Например, если вы введете:

Содержимое целевого каталога будет удалено.

grep — что это и зачем может быть нужно

Про «репку» (как я её называю) почему-то в курсе не многие, что печалит. «Унылая» (не в обиду) формулировка из Википедии звучит примерно так:

grep — утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом.

Не сильно легче, но доступнее, можно сформулировать так:

grep — утилита командной строки, используется для поиска и фильтрации текста в файлах, на основе шаблона, который (шаблон) может быть регулярным выражением.

Если всё еще ничего не понятно, то условно говоря это удобный поиск текста везде и всюду, в особенности в файлах, директория в и тп. Удобно распарсивать логи и их содержимое, не прибегая к софту, как это бывает в Windows.

Справку можно вычленить так же как по find, т.е методом pgrep, fgrep, egrep и черт знает что еще:

grep - что это и зачем может быть нужно

man grep

Или:

help grep

Расписывать все ключи и даже основные тут (вы еще помните, что это блоговая часть сайта?) не буду, так как в отличии от find‘а, последних тут вообще страшное подмножество, особенно учитывая, что существуют pgrep, fgrep, egrep и черт знает что еще, которые, в некотором смысле тоже самое, но для определенных целей.

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

Дерево процессов

Про­цес­сы, попар­но свя­зан­ные дочер­не‑родитель­ски­ми отно­шени­ями, фор­миру­ют дерево про­цес­сов опе­раци­онной сис­темы. Пер­вый про­цесс init, называ­емый пра­роди­телем про­цес­сов, порож­дает­ся ядром опе­раци­онной сис­темы пос­ле ини­циали­зации и мон­тирова­ния кор­невой фай­ловой сис­темы, отку­да и счи­тыва­ется прог­рамма /sbin/init (в сов­ремен­ных сис­темах явля­ется сим­воличес­кой ссыл­кой на акту­аль­ный /lib/systemd/systemd). Пра­роди­тель про­цес­сов всег­да име­ет PID = 1, а его основной задачей явля­ется запуск раз­нооб­разных сис­темных служб, вклю­чая запуск обра­бот­чиков алфа­вит­но‑циф­рового тер­миналь­ного дос­тупа getty, менед­жера дис­пле­ев гра­фичес­кого дос­тупа, служ­бы дис­танци­онно­го дос­тупа SSH и про­чих (см. гла­ву 10). Кро­ме того, systemd наз­нача­ется при­емным родите­лем для «оси­ротев­ших» про­цес­сов, а так­же отсле­жива­ет ава­рий­ные завер­шения запус­каемых им служб и переза­пус­кает их.

В при­мере из сле­дующе­го лис­тинга показа­но дерево про­цес­сов, пос­тро­енное при помощи спе­циаль­ной коман­ды pstree, а в лис­тинге “Про­цес­сы ядра, демоны, прик­ладные про­цес­сы” — «клас­сичес­кое» пред­став­ление дерева про­цес­сов при помощи коман­ды ps.

Де­рево про­цес­сов

[email protected]:~$ pstree -cnAhTsystemd-+-systemd-journal ❷ |-systemd-udevd ❷ |-systemd-resolve ❷ |-rsyslogd … |-gdm3—gdm-session-wor-+-gdm-session-wor | |-gdm-x-session-+-Xorg | | -gnome-session-b … |-systemd-+-(sd-pam) … | |-gnome-terminal—+-bash—man—pager ❸ | |-bash … ❷ |-postgres-+-postgres | |-postgres | |-postgres | |-postgres | |-postgres | -postgres ❷ |-apache2-+-apache2 |-apache2 … ❷ |-sshd-+-sshd—sshd—bash | `-sshd—sshd—bash … |-agetty |-login—bash—pstree ❸ …

Про­цес­сы опе­раци­онной сис­темы при­нято клас­сифици­ровать на сис­темные (ядер­ные), де­моны и прик­ладные, исхо­дя из их наз­начения и свой­ств (см. лис­тинг “Про­цес­сы ядра, демоны, прик­ладные про­цес­сы”).

Прик­ладные про­цес­сы ❸ выпол­няют обыч­ные поль­зователь­ские прог­раммы (нап­ример, ути­литу man), для чего им выделя­ют инди­виду­аль­ную память, объ­ем которой ука­зан в стол­бце VSZ вывода коман­ды ps. Такие про­цес­сы обыч­но инте­рак­тивно вза­имо­дей­ству­ют с поль­зовате­лем пос­редс­твом управля­юще­го тер­минала (за исклю­чени­ем гра­фичес­ких прог­рамм), ука­зан­ного в стол­бце TTY.

Де­моны (daemons) ❷ выпол­няют сис­темные прог­раммы, реали­зующие те или иные служ­бы опе­раци­онной сис­темы. Нап­ример, cron реали­зует служ­бу пери­оди­чес­кого выпол­нения заданий, atd — служ­бу отло­жен­ного выпол­нения заданий, rsyslogd — служ­бу цен­тра­лизо­ван­ной жур­нализа­ции событий, sshd — служ­бу дис­танци­онно­го дос­тупа, systemd-udevd — служ­бу «регис­тра­ции» под­клю­чаемых устрой­ств, и т. д. Демоны запус­кают­ся на ран­них ста­диях заг­рузки опе­раци­онной сис­темы и вза­имо­дей­ству­ют с поль­зовате­лем не инте­рак­тивно при помощи тер­минала, а опос­редован­но — при помощи сво­их ути­лит. Таким обра­зом, отсутс­твие управля­юще­го тер­минала в стол­бце TTY отли­чает их от прик­ладных про­цес­сов.

Про­цес­сы ядра, демоны, прик­ладные про­цес­сы

[email protected]:~$ ps faxuUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2 0.0 0.0 0 0 ? S ноя18 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? I< ноя18 0:00 _ [rcu_gp]root 4 0.0 0.0 0 0 ? I< ноя18 0:00 _ [rcu_par_gp]root 6 0.0 0.0 0 0 ? ❶ I< ноя18 0:00 _ [kworker/0:0H…]root 8 0.0 0.0 0 0 ? I< ноя18 0:00 _ [mm_percpu_wq]root 9 0.0 0.0 0 0 ? S ноя18 0:09 _ [ksoftirqd/0] 1 0.0 0.2 168400 11684 ? Ss ноя18 0:12 /sbin/init 333 0.0 0.1 21844 5348 ? Ss ноя18 0:07 /lib/systemd/systemd-udevdsyslog 606 0.0 0.1 224360 4244 ? Ssl ноя18 0:01 /usr/sbin/rsyslogd -n – 649 0.0 0.0 20320 3036 ? ❷ Ss ноя18 0:00 /usr/sbin/cron -fdaemon 675 0.0 0.0 3736 2184 ? Ss ноя18 0:00 /usr/sbin/atd – 21545 0.0 0.0 5560 3420 tty4 Ss ноя18 0:00 /bin/login -p —fitz 28152 0.0 0.0 2600 1784 tty4 S 01:38 0:00 _ -shfitz 28162 0.0 0.0 12948 3584 tty4 S+ 01:38 0:00 _ bashfinn 12989 0.2 0.012092 3988 tty4 ❸ S+ 13:47 0:00 _ man psfinn 13000 0.0 0.0 10764 2544 tty4 S+ 13:47 0:00 _ pager

info

За­час­тую демоны име­ют суф­фикс d в кон­це наз­вания, нап­ример sshd — это secure shell daemon, а rsyslogd — rocket system logging daemon, и т. д.

Сис­темные (ядер­ные) ❶ про­цес­сы (gра­виль­нее — ядер­ные нити, т. к. выпол­няют­ся они в общей памяти ядра опе­раци­онной сис­темы) выпол­няют парал­лель­ные час­ти яд­ра опе­раци­онной сис­темы, поэто­му не обла­дают ни инди­виду­аль­ной вир­туаль­ной памятью VSZ, ни управля­ющим тер­миналом TTY. Более того, ядер­ные про­цес­сы не выпол­няют отдель­ную прог­рамму, заг­ружа­емую из ELF-фай­ла, поэто­му их име­на COMMAND явля­ются условны­ми и изоб­ража­ются в квад­ратных скоб­ках, а кро­ме того, они име­ют осо­бое сос­тояние I в стол­бце STAT.

Сразу признаюсь, это тот способ, который я использую на этом блоге и он мне очень нравится.

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

Плагин Broken Link Checker

Установка

Сначала необходимо установить этот плагин. Инструкция стандартная:

  1. заходим в админ панель блога
  2. переходим в раздел «плагины» — «добавить новый»
  3. находим искомый объект при помощи поиска
  4. устанавливаем и активируем

Настройка

Плагин Broken Link Checker

Далее желательно проверить настройки, хотя скорей всего он уже правильно настроен. На всякий случай привожу скриншоты настроек, которые сделаны у меня:

Инструкция к применению

Перейдите в меню «инструменты» — «неправильные ссылки».

Как видите, на моем блоге сейчас три неправильные ссылки:

Плагин Broken Link Checker
  • Две с ошибкой 404
  • Одна с ошибкой 503

Их я безжалостно удаляю прямо сейчас! Придется даже немного поправить текст одной статьи из-за нерабочего  линка.

Но это еще не всё. Помимо неправильных есть еще ссылки, помеченные как:

  • Warnings
  • Перенаправленные
  • Dismissed
Плагин Broken Link Checker

В разделе Warnings я нашел 12 линков на сайт биржи Симекс. Перепроверил — всё работает. Видимо там проходили технические работы.

А вот в разделе «перенаправленные» у меня целых 170 таких линков.  Но здесь нет ничего страшного — это как правило партнерские ссылки.

Также здесь можно найти обычные ссылки, осуществляющие перелинковку статей блога. Иногда мы, блоггеры, меняем УРЛ статьи в то время как ссылка на нее уже существует в других статьях. В итоге образуются такие вот редиректы. Ничего плохого в них нет. Но лучше всё-таки без них

Читайте также:  Руководство по использованию GNU Parallel

Кстати убрать эти лишние редиректы не так сложно и долго. Просто нажмите на «редактировать URL» и введите действующий актуальный адрес. Исправил таким образом три ссылочки.

Плагин Broken Link Checker

Заблуждения по поводу плагина

Читал в интернете на некоторых блогах, что плагин не всегда корректно находит битые ссылки. А ещё многие боятся, что он сильно грузит блог — всё таки лишний плагин!!! )))

Что качается первого аспекта — ничего не могу сказать. Лично у меня он работает на отлично и сбоев не даёт. Если у вас есть с ним проблемы, то напишите в комментариях, что за проблемы — очень интересно.

По второму пункту — нагрузка. Никто не заставляет постоянно держать плагин включённым. У меня он всегда находится в деактивированном состоянии.

Плагин Broken Link Checker

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

  1. Я включаю плагин brocken link checker
  2. Он ищет и находит неправильные битые ссылки,  если они есть
  3. Я их исправляю или удаляю
  4. И снова деактивирую плагин.

Ничего сложного, ведь правда же? И нет повода переживать из-за дополнительной нагрузки на сайт.

Итак, в этой статье я рассказал вам о способах поиска битых ссылок и страниц с ошибкой 404. Знаю, что ещё есть множество онлайн сервисов, но я ими никогда не пользовался.

Плагин Broken Link Checker

Надеюсь моя статья откроет вам глаза и вы очистите свой любимый блог или сайт от этих ссылок, ведущих в никуда.

Оставляйте в комментариях свои мысли, дополнения, или поправки, если я где-то что-то упустил.

До скорых встреч!

С уважением! Абдуллин Руслан

В чем отличия?

На основе указанной выше информации относительно «мягких» ссылок можно сделать несколько выводов:

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

А вот жесткая ссылка имеет немного иные характеристики:

  • Представляет собой еще одно имя файла.
  • Не указывает на директорию.
  • Не действует на документы из разных файловых систем – в идеале, жесткая ссылка должна храниться в той же папке, что и исходник.
  • Имеет одинаковые с целевым файлом данные, в том числе дату создания, изменения, идентификатор и имя владельца.
  • Не указывает на несуществующий файл.

Символические ссылки

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

Вот основные особенности символических ссылок:

  • Могут ссылаться на файлы и каталоги;
  • После удаления, перемещения или переименования файла становятся недействительными;
  • Права доступа и номер inode отличаются от исходного файла;
  • При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
  • Можно ссылаться на другие разделы диска;
  • Содержат только имя файла, а не его содержимое.

Теперь давайте рассмотрим жесткие ссылки.