Как использовать sed и awk для изменения конфигурационных файлов в Linux

17.07.2025
Как использовать sed и awk для изменения конфигурационных файлов в Linux

Файлы конфигурации Linux часто представляют собой обычный текст, поэтому их легко редактировать с помощью инструментов командной строки. Среди наиболее мощных из них — sed и awk.

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

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

В этой статье мы рассмотрим, как использовать sed и awk для эффективного чтения, анализа и перезаписи конфигурационных файлов. Мы приведём практические примеры, которые помогут автоматизировать такие утомительные задачи, как обновление IP-адресов, изменение параметров или извлечение значений.

Давайте начнём с простого примера: замены параметра конфигурации с помощью sed.

 

Пример 1. Обновление параметра с помощью команды sed

Предположим, вы хотите обновить директиву ListenPort в файле конфигурации, например /etc/ssh/sshd_config, с помощью следующей команды:

sed -i 's/^#\?ListenPort.*/ListenPort 2222/' /etc/ssh/sshd_config

 

Вот что это делает:

  • -i в команде sed позволяет редактировать файл на месте.
  • ^#\? соответствует строкам, которые могут начинаться, а могут и не начинаться с комментария (#).
  • ListenPort.* соответствует остальной части строки, будь то значение по умолчанию или пользовательское значение.
  • Вся строка заменяется на ListenPort 2222.

 

Такой подход подтверждает, что даже если директива закомментирована или уже имеет другое значение, она будет обновлена без изменений.

 

Пример 2. Извлечение значений с помощью команды awk

Для извлечения определённых значений из файла конфигурации отлично подходит awk. Например, если вы хотите получить значение директивы PermitRootLogin из файла конфигурации SSH, используйте:

awk '$1 == "PermitRootLogin" { print $2 }' /etc/ssh/sshd_config

 

Вот что это делает:

  • $1 == "PermitRootLogin" соответствует строкам, в которых первое поле точно равно PermitRootLogin.
  • { print $2 } выводит на экран второе поле, которое является фактическим значением, присвоенным этой директиве.

 

Эта команда просматривает файл в поисках строки, начинающейся с PermitRootLogin, и выводит соответствующее значение, обычно yesno, или prohibit-password.

 

Пример 3. Удаление строки с параметрами с помощью команды sed

Например, если вам нужно удалить любую строку, начинающуюся с UseDNS в файле /etc/ssh/sshd_config, вы можете сделать это быстро и эффективно с помощью команды sed .

sed -i '/^UseDNS/d' /etc/ssh/sshd_config

 

Что это делает:

  • ^UseDNS соответствует строкам, которые начинаются с UseDNS.
  • d в команде sed указывает удалить эти строки.
  • Флаг -i применяет изменения непосредственно к файлу.

 

Это удобно, когда устаревшая или ненужная конфигурация присутствует в нескольких местах и вы хотите её удалить.

 

Пример 4. Создание отчёта с помощью команды awk

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

apache2 running  
mysql stopped  
nginx running  
ssh running

 

С помощью awk можно быстро составить список всех запущенных в данный момент служб.

awk '$2 == "running" { print $1 }' /etc/myapp/services.conf

 

Вот что он делает:

  • $2 == "running" соответствует строкам, в которых второе поле — «running».
  • { print $1 } выводит имя службы.

 

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

 

Пример 5. Вставка строки до или после совпадения с помощью sed

Если вам нужно добавить новую строку после определённой директивы в файле конфигурации, используйте sed следующим образом:

sed -i '/^PermitRootLogin/a Banner /etc/issue.net' /etc/ssh/sshd_config

 

Вот что он делает:

  • /^PermitRootLogin/ соответствует строке, содержащей PermitRootLogin.
  • a добавляет строку после совпадения.
  • Баннер /etc/issue.net — это вставляемая строка.

 

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

 

Бонус: объединение awk и sed в сценариях командной оболочки

Опытные пользователи могут комбинировать awk и sed в bash-скриптах для автоматизации массовых задач по настройке. Например, можно проанализировать все файлы  с расширением .conf в каталоге и перезаписать определенный параметр в каждом файле — например, обновить директиву MaxConnections до нового значения.

Вот простой скрипт, который делает именно это:

#!/bin/bash

# Определите новое значение параметра
NEW_VALUE=500

# Просмотрите все файлы .conf в /etc/myapp/
for file in /etc/myapp/*.conf; do
 # Проверьте, содержит ли файл директиву MaxConnections
 if awk '$1 == "MaxConnections"' "$file" > /dev/null; then
 # Используйте sed для замены существующего значения
 sed -i 's/^MaxConnections.*/MaxConnections '"$NEW_VALUE"'/' "$file"
 echo "Обновлено значение MaxConnections в $file"
 else
 # Если директива не существует, добавьте её в конец
 echo "MaxConnections $NEW_VALUE" >> "$file"
 echo "Добавлено MaxConnections в $file"
 fi
done

 

Вот что делает этот скрипт:

  • NEW_VALUE для сохранения обновлённого значения параметра.
  • Он перебирает все .conf файлы в каталоге /etc/myapp/ .
  • awk проверяет, существует ли уже директива MaxConnections.
  • Если оно существует, sed обновляет значение на месте.
  • Если нет, директива добавляется в конец файла.

 

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

 

Выводы

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала