30 ejemplos de Grep para administradores de sistemas

30 Grep Examples System Admins



Puede encontrar grep presente en el interior del cerebro animal de Unix y sistemas operativos similares a Unix. Es un programa básico utilizado para la coincidencia de patrones y fue escrito en los años 70 junto con el resto de la herramienta UNIX que conocemos y amamos (u odiamos).

Aunque aprender sobre lenguajes formales y expresiones regulares es un tema interesante. Aprender grep tiene mucho más que expresiones regulares. Para comenzar con él y ver la belleza y elegancia de grep, primero debe ver algunos ejemplos del mundo real.







Ejemplos que son útiles y te hacen la vida un poco más fácil. Aquí hay 30 casos de uso y opciones comunes de grep de este tipo.



1. ps aux | grep

El ps aux lista todos los procesos y sus pids asociados. Pero a menudo esta lista es demasiado larga para que la inspeccione un humano. Al canalizar la salida a un comando grep, puede enumerar los procesos que se ejecutan con una aplicación muy específica en mente. Por ejemplo, podría ser sshd o nginx o httpd.



# ps para | grep sshd
raíz400 0.0 0.2 69944 5624? Ss17:47 0:00/usr/sbin/sshd-D
raíz1076 0.2 0.3 95204 6816? Ss18:29 0: 00 sshd: raíz@pts/0
raíz1093 0.0 0.0 12784 932pts/0S +18:29 0:00sujeciónsshd

2. Capturando sus direcciones IP

En la mayoría de los sistemas operativos, puede enumerar todas sus interfaces de red y la IP asignada a esa interfaz mediante el comando ifconfig o ip addr. Ambos comandos generarán mucha información adicional. Pero si desea imprimir solo la dirección IP (por ejemplo, para los scripts de shell), puede usar el siguiente comando:





$dirección IP | sujecióninet| awk '{imprimir $ 2; } '
$dirección IP | sujeción -eninet| awk '{imprimir $ 2; } ' # Para líneas con solo inet no inet6 (IPv6)

El comando ip addr obtiene todos los detalles (incluidas las direcciones IP), luego se canaliza al segundo comando grep inet que genera solo las líneas con inet en ellas. Esto luego se canaliza a awk print la declaración que imprime la segunda palabra en cada línea (para decirlo simplemente).

P.S: También puede hacer esto sin el grep si conoce bien awk.



3. Examinar los intentos fallidos de SSH

Si tiene un servidor orientado a Internet, con una IP pública, será bombardeado constantemente con intentos de SSH y si permite que los usuarios tengan acceso SSH basado en contraseña (una política que no recomendaría), puede ver todos los intentos fallidos utilizando el siguiente comando grep:

# cat /var/log/auth.log | grep falla
Muestra hacia fuera puesto
dic5 16:20: 03 debian sshd[509]: Contraseña fallidaporroot desde el puerto 192.168.0.10052374ssh2
dic5 16:20: 07 debian sshd[509]: Contraseña fallidaporroot desde el puerto 192.168.0.10052374ssh2
dic5 16:20:11debian sshd[509]: Contraseña fallidaporroot desde el puerto 192.168.0.10052374ssh2

4. Conexión de Grep a Uniq

A veces, grep generará mucha información. En el ejemplo anterior, es posible que una sola IP haya intentado ingresar a su sistema. En la mayoría de los casos, solo hay un puñado de IP ofensivas que necesita identificar de manera única y poner en la lista negra.

#gato /dónde/Iniciar sesión/auth.log| sujeción 'Fallar' | uniq -F 3

Se supone que el comando uniq imprime solo las líneas únicas. Uniq -f 3 omite los primeros tres campos (para pasar por alto las marcas de tiempo que nunca se repiten) y luego comienza a buscar líneas únicas.

5. Grepping para mensajes de error

El uso de Grep para los registros de acceso y error no se limita solo a SSH. Los servidores web (como Nginx) registran errores y registros de acceso de manera bastante meticulosa. Si configura scripts de monitoreo que le envían alertas cuando grep 404 devuelve un nuevo valor. Eso puede resultar muy útil.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/dic/2018:02:20:29+0530] 'OBTENER /favicon.ico HTTP / 1.1' 404 200
'http://192.168.0.102/' 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/dic/2018:02:45:16+0530] 'OBTENER /favicon.ico HTTP / 1.1' 404 143
'http://192.168.0.102/' 'Mozilla / 5.0 (iPad; CPU OS 12_1 como Mac OS X)
AppleWebKit / 605.1.15 (KHTML, como Gecko) Versión / 12.0 Mobile / 15E148 Safari / 604.1 '

La expresión regular puede no ser 404, sino algún otro filtrado de expresiones regulares solo para clientes móviles o solo dispositivos Apple que ven una página web. Esto le permite tener una visión más profunda del rendimiento de su aplicación.

