Comandos Linux: grep con ejemplos prácticos y útiles (parte 2)

En el post anterior vimos los ejemplos básicos del comando linux grep con el que podemos encontrar una cadena o texto en un archivo en un flujo de texto, pero es el poder y utilidad de grep realmente grande cuando lo utilizamos para filtrar y encontrar datos valiosos junto con otros comandos mediante las llamadas tuberías o pipes y aquí te muestro el comando grep en linux con ejemplos avanzados.

Comandos Linux: grep con ejemplos prácticos y útiles (parte 2)

El comando grep por si solo puede hacer cosas útiles como encontrar el texto en un archivo o buscar en archivos y directorios, esos archivos que contienen una cadena de texto, mostrar las lineas en las que se encuentra o los nombre de los archivos y su ruta en donde ese texto fue encontrado. Pero el grep tiene una mayor utilidad cuando se utiliza junto con otros comandos y te muestro algunos ejemplos prácticos.

1 Listar Archivos o Directorios de Septiembre

El comando ls nos permite listar el contenido de un directorio pero si queremos solo los archivos o directorios de septiembre (sep) en en listado podemos usar el comando linux grep de esta forma:

$ ls -l | grep sep
drwxr-xr-x 2 user1 user1 4096 sep 19 19:06 MEGAsync
drwxr-xr-x 2 user1 user1 4096 sep 2 17:52 Public
drwxr-xr-x 2 user1 user1 4096 sep 2 17:52 Templates
-rw-r--r-- 1 user1 user1 20127 sep 24 21:04 voip.log

2 Que modelo de procesador tiene tu equipo

Cuando necesitamos un dato del equipo por ejemplo el modelo del procesador podemos buscar en el archivo /proc/cpuinfo pero es un listado muy largo. Para mostrar el datos concreto podemos usar grep asi:

$ cat /proc/cpuinfo | grep -i 'Model'
 model : 42
 model name : Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz

3 Ver detalles de un archivo en u directorio con cientos o miles

Si necesitas los permisos de acceso y los datos de un solo archivo cuando tiene cientos o miles puedes usar ls y grep así:

$ ls -l | grep Music
 drwxr-xr-x 6 user1 user1 4096 dic 21 15:03 Music

4 Saber las direcciones IP sin tanto rollo

Los comandos ifconfig o ip add te muestran los datos y configuración de las interfaces de red pero junto con un montón de información que a veces no queremos ver, para ver solo la IP sin «todo lo demás» puedes usarlos junto con grep y buscar el texto «inet», así:

$ ip add | grep inet
 inet 127.0.0.1/8 scope host lo
 inet6 ::1/128 scope host
 inet 192.168.0.16/24 brd 192.168.0.255 scope global eth0
 inet6 fe80::5604:a6ff:feae:1284/64 scope link

Si te fijas aparecen también las interfaces de IPv6 si solo quieres las IPv4 utiliza el parametro -w para indicar que solo quieres buscar la palabra completa

$ ip add | grep -w inet
 inet 127.0.0.1/8 scope host lo
 inet 192.168.0.16/24 brd 192.168.0.255 scope global eth0

5 Ver el Historial de un comando en particular

Cuando administras muchos servicios ocurre que hay que hacer algunos comandos de forma rutinaria, y el comando history te muestra todos lo comandos anteriores que se han ejecutado por el usuario que estés usando. En este caso grep te puede ayudar a mostrar un comando particular por ejemplo el comando mount.

$ history | grep mount
 475 sudo mount -t nfs 192.168.0.245:/folder02 /home/user1/ISOs/
 476 sudo mount 192.168.0.245:/folder02 /home/user1/ISOs

6 Saber que usuarios y cuantos son los que usan una aplicación

