Miscelánea de comandos Unix

per Victor Carceler darrera modificació 2020-03-25T15:30:21+01:00

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.
ComandoFunció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:

ComandoFunció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.
ComandoFunció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:

  1. 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]$
  2. 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]$
  3. 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.

ComandoFunció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.

ComandoFunció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:

ComandoFunció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