6. Listado de paquetes

Para los sistemas basados ​​en Debian, dpkg -l enumera todos los paquetes instalados en su sistema. Puede canalizar eso en un comando grep para buscar paquetes que pertenezcan a una aplicación específica. Por ejemplo:

#dpkg -los | sujeción 'Yo vine'

7. grep -v fileNames

Para enumerar todas las líneas que no contienen un patrón dado, use la bandera -v. Básicamente es lo opuesto a un comando grep normal.

8. grep -l

Enumera todos los archivos que contienen al menos una aparición del patrón proporcionado. Esto es útil cuando busca un patrón dentro de un directorio con varios archivos. Solo imprime el nombre del archivo y no la línea específica con el patrón.

9. Opción de una sola palabra -w

$sujeción -en <PATRÓN>fileNames

La bandera -w le dice a grep que busque el patrón dado como una palabra completa y no solo como una subcadena de una línea. Por ejemplo, antes hicimos grep para la dirección IP y el patrón inet imprimió las líneas con ambos inet y inet6 enumerando direcciones IPv4 e IPv6. Pero si usamos -w marca solo las líneas con inet como palabra precedida y seguida de espacios en blanco es una coincidencia válida.

10. Expresión regular extendida

A menudo encontrará que las expresiones regulares nativas de Grep son un poco limitantes. En la mayoría de los scripts e instrucciones encontrará el uso de la bandera -E y esto le permitirá ingresar un patrón en lo que se llama Modo Extendido.

Aquí están los comandos grep y grep -E para buscar las palabras Superman y Spiderman.

$sujeción 'Hombre (Súper | Araña )'texto
$sujeción -Y 'Hombre (Super | Araña)'texto

Como puede ver, la versión extendida es mucho más fácil de leer.

11. Grep por sus contenedores

Si tiene un gran grupo de contenedores ejecutándose en su host, puede agruparlos por nombre de imagen, estado, puertos que están exponiendo y muchos otros atributos. Por ejemplo,

$estibadorps | sujeción [imageName]

12. Grep por tus vainas

Ya que estamos en el tema de los contenedores. Kubernetes a menudo tiende a lanzar varios pods en una implementación determinada. Si bien cada pod tiene un nombre único, en un espacio de nombres determinado, normalmente comienzan con el nombre de la implementación. Podemos hacer grep de eso y enumerar todos los pods asociados con una implementación determinada.

$kubectl obtener vainas| sujeción <deploymentName>

13. Agarre para Big Data

A menudo, el llamado análisis de Big Data implica una simple búsqueda, clasificación y recuento de patrones en un conjunto de datos determinado. Las utilidades de UNIX de bajo nivel como grep, uniq, wc son especialmente buenas en esto. Esta publicación de blog muestra un buen ejemplo de una tarea realizada en solo unos segundos usando grep y otras utilidades de Unix, mientras que Hadoop tomó casi media hora.

Por ejemplo, este conjunto de datos tiene un tamaño superior a 1,7 GB. Contiene información sobre una multitud de partidas de ajedrez, incluidos los movimientos realizados, quién ganó, etc. Estamos interesados ​​solo en los resultados, por lo que ejecutamos el siguiente comando:

$sujeción 'Resultado'millonbase-2.22.pgn| clasificar | uniq -c
221 [Resultado'*']
653728 [Resultado'0-1']
852305 [Resultado'1-0']
690934 [Resultado'1/2-1/2']

Esto tomó alrededor de 15 segundos en un procesador de 2 núcleos / 4 hilos de 4 años. Entonces, la próxima vez que esté resolviendo un problema de big data. Piense si puede usar grep en su lugar.

14. grep –color = auto

Esta opción permite que grep resalte el patrón dentro de la línea donde se encontró.

15. grep -i

La coincidencia de patrones Grep es intrínsecamente sensible a mayúsculas y minúsculas. Pero si eso no le importa, entonces el uso de la bandera -i hará que grep no distinga entre mayúsculas y minúsculas.

16. grep -n

La bandera -n mostrará los números de línea para que no tenga que preocuparse por encontrar la misma línea más adelante.

17. git grep

Git, el sistema de control de versiones, tiene un comando grep incorporado que funciona de manera muy similar a su grep habitual. Pero se puede usar para buscar patrones en cualquier árbol comprometido usando la CLI nativa de git, en lugar de las tediosas tuberías. Por ejemplo, si está en la rama maestra de su repositorio, puede hacer grep a través del repositorio usando:

(Maestro)$git grep <patrón>

18. grep -o

El indicador -o es realmente útil cuando intenta depurar una expresión regular. Imprimirá solo la parte correspondiente de la línea, en lugar de la línea completa. Entonces, en caso de que obtenga demasiadas líneas no deseadas para un patrón proporcionado, y no pueda entender por qué está sucediendo. Puede usar la bandera -o para imprimir la subcadena ofensiva y razonar sobre su expresión regular al revés desde allí.

19. grep -x

La bandera -x imprimiría una línea, si y solo si, toda la línea coincide con la expresión regular proporcionada. Esto es algo similar al indicador -w que imprime una línea si y solo una palabra completa coincide con la expresión regular proporcionada.

20. grep -T

Cuando se trata de registros y salidas de scripts de shell, es más probable que encuentre pestañas rígidas para diferenciar entre las diferentes columnas de salida. La bandera -T alineará cuidadosamente estas pestañas para que las columnas estén ordenadas, haciendo que la salida sea legible por humanos.

21. grep -q

Esto suprime la salida y ejecuta silenciosamente el comando grep. Muy útil al reemplazar texto o ejecutar grep en un script demonio.

22. grep -P

Las personas que están acostumbradas a la sintaxis de expresiones regulares de Perl pueden usar la marca -P para usar exactamente eso. No es necesario que aprenda las expresiones regulares básicas, que grep utiliza de forma predeterminada.

23. grep -D [ACCIÓN]

En Unix, casi todo se puede tratar como un archivo. En consecuencia, cualquier dispositivo, socket o flujo de datos FIFO se puede alimentar a grep. Puede usar la marca -D seguida de una ACCIÓN (la acción predeterminada es LEER). Algunas otras opciones son SKIP para omitir silenciosamente dispositivos específicos y RECURSE para pasar de forma recursiva a través de directorios y enlaces simbólicos.

24. Repetición

Si está buscando un patrón dado que es una repetición de un patrón conocido más simple, use llaves para indicar el número de repeticiones

$sujeción -Y [0-9]{10}

Esto imprime líneas que contienen cadenas de 10 o más dígitos de longitud.

25. Taquigrafía de repetición

Algunos caracteres especiales están reservados para un tipo específico de repetición de patrones. Puede usar estos en lugar de llaves, si se ajustan a sus necesidades.

? : El patrón que precede al signo de interrogación debe coincidir con cero o una vez.

*: El patrón que precede a la estrella debe coincidir cero o más veces.

+: El patrón que precede al signo más debe coincidir una o más veces.

25. Desplazamientos de bytes

Si desea saber ver el desplazamiento de bytes de las líneas donde se encuentra la expresión coincidente, puede usar el indicador -b para imprimir los desplazamientos también. Para imprimir el desplazamiento de solo la parte coincidente de una línea, puede usar el indicador -b con el indicador -o.

$sujeción -b -o <PATRÓN> [nombre del archivo]

Desplazamiento simplemente significa, después de cuántos bytes desde el principio del archivo comienza la cadena coincidente.

26. egrep, fgrep y rgerp

A menudo verá la invocación de egrep, para usar la sintaxis de expresión regular extendida que discutimos anteriormente. Sin embargo, esta es una sintaxis obsoleta y se recomienda que evite su uso. Utilice grep -E en su lugar. De manera similar, use grep -F, en lugar de fgrep y grep -r en lugar de rgrep.

27. grep -z

A veces, la entrada a grep no son líneas que terminan con un carácter de nueva línea. Por ejemplo, si está procesando una lista de nombres de archivos, es posible que provengan de diferentes fuentes. La bandera -z le dice a grep que trate el carácter NULL como el final de la línea. Esto le permite tratar la transmisión entrante como cualquier archivo de texto normal.

28. grep -a [nombre de archivo]

La bandera -a le dice a grep que trate el archivo proporcionado como si fuera texto normal. El archivo podría ser un binario, pero grep tratará el contenido dentro, como si fuera texto.

29. grep -U [nombreArchivo]

La bandera -U le dice a grep que trate los archivos proporcionados como si fueran archivos binarios y no texto. Por defecto, grep adivina el tipo de archivo mirando los primeros bytes. El uso de esta bandera anula ese trabajo de conjetura.

Grep -m NUM

Con archivos grandes, la búsqueda de una expresión puede llevar una eternidad. Sin embargo, si desea verificar solo los primeros NUM números de coincidencias, puede usar la marca -m para lograr esto. Es más rápido y el resultado a menudo también es manejable.

Conclusión

Gran parte del trabajo diario de un administrador de sistemas implica examinar grandes franjas de texto. Estos pueden ser registros de seguridad, registros de su servidor web o de correo, actividad del usuario o incluso texto grande de páginas de manual. Grep le brinda un poco de flexibilidad adicional cuando se trata de estos casos de uso.

Con suerte, los pocos ejemplos y casos de uso anteriores le han ayudado a comprender mejor este fósil viviente de un software.