Часто, при работе через консоль с сервером, приходится пользоваться командами sed и find. Разберемся, что они из себя представляют и зачем нужны при работе с сервером.
Sed — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.
AWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам (регулярным выражениям).
Find – утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных ОС.
Для начала разберем утилиту find.
Команда find выглядит так:
find [Путь] [Ключ]
Пример команды по поиску файла с именем «test» по всей системе:
find / -name "test"
Пример команды по поиску файла с именем начинающимся на «test» по всей системе:
find / -name "test*"
Список ключей можно посмотреть выполнив команду man find
Наиболее часто применяемые ключи:
-name – поиск имени;
-type – поиск по типу данных;
-mtime – поиск по времени;
-size – поиск по размеру данных;
Выполним поиск данных с именем начинающимся на «test», тип данных «файл», размер более 10Мб дата создания «более 2 дней»:
find / -name “test*” -type f -size +10M -mtime +2 -print
Нашло 1 файл удовлетворяющий результату.
Так же find позволяет к найденным файлам применять другие команды.
Как пример, для всех директорий файлов сайта нужно выставить права 755, а для файлов 644.
В директории /home/ создадим 5 папок и 5 файлов:
# cd /home # mkdir 1 # mkdir 2 # mkdir 3 # mkdir 4 # mkdir 5 # touch 6 # touch 7 # touch 8 # touch 9 # touch 10
Изменим права файлов и папок на 777
#chmod 777 /home/*
Проверяем командой ls -la /home права:
Права для файлов и папок 777.
Теперь с помощью команды find изменим права файлов на 644, а папок на 755:
# find /home/ -type d -exec chmod 0755 "{}" \; && find /home/ -type f -exec chmod 0644 "{}" \;
Проверяем права файлов вновь.
Права изменились на нужные.
О утилитах awk и sed можно писать очень много, но опишем в статье только некоторые их функции.
Awk – вывод нужных столбцов.
Sed – замена текста.
Как пример, чтобы увидеть только значения прав файлов при выполнении команды ls -la нужно добавить к команде | awk ‘{print $1}’ ,т. к. 1 столбец отвечает за отображение данных прав файлов.
Выполним команду
ls -la | awk '{print $1}'
Как видим, отображается только 1 строка данных.
Применим команду awk к логам сервера.
Для начала выведем первые 10 строк логов сервера, с помощью команды
head /var/log/apache2/access.log
Из данных логов нам понадобится только айпи, с которого шло подключение, дата, и к примеру еще код ответа веб сервера.
Выполним команду
head /var/log/apache2/access.log | awk '{print $1,$4,$9}'
Как видим, нам теперь отображаются нужные данные.
Команда sed заменяет данные в файлах.
Запишем текст «ukrnames» в файл /home/10
Выполняем команду
echo "ukrnames" > /home/10
Считываем данные файла
cat /home/10
Теперь заменим в данном файле слово ukrnames на ohp
Выполняем команду
sed -i “s/ukrnames/ohp/g” /home/10
Считываем опять данные с файла
cat /home/10
Как видим, слово в файле изменилось.
Команду sed можно применять вместе с командой find
Ниже будут представлены примеры команд.
Пример замены IP адреса во всех файлах системы (полезно когда мы сменили IP адрес сервера)
find / -type f -exec sed -i "s/8.8.8.8/8.8.4.4/g" "{}" \;
8.8.8.8 – это текущий IP файла, 8.8.4.4 – IP на который нужно заменить.
Пример замены в файлах конфигурации веб-сервера ссылок c http на https
find /etc/apache2/ -type f -exec sed -i "s/http/https/g" "{}" \;
Пример замены в файлах конфигурации веб-сервера URL одного домена на URL другого
find /etc/apache2/ -type f -exec sed -i "s/http:\/\/example.com/http:\/\/example2.com/g" "{}" \;