Как использовать 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.

 

Читать  Как искать файлы на Linux

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

 

Пример 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

 

Читать  Как удалить неиспользуемые приложения Flatpak, чтобы освободить место на диске в Linux

С помощью 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

 

Читать  Bash для начинающих. Передача аргументов в сценарии Bash

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

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

 

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

 

Выводы

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

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

Редактор: AndreyEx

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

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

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

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


Загрузка...

Спасибо!

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

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