lunes, 8 de junio de 2009

Algunos Comandos Interesantes

El comando sort

Este comando se utiliza para ordenar líneas de texto a partir de varios criterios, su sintaxis es similar a la de todos los comandos:

$ sort [opción...] [archivo...]


Si no se le provee al menos un argumento archivo, este comando tomará su entrada de la entrada estándar. El criterio de orden que utiliza sort por defecto es alfabético, esto se debe tener en cuenta siempre que se necesite ordenar listas de números, si no se le especifica a sort que debe ordenar numéricamente, tomará a los números como una lista de palabras y el resultado no será el deseado. Por ejemplo, alfabéticamente el número 10 está antes que el número 2.

La lista de opciones de sort es la siguiente:

-c Chequear si el/los archivos están ordenados, pero no ordenar.
-d Considerar únicamente los caracteres alfanuméricos.
-n Utilizar criterio numérico de ordenamiento.
-o ARCHIVO Escribir el resultado en ARCHIVO en lugar de enviarlo a la salida estándar.
-r Devolver el resultado inverso del ordenamiento.
-t SEP Utilizar SEP como separador en lugar de un espacio en blanco.
-T DIR Usar DIR como directorio temporal en lugar de /tmp.

El comando less

Este comando es de mucha utilidad, su función es paginar texto en pantalla. Muchas veces ocurre que cuando se ejecuta algún comando, la salida del mismo es demasiada información como para que se pueda leer en la pantalla del monitor, entonces se puede redireccionar esta salida al less para que permita al usuario leer sin mayores problemas, pudiendo avanzar o retroceder en el texto con las flechas de cursor del teclado. También se utiliza para visualizar archivos de texto almacenados en disco.

La idea de less proviene de un paginador llamado more, un clásico en los UNIX. El more no era lo suficientemente amigable, es por eso que hicieron less. Su sintaxis es la siguiente:

$ less [archivo...]

Este comando es un programa interactivo, es por eso que no se hablará de argumentos sino de comandos:

[ESPACIO] Si se oprime la barra espaciadora, el less avanzará un número de líneas igual al número de líneas por pantalla que posea la terminal que se esté usando.
[ENTER] Pulsando la tecla ENTER se va avanzando de a una línea.
[G] Ir al final del texto.
[g] Ir al inicio del texto.
[/] Ingresar una palabra a ser buscada avanzando dentro del texto.
[?] Ingresar una palabra a ser buscada retrocediendo dentro del texto.
[n] Buscar la siguiente ocurrencia de la búsqueda.
[AvPág] Avanzar una pantalla de texto.
[RePág] Retroceder una pantalla de texto.
[v] Cargar el editor de texto en el lugar donde se encuentre el usuario dentro del archivo. El editor que normalmente se utiliza es el vi.
[q] Salir del programa.
[R] Repintar la pantalla. Útil cuando se está visualizando un archivo que ha sido modificado por otro programa.

El comando head

Escribe por salida estándar la primer parte de un archivo. Su sintaxis es como sigue:

$ head [opción...] [archivo...]

Si no se especifica el argumento archivo, este comando tomará su entrada de la entrada estándar. La lista de opciones mas importantes sigue a continuación:

-c N Escribe los primeros N bytes.
-n N Escribe las primeras N líneas en vez de las primeras 10 (que es el valor predeterminado).

El comando tail

Este comando es al head como el less es al more. El comando tail escribe a la salida estándar la última parte de un archivo. Su sintaxis es:

$ tail [opción...] [archivo...]


Al igual que head, si no se le proporciona un argumento archivo, este comando tomará su entrada desde la entrada estándar. Alguna de sus opciones son las siguientes:


-c N Escribe los últimos N bytes.
-n N Escribe las últimas N líneas.
-f Escribir la última parte del archivo a medida que va creciendo. Esta opción es muy útil para monitorear archivos de registro que van creciendo con el tiempo.

El comando grep

Escribir en salida estándar aquellas líneas que concuerden con un patrón. Su sintaxis es como sigue:

$ grep [opciones] PATRÓN [ARCHIVO...]
$ grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]

Este comando realiza una búsqueda en los ARCHIVOs (o en la entrada estándar, si no se especifica ninguno) para encontrar líneas que concuerden con PATRÓN. Por defecto grep imprime en pantalla dichas líneas. Sus opciones mas interesantes son:

