Comandos varios en sistemas UNIX
En este artículo vamos a aprender a usar unos cuantos comandos básicos en sistemas UNIX. Si utilizas este tipo de sistemas, es más que recomendable, conocer la terminal, que nos permitirá optimizar nuestro rendimiento con el ordenador.
Ya dedicamos una publicación a analizar la orden «find» y otros comandos curiosos. También puedes ampliar información adicional en la sección de «scripts» de este blog.
Sumario
- La orden banner
- La orden date
- La orden cal
- Las órdenes tail y head
- Las órdenes cmp y diff
- Las órdenes sort y uniq
- La orden clear
- La orden nl
- La orden wc
- La orden tee
- La orden tar
Disponemos de muchísimos comandos para la administración de sistemas Unix, independientemente de la distribución elegida. No obstante existen algunas diferencias entre familias de sistemas operativos, sobre todo con los gestores de paquetes y alguna más, como editores, etc…Vamos a ver algunos comandos.
La orden banner
Esta orden nos permite mostrar un banner en tamaño grande en nuestra terminal. Lo podemos utilizar, por ejemplo, para introducir un aviso o mostrar el nombre en un script. Lo instalamos con el comando
sudo apt install sysvbanner
La sintaxis es sencilla
banner texto
Consulta el manual integrado con
man banner
La orden date
UNIX controla el tiempo dentro del sistema para todas las resoluciones, desde milisegundos hasta años. Casi todos los sistemas tienen chips internos de reloj/calendario y el tiempo está, generalmente, definido correctamente cuando se arranca.
Todos los ficheros tienen asociado su tiempo de creación, del último acceso y de la última modificación. Además, hay una orden de propósito general para visualizar la fecha y la hora actual.
date
La orden cal
Se trata de un calendario. En alguna distribución ya viene instalado predeterminadamente, pero si no es el caso lo instalas, en sistemas Debian y derivados, con la orden
sudo apt install ncal
La sintaxis es sencilla
cal [ -j ] [ [ mes ] año ]
Para obtener el calendario por la salida de la terminal ejecutamos el comando sin argumentos
cal
Si especificamos un año como argumento, obtendremos el calendario de todo el año. Tomando un segundo argumento para indicar un mes, el sistema mostrará el calendario de ese mes y año.
cal 2022 cal 11 2022
Como curiosidad, con la opción «-j» nos mostrará el calendario juliano (el número de días desde el 1 de enero).
Las órdenes tail y head
La orden «tail» se utiliza para examinar las últimas lineas, o cola, del fichero especificado como argumento. Esta orden escribe las 10 últimas líneas de dicho fichero en la salida estándar del comando.
tail fichero
Opcionalmente se puede especificar el número de líneas a visualizar.
tail -5 fichero
A menudo, un proceso está escribiendo en un fichero y deseamos vigilar continuamente el fin de ese fichero conforme crece. Para ello, en lugar de ejecutar repetidamente «tail -n», la opción «-f» (follow) de esta orden, ejecuta continuamente la orden «tail», visualizando cada nueva línea del fichero.
tail -f fichero
Puesto que la orden «tail -f» no finaliza por si misma, lo haremos con «CTRL-C».
Puedes consultar el manual de la herramienta con
man tail
De forma análoga al anterior comando, la orden «head» muestra las 10 primeras líneas, o cabecera, de un fichero, aunque, también es posible especificar el número de líneas del fichero a visualizar, y también se puede utilizar para mostrar información de varios ficheros a la vez.
head fichero head -5 fichero (head -n 5 fichero)
Estos dos comando nos serán muy útiles cuando estemos trabajando con ficheros con mucho contenido, muy largos, como por ejemplo, los ficheros de log de nuestro sistema. Como siempre puedes consultar el manual integrado con
man head
Las órdenes cmp y diff
Con frecuencia es deseable comparar el contenido de dos ficheros para comprobar si son iguales. La orden cmp «compare», compara dos ficheros cualesquiera, incluso ficheros binarios, e indica los números de caracteres y líneas donde difieren. Adopta dos nombres de fichero como argumento
cmp fichero1 fichero2
Una herramienta mucho más potente es la orden diff «difference», disponible para ficheros de texto. Esta orden produce un índice completo con todas las líneas que difieren entre dos ficheros, junto con sus respectivos números de línea y lo que debe ser modificado para hacer iguales ambos ficheros.
diff fichero1 fichero2
Si utilizas este comando te recomiendo ver «Comparar ficheros y directorios con diff y con meld».
La elección entre diff, comp y meld, dependerá de tu gusto, pero te invito a probar «meld», creo que es la herramienta más práctica.
Las órdenes sort y uniq
La orden sort reordena un flujo de líneas de texto en orden alfabético y escribe las líneas ordenadas en su salida estándar.
Nos encontramos muchos escenarios, en la línea de comandos, en los que necesitamos ordenar la salida, en estos casos «sort» nos ayudará en nuestro propósito.
Puede tomar una lista de nombres de fichero como argumento o leer de la entrada estándar.
sort fich1 fich2 ... fichN
También admite múltiples opciones
- -f: ignora la diferencia entre mayúsculas y minúsculas
- -n: ordena numéricamente
La orden «uniq» muestra una única presentación de las líneas repetidas de un fichero, pero su entrada debe estar correctamente ordenada antes de que pueda funcionar. De ahí que se suela combinar con sort.
sort fichero | uniq
Con el comando sin opciones, eliminará de la salida estandar, las coincidencias encontradas. Lo vemos con un ejemplo. Tenemos dos ficheros «listado1.txt» y «listado2.txt» con el siguiente contenido
cat listado1.txt Juan Lopez Pedro Martinez Adolfo Ezpeleta cat listado2.txt Mercedes Ansó Carmen Llopis Pedro Martinez sort listado1.txt listado2.txt | uniq
Como vemos, elimina en la salida estandar las coincidencias.
Para localizar duplicados de dos ficheros con la orden «uniq» utilizamos la opción «-d».
sort listado1.txt listado2.txt | uniq -d
Y obtendremos un recuento de apariciones con la opción «-c».
sort listado1.txt listado2.txt | uniq -c
La orden clear
Esta orden permite borrar la pantalla actual, colocando el cursor en la primera línea de la pantalla.
La orden nl
Esta orden, entre otras cosas, numera las líneas de un fichero y muestra el resultado por su salida estándar. Este resultado también lo presenta «cat -n», pero «nl» presenta algunas opciones adicionales al ser un comando dedicado estrictamente para esta tarea. Por ejemplo, si queremos listar también las lineas en blanco tenemos que utilizar la opción «-ba».
cat -n fichero nl fichero nl -ba fichero
La orden wc
Este comando cuenta el número de líneas, palabras y caracteres del fichero o ficheros que se especifican en los parámetros, mediante las siguientes opciones, que pueden ser combinadas entre ellas
- -l: muestra el número de líneas del fichero
- -w: muestra el número de palabras del fichero
- -c: muestra el número de caracteres del fichero
Por ejemplo
wc -w fichero
El comando «wc» sin parámetros adopta las tres opciones, «-lwc» y presenta una cuenta global para todos los ficheros especificados.
wc fichero
En éste ejemplo concreto, comprobamos que el fichero contiene 228 líneas, 1991 palabras y 13232 caracteres.
La orden tee
La orden «tee» está relacionada con el redireccionamiento del flujo de la información. Su función consiste en copiar la entrada estándar a un fichero que se especifica como parámetro, al mismo tiempo que la muestra por la salida estándar.
De esta forma se visualiza la información al mismo tiempo que se almacena en un fichero. Nos resultará muy útil para guardar los resultados intermedios, archivarlos o examinarlos en busca de fuentes de error.
La sintaxis básica del comando «tee» tiene este formato
tee [OPCIONES] [FICHERO]
La opción «-a» de la orden «tee» permite añadir la información a un fichero ya existente en lugar de sobreescribirlo.
cat listado1.txt listado2.txt | sort | uniq | tee -a listado3.txt |wc -w
Nos muestra que el fichero «listado3.txt» contiene 10 palabras. Luego comprobamos el contenido del fihero creado con «tee».
La orden tar
La orden «tar» permite salvar y restaurar ficheros desde cualquier dispositivo de almacenamiento.
Las operaciones a realizar con esta orden se especifican mediante una clave, formada por un carácter y seguida de uno o más caracteres que actúan como modificadores complementarios de la operación. El uso de ciertos modificadores, por ejemplo «f», exige además la presencia de una serie de argumentos.
La sintaxis del comando «tar» viene definida por la expresión
tar clave argumentos ficheros
Entre las operaciones o acciones a realizar con el dispositivo están
- c: Borra la información existente en el dispositivo y almacena los ficheros al principio del dispositivo. Crea un fichero.
- r: Añade los ficheros tras el último fichero previamente almacenado en el dispositivo. Añade información a continuación de la existente.
- t: Lista los nombres de todos los ficheros almacenados en el dispositivo.
- v: Expande la lista añadiendo el modo y propietario de cada fichero.
- u: Añade cualquier fichero al dispositivo siempre que no exista o haya sido modificado desde la última vez que fue copiado en el dispositivo.
La orden tar extrae del dispositivo los ficheros indicados como parámetros y los restaura al sistema. Si un nombre de fichero concuerda con el de un directorio cuyo contenido fue escrito en el dispositivo, éste se extrae recursivamente. Si no se da ningún fichero como parámetro, se extrae el contenido total del fichero.
Las siguientes opciones complementan las acciones anteriores
- m: Al restaurar los ficheros cambia su hora de última modificación a la hora actual.
- w: Se muestra la acción a llevar a cabo para cada fichero, esperando la confirmación del usuario.
- v: Muestra por pantalla los ficheros salvados.
- f disp: Salva los ficheros en el dispositivo referenciado por disp. En lugar de un dispositivo físico disp puede ser un nombre de fichero que acumulará toda la información salvada.
Por lo tanto, la orden
tar cvf /dev/sdb1 DirectorioDestino
borrará la información existente en el dispositivo /dev/sdb1 y lo copiará en el directorio «DirectorioDestino». Además, presentará por pantalla los nombres de los ficheros copiados.
La orden
tar tf /dev/sdb1
listará todos los ficheros almacenados en el dispositivo /dev/sdb1.
Y finalmente,
tar xvf /dev/sdb1 DirectorioDestino/subdirectorio
extraerá los ficheros del subdirectorio «DirectorioDestino/subdirectorio» almacenados en /dev/sdb1 y los restaurará en su posición original.
También nos será muy útil para comprimir y descomprimir ficheros «.tar.gz».
Por ejemplo con
tar cvf NFS.txt.tar ./NFS.txt
Con las opciones siguientes indicamos
- -c : indica a tar que cree un fichero.
- -z : indica que use el compresor gzip
- -f : indica a tar que el siguiente argumento es el nombre del fichero .tar
- -v : indica a tar que muestre lo que va empaquetando
Y para descomprimir
tar -xzvf archivo.tar.gz
Las opciones indican
- -x : le dice a tar que extraiga el contenido del fichero tar.gz
- -z : le indica a tar que esta comprimido con gzip
- -v : va mostrando el contenido del fichero
- -f : le dice a tar que el siguiente argumento es el fichero a descomprimir.
Para ver el contenido de un fichero comprimido, ejecuta
tar -tzf archivo.tar.gz
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.
Muchas gracias Javier. Vienen muy bien estas órdenes de consola.
Un día nos podías hacer una chuleta con el uso abreviado de órdenes por sus categorías o usos
Muy bien, lo tendré en cuenta. Gracias Josevi
Buen trabajo Javier
Gracias Barto