GNU/Linux >> Tutoriales Linux >  >> Linux

fundamentos de grep

Este artículo presenta algunas herramientas, especialmente grep , una herramienta de línea de comandos de Linux® que puede usar para buscar directorios o archivos que coincidan con expresiones regulares especificadas.

Que es grep ?

Respuesta oficial:

grep busca los archivos de entrada con nombre (o la entrada estándar si no especifica un archivo o usa un solo guión (- ) como nombre de archivo) para líneas que contengan una coincidencia con el patrón dado. Por defecto, grep imprime las líneas coincidentes.

Mejor respuesta:

Busque un archivo, directorio o salida para algo específico, similar a Ctrl + f en Windows®. Utilice esta función para orientar exactamente lo que necesita.

Básicos

A menudo, la forma más fácil de mostrar cómo funciona un comando es con ejemplos.

Puede ver todos los usuarios en /etc/passwd archivo con el siguiente comando:

# cat /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql❌27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
sher❌1002:1002::/home/sher:/bin/bash

Usando grep , puede reducir esa lista para encontrar un solo usuario.

Buscar un usuario específico :

Enumere los usuarios pero filtre la salida mostrando solo la línea con sher en él.

# cat /etc/passwd | grep 'sher'
sher❌1002:1002::/home/sher:/bin/bash

O encuentre el mismo usuario con un solo comando:

# grep 'sher' /etc/passw
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

En el siguiente ejemplo, busque todos los usuarios con acceso bash:

# grep 'bash' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Banderas

Como la mayoría de los comandos de Linux, grep usa banderas, generalmente una o más letras precedidas por uno o más guiones, para agregar funcionalidad adicional.

-v :Muestra todo lo que no incluye el patrón de búsqueda especificado:

# grep -v 'nologin' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-i :Muestra las coincidencias, ignorando las mayúsculas y minúsculas, lo cual es útil cuando no sabes exactamente lo que necesitas:

# grep -i 'SHER' /etc/passwd
sher❌1002:1002::/home/sher:/bin/bash

Buscar múltiples patrones

grep usa el símbolo de tubería (| ) para significar o permitiéndole buscar más de una cosa a la vez. Utilice uno de los siguientes métodos para buscar varias cosas a la vez:

\ :Escapa del siguiente carácter, una tubería (| ) permitiéndole funcionar como o :

# grep 'sher\|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-E :Interpreta caracteres especiales, como | como o :

# grep -E 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

El egrep comando hace lo mismo:

# egrep 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Combinando banderas

Puede usar varias banderas en combinación para refinar una búsqueda.

El siguiente ejemplo muestra todos los usuarios que no son sher o bastidor ,independientemente del caso del patrón de contenido del archivo:

# egrep -vi 'SHER|RACK' /etc/passwd

Ejemplos practicos

Las siguientes secciones cubren otros usos para grep e introducir otros comandos útiles.

Ignorar comentarios

En Linux, las líneas se comentan agregando el símbolo de libra (# ) al principio de la línea. De esta manera, puede agregar sus propias notas y scripts o programas, ignorar los comentarios y no ejecutar esas líneas.

Para mostrar archivos ignorando esos comentarios, use el siguiente comando:

# grep -v ^'#' /file

Incluso puedes ejecutar un grep encima de otro grep comando.

Por ejemplo, enumere un archivo ignorando las líneas comentadas y luego busque algo específico:

# grep -v ^'#' /file | grep 'hello'

Historial de búsqueda

La mayoría de los sistemas Linux mantienen un registro de los comandos ejecutados, al que puede acceder con el comando history . Cuando combinas history con grep , puede investigar de manera muy efectiva lo que se ha ejecutado en su sistema hasta el momento.

Compruebe la passwd ejecutar comandos y otros comandos que contienen la contraseña patrón:

# history | grep 'passwd'

Buscar comandos ejecutados en un día específico:

# history | grep '2021-05-10'

Compruebe qué comandos se ejecutaron en un momento específico:

# history | grep '2021-05-10 11:00:'

Comprobar puertos e inicio de sesión raíz

Muestra el tráfico web que se ejecuta en los puertos 80 y 443 :

# netstat -plnt | egrep '80|443'

Puedes usar ^ en un grep Comando para mostrar solo aquellas líneas que comienzan con su patrón de búsqueda.

Por ejemplo, ejecute el siguiente comando para verificar si el sistema permite inicios de sesión raíz:

# grep ^'Permit' /etc/ssh/sshd_config

Buscar registros con cabeza y cola

Usar top para mostrar las primeras diez líneas del registro de intentos de inicio de sesión:

# head /var/log/secure

Usar tail para mostrar las líneas al final del registro de intentos de inicio de sesión:

# tail /var/log/secure

Usa el last comando para mostrar las primeras diez líneas de los inicios de sesión más recientes:

# last | head -10

Usa el tail -f para ver crecer un archivo en tiempo real. Por ejemplo, puede ver los intentos de inicio de sesión más recientes y ver los intentos en curso. Si alguien intenta iniciar sesión, puede verlo como sucede con el siguiente comando:

# tail -f /var/log/secure
Ctrl + C to exit

Otras herramientas

Puede experimentar con sus nuevas habilidades utilizando las herramientas de esta sección.

vim o nano

vi , vim y nano son los editores de texto más comunes en Linux. Puede usarlos para editar un archivo, de forma similar a usar el Bloc de notas en Windows.

Abre y crea un nuevo archivo, prueba :

# vim /test
Acciones Secuencia de teclas Explicación
Para comenzar a escribir contenido nuevo: i Preparar para insertar texto
Para salir sin guardar: Esc :q! Escapar del modo de inserción y salir
Para salir y guardar: Esc :wq! Escapar del modo de inserción, escribir y salir

eco

echo es un comando simple que le dice a Linux que repita lo que acaba de escribir. Esto es efectivo para probar grep comandos sin crear primero un archivo nuevo.

Por ejemplo, haz hola mostrar:

# echo 'hello'
hello

Mostrar hola y busca las letras del medio:

# echo 'hello' | grep 'ell'
hello

Incluso puedes usar echo para mostrar varias líneas usando -e y \n para agregar nuevas líneas.

Mostrar hola y ho en líneas separadas:

# echo -e 'hi\nho'
hi
ho

Mostrar hola y ho en líneas separadas y busque hola :

# echo -e 'hi\nho' | grep 'hi'
hi

sed

Como grep , sed tiene muchos usos, pero principalmente usa este comando para buscar y reemplazar contenido específico. Estos son algunos ejemplos básicos de cómo destacar líneas específicas:

Primero, usa vim para crear un archivo:

# vim /test

Cuando se abra el editor, ingrese las siguientes líneas:

1 Hi
2 How
3 Are
4 You

Mostrar el nuevo archivo:

# cat test
1 Hi
2 How
3 Are
4 You

Usa sed para devolver todo excepto la primera línea:

# sed 1d test
2 How
3 Are
4 You

Devuelve solo la primera línea:

# sed 1q test

o

# sed '1!d' test
1 Hi

Devuelve solo la segunda a la cuarta línea:

# sed '2,4!d' test
2 How
3 Are
4 You

Conclusión

Hay muchas otras herramientas que puede usar, como awk , cut , sort , xargs ,y así. Ahora que sabe cómo crear un archivo usando echo , puede experimentar más eficazmente con ellos.


Linux
  1. Diferencia entre /bin/falso y /sbin/nologin

  2. /usr/bin Vs /usr/local/bin ¿En Linux?

  3. ¿Se permite espacio entre #! ¿Y /bin/bash en Shebang?

  4. ¿Alguna razón para tener un Shebang apuntando a /bin/sh en lugar de /bin/bash?

  5. Instalar binarios en /bin, /sbin, /usr/bin y /usr/sbin, interacciones con --prefix y DESTDIR

Linux – ¿Fusionar /usr/bin y /usr/sbin en /bin (gnu/linux)?

¿Por qué /bin/sh apunta a /bin/dash y no a /bin/bash?

¿Cuándo debo usar #!/bin/bash y cuándo #!/bin/sh?

Se movió el contenido de /bin a /usr/bin, ¿es posible deshacerlo?

chroot falla:no se puede ejecutar el comando '/bin/bash':no ​​existe tal archivo o directorio

#!/bin/sh vs #!/bin/bash para máxima portabilidad