-c Modifica la salida normal del programa, en lugar de imprimir por salida estándar las líneas coincidentes, imprime la cantidad de líneas que coincidieron en cada archivo.
-e PATRÓN Usar PATRÓN como el patrón de búsqueda, muy útil para proteger aquellos patrones de búsqueda que comienzan con el signo «-».
-f ARCHIVO Obtiene los patrones del archivo ARCHIVO.
-H Imprimir el nombre del archivo con cada coincidencia.
-r Buscar recursivamente dentro de todos los subdirectorios del directorio actual.


El patrón de búsqueda normalmente es una palabra o una parte de una palabra.
También se pueden utilizar expresiones regulares, para realizar búsquedas mas flexibles, por ejemplo, si se quisiera buscar la ocurrencia de todas las palabras que comiencen con «a» minúscula, la ejecución del comando sería algo así:

usuario@maquina:~/$ grep a* archivo


El tema de manejo de expresiones regulares es bastante largo y complejo, mas adelante se dará con mas detalle.

El comando find

Se utiliza este comando para buscar archivos dentro de una jerarquía de directorios. La búsqueda, como veremos mas adelante, se puede realizar mediante varios criterios. La sintaxis de este comando es:

$ find [camino...] [expresión]


La expresión se conforma de opciones, pruebas y acciones. En este manual no enumeraremos todas las opciones, pruebas y acciones de este comando, sino las expresiones que son mas cotidianas, dejamos al alumno para que investigue todo el potencial de este comando mediante la lectura de la página de manual por medio de la ejecución del siguiente comando:


$ man find

Algunos de los criterios de búsqueda que se pueden utilizar son:

$ find CAMINO -name ARCHIVO
$ find CAMINO -name ARCHIVO -perm MODO

ARCHIVO corresponde al nombre entero o en parte del archivo que se está buscando, MODO son los permisos del archivo a buscar representados en octal.

El comando whereis

Este comando se utiliza para localizar el archivo binario, el código fuente y la página de manual de un determinado comando. Su sintaxis es como sigue:

$ whereis [opciones] archivo...


La lista de opciones mas utilizadas es:


-b Buscar solamente el archivo binario.
-m Buscar solamente la página manual.
-s Buscar solamente el código fuente.
Como ejemplos, se ve lo siguiente:


usuario@maquina:~/$ whereis -m whereis
whereis: /usr/share/man/man1/whereis.1.gz
usuario@maquina:~/$ whereis man
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz


En el primer ejemplo se ha pedido la página de manual del mismo comando whereis, mientras que en el segundo se han pedido todos los archivos que tengan que ver con el comando passwd.

El comando locate

locate es un comando de búsqueda de archivos, bastante parecido al comando anteriormente visto, el find. La diferencia de locate es que la búsqueda la hace en una base de datos indexada para aumentar significativamente la velocidad de respuesta. Esto quiere decir, que locate realmente no busca en el disco del sistema, sino que en un archivo con la lista de todos los archivos que existen en el GNU/Linux. Generalmente todas las distribuciones de GNU/Linux ejecutan a una hora determinada (generalmente cerca de las 4:00am, ya que tarda algún tiempo realizar esta tarea) un comando para actualizar la base de datos que utiliza locate, dicho comando se llama updatedb. Su sintaxis es:

$ locate PATRÓN

Donde PATRÓN corresponde al mismo tipo de patrón que en el comando find. Ejemplo de ejecución:

usuario@maquina:~/$ locate locate
/usr/bin/locate
/usr/lib/locate
/usr/lib/locate/bigram
/usr/lib/locate/code
/usr/lib/locate/frcode
/usr/share/doc/kde/HTML/en/kcontrol/kcmlocate.docbook.gz
/usr/share/doc/xlibs-dev/XdbeAllocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XdbeDeallocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XtAllocateGC.3.html
/usr/share/emacs/20.7/lisp/locate.elc
/usr/share/gnome/help/gsearchtool/C/locate.png
/usr/share/man/man1/locate.1.gz
/usr/share/man/man5/locatedb.5.gz
/usr/X11R6/man/man3/XdbeAllocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XdbeDeallocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XtAllocateGC.3x.gz
/var/lib/locate
/var/lib/locate/locatedb
/var/lib/locate/locatedb.n

Como se puede observar en el ejemplo, locate ha listado todos aquellos archivos que posean la palabra «locate» en su nombre (los directorios están incluidos).

No hay comentarios: