Miscelánea de comandos Unix
Uno de los principios de diseño de Unix consiste en desarrollar programas pequeños optimizados para realizar una función específica.
Haz una cosa, pero hazla bien
Por eso, en un sistema Unix existen multitud de comandos que podemos utilizar para resolver cualquier situación.
Obteniendo ayuda
Podemos obtener ayuda de muchos libros, internet o de cualquier persona que tengamos a nuestro alcance. Pero si lo que necesitamos es recordar la sintáxis de un comando, o consultar qué función tiene determinado programa, lo más cómodo es acudir a la ayuda instalada en nuestro propio sistema.
Contamos con:
- Páginas de manual:
- El comando man permite buscar entre las páginas de manual (electrónico) de comandos y ficheros de configuración. El manual está estructurado en capítulos que agrupan ítems de un mismo tema.
- Páginas info:
- El comando info es la entrada al sistema de ayuda del proyecto GNU. Es similar a las páginas de manual, pero permite navegar por documentos con enlaces de una manera parecida a lo que permite hacer la web.
Comando | Función |
---|---|
man <entrada> | Busca en las páginas de manual la primera referida a <entrada> |
man <n> <entrada> | Busca la página de manual de <entrada> en el capítulo <n> |
apropos <entrada> | Lista todas las páginas en las que se habla de <entrada> |
whatis <entrada> | Busca en la base de datos whatis (contiene la descripción de los comandos) <entrada> |
info <entrada> | Muestra la información del sistema info relativa a <entrada> |
Trabajando con ficheros
Desde la línea de comandos se pueden realizar multitud de operaciones sobre los ficheros y directorios. Algunas de las más básicas son:
Comando | Función |
---|---|
ls |
Obtiene un listado |
mkdir <directorio> |
Crea un directorio |
cp <origen> <destino> |
Realiza una copia |
rm <fichero> |
Elimina el fichero |
rm -rf <directorio> |
Elimina el directorio y su contenido |
ln [-s] <fichero> <enlace> |
Crea un enlace a <fichero> |
touch <fichero> |
Si no existe crea el fichero, si existe actualiza su fecha de modificación y de acceso |
cmp <fichero> <fichero> |
Compara dos ficheros byte a byte |
diff <fichero> <fichero> |
Busca diferencias línea a línea en ficheros de texto |
cat <fichero> |
Lee el contenido de <fichero> y lo vuelca por la salida estándard |
tac <fichero> | Como cat pero leyendo las líneas en orden inverso (desde la última hasta la primera) |
file <fichero> |
Muestra información sobre los datos contenidos por <fichero> |
hexdump <fichero> |
Muestra el contenido de <fichero> en ASCCI, hexadecimal, octal o decimal |
strings <fichero> | Extrae todas las cadenas contenidas en un fichero |
objdump | Permite desensamblar ficheros ejecutables |
gzip, gunzip |
Comprime y descomprime utilizando la codificación Lempel-Ziv (LZ77) |
zcat | Igual que cat pero para ficheros comprimidos con gzip |
bzip2, bunzip2 | Comprime y descomprime utilizando el algoritmo Burrows-Wheeler y la codificación Huffman. Normalmente consigue mejores ratios de compresión que los algoritmos LZ77/LZ78. |
bzcat | Igual que cat pero para ficheros comprimidos con bzip2 |
tar | Archiva/desarchiva (pudiendo utilizar compresión gzip o bzip2) |
du |
Indica el espacio consumido en el sistema de ficheros por un archivo o directorio |
chmod |
Cambia los permisos de un fichero |
chown |
Cambia el dueño y/o el grupo de un fichero |
chgrp |
Cambia el grupo de un fichero |
split | Divide un fichero grande en ficheros pequeños de determinado tamaño |
dd | Lee bloques desde un fichero y los escribe en otro, puede realizar una conversión de formato |
basename | Retorna el nombre de un fichero (dado /d1/d2/fichero retornaría fichero) |
dirname | Retorna la ruta de un fichero (dado /d1/d2/fichero retornaría /d1/d2) |
Búsquedas de archivos
En Unix existen dos mecanismos de búsqueda diferenciados:
- Comando find
- Permite realizar búsquedas en el sistema de archivos especificando diferentes criterios: nombre, tamaño, fecha de modificación, usuario, grupo, permisos...
- Comando locate
- Realiza búsquedas en una base de datos que representa al sistema de archivos. Las búsquedas son mucho más rápidas que con find, pero si la base de datos no está actualizada no nos encontrará los ficheros nuevos, o aún nos dirá que existen los ficheros que ya se han borrado. Actualizar la base de datos es una tarea que consume recursos, por eso sólo la puede ejecutar el administrador. En algunos sistemas hay una tarea programada para tal fin.
Comando | Función |
---|---|
find | Busca en el sistema de archivos |
locate |
Busca en una base de datos (índice) que representa al sistema de archivos |
updatedb | Actualiza la base de datos utilizada por locate |
which <comando> |
Indica dónde está el comando <comando> |
Sobre find:
La página de manual de find muestra con detalle las opciones que se pueden utilizar. Una introducción breve puede ser:
- Cuando se ejecuta find, normalmente se indica:
- Directorio a partir del cual comienza la búsqueda. Si no se indica, se tomará el directorio actual.
- Condiciones que han de cumplir los ficheros buscados. Tamaño, nombre, fecha de modificación, fecha de creación, dueño, grupo, etc...
- Acción a realizar con los ficheros encontrados. Es posible ejecutar cualquier comando sobre los ficheros encontrados, por ejemplo rm. Pero si no se indica ninguna acción, entonces se lista el nombre de los ficheros encontrados.
- En la expresión que deben cumplir los ficheros buscados se pueden utilizar valores numéricos, por ejemplo para indicar un tamaño. Estos valores se pueden expresar de tres maneras diferentes:
- +n -> Un número mayor que n
- -n -> Un número menor que n
- n -> Exactamente el valor n
- Algunas opciones que se pueden indicar para establecer los criterios de búsqueda son:
- amin n -> El fichero fué accedido hace n minutos.
- empty -> El fichero (o directorio) está vacío.
- links n -> El fichero tiene n enlaces.
- mmin n -> El fichero fué modificado hace n minutos.
- name <patrón> -> El nombre del fichero concuerda con el patrón especificado.
- size n[cwbkMG] -> El fichero tiene el tamaño especificado.
- type c -> El fichero es del tipo especificado.
Ejemplos:
- Buscar, a partir del directorio de conexión, todos los ficheros cuyo nombre termina en 'html'
[vcarceler@localhost vcarceler]$ find ~ -name "*html"
/home/vcarceler/.kde/share/apps/amarok/contextbrowser.html
/home/vcarceler/.kde/share/apps/khtml
/home/vcarceler/.mozilla/firefox/p3apjch9.default/bookmarks.html
/home/vcarceler/.openoffice/THIRDPARTYLICENSEREADME.html
/home/vcarceler/html
/home/vcarceler/html/float.html
/home/vcarceler/.superkaramba/newestThemes.html
/home/vcarceler/wordpress/readme.html
/home/vcarceler/pruebas/html
/home/vcarceler/pruebas/html/mapa.html
/home/vcarceler/pruebas/html/directorio_fotos/directorio_fotos.html
/home/vcarceler/pruebas/html/vcarceler/directorio_fotos.html
[vcarceler@localhost vcarceler]$ - Buscar, a partir del directorio de conexión, todos los ficheros cuyo nombre termina en 'html' y tengan un tamaño inferior a 1024 bytes.
[vcarceler@localhost vcarceler]$ find ~ -name "*html" -size -1024c
/home/vcarceler/html/float.html
/home/vcarceler/.superkaramba/newestThemes.html
/home/vcarceler/pruebas/html/mapa.html
/home/vcarceler/pruebas/html/directorio_fotos/directorio_fotos.html
[vcarceler@localhost vcarceler]$ - Buscar con locate los ficheros que tengan por nombre 'gqview.png'
[vcarceler@localhost vcarceler]$ locate gqview.png
/usr/share/pixmaps/gqview.png
/usr/share/icons/large/gqview.png
/usr/share/icons/mini/gqview.png
/usr/share/icons/gqview.png
[vcarceler@localhost vcarceler]$
Filtros
Muchos comandos, aunque se pueden utilizar solos, se utilizan principalmente en tuberias. Estos comandos leen datos desde la entrada estándard y vuelcan su salida en la salida estándard. A estos comandos se los llama filtros.
Comando | Función |
---|---|
less |
Paginador. Muestra información página a página, permitiendo el avance y el retroceso |
grep <patrón> |
Sólo deja pasar las líneas que coinciden con el <patrón> especificado. El manual de grep es un buen sitio en el que aprender sobre las expresiones regulares. |
wc |
Cuenta el número de carácteres, palabras, líneas de la entrada |
sum, cksum, md5sum |
Calculan la suma de comprobación, el CRC o el algoritmo de resumen MD5 |
nl | Numera líneas |
head |
Muestra las primeras líneas |
tail |
Muestra las últimas líneas |
sort |
Ordena líneas |
uniq |
Elimina líneas repetidas, las líneas que procesa deben estar ordenadas |
cut |
Selecciona porciones de una línea |
paste |
Une las líneas correspondientes de diferentes ficheros (la primera con la primera, la segunda con la segunda...) |
tee |
Lee desde la entrada estándard y escribe en la salida estándard y en un fichero. |
sed | Editor de flujos |
Comunicación entre los usuarios
Unix es un sistema operativo multiusuario. Varios usuarios pueden trabajar de manera simultánea en el mismo sistema informático. Por esta razón existen diferentes comandos que permiten la comunicación entre usuarios.
Comando | Función |
---|---|
who |
Muestra quien está conectado al sistema |
whoami | Retorna el identificador del usuario que estamos utilizando |
write <usuario> | Permite enviar un mensaje a la terminal del usurio indicado |
mesg | Permite definir si aceptamos, o no, los mensajes de otros usuarios |
wall <mensaje> | Difunde <mensaje> a todos los usuarios conectados al sistema |
talk <usuario@máquina> |
Inicia una sesión de charla con otroo usuario |
mail |
Permite leer y enviar correo electrónico |
Otras utilidades
Existen multitud de pequeñas aplicaciones como:
Comando | Función |
---|---|
banner <cadena> |
Escribe en la salida estándard la cadena formando las letras con otros carácteres |
cal | Muestra el calendario del mes, o del año indicado. La opción -m indica que las semanas comienzan en lunes. |
date | Muestra la hora/fecha del sistema en cualquier formato |
emacs |
Un conocido editor de textos |
dialog |
Permite crear diferentes diálogos para los shell scripts |
links |
Navegador web para la cónsola |
lynx |
Navegador web para la cónsola |
units | Realiza cambios de unidades |
vi |
Un conocido editor de textos |
wget |
Descarga ficheros de servidores HTTP o FTP |
yes | Escribe líneas con la cadena indicada hasta que se mata el proceso |