Архив метки: Утилиты командной строки

Как добавить команду в Cron

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




Служба cron — это стандартный планировщик задач в Linux. С помощью него вы можете запланировать выполнение команды или скрипта один или несколько раз, в определенную минуту, час, день, неделю и месяц. В этой статье мы подробно рассмотрим как выполняется настройка Cron в Linux на примере дистрибутива Ubuntu.




КАК ПОСМОТРЕТЬ ЗАДАНИЯ CRON




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




  • База данных crontab — здесь хранятся все записи cron пользователя, которые вы настраиваете вручную;
  • /etc/crontab и /etc/cron.d/ — системные записи cron и записи cron различных пакетов;
  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly — здесь лежат скрипты, которые надо выполнять раз в час, день, неделю и месяц соответственно, обычно эти папки используются различными пакетами, но вы тоже можете их использовать для своих скриптов.




Чтобы посмотреть задания cron добавленные текущим пользователем используйте команду crontab и опцию -l:




crontab -l




Все задачи cron разделены по пользователям, и команды из этих задач будут выполнятся от имени того пользователя, для которого они были добавлены. Чтобы посмотреть задачи другого пользователя используйте опцию -u:




sudo crontab -u root -l




А теперь давайте поговорим о том, как добавить команду cron для нужного вам пользователя.




ДОБАВЛЕНИЕ КОМАНДЫ В CRON




Чтобы добавить задание cron из терминала можно использовать утилиту crontab. Для открытия временного файла с текущими заданиями этого пользователя выполните:




crontab -e




Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:




sudo crontab -u имя_пользователя -e




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







Каждая задача формируется следующим образом:




минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде




Чтобы подставить любое значение используйте звездочку «*«. Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить. Обратите внимание, что значение переменной PATH здесь не действует, поэтому путь надо писать полностью либо объявлять свою переменную PATH в начале файла настройки. Давайте сделаем простой скрипт, который будет выводить в лог дату своего запуска и поможет отладить всё это:




sudo vi /usr/local/bin/script.sh




#!/bin/bash

echo $(date) >> /var/log/testcron.log







Сделайте скрипт исполняемым:




sudo chmod ugo+x /usr/local/bin/script.sh




Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:




* * * * * /usr/local/bin/script.sh







Или только в нулевую минуту, то есть в начале каждого часа или другими словами запуск cron каждый час:




0 * * * * /usr/local/bin/script.sh




Можно указать несколько значений через запятую, для того чтобы определить несколько точек запуска. Например, будем запускать скрипт cron каждые 15 минут:




0,14,29,44 * * * * /usr/local/bin/script.sh




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




0-10 * * * * /usr/local/bin/script.sh




Чтобы чтобы настроить интервал выполнения более тонко можно использовать слеш (/) с помощью этого символа и звездочки можно указать шаг с которым будет выполнятся команда. Например, каждые пять минут:




0/5 * * * * /usr/local/bin/script.sh




Чтобы запустить cron каждые 10 минут используйте:




0/10 * * * * /usr/local/bin/script.sh




А для запуска cron каждые 30 минут:




0/30 * * * * /usr/local/bin/script.sh




Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:




0 6,18 * * * /usr/local/bin/script.sh




А вот запустить cron каждую секунду или раз в 30 секунд не получится. Минимальная единица времени в cron это минута. Но можно создать команду, которая будет запускаться раз в минуту и по 30 секунд спать и затем снова делать:




* * * * * /usr/local/bin/script.sh && sleep 30 && /usr/local/bin/script.sh




Это довольно плохой подход и лучше так не делать. Кроме того, для экономии времени при работе с cron можно использовать специальные слова-маркеры времени. Вот они:




  • @reboot — при перезагрузке;
  • @yearly@annually — раз в год (0 0 1 1 *);
  • @monthly — раз в месяц (0 0 1 * *);
  • @weekly — раз в неделю (0 0 * * 0);
  • @daily@midnight — раз в день в полночь (0 0 * * *);
  • @hourly — раз в час (0 * * * *).




