domingo, 31 de agosto de 2014

grep: buscando cadenas de caracteres en ficheros

Si trabajas mucho con consola, hay determinadas herramientas imprescindibles, y una de ellas es grep.
Imagina que tienes un fichero de texto (de configuración de algún programa, por ejemplo) y que este fichero tiene un tamaño bastante respetable. Imagina que necesitas encontrar el lugar exacto de ese fichero donde se encuentra un texto concreto. Si no conoces grep, tendrás que revisar todo el contenido buscando la cadena dichosa, y seguramente la pases por alto, teniendo que comenzar de nuevo.

Pues bien, si utilizas grep (viene por defecto en casi todos los sistemas, en caso contrario, instálalo con apt-get), resolverás el problema en 5 segundos.



Antes de empezar, un par de puntualizaciones:

- Si la cadena a buscar está formada por mas de una palabra, deberemos entrecomillarlas.

- El texto a buscar es sensible a mayúsculas/minúsculas. Si no sabemos como está escrita la palabra en el documento, usaremos el parámetro -i


Ejemplos de usos:

grep cadena fichero Esta orden mostrará las líneas del fichero en las cuales exista la cadena que le pasamos como parámetro

grep "cadena de texto" fichero  Buscamos mas de una palabra

grep -i cadena fichero No se tendrá en cuenta ni mayúculas ni minúsculas

grep cadena fichero1 fichero2 fichero3 Si la búsqueda la queremos hacer en varios ficheros

grep -r cadena carpeta/ La búsqueda se realizará de forma recursiva en el directorio especificado

grep -v cadena fichero Justamente al revés que grep cadena fichero, es decir, nos devolverá todas las líneas QUE NO COINCIDAN

grep -n cadena fichero Además de la línea, devolverá el número de línea en que se encuentra la cadena

También podemos usar grep para filtrar datos de salida de otras aplicaciones, por ejemplo:
ps ax | grep firefox Solo nos presentará las líneas que contengan firefox al ejecutar el comando ps ax

dpkg -l | grep paquete En este caso, grep filtrará las coincidencias de la cadena con los paquetes instalados

Como siempre digo al final de los artículos, hay muchas mas opciones, y para eso está la documentación oficial:



grep -lir "cadena a buscar" "/media/win/cosas"
- El parámetro -l le indica que imprima los nombres de archivos en los que se encuentre el texto solicitado.
- El parámetro -i, que ignore las mayúsculas y minúsculas.
- El parámetro -r, que busque en forma recursiva dentro de la ruta indicada.



============================================


 En modo gráfico podemos hacerlo con el programa:

KFileReplace




































Cómo averiguar el UUID de un disco o partición en Debian

UUID (Universally Unique IDentifier – Identificador Universal Único)  


Hace mucho tiempo atrás, en GNU/Linux utilizábamos las rutas directas a los dispositivos (/dev/sda1, por ejemplo) para acceder a los recursos.
El problema con este “método” era que si creabas otras partición y se re-enumeraban las particiones, podíamos quedar con un sistema “inservible”.
Entonces, se creo y se empezó a utilizar los UUID (Universal Unique IDentifier),esto es, un número único de 16 bits que identifica cada partición del disco, lo que antes se veía así:

/boot /dev/sda1 ext4
Ahora se ve así:
 
UUID=3336babe-32e0-4dce-8133-231cbd7bc1d6 /boot    ext4
Ahora, si instalas otro sistema operativo que cambia la geometría del disco, o formateas una partición y la vuelves a crear, este UUID cambiará, y tendrás que actualizar el archivo fstab con blkid

 

Usando BLKID

blkid es un comando que devuelve el UUID de una partición, o de todas si lo ejecutamos sin parámetros:
 
blkid
/dev/sda1: LABEL="BOOT" UUID="3336babe-32e0-4dce-8133-231cbd7bc1d6" TYPE="ext4" 
/dev/sda2: LABEL="DEBIAN" UUID="76d41514-b0c5-4b2b-919b-3d700046fc11" TYPE="ext4"
Para una partición específica:
 
blkid /dev/sda7 
/dev/sda7: UUID="21bd731f-1f51-4ff4-9568-6dbd89809108" TYPE="swap"
Lo guay de blkid es que puede ser ejecutado incluso en modo “single recovery” de tal manera que podemos corregir el UUID de cualquier dispositivo en cualquier momento.



===================================================



UUID (Universally Unique Identifier – Identificador Universal Único) 

A veces puede resultar bastante útil, e incluso otras veces imprescindible, averiguar el UUID de un disco o partición de un disco en Debian.
Actualmente, en la configuración de /etc/fstab para montar las particiones en Debian aparece el UUID de la partición en vez de (/dev/hda1, /dev/sda1, …).
En fin, sea por el motivo que sea, si quieres saber cual es el UUID de un determinado device, no tienes más que ejecutar el comando blkid, por 

ejemplo:

 
# blkid /dev/sda1
/dev/sda1: UUID="8b6ec31c-1f41-49f3-82da-d2ab0f0fa312" TYPE="ext3"


Dicho sea de paso, también existe otro método para averiguar el UUID de una unidad. 

Para ello vamos a ir a: /dev/disks/by-uuid/ y hacer un ls.

Por ejemplo:


$ ls -l /dev/disks/by-uuid/
lrwxrwxrwx 1 root root 10 2009-11-19 07:56 8b6ec31c-1f41-49f3-82da-d2ab0f0fa312 -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-11-19 07:56 626adc53-3478-4eb1-9f68-dc0b6f9308e7 -> ../../sda2
lrwxrwxrwx 1 root root 10 2009-11-19 07:56 9cfc5c6d-f343-411e-ac59-31eee6b12a9b -> ../../sda3


La ventaja de este último comando es que no necesitamos tener permisos de administrador.