grep - поиск в Linux, примеры

Сие опубликовал в день года

1. Немного про grep

Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.

2. Базовый синтаксис команды grep

Ниже представлены примеры использования grep с базовым синтаксисом:

grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2'  filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName

3. Как использовать grep для поиска в файлах

Попробуем найти пользователя "vasya" в файле passwd. Для поиска в файле /etc/passwd информации о пользователе "vasya" необходимо использовать следующую команду:

grep vasya /etc/passwd

Пример результата:

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

Также мы можем попросить grep... Читать целиком.

Использование cURL и заголовка host для обхода балансировщика нагрузки

Сие опубликовал в день года

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

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

curl 'http://10.1.2.28:81/'

Однако из-за того, что серверы используют виртуальные хосты основанные на доменных именах, то в ответ мы получим ошибку 404. Трюк в том, чтобы передавать заголовок Host:

curl --header 'Host: domain.tld' 'http://10.1.2.28:81/'

Это позволит нам запросить нужный виртуальный хост на нужном бэкенде.

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

Сие опубликовал в день года

Установка заданий cron в пакетном режиме

Указывая имя файла в качестве аргумента для команды cron вы можете установить новые задания cron из текстового файла. Как это сделать показано ниже.

Прежде всего вам необходимо создать текстовый файл со всеми необходимыми заданиями cron.

cat cronjobs.txt

* * * * * echo How are you? > q.txt
* * * * * echo I am OK. > a.txt

Далее установите задания следующим образом:

crontab cronjobs.txt

Обратите внимание, что эта команда полностью перезапишет все существующие задания. Стоит предварительно сохранить задания cron:

crontab -l > currentjobs.txt

Редактирование crontab в пакетном режиме.

Вы можете редактировать crontab в пакетном режиме используя несколько методов (к примеру, с использованием sed).

Пример: изменить перенаправление вывода с перезаписи (>) на добавление (>>) для всех заданий в cron.

crontab -l

* * * * * echo How are you? > q.txt
* * * * * echo I am OK. > a.txt

crontab -l | sed 's/>/>>/' | crontab -
crontab -l

* * * * * echo How are you? >> q.txt
* * * * * echo I am OK. >> a.txt

Удалить все задачи для текущего пользователя.

Команда... Читать целиком.

Однострочники для анализа лог-файлов Apache

Сие опубликовал в день года

Для диагностики проблем мне часто приходится просматривать логи Apache. Со временем я создал серию однострочников, которые я могу быстро скопировать и вставить для быстрого анализа лог-файла на предмет проблем, популярных страниц и прочего.

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

Однострочники - это обычно первый шаг в диагностике проблемы. Например, я хочу посмотреть данные за определенный период вместо использования команды tail на логе соединений. В этом случае я использую fgrep ‘2014:05:’ ./access.log чтобы посмотреть что происходило между 5:00 и 5:59. Или, может быть, я хочу посмотреть что делал определенный IP и тогда я грепаю по IP и получаю топ 20... Читать целиком.

Оптимизация Nginx: параметры sendfile, tcp_nodelay и tcp_nopush

Сие опубликовал в день года

Большинство статей про оптимизацию производительности Nginx рекомендуют использовать параметры sendfile, tcp_nodelay и tcp_nopush в конфигурационном файле nginx.conf. Но, к сожалению, они не говорят ни о том как эти параметры влияют на веб-сервер, ни о том как они работают.

tcp_nodelay

Как мы можем заставить сокет отправлять данные в его буфер? Решение лежит в использовании опции TCP_NODELAY в стеке TCP. Активация TCP_NODELAY заставляет сокет отправлять данные в буфер вне зависимости от размера пакета. Опция tcp_nodelay в настройках Nginx добавляет опцию TCP_NODELAY при открытии нового сокета.

Чтобы избежать перегруженности сети стек TCP реализует механизм который ожидает данные в течение 0,2 секунды вследствие чего слишком маленький пакет не будет отправлен. Этот механизм обеспечивается алгоритмом Нейгла и 200 миллисекунд - это значение в UNIX реализации.

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

Наверх