Для подбора правильной комбинации даты можно использовать сервис crontab.guru. Он позволяет в реальном времени посмотреть когда будет выполнено то или иное условие:







Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:




cat /var/log/syslog | grep CRON







Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly,… чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.




ВЫВОДЫ




В этой статье мы разобрались как выполняется настройка cron linux на примере Ubuntu. Как видите, все только кажется сложным, но на самом деле просто если разобраться.




Источник: https://losst.ru/kak-dobavit-komandu-v-cron



2021-03-10T23:09:16
Утилиты командной строки

Примеры синхронизации Rsync

Потребность передачи файлов между серверами и компьютерами возникает довольно часто, особенно при администрировании нескольких устройств. Обычно для этих целей удобно использовать ssh и scp, но если файл очень большой, а изменена была только небольшая его часть, или вы хотите настроить постоянную автоматическую синхронизацию, то scp уже явно неидеальный вариант. Для этого существуют специальные утилиты. В этой статье мы рассмотрим одну из них. А именно будет рассмотрена rsync синхронизация в linux.




Rsync — это программное обеспечение с открытым исходным кодом, которое можно использовать для синхронизации файлов и папок с локального компьютера на удаленный и наоборот. Примечательная особенность Rsync — возможность передавать зашифрованные файлы с помощью SSH и SSL. Кроме того, здесь передача файлов выполняется в один поток, в отличие от других подобных программ, создающий отдельный поток для передачи каждого файла. Это увеличивает скорость и убирает дополнительные задержки, которые становятся проблемой при передаче большого количества маленьких файлов.




Возможно использование rsync для синхронизации файлов, каталогов, при этом может применяться сжатие и шифрование. Программа впервые была применена в июне 1996 года, она разработана Эндрю Тридгелом и Полом Маккерасом. Rsync синхронизация выполняется по протоколу RSYNC, который специально разработан не просто для передачи файлов между двумя компьютерами, а для их синхронизации. Если точнее, то передается не файл полностью, а только то, что было изменено.




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




ОСОБЕННОСТИ RSYNC




Давайте сначала рассмотрим примечательные особенности Rsync:




  • Возможность поддерживать синхронизацию целых деревьев каталогов;
  • Можно сохранять символические ссылки, жесткие ссылки,  владельцев и права файла, метаданные и время создания;
  • Не требует особых привилегий;
  • Передача файлов одним потоком;
  • Поддержка RSH, SSH в качестве транспорта;
  • Поддержка анонимного Rsync.




СИНТАКСИС RSYNC




Мы не будем подробно останавливаться на установке этой утилиты в системе. Она очень популярна, поэтому вы можете установить ее с помощью своего пакетного менеджера из официальных репозиториев. В Ubuntu команда установки будет выглядеть вот так:




 sudo apt-get install rsync




А теперь, уже по традиции подобных статей, рассмотрим синтаксис команды rsync:




$ rsync опции источник приемник




В качестве источника и приемника может выступать удаленная или локальная директория. Например, ssh, rsync, samba сервер или локальная директория. Опции задают дополнительные параметры rsync.




ОПЦИИ RSYNC




Теперь давайте кратко рассмотрим параметры rsync. Здесь перечислены не все опции. Для более подробной информации смотрите man rsync:




  • -v — Выводить подробную информацию о процессе копирования;
  • -q — Минимум информации;
  • -c — Проверка контрольных сумм для файлов;
  • -a — Режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
  • -R — Относительные пути;
  • -b — Создание резервной копии;
  • -u — Не перезаписывать более новые файлы;
  • -l — Копировать символьные ссылки;
  • -L — Копировать содержимое ссылок;
  • -H — Копировать жесткие ссылки;
  • -p — Сохранять права для файлов;
  • -g — Сохранять группу;
  • -t — Сохранять время модификации;
  • -x — Работать только в этой файловой системе;
  • -e — Использовать другой транспорт, например, ssh;
  • -z — Сжимать файлы перед передачей;
  • —delete — Удалять файлы которых нет в источнике;
  • —exclude — Исключить файлы по шаблону;
  • —recursive — Перебирать директории рекурсивно;
  • —no-recursive — Отключить рекурсию;
  • —progress — Выводить прогресс передачи файла;
  • —stat — Показать статистику передачи;
  • —version — Версия утилиты.




НАСТРОЙКА СЕРВЕРА RSYNC




Как вы понимаете, нельзя просто так взять и закинуть на первую попавшуюся машину файлы без установки на нее специального программного обеспечения. На удаленной машине должен быть установлен и настроен RSYNC, SSH, Samba или FTP сервер, с помощью которого Rsync сможет авторизоваться на машине и передавать туда файлы.




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




Сначала создайте конфигурационный файл со следующим содержимым:




sudo vi /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsync.log

[share]

path = /tmp/share/

hosts allow = 192.168.56.1

hosts deny = *

list = true

uid = root

gid = root

read only = false







Здесь мы задаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с ip адреса (192.168.56.1) и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, от которых будет запущен демон. Лучше не использовать root, а указать пользователя nobody и выдать ему права на ту папку, в которую будет выполняться синхронизация каталогов rsync.




Настройка rsync завершена, остается сохранить файл, запустить сервер rsync и добавить его в автозагрузку:




sudo systemctl start rsync

sudo systemctl enable rsync







Сервер будет предоставлять доступ к файлам без запроса пароля.




ПРИМЕРЫ СИНХРОНИЗАЦИИ RSYNC




Дальше давайте рассмотрим использование rsync, примеры синхронизации.




1. КОПИРОВАНИЕ И СИНХРОНИЗАЦИЯ ФАЙЛОВ НА ЛОКАЛЬНОМ КОМПЬЮТЕРЕ




Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование rsync для синхронизации файла на локальном компьютере:




rsync -zvh file /tmp/backups/







Указав опцию —progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:




rsync -zvh --progress file /tmp/backups/







2. СИНХРОНИЗАЦИЯ ПАПОК НА ЛОКАЛЬНОЙ МАШИНЕ




Синхронизация папок rsync выполняется так же просто, как и файлов:




rsync -zvh /home/user/documents /tmp/backups/




Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:




rsync -azvh /home/user/documents /tmp/backups/







3. СИНХРОНИЗАЦИЯ С УДАЛЕННЫМ СЕРВЕРОМ




Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:




 rsync -avz /home/sergiy/tmp/ root@192.168.56.102:/home/




По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:




rsync -avz /home/sergiy/tmp/ rsync://192.168.56.102:/share




Точно также можно синхронизировать файлы с rsync из удаленного сервера:




rsync -avz root@192.168.56.102:/home/ /home/sergiy/tmp/




Адрес удаленного сервера записывается в таком формате:




имя_пользователя@адрес_машины/папка/на/удаленной_машине




Синхронизация папок rsync будет выполняться на стандартном порту.




4. СИНХРОНИЗАЦИЯ ФАЙЛОВ ПО SSH




Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.




Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так:




 rsync -avzhe ssh root@192.168.56.102:/root/install.log /tmp/




Если вы используете другой порт для ssh, то здесь его можно указать:




rsync -avzhe "ssh -p 22" root@192.168.56.102:/root/install.log /tmp/







А теперь передадим данные на тот же сервер:




 rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/




5. ПРОСМОТР ПРОГРЕССА ПРИ СИНХРОНИЗАЦИИ




Для просмотра прогресса копирования файла с одной машины на другую используется опция progress:




 rsync -avzhe ssh --progress /home/user/documents root@192.168.56.102:/root/documents




6. СИНХРОНИЗАЦИЯ НЕ ВСЕХ ФАЙЛОВ В RSYNC




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




Например, скопируем все файлы, начинающиеся на букву R:




 rsync -avze ssh --include 'R*' --exclude '*' root@192.168.56.102:/root/documents/ /root/documents




7. УДАЛЕНИЕ ПРИ СИНХРОНИЗАЦИИ




Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция —delete.




Например:




 rsync -avz --delete root@192.168.56.102:/documents/ /tmp/documents/




Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.




8. МАКСИМАЛЬНЫЙ РАЗМЕР ФАЙЛОВ




Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:




 rsync -avzhe ssh --max-size='200k' /user/documents/ root@192.168.56.102:/root/documents




9. УДАЛЕНИЕ ИСХОДНЫХ ФАЙЛОВ




Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:




 rsync --remove-source-files -zvh backup.tar /tmp/backups/




Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.




10. РЕЖИМ СИМУЛЯЦИИ RSYNC




Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:




 rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/




11. ОГРАНИЧИТЬ СКОРОСТЬ ПЕРЕДАЧИ




Вы можете ограничить использование пропускной способности сети с помощью опции —bwlimit:




 rsync --bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.56.102:/root/documents/




Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:




 rsync -zvhW backup.tar /tmp/backups/backup.tar

backup.tar




12. АВТОМАТИЧЕСКАЯ СИНХРОНИЗАЦИЯ ПАПОК RSYNC




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




Создаем ключ:




 ssh-keygen -t rsa




Загружаем ключ на сервер к с которым собираемся синхронизироваться:




 ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250




Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:




crontab -e

00 05 * * * rsync -azvre ssh /home/user/Downloads/ 192.168.56.102:/share




rsync синхронизация каталогов будет выполняться каждый день в пять утра. Подробнее о настройке расписаний Cron можно почитать в отдельной статье.




ВЫВОДЫ




Теперь вы знаете все что нужно, чтобы настройка rsync была выполнена правильно. Мы рассмотрели некоторые примеры rsync синхронизации. И теперь вы можете использовать все это для решения своих задач. Я упустил какую-то полезную информацию или у вас остались вопросы? Напишите в комментариях!




Источник: https://losst.ru/rsync-primery-sinhronizatsii



2021-03-10T23:03:25
Утилиты командной строки

20 команд netstat для управления сетью Linux и Windows

20 команд netstat для управления сетью Linux и Windows




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




1. Перечисление всех портов для соединений TCP и UDP




Список всех портов (как TCP, так и UDP) с использованием опции netstat -a.




# netstat -a | more







2. Перечисление соединений TCP-портов




Список соединений TCP (Transmission Control Protocol) с использованием опции netstat -at.




# netstat -at







3. Спикок соединений портов UDP




Список соединений UDP (User Datagram Protocol) с использованием опции netstat -au.




# netstat -au







4. Список всех открытых входящих портов




Список всех открытых входящих портов с использованием опции netstat -l.




# netstat -l







5. Список всех активных входящих портов TCP




Список всех активных TCP-портов прослушивания с использованием опции netstat -lt.




# netstat -lt







6. Список всех активных входящих портов UDP




Список всех активных входящих портов UDP с использованием опции netstat -lu.




# netstat -lu







7. Список всех активных входящих сокетов UNIX




Список всех активных входящих сокетов UNIX с помощью опции netstat -lx.




# netstat -lx







8. Отображение статистики по всем протоколам




По умолчанию для протоколов TCP, UDP, ICMP и IP показаны статистические данные. Параметр -s может использоваться для указания набора протоколов.




# netstat -s







9. Отображение статистики по протоколу TCP




Отображение статистики TCP-протокола с использованием опции netstat -st.




# netstat -st







10. Отображение статистики по протоколу UDP




Отображение статистики UDP-протокола с использованием опции netstat -su.




# netstat -su







11. Отображение имени службы с PID




Ниже приведен пример отображения имени службы с её номером PID. Для этого необходимо использовать опцию netstat -tp, которая отобразит «PID / Program Name».




# netstat -tp







12. Отображение режима Promiscuous




Promiscuous mode или promisc mode — так называемый «неразборчивый» режим, в котором сетевая плата позволяет принимать все пакеты независимо от того, кому они адресованы.




Отображая режим Promiscuous с переключателем -ac, netstat выводит выбранную информацию на экран и обновляет её каждые пять секунд. По умолчанию экран обновляется каждую секунду.




# netstat -ac 5 | grep tcp







13. Отображение маршрутизации IP-адреса ядра




Отображение таблицы IP-маршрутизации ядра с помощью команды netstat.




# netstat -r







14. Отображение транзакций сетевого интерфейса




Отображение транзакций пакетов сетевого интерфейса, включая как отправляемые, так и принимаемые пакеты с размером MTU.




# netstat -i







15. Отображение таблицы интерфейса ядра




Команда отображает таблицу интерфейса ядра, аналогично команде ifconfig.




# netstat -ie







16. Отображение информации IPv4 и IPv6




Отображает информацию о членстве в многоадресной группе для IPv4 и IPv6.




# netstat -g







17. Циклический вывод информации Netstat




Чтобы получать информацию netstat каждые несколько секунд, используйте команду приведенную ниже. Она будет непрерывно выводить информацию, через каждые несколько секунд.




# netstat -c







18. Поиск не поддерживаемых адресов




Команда выводит список не настроенных семейств адресов с некоторой полезной информацией.




# netstat --verbose







19. Поиск программ прослушивания




Узнайте, сколько программ прослушивает работу на портов.




# netstat -ap | grep http







20. Отображение статистики сети RAW




Команда отображает статистику сети RAW со всей сопутствующей полезной информацией.




# netstat --statistics --raw







Источник: https://blog.sedicomm.com/2017/07/11/20-komand-netstat-dlya-upravleniya-setyu-linux-i-windows/



2021-03-07T11:50:18
Утилиты командной строки

Grep поиск текста в файлах Linux

Grep поиск текста в файлах Linux




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




В этой инструкции мы рассмотрим, как выполняется поиск текста в файлах Linux, подробно разберём возможные опции grep, а также приведём несколько примеров работы с этой утилитой.




Что такое grep?




Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.




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




Синтаксис grep




Синтаксис команды выглядит следующим образом:




$ grep [опции] шаблон [имя файла…]




Или:




$ команда | grep [опции] шаблон




  • Опции — это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.
  • Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск
  • Файл и команда — это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.




Возможность фильтровать стандартный вывод пригодится,например, когда нужно выбрать только ошибки из логов или найти PID процесса в многочисленном отчёте утилиты ps.




Опции




Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:




  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -i — не учитывать регистр;
  • — l — отобразить только имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения;




Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.




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




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




Поиск текста в файлах




В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:




 grep User /etc/passwd




В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:




User:x:1000:1000:User,,,:/home/User:/bin/bash




А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:




grep -i "user" /etc/passwd




Вывести несколько строк




Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:




 grep -A4 "EE" /var/log/xorg.0.log




Выведет строку с вхождением и 4 строчки после неё:




grep -B4 "EE" /var/log/xorg.0.log




Выведет целевую строку и 4 строчки до неё:




grep -C2 "EE" /var/log/xorg.0.log




Выведет по две строки с верху и снизу от вхождения.




Регулярные выражения в grep




Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:




Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:




grep "^Nov 10" messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10




Поиск в конце строки — спецсимвол «$»:




grep "terminating.$" messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.




Найдём все строки, которые содержат цифры:




grep "[0-9]" /var/log/Xorg.0.log




Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.




Рекурсивное использование grep




Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:




grep -r "mydomain.com" /etc/apache2/




В выводе вы получите:




grep -r "zendsite" /etc/apache2/

/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf: <Directory /var/www/localhost/htdocs/zendsite>




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




grep -h -r "zendsite" /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite
<Directory /var/www/localhost/htdocs/zendsite>




Поиск слов в grep




Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:




grep -w "abc" имя_файла




Поиск двух слов




Можно искать по содержимому файла не одно слово, а два сразу:




 egrep -w 'word1|word2' /path/to/file




Количество вхождений строки




Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):




grep -c 'word' /path/to/file




C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:




grep -n 'root' /etc/passwd




