GNU/Linux >> Tutoriales Linux >  >> Linux

Bash scripting:cómo leer datos de archivos de texto

Algo que me gusta de Linux (y de los sistemas similares a Unix en general) es que las configuraciones y propiedades están contenidas en archivos de texto. Esto permite que un administrador con los permisos adecuados para examinar los archivos y hacer cambios si es necesario. Los archivos de texto también son fuentes de datos simples y convenientes. para las operaciones típicas de un administrador de sistemas. En determinadas situaciones, puede utilizar archivos de texto como salida para ser compartido con los usuarios regulares también. Cubro ejemplos de ambos casos en este artículo.

Nota :Escribiendo en stdout y leyendo desde stdin usar tuberías es como usar un archivo de texto virtual. En muchos casos, haces tiene un archivo de texto, pero en otros, simplemente usa la salida de algún comando anterior como si fuera un archivo de texto.

[ También puede disfrutar: Mis 8 comandos prácticos favoritos de Linux ]

Entonces, ¿cuándo deberías usar un método u otro? Bueno, en algunos casos, el archivo de texto ya existe, como /etc/hosts archivo, por ejemplo. En otros casos, no necesita tener el archivo escrito físicamente porque solo le interesa el resultado (y la estructura de datos es realmente simple). Diferentes escenarios pueden requerir que almacene la información en un archivo por motivos como claridad, solución de problemas, auditoría o poder analizar la estructura de la información y otros tipos de contenido que se encuentran allí.

Compruebe la accesibilidad y la resolución de nombres para obtener una lista de servidores

Suponga que tiene una lista de máquinas nuevas y necesita verificar que:

  1. Son accesibles desde su servidor
  2. Hacer que la resolución de nombres funcione para ellos
  3. Están escuchando en el puerto 22 (para SSH)

También debe informar el estado al equipo del proyecto para el cual debe enviarlo en un formato de hoja de cálculo. Si está trabajando con docenas de servidores y necesita repetir estas pruebas en diferentes días, definitivamente es útil pensar en una forma automatizada de hacerlo.

El archivo de entrada

Esta es la hoja de cálculo donde obtuve el archivo CSV (valores separados por comas) que se usa en los siguientes ejemplos.

Y este es el archivo CSV:

ServerName,IP
m2.example.com,192.168.2.99
xtower.example.com,192.168.2.111
win2k16.example.com,192.168.101.41
control.example.com,192.168.101.200
node1.example.com,192.168.101.201
node2.example.com,192.168.101.202
node3.example.com,192.168.101.203
node4.example.com,192.168.101.204
node5.example.com,192.168.101.205

(La conversión de la hoja de cálculo a/de CSV se realizó manualmente y no se tratará en este artículo).

El guión

El siguiente es el script que utilizo para probar los servidores:

1     #!/bin/bash
2     
3     input_file=hosts.csv
4     output_file=hosts_tested.csv
5     
6     echo "ServerName,IP,PING,DNS,SSH" > "$output_file"
7     
8     tail -n +2 "$input_file" | while IFS=, read -r host ip _
9     do
10        if ping -c 3 "$ip" > /dev/null; then
11            ping_status="OK"
12        else
13            ping_status="FAIL"
14        fi
15    
16        if nslookup "$host" > /dev/null; then
17            dns_status="OK"
18        else
19            dns_status="FAIL"
20        fi
21    
22        if nc -z -w3 "$ip" 22 > /dev/null; then
23            ssh_status="OK"
24        else
25            ssh_status="FAIL"
26        fi
27    
28        echo "Host = $host IP = $ip" PING_STATUS = $ping_status DNS_STATUS = $dns_status SSH_STATUS = $ssh_status
29        echo "$host,$ip,$ping_status,$dns_status,$ssh_status" >> $output_file
30    done

Los siguientes elementos de línea explican las entradas del script anteriores:

Línea 6: Inicialice el archivo de salida con el encabezado y tres campos nuevos para representar el estado de accesibilidad a través de ping y resolución de nombres

Línea 8: Lea el archivo de entrada línea por línea usando un while bucle, ignorando la primera línea (encabezado). También crea las variables para host e ip, extrayendo los valores usando el separador (coma) e ignorando el resto.

Líneas 10 a 26: Ejecute el pingnslookupnc comandos, enviando la salida a null porque solo estamos interesados ​​en el estado de retorno de los comandos

Línea 28: Enviar el resultado a stdout para la persona que ejecuta el script

Línea 29: Envíe los datos al archivo de salida con las tres nuevas columnas (ping_status, dns_status y ssh_status)

Abrir el archivo de salida como una hoja de cálculo

Envíe el archivo de salida a una estación de trabajo donde pueda abrirlo en su aplicación de hoja de cálculo favorita. Si está enviando esto a personas no técnicas, es posible que desee guardarlo en el formato de hoja de cálculo predeterminado que se usa en la empresa para facilitarles la vida.

[ Hoja de referencia gratuita:obtenga una lista de utilidades y comandos de Linux para administrar servidores y redes. ] 

Resumir

En este artículo, apliqué algunas herramientas simples y comunes que están disponibles en todos los sistemas Linux para automatizar la prueba de accesibilidad, resolución de nombres y conectividad a través de SSH. En algunos proyectos, este tipo de validación tendría que hacerse para decenas de servidores y repetirse un número significativo de veces debido a los procesos de cambio que involucran a otros equipos (Red y Firewall, por ejemplo).

Los principios se pueden extender a otros tipos de pruebas. Por ejemplo, podría probar la conectividad de un puerto diferente. Si las pruebas se vuelven más complejas, como ejecutar un comando en el host si se puede acceder a él a través de SSH , entonces está lidiando con un tipo diferente de problema, que requiere una herramienta diferente. Y para una situación como esa, le recomiendo enfáticamente que busque en Ansible.


Linux
  1. ¿Cómo mover 100 archivos de una carpeta que contiene miles?

  2. Cómo distinguir binarios de archivos de texto en Linux

  3. ¿Cómo elimino líneas nuevas de un archivo de texto?

  4. ¿Cómo leer la última línea de un archivo de texto en una variable usando Bash?

  5. ¿Cómo extraer texto de un archivo grande, comenzando en la primera aparición de una cadena?

Cómo comparar y fusionar archivos de texto en Linux

Cómo crear directorios desde un archivo de texto en Linux

Cómo mostrar datos de un archivo de texto en Linux

Bash scripting:cómo escribir datos en archivos de texto

Cómo extraer direcciones de correo electrónico de un archivo de texto en Linux

Cómo quitar todos los caracteres de espacio en blanco de un archivo de texto