dardo
03/05/2008, 11:49
Buenos días, niños y niñas, amantes o usuarios de computadoras y entusiastas de los pingüinos.
El motivo para de que estemos os haya reunido aquí hoy es para daros el coñazo con un sencillo consejo para mejorar nuestra eficacia en la linea de comandos y seamos capaces de construir comandos o programas eficaces además de útiles.
Bien. Todos cononcemos o deberíamos conocer el funcionamiento de la herramienta grep. El que no lo sepa puede hace un man grep aunque es una página muy larga y carente de ejemplos de verdad útiles. Además yo lo explico de manera más divertida. Este si que es un comando de élite y no el pringado de Rambo.
Usar grep es muy sencillo.
Su uso normal es
grep patrón archivo
Así extraemos de un archivo las lineas con el patrón solicitado. Esto es una mierda pinchada en un palo. Solo tiene un posible uso, y es saber la posición de algo en un archivo que contiene una lista ordendada.
Pongamos que somos unos hackers de élite y que estamos en la lista negra de la mafia rusa, y que van a matar a nuestra familia, a nosotros y ademas de a mucha otra gente que ni nos va ni nos viene (que se jodan,por meterse en asuntos de la mafia).
Bien, estamos dentro del servidor, estamos posicionados dentro del computador en el directorio donde se encuentra el fichero ListaNegra.txt que en cada linea contiene un nombre propio.
Queremos saber si van a matar a Rasmaninov, nuestro chivato y Kachaturian, nuestra follamiga, que de ayuda en la investigación no nos sirve pero nos ayuda a desahogarnos un montón.
El fichero es un asco. Unos nombres están en mayúsculas,otros en minusculas, en unos casos los apellidos preceden al nombre y en otros no y en algunos casos estan separados por comas. Esto es un infierno.
El grep viene en nuestra ayuda.
grep rasmaninov ListaNegra.txt
No devuelve nada, pero vimos a unos hampones en el juicio a unos de los líderes hacerle señas indicándole que estaba muerto.
Seguro que está. Nos viene a la cabeza el modificador -i
grep -i rasmaninov ListaNegra.txt
Rasmaninov, Boris
Sabemos que le van a matar, pero no sabemos que posición ocupa en la lista. Lo que si sabemos que al último que ha matado es a un informador extranjero al que llaman "el maceta".
grep -in maceta ListaNegra.txt ; grep -in rasmaninov ListaNegra.txt
28: JaVIER MARTINEZ "MACETA"
30: Rasmaninov, Boris
Hay uno entre el maceta y nuestro chivato particular. Es hora de ir a buscar otro chivato.
Vamos a ver si nuestra amiga está en la lista negra.
grep -in KachaturianSalen muchos resultados y se nos desborda la pantalla. Tiene que haber una manera.
grep -ni kachaturian |grep -i natasha
266: Natasha Kachaturian - zorrita de mucho cuidado - al jefe nadie le dice que no
Bien, hemos visto dtres cosas:
1.- Que no es la siguiente en la lista.
2.- Grep es un filtro. Un filtro es un comando que toma su entrada de la entrada estándar y lo lleva a la salida estándar haciendo algún proceso de la información. En el caso del grep quitar todas las lineas que no coincidan con un patrón.
3.- Que tenemos tiempo suficiente para trabar amistad con una profesional para que sustituya a nuestra follamiga y cmo ya tenemos confianza nos haga tarifa plana.
Nos hemos quedado con las ganas de ver las cuentas de los rusos y cuantos de los de la lista negra no se apellidan Kachaturian.
Bien, en el mundo UNIX y en el caso de los servidores de la mafia rusa también todo son ficheros, incluso los procesos son ficheros.
Vamos a ver las cuentas rusas. Samemos que tienen un programa que a su vez lanza un subproceso hijo por cada cuenta en la que blanquea dinero.
ps -ef |grep -i muevepasta
Nos ha parecido un churro de cosas y nos ha desbordado la pantalla por muchísmo. Podiamos redirigir la salida a un fichero y estudiarlo en casa con muchos grep o bien podemos analizarlo sobre el campo.
Tenemos muchos procesos que tienen el parámetro legal, en varias combinaciones de mayúsculas y minúsculas, y nosotros solo queremos los que no tienen ese parámetro en la linea de comandos. Eso es lo contrario de lo que hace un grep, dado un patron quita lo que no sea, no lo que sea coincidente.
Probamos con uno de los parámetros sospechoso.
ps -ef |grep muevepasta |grep -i traficodearmas
boris 140644 41646 0 May 02 - 0:25 /usr/local/bin/muevepasta.ksh -c /etc/blanqueo/traficodearmas.conf
boris 150027 41646 0 May 03 - 0:23 /usr/local/bin/muevepasta.ksh -c /etc/blanqueo/traficodearmas.conf
fisgon 147352 113514 2 10:45:12 pts/1 0:00 grep grep -i traficodearmas
Que es esto, salen mis grep también. Claro, son procesos y ps muestra porcesos, y claro,coinciden con mi patrón. Tras consultar las páginas man recuerdo que existe el modificador v. Eso si es poderoso.
ps -ef |grep muevepasta | grep -vi legal | grep -v grep| wc -l
197
Bien, tenemos 197 hilos del script que blanquea dinero. Os va a caer un puro de mucho cuidado.
En el próximo número:
- "Te están apuntando cinco sicarios del hampa con sus pistolas"
- No pasa nada. Se expresiones regulares.
< - >
Ejercicio para casa.
Escribir un comando que diga cuantos de la lista negra se llaman Kachaturian pero que no tenga en cuanta a las primas de Natasha Kachaturian que tienen un segundo apellido que es Grozinsky y que sucede al primer apellido separado por un guión.
El motivo para de que estemos os haya reunido aquí hoy es para daros el coñazo con un sencillo consejo para mejorar nuestra eficacia en la linea de comandos y seamos capaces de construir comandos o programas eficaces además de útiles.
Bien. Todos cononcemos o deberíamos conocer el funcionamiento de la herramienta grep. El que no lo sepa puede hace un man grep aunque es una página muy larga y carente de ejemplos de verdad útiles. Además yo lo explico de manera más divertida. Este si que es un comando de élite y no el pringado de Rambo.
Usar grep es muy sencillo.
Su uso normal es
grep patrón archivo
Así extraemos de un archivo las lineas con el patrón solicitado. Esto es una mierda pinchada en un palo. Solo tiene un posible uso, y es saber la posición de algo en un archivo que contiene una lista ordendada.
Pongamos que somos unos hackers de élite y que estamos en la lista negra de la mafia rusa, y que van a matar a nuestra familia, a nosotros y ademas de a mucha otra gente que ni nos va ni nos viene (que se jodan,por meterse en asuntos de la mafia).
Bien, estamos dentro del servidor, estamos posicionados dentro del computador en el directorio donde se encuentra el fichero ListaNegra.txt que en cada linea contiene un nombre propio.
Queremos saber si van a matar a Rasmaninov, nuestro chivato y Kachaturian, nuestra follamiga, que de ayuda en la investigación no nos sirve pero nos ayuda a desahogarnos un montón.
El fichero es un asco. Unos nombres están en mayúsculas,otros en minusculas, en unos casos los apellidos preceden al nombre y en otros no y en algunos casos estan separados por comas. Esto es un infierno.
El grep viene en nuestra ayuda.
grep rasmaninov ListaNegra.txt
No devuelve nada, pero vimos a unos hampones en el juicio a unos de los líderes hacerle señas indicándole que estaba muerto.
Seguro que está. Nos viene a la cabeza el modificador -i
grep -i rasmaninov ListaNegra.txt
Rasmaninov, Boris
Sabemos que le van a matar, pero no sabemos que posición ocupa en la lista. Lo que si sabemos que al último que ha matado es a un informador extranjero al que llaman "el maceta".
grep -in maceta ListaNegra.txt ; grep -in rasmaninov ListaNegra.txt
28: JaVIER MARTINEZ "MACETA"
30: Rasmaninov, Boris
Hay uno entre el maceta y nuestro chivato particular. Es hora de ir a buscar otro chivato.
Vamos a ver si nuestra amiga está en la lista negra.
grep -in KachaturianSalen muchos resultados y se nos desborda la pantalla. Tiene que haber una manera.
grep -ni kachaturian |grep -i natasha
266: Natasha Kachaturian - zorrita de mucho cuidado - al jefe nadie le dice que no
Bien, hemos visto dtres cosas:
1.- Que no es la siguiente en la lista.
2.- Grep es un filtro. Un filtro es un comando que toma su entrada de la entrada estándar y lo lleva a la salida estándar haciendo algún proceso de la información. En el caso del grep quitar todas las lineas que no coincidan con un patrón.
3.- Que tenemos tiempo suficiente para trabar amistad con una profesional para que sustituya a nuestra follamiga y cmo ya tenemos confianza nos haga tarifa plana.
Nos hemos quedado con las ganas de ver las cuentas de los rusos y cuantos de los de la lista negra no se apellidan Kachaturian.
Bien, en el mundo UNIX y en el caso de los servidores de la mafia rusa también todo son ficheros, incluso los procesos son ficheros.
Vamos a ver las cuentas rusas. Samemos que tienen un programa que a su vez lanza un subproceso hijo por cada cuenta en la que blanquea dinero.
ps -ef |grep -i muevepasta
Nos ha parecido un churro de cosas y nos ha desbordado la pantalla por muchísmo. Podiamos redirigir la salida a un fichero y estudiarlo en casa con muchos grep o bien podemos analizarlo sobre el campo.
Tenemos muchos procesos que tienen el parámetro legal, en varias combinaciones de mayúsculas y minúsculas, y nosotros solo queremos los que no tienen ese parámetro en la linea de comandos. Eso es lo contrario de lo que hace un grep, dado un patron quita lo que no sea, no lo que sea coincidente.
Probamos con uno de los parámetros sospechoso.
ps -ef |grep muevepasta |grep -i traficodearmas
boris 140644 41646 0 May 02 - 0:25 /usr/local/bin/muevepasta.ksh -c /etc/blanqueo/traficodearmas.conf
boris 150027 41646 0 May 03 - 0:23 /usr/local/bin/muevepasta.ksh -c /etc/blanqueo/traficodearmas.conf
fisgon 147352 113514 2 10:45:12 pts/1 0:00 grep grep -i traficodearmas
Que es esto, salen mis grep también. Claro, son procesos y ps muestra porcesos, y claro,coinciden con mi patrón. Tras consultar las páginas man recuerdo que existe el modificador v. Eso si es poderoso.
ps -ef |grep muevepasta | grep -vi legal | grep -v grep| wc -l
197
Bien, tenemos 197 hilos del script que blanquea dinero. Os va a caer un puro de mucho cuidado.
En el próximo número:
- "Te están apuntando cinco sicarios del hampa con sus pistolas"
- No pasa nada. Se expresiones regulares.
< - >
Ejercicio para casa.
Escribir un comando que diga cuantos de la lista negra se llaman Kachaturian pero que no tenga en cuanta a las primas de Natasha Kachaturian que tienen un segundo apellido que es Grozinsky y que sucede al primer apellido separado por un guión.