Получим:




1:root:x:0:0:root:/root:/bin/bash




Инвертированный поиск в grep




Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:




 grep -v пар /path/to/file




Вывод имени файла




Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:




grep -l 'primary' *.c




Цветной вывод в grep




Также вы можете заставить программу выделять другим цветом вхождения в выводе:




 grep --color root /etc/passwd




Получится:







Выводы




Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!




Источник: https://losst.ru/gerp-poisk-vnutri-fajlov-v-linux



2021-03-07T11:28:48
Утилиты командной строки

Команда find в Linux

Команда find в Linux




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




В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.




Основная информация о FIND




Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.




Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.




Команда find имеет такой синтаксис:




find [папка] [параметры] критерий шаблон [действие]




Папка — каталог в котором будем искать




Параметры — дополнительные параметры, например, глубина поиска, и т д




Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.




Шаблон — непосредственно значение по которому будем отбирать файлы.




Основные параметры команды find




Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.




  • -P никогда не открывать символические ссылки
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find
  • -print — выводить полные имена файлов
  • -type f — искать только файлы
  • -type d — поиск папки в Linux




Критерии




Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.




  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру




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




А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.




1. Поиск всех файлов




Показать все файлы в текущей директории:




find

find .

find . -print




2. Поиск файлов в определенной папке




Показать все файлы в указанной директории:




find ./test




Искать файлы по имени в текущей папке:




find . -name "*.jpg"




Не учитывать регистр при поиске по имени:




find . -iname "test*"




3. Ограничение глубины поиска




Поиска файлов по имени в Linux только в этой папке:




find . -maxdepth 1 -name "*.php"




4. Инвертирование шаблона




Найти файлы, которые не соответствуют шаблону:




find . -not -name "test*"




5. Несколько критериев




Поиск командой find в Linux по нескольким критериям, с оператором исключения:




 find . -name "test" -not -name "*.php"




Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:




find -name "*.html" -o -name "*.php"




6. Несколько каталогов




Искать в двух каталогах одновременно:




find ./test ./test2 -type f -name "*.c"




7. Поиск скрытых файлов




Найти скрытые файлы:




find ~ -type f -name ".*"




8. Поиск по разрешениям




Найти файлы с определенной маской прав, например, 0664:




find . type f -perm 0664




Найти файлы с установленным флагом suid/guid:




find / -perm 2644




Или так:




find / -maxdepth 2 -perm /u=s




Поиск файлов только для чтения:




find /etc -maxdepth 1 -perm /u=r




Найти только исполняемые файлы:




find /bin -maxdepth 2 -perm /a=x




9. Поиск файлов по группах и пользователях




Найти все файлы, принадлежащие пользователю:




find . -user sergiy




Поиск файлов в Linux принадлежащих группе:




find /var/www -group developer




10. Поиск по дате модификации




Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:




find / -mtime 50




Поиск файлов в Linux открытых N дней назад:




find / -atime 50




Найти все файлы, модифицированные между 50 и 100 дней назад:




find / -mtime +50 –mtime -100




Найти файлы измененные в течении часа:




find . -cmin 60




11. Поиск файлов по размеру




Найти все файлы размером 50 мегабайт:




find / -size 50M




От пятидесяти до ста мегабайт:




find / -size +50M -size -100M




Найти самые маленькие файлы:




find . -type f -exec ls -s {} ; | sort -n -r | head -5




Самые большие:




find . -type f -exec ls -s {} ; | sort -n | head -5




12. Поиск пустых файлов и папок




Поиск файлов




find /tmp -type f -empty




Поиск папок




find ~/ -type d -empty




13. Действия с найденными файлами




Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:




find . -exec ls -ld {} ;




Удалить все текстовые файлы в tmp




find /tmp -type f -name "*.txt" -exec rm -f {} ;




Удалить все файлы больше 100 мегабайт:




find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} ;




Вывод




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




Источник: https://losst.ru/komanda-find-v-linux



2021-03-07T11:12:48
Утилиты командной строки