Mostrando entradas con la etiqueta ayuda. Mostrar todas las entradas
Mostrando entradas con la etiqueta ayuda. Mostrar todas las entradas

jueves, 16 de enero de 2014

Buscar y localizar archivos

Resto de entradas con intenciones didácticas en la etiqueta Aprendizaje.

El capítulo de hoy bien podría haber estado junto al de filtrado de archivos pero se hubiera hecho demasiado extenso y cansino, de modo que me ha parecido bien separarlo. Se trata de comandos para buscar y, por supuesto, encontrar archivos y directorios, el tipo de herramientas que siempre es bueno conocer y tener a mano.

find
Es el clásico comando de UNIX para encontrar archivos y directorios.
find -name lp: encuentra el fichero lp dentro del directorio actual.
find -iname lp: lo mismo pero sin tener en cuenta la diferencia entre mayúsculas y minúsculas.
find  /home/vacaciones/ -name "*.jpg": encuentra todos los ficheros con extensión .jpg que hay en el directorio /home/vacaciones.
find  /user -type f: encuentra todos los ficheros de tipo ordinario (parámetro "f") habidos dentro del directorio /user.
find / -user pedro: encuentra todos los archivos y directorios pertenecientes al usuario pedro.
find / -name cosas: encuentra el archivo cosas buscando a partir de la raíz del sistema. 
find . -name "hola.txt": encuentra todos los archivos de nombre hola.txt buscando a partir del directorio actual.
find . -size 50k: busca archivos que ocupen 50k a partir del directorio actual.
find . -size 20cbusca archivos que ocupen 20 bytes a partir del directorio actual. 
find . -size 5bbusca archivos que ocupen 5 bloques de 521 bytes cada uno a partir del directorio actual.
find / -empybusca archivos vacíos a partir del directorio raíz.
find /home/user1 -name \*.binbusca archivos con extensión .bin dentro del directorio /home/user1.
find /usr/bin -type f -mtime -10: encuentra archivos binarios creados o cambiados dentro de los últimos diez días.
find /usr/bin -type f -atime -100: encuentra archivos no usados dentro de los últimos diez días. 
Como ven las posibilidades son enormes (aún más si añadimos expresiones regulares o tuberías) y las variantes multitud. Acudan a las opciones de ayuda habituales y a internet para ampliar conocimientos. 

locate
Comando similar a find que realiza sus búsquedas conforme a una base de datos indexada (localizada en el archivo /var/lib/mlocate.db)  en lugar en relación al contenido del sistema. Su funcionamiento es en esencia igual.
locate -e archivo: busca solamente entradas de archivos existentes.
locate -i archivo: igual que la anterior pero ignorando la diferencia entre mayúsculas y minúsculas.
locate /home/*.txt: busca los archivos con extensión .txt en la ruta /home
whereis
Sirve para localizar un archivo binario (ejecutable), el código fuente y la página del manual de un comando.
whereis -b: busca solo el archivo binario.
whereis -m: busca solo la página del manual.
whereis -s: busca solo el código fuente.
whereis -b halt: muestra la ubicación del fichero binario correspondiente al comando halt.
which
Encuentra donde se está ubicado un archivo binario siempre que su ruta esté incluida en la variable PATH.

Y buscando algo con que ilustrar el comando find he encontrado este tema de Clannad llamado "I will find you" que aparecía en la banda sonora de "El último mohicano".



sábado, 7 de diciembre de 2013

Filtrar datos y archivos

Resto de entradas con intenciones didácticas en la etiqueta Aprendizaje.

En ocasiones será necesario recurrir a comandos que nos ayuden a localizar archivos binarios (ejecutables), paquetes, simples ficheros de trabajo o determinados contenidos dentro de ellos. Hoy vamos a hablar de algunas órdenes que nos ayudarán en la tarea de filtrar los resultados deseados ya sea en la búsqueda de ficheros o de sus datos.

grep
Conviene aprender bien como opera este comando ya que nos resultará muy útil para encontrar cadenas de texto dentro de ficheros, lo cual conviene cuando son extensos. Es básicamente un filtro que concreta la búsqueda en función del argumento que le acompañe. Algunas de sus opciones son:
grep -i: para no distinguir entre mayúsculas y minúsculas.
grep -n: muestra el nº de línea dentro de un archivo especificado según el patrón introducido.
grep -v: muestra las líneas no coincidentes con el patrón especificado.
grep -c: en lugar de mostrarlas líneas coincidentes con el patrón introducido muestra el número de líneas que coinciden.
grep -r: busca recursivamente dentro de los subdirectorios existentes en el directorio actual.
grep -o: para que en el listado solo aparezca la parte de la línea que coincide con el patrón.
Para entender la potencia de este comando conviene que veamos algunos ejemplos:
grep opciones docu.txt: para listar todas las líneas que contengan la cadena "opciones" dentro de docu.txt.
grep "expresiones regulares" docu.txt: para listar todas las líneas que contengan la cadena "expresiones regulares" dentro de docu.txt. Cuando se trate de dos o más palabras hay que entrecomillarlas.
grep -v "compras" departamentos.txtpara excluir del listado todas las líneas que contengan la cadena "compras" dentro de departamentos.txt.
grep guitarra dredg anathema dreamtheater rush > guitarras.txt: nos envía las líneas que contengan la palabra "guitarra" de los archivos dredg, anathema, dreamtheater y rush al archivo guitarras.txt.
grep guitarra dredg anathema dreamtheater rush | tee guitarras.txt: visualiza el mismo resultado que anteriormente por pantalla y, a través de una tubería, usamos el comando tee para enviarlo al archivo guitarras.txt.
sed
Comando que permite borrar líneas y registros o sustituir cadenas de caracteres dentro de las líneas. Estas modificaciones solo se dan a efectos de visualización y los archivos originales no se ven alterados salvo que utilicemos el comando de una manera muy concreta.
sed "3d" lista.lst: elimina la línea nº 3 del archivo lista.lst.
sed "3,5d" lista.lst: elimina el rango de líneas de la 3 a la 5 del archivo lista.lst.
sed "3,$d" lista.lst: elimina el rango de líneas de la 3 en adelante del archivo lista.lst.
sed "/^$/d" lista.lst: elimina las líneas en blanco del archivo lista.lst. 
sed "s/cadena1/cadena2/g" lista.lst: sustituye cadena1 por cadena2  en el archivo lista.lst.
sed "5 s/USUARIO/usuario/g" lista.lst: sustituye USUARIO por usuario en la línea nº 5 del archivo lista.lst. 
sed -i "3,5d" lista.lst: mismo efecto que el anterior, pero esta vez los cambios se realizan en el archivo.
sort
Comando para ordenar registros y líneas de uno o más archivos.
sort listado.txt: ofrece por pantalla las líneas del archivo listado.txt  ordenadas por orden alfabético.
sort listado.txt >  listado2.txt: crea un duplicado de listado.txt con nombre listado2.txt y con sus líneas ordenadas alfabéticamente.
sort -o listado.txt listado.txt: ordena las líneas del archivo sin ofrecerlo por pantalla.
sort -r listado.txt: muestra por pantalla las líneas del archivo ordenadas en orden inverso.
sort -n listado.txt: ordena las líneas por número; útil cuando dichas líneas comienzan con un carácter numérico.
sort -u salida.txt: elimina las líneas repetidas al ordenar el archivo salida.txt
sort -m lista1.txt lista2.txt: combina ambos archivos asumiendo que los dos están previamente ordenados.
sort -b: ignora los espacios en blanco. 
tr (translate)
Permite cambiar unos caracteres por otros dentro de un archivo. Primero especificamos lo que vamos a sustituir y seguidamente lo que lo sustituye. Escribamos su sintaxis y la aclararemos después con ejemplos:

tr [opción] SET1 [SET2].

Las opciones pueden ser
-d: elimina los caracteres incidados en SET1.
-s: elimina o reemplaza los caracteres indicados en SET1. 
-c: todos los caracteres que no estén indicados en SET1 los convierte a SET2.
-t: trunca la longitud de SET1 a la de SET2.
Veamos algunos ejemplos:
echo ejemplo | tr -d emp: elimina los caracteres emp de la palabra ejemplo. Aquí ejemplo sería SET1 y emp sería SET2.
echo ejjemmpplo | tr -s [a-zA-Z]: elimina cualquier letra (representada por la expresión comodín [a-zA-Z]) duplicada de la palabra ejjemmpplo.
echo "nací el 02 de enero de 1947" | tr -c [0-9] $: sustituye todo carácter no numérico (incluidos espacios en blanco -de nuevo ver comodines-) de la expresión "nací el 02 de enero de 1947" por el carácter $.
echo murcielago | tr aeiou AEIOU: lo que aquí decimos es que de murcielago cojamos las letras aeiou y las sustituyamos por AEIOU.
Como vengo insistiendo, esto no son más que pequeños ejemplos. Documentarse y practicar es la mejor receta para aprovechar las prestaciones de estos comandos.

Y como no podría ser más a propósito, ya que hemos hablado de filtros terminemos con un vídeo de la banda de Cleveland Filter y este potente "Welcome to the fold".



viernes, 17 de mayo de 2013

Como obtener ayuda del sistema

Resto de entradas con intenciones didácticas en la etiqueta Aprendizaje.

Estamos empezando ya a movernos con cierta asiduidad por el terminal de comandos, así que ha llegado la hora de conocer cómo el propio sistema nos puede prestar ayuda. Hay una serie de órdenes que nos resolverán un buen numero de papeletas y conviene conocerlas. En más de uno habrá que darle al inglés, algo de lo que ya les advertí en otra entrada.

w
Muestra datos de las diferentes sesiones activas.



paco@paco-pc:~$ w
 00:03:27 up 16 min,  2 users,  load average: 0,45, 0,41, 0,33
USER     TTY      FROM   LOGIN@   IDLE   JCPU   PCPU WHAT
paco     tty7         :0           23:47      16:26   36.04s   0.07s  gdm-session-wor
paco     pts/0      :0.0         00:03      0.00s   0.05s     0.00s  w
paco@paco-pc:~$

whoami
Con esto sabremos el nombre del usuario que ha abierto la sesión.



paco@paco-pc:~$ whoami
paco
paco@paco-pc:~$

who
Muestra los usuarios que están conectados en ese momento.



paco@paco-pc:~$ who
paco     tty7          2013-05-16 19:32 (:0)
paco     pts/0        2013-05-16 20:08 (:0)
paco@paco-pc:~$

tty

Muestra el nombre del terminal en uso. 


paco@paco-pc:~$ tty
/dev/pts/0
paco@paco-pc:~$

En mi caso estoy en el terminal 0.


man
Es el manual de instrucciones en línea del sistema. Con él podemos informarnos de la forma de uso de un comando concreto.



paco@paco-pc:~$ man
¿Qué página de manual desea?
paco@paco-pc:~$

Lo habitual es teclear man seguido del comando del que queremos información, separados por un espacio.


whatis
Sirve para buscar información rápida sobre los comandos usando palabras clave.



paco@paco-pc:~$ whatis man
man (1)              - una interfaz de los manuales de referencia electrónicos
man (7)              - macros para formatear páginas del manual
paco@paco-pc:~$

apropos
Busca información rápida en las páginas del manual en línea usando palabras clave.



paco@paco-pc:~$ apropos copy file
cp (1)                             - copy files and directories
cpio (1)                          - copy files to and from archives
git-checkout-index (1)   - Copy files from the index to the working tree
install (1)                       - copy files and set attributes
ntfscp (8)                      - copy file to an NTFS volume.
paxcpio (1)                    - copy file archives in and out
paco@paco-pc:~$

Cuanto más genérica sea la búsqueda más extenso será el resultado que obtengamos y quizá no es eso lo que queremos, con lo que conviene afinar.


info
Parecido a man pero ofreciendo información de ayuda más detallada ( y generalmente en inglés).


whereis
Para localizar el archivo binario (ejecutable en lenguaje Windows), el código fuente o la página del manual de un comando.



paco@paco-pc:~$ whereis cp
cp: /bin/cp /usr/share/man/man1/cp.1.gz
paco@paco-pc:~$

Hemos buscado el binario del comando cp (copy), obteniendo su localización en el sistema de archivos y directorios (/bin/cp) y la de su página en el manual en línea (/usr/share/man/man1/cp.1.gz).


<comando> -- help

La forma más rápida de obtener ayuda sobre un comando y la más utilizada, al menos al principio. Por ejemplo, tecleando cp --help obtendríamos la ayuda relativa al comando cp.

Aprovecho para subrayar que cada uno de estos comandos dispone de numerosas opciones que multiplican sus funcionalidades, pero que describirlas extenderían insufriblemente el post. Recomiendo utilizar <comando> --help para ir conociéndolas.



clear
Limpia la pantalla de la terminal llevando el prompt de comandos al inicio de la ventana.


Con tanta ayuda no es de extrañar que busque un vídeo con esa palabra en su título. Aquí tenemos a los blueseros Ten Years After en vivo con "Help me".