En un sistema utilizado por muchos usuarios puede ser necesario saber cuantos de ellos están usando una aplicación o un archivo y que usuarios puntualmente, para eso puedes usar una comando serie de comandos como lsof (archivos abiertos), grep (seleccionar lo que necesitas),  awk (mostrar solo la columna, la de usuarios), uniq (para mostrar solo 1 ocasión a cada palabra) y luego puedes usar wc (para contar los usuarios), este artilugio de comandos se usan mediante pipes o tuberías, que pasan el resultado de un comando como la entrada del siguiente, así:

$ lsof | grep APLICACION1 | awk '{ print $3 }' | uniq
 sistemas1
 sistemas4
 sistemas5
$ lsof | grep APLICACION1 | awk '{ print $3 }' | uniq | wc -l
 3

Aquí utilizas grep para mostrar solo los archivos abiertos que tengan «APLICACION1» en el resultado y luego se muestra solo la lista de usuarios, sin los demás datos, en el último comando solo cuentas cuantos son. Así puedes tener solo la información que requieres.

7 Verificar si un usuario existe en el sistema

Este es un comando con el que puedes determinar rápidamente si un usuario existe en un sistema o no.

# grep usuario1 /etc/passwd
 usuario1:x:1000:1000:usuario1,,,:/home/usuario1:/bin/bash

8 Saber que archivos tiene permisos 777 o rwxrwxrwx

En ocasiones es peligroso dar permisos de lectura, escritura y ejecución a ciertos archivos y para encontrarlos fácilmente puedes utilizar ls y grep, de esta forma:

$ ls -l | grep rwxrwxrwx
 -rwxrwxrwx 1 user1 user1 138 ene 30 11:28 some-script.sh

Si quieres encontrar los directorios que tiene permisos de lectura, escritura, acceso puedes agregar solo el identificador «d» a la lista de permisos, asi:

$ ls -l | grep drwxrwxrwx
 drwxrwxrwx 2 user1 user1 4096 ene 30 11:30 writable-directory

9 Como ver la MAC address de nuestro equipo

No es el comando mas simple, pero lo que te quiero mostrar es que se puede extraer el dato concreto de una gran cantidad de texto con el comando grep, aquí te muestro el ejemplo:

$ ifconfig eth0 | grep -oiE '([0-9A-F]{2}:){5}[0-9A-F]{2}'
 54:04:a6:ae:17:84

en vez de todo este texto:

$ ifconfig
 eth0 Link encap:Ethernet direcciónHW 54:04:a6:ae:17:84
 Direc. inet:10.102.XXX.XXX Difus.:10.102.XXX.255 Másc:255.255.255.0
 Dirección inet6: fe80::5604:a6ff:feae:1284/64 Alcance:Enlace
 ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
 Paquetes RX:3224406 errores:0 perdidos:0 overruns:0 frame:0
 Paquetes TX:510180 errores:0 perdidos:0 overruns:0 carrier:9
 colisiones:0 long.colaTX:1000
 Bytes RX:850258149 (850.2 MB) TX bytes:102167181 (102.1 MB)
lo Link encap:Bucle local
 Direc. inet:127.0.0.1 Másc:255.0.0.0
 Dirección inet6: ::1/128 Alcance:Anfitrión
 ACTIVO BUCLE FUNCIONANDO MTU:65536 Métrica:1
 Paquetes RX:168610 errores:0 perdidos:0 overruns:0 frame:0
 Paquetes TX:168610 errores:0 perdidos:0 overruns:0 carrier:0
 colisiones:0 long.colaTX:0
 Bytes RX:138589962 (138.5 MB) TX bytes:138589962 (138.5 MB)

Como ves grep es un comando linux muy útil, que permite ahorrar tiempo y tener datos concisos cuando se requieren sin tener que estar buscando entre cientos de lineas de texto. Espero que estos ejemplos te sean de mucha utilidad y no olvides compartirnos como usas grep en linux.

Tu Servidor y Amigo

luis armando medina

Sígueme en Twitter: @larmedina
Dale Like a mi Fan Page: Luis Medina

This entry was posted in Comandos Linux and tagged , , . Bookmark the permalink.

Deja una respuesta

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


*