Tutoriales

Cómo analizar y editar archivos de configuración de Linux usando SED y AWK

Los archivos de configuración de Linux suelen ser de texto plano, lo que los hace fáciles de editar utilizando herramientas de línea de comandos. Los más poderosos de ellos son sed y vergüenza.

Si bien los principiantes pueden confiar en la edición manual de VI o Nano, los administradores de sistemas experimentados a menudo recurren a estas herramientas para analizar y reescribir automáticamente los archivos de configuración.

Estas herramientas le permiten hacer coincidir los patrones, extraer campos e incluso realizar cambios en tiempo real en archivos de configuración desde líneas de comando o scripts.

En este artículo, exploraremos cómo usarlo sed y awk Leer, analizar y reescribir archivos de configuración de manera eficiente. Introduciremos ejemplos prácticos que pueden ayudar a automatizar tareas tediosas, como actualizar las direcciones IP, cambiar los parámetros o extraer valores.

Comencemos con un ejemplo simple: sed.

Ejemplo 1: Actualizar parámetros usando el comando SED

Supongamos que desea actualizar ListenPort Directivas en los archivos de configuración, p. /etc/ssh/sshd_configpuedes hacer esto:

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

Esto es lo que hace:

  • -i Decir sed Edite el archivo en persona.
  • ^#\? Líneas de coincidencia que pueden comenzar con comentarios o no comenzar (#).
  • ListenPort.* Haga coincidir el resto de la línea, ya sea un valor predeterminado o un valor personalizado.
  • Toda la fila se reemplaza ListenPort 2222.

El método confirma que incluso si la directiva se comenta o se ha establecido en otro valor, se actualizará limpiamente.

Ejemplo 2: extraer valores con el comando AWK

Para extraer un valor específico del archivo de configuración, awk Es una excelente opción. Por ejemplo, si quieres buscar PermitRootLogin Directivas de los archivos de configuración SSH, utilizando:

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

Esto es lo que hace:

  • $1 == "PermitRootLogin" Coincidir con la fila del primer campo PermitRootLogin.
  • { print $2 } Imprime el segundo campo, que es el valor real asignado a la Directiva.

Este comando escanea el archivo para cualquier línea que comience con PermitRootLogin e imprima el valor correspondiente, generalmente yes,,,,, noo prohibit-password.

Ejemplo 3: use el comando SED para eliminar la línea de parámetros

Por ejemplo, si necesita eliminar cualquier fila que comience con UseDNS existir /etc/ssh/sshd_config Archivos que puede usar de manera rápida y eficiente sed Orden.

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

Qué está sucediendo:

  • ^UseDNS Match Lines que comienzan de manera usada.
  • este d Comando indicar sed Eliminar estas líneas.
  • este -i Los indicadores aplican cambios directamente al archivo.

Esto es útil cuando hay configuraciones sin poder o no deseadas en múltiples ubicaciones y desea que se elimine.

Ejemplo 4: Genere un informe usando el comando AWK

Suponga que tiene un archivo de configuración personalizado que enumera el estado del servicio, por ejemplo:

apache2 running  
mysql stopped  
nginx running  
ssh running

Puede usar AWK para generar rápidamente un resumen de todos los servicios que se ejecutan actualmente.

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

Esto es lo que hace:

  • $2 == "running" Coincidir con la fila del segundo campocorrer«.
  • { print $1 } Nombre del servicio de salida.

Esto solo produce una lista de servicios actualmente en ejecución. Puede extender esta información agregando contadores o guardando la salida en un archivo de registro para monitorear los scripts.

Ejemplo 5: inserte una línea antes o después de usar SED

Si necesita agregar una nueva línea después de una directiva específica en el archivo de configuración, use sed Como esto:

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

Esto es lo que hace:

  • /^PermitRootLogin/ Coincidir con las filas incluidas PermitRootLogin.
  • a Agregue rutas después del juego.
  • Bandera /etc/issue.net es la línea insertada.

Esto es útil cuando desea guardar opciones de configuración relevantes juntas.

Bonificación: Combine el guión incómodo y sede en el script de concha

Los usuarios avanzados incluso pueden combinar awk y sed Automatice las tareas de configuración de lotes en scripts bash. Por ejemplo, analiza todo .conf Archivos en directorios y reescribir parámetros específicos en cada archivo; por ejemplo, actualizar directivas similares MaxConnections Hay un nuevo valor.

Aquí hay un script simple que hace esto:

#!/bin/bash

# Define the new value for the parameter
NEW_VALUE=500

# Loop through all .conf files in /etc/myapp/
for file in /etc/myapp/*.conf; do
  # Check if the file contains the MaxConnections directive
  if awk '$1 == "MaxConnections"' "$file" > /dev/null; then
    # Use sed to replace the existing value
    sed -i 's/^MaxConnections.*/MaxConnections '"$NEW_VALUE"'/' "$file"
    echo "Updated MaxConnections in $file"
  else
    # If the directive doesn't exist, append it to the end
    echo "MaxConnections $NEW_VALUE" >> "$file"
    echo "Added MaxConnections to $file"
  fi
done

Esto es lo que hace este script:

  • NEW_VALUE Mantenga valores de parámetros actualizados.
  • Se vuelve a hacer .conf Archivos en archivos /etc/myapp/ Tabla de contenido.
  • awk Compruebe si el comando es MaxConnections Ya existe.
  • Si existe sed Actualizar el valor en su lugar.
  • Si no, agregue la directiva al final del archivo.

Este tipo de script es útil para administrar múltiples archivos de configuración que requieren actualizaciones consistentes sin editar manualmente cada script.

Resumir

Ambos sed y awk Es una herramienta indispensable para el sistema de administración de administradores de Linux. Al dominarlos, puede evitar la edición manual duplicada y asegurarse de que sus cambios de configuración sean confiables y repetibles.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba