Guía Básica de la Terminal Linux
Guía Básica de la Terminal Linux
Si quieres pasar más al nivel practico, con este primer post estreno una serie de guías dedicadas a profundizar en el
uso de la consola y a explorar todas las posibilidades punto por punto. En este caso me voy a centrar en los
fundamentos básicos de su uso y en algunos comandos básicos con los que puedes empezar a familiarizarte con ella.
Al final tienes enlazados el resto de artículos de la serie.
Para acceder a las diferentes sesiones TTY debes utilizar las combinaciones de teclado ‘CTRL+ALT+F1’, para la TTY1,
hasta ‘CTRL+ALT+F7’. Para iniciar sesión deberás introducir tu nombre de usuario y contraseña, y a partir de ahí ya
puedes empezar a interactuar con el interprete de comandos.
Otra manera más práctica de utilizar la línea de comandos es, como digo al principio, mediante el emulador de
terminal desde la propia sesión gráfica. En este caso, basta con acceder a tu aplicación de terminal favorita y listos. No
es necesario que inicies sesión aquí, ya que ya reconoce el usuario con el que has iniciado la propia sesión gráfica.
Sudo y Su. Ejecutar Comandos Como Otro Usuario
Muchos comandos invocan acciones que solo pueden ser realizadas por el usuario root o superusuario. Esto significa
que, si intentas instalar un paquete en tu sistema, y por ello haces un apt install <paquete>, desde la sesión de tu
usuario normal no se te permitirá.
Para ello, deberías primero hacer un log-in con el usuario root (en la consola) y posteriormente realizar esta acción
desde este nivel de privilegios. Para agilizar esta tarea, dispones de herramientas como sudo o su, ambas similares a la
práctica pero diferentes en su concepción.
Sudo
De sudo se podrían escribir líneas y líneas, pero para lo que es el propósito de este post, quédate con la idea de que, lo
que hace, es ejecutar el comando que lo sigue utilizando, temporalmente, los privilegios de otro usuario.
Este usuario, en la mayoría de usuarios suele ser el superusuario, pero se puede configurar para que sea cualquier
otro.
Hay distribuciones, sobretodos aquellas orientadas a usuarios con menos conocimientos técnicos (Ubuntu y gran
parte de sus derivados directos son un claro ejemplo) que, por motivos de seguridad (o de simplicidad) optan
por mantener la cuenta de superusuario deshabilitada.
A cambio, utilizan sudo configurado de tal modo que el usuario estándar pueda utilizarlo para adquirir,
temporalmente, los permisos de superusuario.
Su uso consiste únicamente en ser introducido delante del comando en cuestión, para indicar que ese comando se va a
ejecutar bajo los permisos de otro usuario (por defecto, root).
$ sudo <comando>
Su
La utilidad su (de «switch user») es algo diferente. Como su nombre indica, lo que permite es hacer un cambio de
sesión de usuario, pero sin necesidad de cerrar la sesión del usuario actual. Se utiliza seguido del nombre de
usuario con el que se quiere inicial sesión.
Es muy común utilizarlo en aquellas distribuciones que prefieren mantener abierta la cuenta de superusuario para que
cualquier usuario autorizado para usarlo (entendiéndose que conozca la contraseña) pueda hacer un salto de sesión y
hacer un log-in como root.
En este ultimo caso, la sintaxis es muy simple. Basta con teclear la palabra su, y automáticamente el sistema te pedirá
las contraseña necesaria para hacer el cambio de sesión.
$ su
#
El cambio de forma del promp es un claro indicativo que te puede servir para identificar rápidamente si estás en una
sesión de usuario estándar o de root.
Generalmente, se suelen dar esas dos situaciones entorno al uso de sudo y su:
En las distribuciones que mantienen la cuenta de superusuario bloqueada (como es el caso de Ubuntu y sus
multiples derivados), se utiliza «sudo» seguido de un determinado comando, con las credenciales del usuario actual
(que se le permite una elevación temporal para ejecutar los comandos como root).
En las distribuciones que hacen uso de la cuenta de root, como Debian o Fedora, se utiliza «su» para saltar de la
cuenta de usuario normal a la cuenta de superusuario. Para hacer el salto, se requiere conocer la contraseña de root.
Sin embargo, el uso de sudo y su se puede complementar perfectamente. De este modo, aun estando la cuenta de root
operativa, se puede configurar sudo para que determinados usuarios puedan igualmente realizar una elevación de
privilegios, si necesidad de que tengan que conocer las credenciales de root.
Si quieres profundizar en todo esto, en este post explico con mucho más detalle como habilitar o deshabilitar el uso de
root, así como configurar sudo para permitir o impedir que los usuarios puedan hacer uso de él para la elevación de
privilegios.
user@computer:~$
Por el contrario, si haces un log-in como superusuario (a partir del comando sudo su), el prompt adoptará este
formato:
root@computer:/home/user#
Ah, como curiosidad que seguramente te gustará saber, el prompt de bash es personalizable en color y estructura. Si
tienes curiosidad en saber como, en este post lo tienes explicado en detalle.
De hecho no es en absoluto mala idea que, por tal de distinguir mejor el prompt de los comandos en sí, establezcas
que éste se muestre en un color diferente. Verás que mejora en gran medida el aspecto general de la consola.
Dicho todo esto, y habiendo hecho una justa introducción, la mejor manera de acabar este primer post de la serie será
con algunos ejemplos sencillos para empezar a practicar con los primeros comandos. Esto nos servirá para dar
nuestro primer paso en el uso de la consola.
Aprende tus Primeros Comandos
Realmente existen infinidad de comandos, por lo que es importante centrarse en aquellos que te serán de mas utilidad
dependiendo de tus tareas o necesidades.
Antes de nada, no quiero dejarme de comentar como puedes acceder a la línea de comandos para empezar a jugar.
Tienes básicamente dos opciones:
Abrir una ventana desde el propio entorno de escritorio, utilizando una de las multiples aplicaciones que
hacen de emulador de terminal. Aquí tienes a numerosos ejemplos y cada entorno de escritorio ya viene de forma
predeterminada con el suyo. Para nombrar algunos: GNOME Terminal, Konsole, Xterm, Yakuake, Guake, etc.
Ahora ya si que puedes empezar tu mismo a practicar con tus primeros comandos. Para empezar a ser capaz de
ejecutar acciones simples, puedes echar un rápido vistazo a los ejemplos que te propongo. Si no es tu primera vez,
seguramente ya los conocerás. En este caso, no dejes de echar un vistazo al resto de posts de esta serie que enlazo al
final.
Man
El comando man es una pagina de manual. Debe ir acompañado del nombre de un comando, y muestra en pantalla
una completa guía sobre el uso del comando entrado. Aquí tienes la sintaxis básica, y a partir de ahí puedes ir
probando ejemplos con varios comandos.
Esta es la sintaxis básica del comando, y a partir de ahí puedes desplegar el manual de casi cualquier comando que se
te ocurre.
$ man uname
Imprime por pantalla el manual completo del comando uname, junto con todas sus opciones de uso.
Uname
El comando uname te da información del sistema operativo usado. Puede incluir diferentes opciones, algunas de las
cuales son ‘-a’, ‘-s’, ‘-p’, ‘–m’, y ‘-o’. Puedes probar de usar algunas de ellas y observar el output mostrado por
pantalla.
$ uname
Formato simple del comando. Retorna solamente el nombre del sistema operativo, sin especificar mas detalles.
$ uname -a
Con esta opción, podrás visualizar el nombre del sistema operativo, junto con otros detalles básicos como la versión
del kernel, la arquitectura del sistema (si es de 32 o 64 bits) o la fecha actual entre otros datos.
Who
El comando who muestra los usuarios logueados en el sistema. Si lo utilizas desde la aplicación de terminal del
escritorio, mostrara que tu usuario está logueado en la sesión de terminal TTY7, correspondiente a la interfaz gráfica
de usuario, y en una sesión PTS, que no es más que el emulador de terminal dentro de la propia interfaz gráfica.
$ who
Esta es la sintaxis básica de #who, y muestra un listado con los usuarios logueados en el sistema junto con la fecha y
hora de logueo.
$ who -b
Con esta opción obtendrás la fecha y hora del último arranque realizado en el sistema.
History
El comando history te imprime por pantalla un listado de los últimos comandos que se han pasado por la terminal
desde la cuenta del usuario actual.
$ history
Esta es la forma básica, y muestra un listado de todos los comandos introducidos por la terminal, uno a uno.
$ history 10
Tienes también la opción de limitar el numero de resultados a visualizar. En este caso, tendrás un listado con los
últimos 10 comandos introducidos.
$ history | grep ls
Como no, si deseas acotar más la búsqueda, también puedes establecer filtros por palabra contenida. En este caso, por
ejemplo, se te imprimirá por pantalla un listado de todas las órdenes introducidas que contengan la palabra «ls».
$ history -c
Si quieres borrar el historial de todos los comandos utilizados hasta el momento, puedes hacerlo con un history -c.
Clear
El comando clear limpia la pantalla de la terminal pero sin borrar el contenido. Básicamente hace un scroll hacía
abajo.
$ clear
Ping
Con la orden ping podrás conocer si un cliente o servidor bajo una determinada dirección IP está operativo o no.
También te permite conocer la latencia entre tu máquina y la IP especificada.
$ ping 192.168.1.1
En este ejemplo estamos comprobando la latencia entre nuestra máquina y el router de la red interna en la que
estamos conectados (que típicamente se encuentra bajo la dirección IP 192.168.1.1).
$ ping www.google.com
También podemos comprobar si un determinado sitio web esta operativo o no a partir de su url. En este caso,
comprobamos la latencia entre nuestra máquina y Google.
Date
El comando date informa sobre la fecha y hora del sistema. Es un comando puramente informativo, útil si te
encuentras en un entorno sin interfaz gráfica.
$ date
Curl wttr.in
Con esta simple sentencia podrás consultar la previsión meteorológica directamente desde la consola, a lo Geek.
$ curl wttr.in
Esta es el modo más fácil de utilizarlo. Te entrega directamente la previsión de tu zona geográfica para los próximos
tres días. Aparte de esta opción básica, puedes personalizar la salida de muchas maneras. A continuación tienes un
ejemplo.
$ curl wttr.in/paris
Para consultar la previsión de una zona en concreto, basta con añadir «/» al final seguido de la zona (como datos
acepta ciudad, código de aeropuerto o nombre de dominio). Tienes una ayuda rápida aquí: http://wttr.in/:help.
Exit
El comando exit cierra la sesión de terminal actual del usuario logueado en ella. Si estas usando la terminal como
superusuario, se cerrará la sesión y volverás a ser usuario estándar.
$ exit
Hasta aquí ya puedes empezar a practicar con algunos de los comandos más básicos. Alternativamente, con el
comando ‘man‘ podrás hacer una ojeada a las distintas opciones que ofrecen los comandos tratados.
Muy buenas lector, en esta guía quiero centrarme en que aprendas todo lo necesario para manejar ficheros y
carpetas en Linux a través de la línea de comandos. Si no tienes experiencia en el uso de la consola, una buena
manera de empezar a entrar en materia es aprender a moverte por el sistema de archivos y a manejar archivos y
carpetas desde la línea de comandos.
Existen realmente muchísimos comandos en este sentido, de modo que lo mejor será dividirlos en tres grupos para
tener un esquema mental y acordarnos mejor de todos ellos. Sin más, te dejo con el índice del post. Espero que lo
disfrutes;)
Pwd
El comando pwd te indica la ruta completa del directorio de trabajo en el que se encuentra tu usuario. Su función es
meramente informativa, peor muy útil en ciertas ocasiones, como por ejemplo, conocer el nombre del directorio de
trabajo actual.
$ pwd
Esta es la única sintaxis que realmente necesitas conocer de este comando. Como explico, te indica la ruta del
directorio de trabajo en el que te encuentras logueado en la terminal. Eso significa que cualquier comando de Bash que
tenga relación con la gestión de ficheros y directorios, se aplicará referenciado en ese directorio.
Cd
El comando cd te permite cambiar de directorio de trabajo. Sería el equivalente a ingresar o entrar en la carpeta pero
desde la consola. Básicamente requiere indicar el nombre del directorio en el que deseas moverte. Acepta rutas
absolutas y relativas. A continuación tienes algunos de los múltiples ejemplos de su uso:
$ cd /home/usuario/Documentos
El comando de arriba te llevará al directorio Documentos dentro de la carpeta personal del usuario usuario1. En este
caso he utilizado una ruta absoluta, empezando por el directorio raíz /, e indicando el camino completo hasta situarme
a Documentos
$ cd
Esta sentencia la puedes utilizar siempre que quieras volver a situarte al directorio principal de usuario, que en este
caso seria en /home/usuario1. Muy interesante siempre que queramos volver al punto de partida (ojo, no confundir eso
con ir al directorio raíz, que sería el directorio /)
$ cd Documentos
Igual que en el primer ejemplo, con esta sentencia (arriba) te situarás dentro del directorio Documentos, que debe estar
dentro del directorio de trabajo actual. La diferencia es que en este caso, aprovechando que estoy dentro del directorio
principal de usuario, he utilizando una ruta relativa sin necesidad de indicar el camino completo.
$ cd ..
Esta otra sentencia la puedes utilizar para saltar un directorio hacía atrás respecto del que te encuentres. De este
modo, si te encuentras dentro del directorio /home/usuario1/Documentos, saltarás un nivel hacía arriba hasta situarte
en /home/usuario1.
$ cd ../..
Esta opción es similar a la anterior, pero ahora te permitirá saltar de golpe dos directorios hacia atrás. Por tanto, si
estabas en /home/usuario1/Documentos, ahora saltarás a /home.
Hasta aquí, tienes algunos usos simples para moverte a través de las diferentes carpetas. A continuación, y teniendo
claro lo anterior, podemos pasar a aprender a listar archivos y directorios.
Listar el Contenido de un Directorio, Buscar Archivos, etc.
Visto ya como moverte a través de carpetas, que mejor que continuar como poder listar el contenido de un directorio,
encontrar o localizar archivos concretos por su nombre o su extensión, etc.
Ls
Con el comando ls podrás listar los diferentes archivos y directorios de la carpeta de trabajo en la que te encuentres.
El comando acepta multitud de opciones, algunas de las cuales te mostraré a continuación.
$ ls
El de arriba es el uso más simple del comando ls. Si no le indicas ninguna opción, te enumerará todos los archivos y
directorios que se encuentran en la carpeta de trabajo actual, sin tener en cuenta archivos ocultos.
$ ls -a
Con esta opción, el comando te mostrará, en forma de lista, todos el contenido que se encuentre dentro del directorio
de trabajo, incluyendo, además, archivos y carpetas ocultos.
$ ls -l
Esta opción es similar al primer caso, pero muestra el contenido en forma de lista e incluye información referente a
cada elemento. Se usa muchísimo y es especialmente útil a la hora de conocer el propietario y los permisos de cada
fichero.
Estas son sólo algunas de las muchísimas posibilidades de las que disponemos para nombrar o listar el contenido de
un directorio, desde la terminal de Linux. Existen muchas opciones más, las cuales puedes explorar en todo momento
haciendo uso del comando man ls.
Find
El comando find es muy similar en su función básica a ls, ya que de entrada sirve para listar todo el contenido de un
directorio. La diferencia es que, aplicando filtros, te puede servir para buscar archivos de forma más precisa.
$ find
La sentencia más básica te listará todo el contenido del directorio de trabajo actual de forma recursiva. La diferencia
respecto a ls es justamente que find no se limitara a mostrar los archivos y directorios de primer nivel, sino que
también te mostrará el contenido de estos, y así recursivamente hasta recorrer todos los niveles hacía abajo.
$ find ./Documentos
Con esta opción, find te listará todos el contenido del directorio Documentos (dentro del directorio de trabajo actual)
también de forma recursiva, recorriendo todos los niveles hacía abajo.
Si quieres empezar a establecer filtros por nombre, puedes añadir el parámetro -name. En este ejemplo, estamos
intentando localizar un archivo concreto dentro de Documentos que su nombre corresponda a archivo.txt.
Incluso puedes hacer filtros más concretos gracias al uso de comodines. En el caso de arriba, por ejemplo, estamos
buscando en la carpeta Documentos todos los archivos que con la extensión .pdf, al igual que puedes hacerlo con
cualquier otro tipo de extensión.
Locate
El comando locate es una alternativa útil a find la hora de localizar archivos o directorios que no recuerdas donde
tienes. Aquí tiene algunos ejemplos que te pueden ser de gran utilidad:
$ locate archivo1.txt
En este caso tienes un claro ejemplo de como realizar una búsqueda simple del archivo archivo1.txt directamente por
su nombre. Es útil solo si sabes el nombre exacto del elemento que estás buscando.
Mkdir
El comando mkdir te permitirá crear un directorio con el nombre y la ruta que especifiques. Si no le indicas ninguna
ruta, por defecto, te creará la carpeta dentro del directorio de trabajo en el que te encuentres. A continuación tienes
algunos ejemplos sencillos.
$ mkdir /home/usuario1/directorio1
En el caso de arria, mkdir te creará el directorio de nombre directorio1, en la ruta que le hayas especificado, en este
caso dentro de la carpeta principal de usuario.
$ mkdir directorio2
Con esta sintaxis, el comando te creará una carpeta de nombre directorio2 dentro del directorio de trabajo en la que te
encuentres (recuerda utilizar pwd para saber donde estás).
Estos son las dos principales maneras de crear carpetas en Linux desde la consola. Asimismo, si quieres profundizar
más en el uso de este comando, puedas explorar otras muchas opciones a través del comando man mkdir. Como ves,
crear una carpeta en Linux desde la consola, es igual de fácil que hacerlo desde el menú gráfico del navegador de
archivos
Rmdir
El comando rmdir te permite eliminar el directorio que le especifiques. Para poder utilizar este comando, el directorio
a borrar debe estar vacío. A continuación tienes un par de ejemplos.
$ rmdir /home/usuario1/directorio1
En este caso, rmdir borrará el directorio de nombre directorio1, que se encuentra en la ruta especificada, en este caso
dentro de la carpeta de usuario.
$ rmdir directorio2
En este otro ejemplo, el rmdir eliminará el directorio de nombre directorio2, el cual debe encontrarse dentro de la
carpeta en el que te encuentres. De lo contrario, indicará que el directorio no existe.
Rm
El comando rm te permite eliminar archivos sueltos y directorios que no se encuentren vacíos. A continuación tienes
algunos de los usos principales del comando.
$ rm /home/usuario1/archivo1.txt
En este caso, rm te borrará el archivo de texto archivo1.txt, que se encuentra en la ruta especificada, para este caso
dentro de la carpeta de usuario.
$ rm -r /home/usuario1/directorio1
Con esta opción, rm borrará el directorio directorio1 de forma recursiva. Esto significa, incluyendo todos los archivos
y subdirectorios que se encuentren dentro de él (pidiéndote, eso si, confirmación para cada archivo).
rm -rf /home/usuario1/directorio1
Si te quieres saltar el paso de tener que confirmar archivo por archivo que realmente deseas borrarlo, con este
comando borrarás todo el contenido del directorio sin advertencias.
Eso si, mucho ojito con rm, puesto que dependiendo de como lo uses, puede dar cabida a situaciones como esta. Se
trata de ser consciente de como funciona y de los parámetros que estas introduciendo en cada momento.
Cp
Usando el comando cp, seras capaz de copiar archivos y directorios, así como ubicarlos en otras rutas. A
continuación, tienes un par de ejemplos de como se puede utilizar.
$ cp archivo1.txt archivo2.txt
Este es posiblemente el uso más simple de cp. Con esta forma, crearás una copia del archivo archivo1.txt la cual se
guardará con el nombre archivo2.txt. En este caso, el archivo de partida debe encontrarse dentro del directorio de
trabajo en el que estés.
$ cp /home/usuario1/archivo1.txt /tmp/archivo2.txt
Alternativamente, puedes especificar la ruta en la que se encuentra el archivo de partida, de nombre archivo1.txt, y la
ruta del directorio dentro del cual quieres que se guarde la copia, en este caso dentro del directorio tmp.
Como en todos los casos, puedes explorar muchas más opciones tecleando man cp en la consola. Y antes de acabar
con cp, te dejo a continuación un par de truquillos que te pueden venir muy bien (esto ya como guindilla del pastel)
Mv
El comando mv te servirá para mover archivos desde la consola. Sería lo equivalente a arrastrar un archivo desde una
ubicación a otra. La sintaxis es muy sencilla, solamente debes especificar la ubicación de inicio, incluyendo el nombre
del archivo, y la ubicación de destino. También puedes modificar el nombre del archivo en su ubicación de destino.
mv /home/usuario1/Descargas/archivo1.txt /home/usuario1/Documentos/archivo1.txt
En este ejemplo de arriba estamos moviendo el archivo de nombre archivo1.txt desde la carpeta Descargas hacía la
carpeta Documentos. Para ello hemos utilizado rutas absolutas.
mv Descargas/archivo1.txt Documentos/archivo1.txt
En este otro ejemplo he hecho exactamente lo mismo pero utilizando una ruta relativa, suponiendo que nos
encontramos en la carpeta de usuario dentro de la Home.
La Terminal de Linux (III). Comandos para Obtener Información del Sistema
En esta guía vamos a dar un repaso a algunos comandos que te permitirán obtener información del sistema
operativo desde la línea de comandos, como los usuarios actualmente logueados, las sesiones de terminal abiertas,
los procesos en ejecución, el hardware utilizado, etc.
Como info adicional antes de empezar con el post, quiero comentarte que el artículo que estas a punto de leer forma
parte de una serie temática de varios posts centrados en el uso de la consola en Linux. Debajo del post tienes
listados el resto de artículos. Ahora si que sin más, voy a ir directamente al grano…
Uname
El comando uname te mostrará por pantalla información del sistema operativo, como puede ser la plataforma, la
versión del Kernel utilizada, o la arquitectura del sistema. El comando acepta diversas opciones, algunas de las cuales
tienes a continuación.
$ uname
Con esta sintaxis, el comando te mostrará simplemente el nombre del Kernel utilizado, en este caso Linux.
$ uname -o
Utilizando esta opción, el comando te mostrará el nombre del sistema operativo, en este caso GNU/Linux.
$ uname -a
En este caso, a parte de indicar el nombre del Kernel y del sistema operativo, también te informará de la arquitectura
del sistema, el nombre de host, el procesador, etc.
$ uname -m
Con esto podrás conocer si tu CPU tiene soporte para la virtualización, que deberás activar posteriormente desde la
BIOS. Muy útil si trabajas si trabajas con máquinas virtuales.
Who
El comando who te listará los usuarios conectados en el sistema en tiempo real. Asimismo, te indicara la sesión en la
que esta logueado cada usuario.
$ who
Con la sintaxis básica, el comando te informará solamente de los usuarios conectados y de la sesión de terminal TTY
o PTS en la que está conectado cada usuario.
$ who -a
Con esta opción, el comando te informará de la fecha y hora del ultimo arranque del sistema por parte de algún
usuario.
$ who -H
En este caso obtendrás una lista de los usuarios logueados, las sesiones de terminal a las que están conectados, y el
registro de fecha y hora a la que se han conectado.
Whoami
El comando whoami muestra por pantalla el nombre del usuario que acaba de ejecutar el comando.
$ whoami
Ifconfig
La sentencia ifconfig te servirá para ver todas las interfaces de red que tienes habilitadas en tu PC o dispositivo, junto
con varios parámetros como el nombre de la interfaz red, la dirección MAC, la dirección IPv4 e IPv6, la máscara
subred, y otros varios.
$ ifconfig
Esta es la opción básica, que básicamente te mostrará las interfaces activas. Generalmente serán la interfaz Ethernet si
te conectas con cable (normalmente eth0), la interfaz WiFi si vas con wifi (wlan0), y la interfaz local o localhost, que
es la que el sistema utiliza para conectarse consigo mismo (lo)
$ifconfig -a
Con esta opción podrás ver todas las interfaces de red disponibles en tu sistema, independientemente de que estén en
uso o no, junto con sus parámetros básicos.
$ifconfig eth0
Esta opción te permite acotar el resultado para mostrar la información de una interfaz determinada, en este caso la
Ethernet.
Visto ya la información a nivel del sistema operativo, en el siguiente apartado verás como conseguir determinada
información del hardware en el que se ejecuta tu sistema. Esto te será especialmente útil, sobretodo teniendo en
cuenta que la información relativa al hardware que puedes obtener desde tu entorno de escritorio es bastante general
y con muy poco grado de detalle.
Dmidcode
Con esta sentencia tendrás acceso a un enorme rango de información sobre el hardware del equipo, ya sea relativa al
fabricante o ensamblador del dispositivo, fabricante de la placa base, de la CPU, y un larguísimo etcétera que puedes
ir descubriendo probando con las diferentes opciones.
Con esta opción podrás ver el fabricante del PC, ya sea Asus, HP, Dell, Lenovo, etc.
De forma similar, y como se intuye fácilmente, muestra el nombre del fabricante de la CPU, generalmente Intel o
AMD.
$sudo dmidecode -s
Y por si quieres ver un listado completo de todos los posibles inputs que puedes introducir como opciones, este es tu
comando
Cat/proc
El comando cat /proc/version te muestra información detallada de la versión del Kernel utilizada, incluyendo datos
tales como la versión del compilador GCC, el nombre de la persona que compiló el Kernel, y la fecha de compilación.
$ cat /proc/version
El comando cat /proc/cpuinfo te facilitará información detallada de la CPU, considerando los diferentes núcleos, e
incluyendo datos como el fabricante, el número de núcleo, la frecuencia de reloj, el tamaño de cache, etc.
$ cat /proc/cpuinfo
Lshw
El comando lshw te mostrará una lista con todos los componentes de hardware detectados, junto con la información
que se puede extraer, como el fabricante, la versión del firmware, etc. El comando permite categorizar la información
en clases acepta multitud de opciones.
$ sudo lshw
En caso de que lo ejecutes así, el comando te imprimirá por pantalla una lista con todos los componentes de hardware
y la información que se puede extraer de ellos.
En este caso, te aparecerá un árbol con todos los dispositivos detectados y su ruta de hardware. Es una manera de
obtener la información anterior de un modo mas simplificado.
Con esta opción, verás información relativa a los componentes de hardware detectados dentro de la clase ‘video’. Esto
es, la tarjeta o tarjetas gráficas detectadas, etc.
De un modo similar, aquí verás información referente a los componentes de la clase ‘network’. En este caso, la tarjeta
de red ethernet y el adaptador wireless.
Estos son sólo algunas de las opciones que puedes utilizar para obtener información del sistema. El comando lshw es
especialmente complejo, y he puesto solamente en un par de opciones de las muchísimas que ofrece. Si quieres
aprender más sobre él, puedes encontrar más información tecleando man lshw en la terminal.
Información Externa
Como información externa me refiero a aquella información externa a tu sistema, como podría ser la fecha, hora,
condiciones meteorológicas, etc.
Date
El comando date te imprimirá por pantalla la fecha actual del sistema operativo. Acepta algunas opciones, pero en
general su uso es muy sencillo.
$ date
En su sintaxis más básica. Este es la sintaxis básica, el comando te imprimirá la fecha actual según el estándar CEST.
$ date -u
Con esta opción, podrás visualizar la fecha actual según el estándar universal o UTC.
Cal
El comando cal muestra el calendario de un mes o año especificados. Acepta diferentes opciones, algunas de las cuales
son:
$ cal
Es la forma básica del comando, y por defecto te mostrará el calendario del mes actual.
$ cal -y 2019
Con esta opción, el comando te mostrará el calendario completo del año entrado por pantalla, en este caso el 2019.
Curl wttr.in
Con esta simple sentencia podrás consultar la previsión meteorológica directamente desde la consola. Sería la forma
geek de consultar el tiempo.
curl wttr.in
Esta es el modo más fácil de utilizarlo. Te entrega directamente la previsión de tu zona geográfica para los próximos
tres días. Aparte de esta opción básica, puedes personalizar la salida de muchas maneras. A continuación tienes un
ejemplo.
curl wttr.in/paris
Para consultar la previsión de una zona en concreto, basta con añadir “/” al final seguido de la zona (como datos
acepta ciudad, código de aeropuerto o nombre de dominio). Tienes una ayuda rápida aquí: http://wttr.in/:help.
Antes de empezar, decirte que este post forma parte de una serie de artículos enfocada a profundizar en el uso del
intérprete de comandos de Linux. Al final del post tienes enlazados el resto de posts. Dicho esto, ¡vamos allá!
Como en los casos anteriores, voy a mostrar un listado con algunos ejemplos de los comandos más utilizados a la hora
de crear y leer ficheros de texto desde Bash. Empezaré por el caso de crear un fichero de texto vacío, para el cual
utilizaré el comando touch.
Touch
El comando touch te va a permitir, entre otras cosas, crear un archivo de texto vacío (en formato .txt) al que,
posteriormente, podrás agregarle el contenido que desees de forma manual, o mediante el uso de otros comandos que
veremos.
touch nombrearchivo
Esta opción te generará un archivo de texto vacío de nombre nombrearchivo, en el directorio en el que te encuentres
(por defecto el directorio del usuario con el que estás logueado en la terminal)
En este caso, el comando te generará tres archivos de texto vacíos, con los nombres nombrearchivo1, nombrearchivo2,
y nombrearchivo3, y en el directorio de trabajo en el que te encuentres.
Siguiendo con el caso de visualizar el contenido de un fichero desde la misma consola, los comandos más útiles en
este sentido son cat y more y less, cada uno con sus particularidades, como verás a continuación.
Cat
El comando cat es uno de los comandos más utilizados cuando se trata de manejar archivos de texto (en formato .txt)
desde la terminal. Entre sus múltiples opciones, está la posibilidad de crear un archivo, imprimir por pantalla su
contenido, etc. Veamos algunos ejemplos:
Este comando te creará un archivo de texto vacío, de nombre nombrearchivo, y te permitirá teclear el contenido que
desees introducirle. Una vez tecleado el contenido, puedes finalizar mediante la combinación CTRL+D.
cat > nombrearchivo
contenido línea 1
contenido línea 2
CTRL+D
Esta orden te permitirá imprimir por pantalla todas las lineas de texto del archivo de texto de nombre nombrearchivo.
El archivo indicado debe encontrarse en el directorio de trabajo actual.
cat nombrearchivo
Esto te imprimirá por pantalla, de forma conjunta, el contenido de los archivos indicados, en este
caso nombrearchivo1 y nombrearchivo2.
Este comando te imprimirá por pantalla el contenido del archivo de texto de nombre nombrearchivo, mostrándote,
además, el número de línea al principio de cada línea de texto.
cat -n nombrearchivo
Muy similar al anterior, con la diferencia de que a la hora de numerar las líneas de nombrearchivo, solo se numeran
aquellas que contienen texto, y se descartan las lineas en blanco.
cat -b nombrearchivo
Hay muchas más opciones, pero creo que con estas pocas ya ves más o menos por dónde va la cosa. Como suelo decir,
si quieres profundizar más en el uso del comando lo más recomendable es ir a la misma página de manual
tecleando man cat en la misma terminal.
More
El comando more es otro comando útil para imprimir por pantalla el contenido de un archivo de texto. Esencialmente
es igual que el comando cat, con la diferencia de que el comando more pagina el contenido, y es más adecuado cuando
para leer archivos largos. Veamos algunu ejemplo:
Esto te permitirá imprimir por pantalla el contenido del archivo ‘nombrearchivo’, pero con el resultado paginado. Así,
primero se mostraran las líneas que quepan en una pantalla sin hacer scroll. El resto serán accesibles mediante la
tecla espacio.
more nombrearchivo
Less
El comando less, al igual que los comandos cat y more,te permitirá leer el contenido de un archivo de texto. A
diferencia de los otros dos, éste te mostrará el contenido en modo editor de texto, y para moverte por el contenido
deberás utilizar combinaciones de teclado.
Con esta opción podrás leer al contenido del archivo indicado, moviéndote por las distintas líneas a través del teclado.
less nombrearchivo
Una vez en modo texto, tienes varias opciones para desplazarte verticalmente a lo largo de las diferentes líneas.
Una opción es haciendo scroll con el ratón, que si utilizas la aplicación de la terminal que vienen con el entorno de
escritorio podrás hacer sin problema.
Si no funciona esto, puedes utilizar los controles de desplazamiento del teclado. Al estar en modo lectura, deberían
funcionar sin problema tanto si estás en el entorno de escritorio o en una sesión de terminal TTY.
Otra opción es utilizar la tecla g y luego Enter. Esto avanzará, por defecto, una línea adelante, pero puedes avanzar
cualquier número de líneas que deseas, introduciendo el número justo después de marcar la g.
:1
Otra opción es utilizar la tecla espacio. Esto hará algo similar a un AvPag.
Finalmente, para salir del modo lectura y volver a la terminal, tan solo debes marcar la tecla q.
Nano
Nano es un editor de textos para la terminal, que más que para leer archivos sirve para modificarlos y editarlos,
aunque para esta guía también nos vale perfectamente para abrir el archivo y visualizar su contenido desde la línea de
comandos. A continuación tienes las principales opciones que ofrece, así que te animo a que vayas jugando con ellas
para ir familiarizándote.
Primero de todo, veamos como abrir el editor de textos Nano, algo que puedes hacer fácilmente con el siguiente
comando.
nano
Una vez abierto, si te fijas en la parte inferior, verás que se muestra las diferentes combinaciones de teclas que
necesitaras a la hora de trabajar con archivos.
CTRL+R
Combinación de teclas para indicarle un archivo de texto a Nano para que lo abra y muestre su contenido por la
consola.
CTRL+V
Estando dentro de Nano y con el archivo abierto en la consola, esta combinación sirve para avanzar a la página
siguiente.
CTRL+Y
De modo similar a la combinación anterior, esta sirve para retroceder a la página anterior.
CTRL+W
Esta combinación te servirá para introducir un carácter o grupo de caracteres y buscar en el texto cualquier letra o
palabra que coincida con el parámetro de búsqueda.
CTRL+X
Para cerrar el archivo una vez lo hayas terminado de visualizar en la consola. Eso cerrará el editor de texto Nano, y
volverá a aparecer el promp de Bash por consola.
Estas son solo algunas combinaciones de teclado típicas, para poder moverte con soltura con Nano. A partir de ahí, si
deseas profundizar con poco más con él, te dejo con el siguiente vídeo de introducción, para que
Ahora que tienes una idea de como funciona Nano, si te ves con ganas, puedes echar un ojo a una alternativa que te
ofrecerá un modo de uso totalmente distinto.
Vim
Vim es un editor de texto por consola muy potente y a la vez conocido entre los usuarios más geeks. A diferencia de
Nano, que puede utilizarse con relativa facilidad y soltura desde el primer momento, con Vim la cosa cambia.
Digamos que la curva de aprendizaje es mucho mayor.
Para empezar, Vim no suele venid pre-instalado en la mayoría de distribuciones, pero si que debería estar disponible
en los repositorios oficiales, por lo que podrás instalarlo a golpe de comando. En caso de que te encuentres en
Ubuntu, Debian, o cualquier derivada, puedes hacerlo con el siguiente comando:
sudo apt install vim
Para abrir el editor Vim basta con abrir una ventana de terminal, y teclear el siguiente comando.
vim
Con esto verás un pequeño texto de presentación del proyecto. Estando ahí, puedes abrir el fichero de ayuda de Vim
desde el propio editor. Basta con introducir esta pequeña sentencia, seguida de Intro.
:help
Vim requiere una curva de aprendizaje más lenta que otros editores de texto, y obviamente no se aprende con solo
leer un post o ver un par de vídeos. Aún así, si deseas aprender a utilizarlo, te dejo con este vídeo introductorio de
DistroTube (en inglés), para empezar con los primeros comandos.
Todo ello vamos a verlo a través de la terminal, ya que este post forma parte de una extensa serie de artículos
dedicados a explotar el uso de la línea de comandos. Al final tienes enlazados el resto de posts de la serie. Espero que
lo disfrutes.
A grandes rasgos, todos ellos parten de init o systemd, que es el primer proceso que se ejecuta en el arranque del
sistema y del que nacen todos los demás.
Todos los procesos, como verás en los ejemplos, se identifican por un PID o Process ID, que suele ser un número que
va cambiando cada vez que un proceso se finaliza y vuelve a iniciarse. De hecho, el único que tiene un PID fijo de 1 es
init.
Por poco que hayas utilizado GNU/Linux, seguro que alguna vez has utilizado el monitor de sistema (muy similar al
administrador de tareas de Windows). Allí tienes un listado de todos los procesos que corren bajo tu usuario, y puedes
ver sus atributos, finalizarlos, etc.
Esta puede ser una manera muy válida de verlo, pero en la guía que nos ocupa me voy a centrar en hacerlo vía
terminal, puesto que conocer los comandos te puede venir muy bien, como dije al principio, si tienes un problema con
la sesión gráfica y te ves obligado a solventarlo desde la terminal TTY.
La opción más básica te mostrara un listado básico, junto con la información de algunos de sus atributos por
columnas (PID, usuario propietario, nombre, etc.). Puedes desplazarte entre las diferentes filas por los controles del
teclado, y teclear «q» para volver al modo normal y seguir utilizando la consola.
$ sudo top
Ps
La utilidad ps te muestra una foto con todos los procesos ejecutándose en tu sistema, junto con información de cada
uno de ellos. Es un poco como top, pero sin actualizarse a tiempo real, es decir mostrando una foto estática del
momento de su ejecución. Te presento algunas opciones de su uso a continuación.
En el primero caso, utilizando el -e verás un listado de todos los procesos y subprocesos junto con su ID (PID).
$ sudo ps -e
Combinando el parámetro -e con el parámetro -f, que viene de full-format listing, tendrás acceso al mismo listado
anterior, pero esta vez con mucha más información de los atributos en columnas, incluyendo el ID del padre (PPID) y
la ruta del ejecutable, entre otros.
$ sudo ps -ef
Pstree
Mediante el comando pstree, puedes ver la misma información que en los casos anteriores, pero representada en
forma de árbol, identificando, de este modo, padres e hijos. Es una vista similar a lo que puedes llegar a ver con el
monitor de procesos gráficos de GNOME.
$ sudo pstree
Como seguramente verás, todos parten de init, o de systemd en su defecto, como viene siendo la norma en las
versiones más recientes de la mayoría de distribuciones.
A partir de ahí, se va ramificando en subprocesos e hilos. Los hilos los puedes reconocer porqué se muestran entre
llaves ({}). Además, si un proceso contiene varias veces un hilo con el mismo nombre, este aparecerá también entre
corchetes ([]) e indicando con un número las veces que se repite.
Si tienes abierto Chrome/Chromium en el momento de pasar el comando, puedes ver ejemplificado esto ultimo que te
comento. Cuando he hecho la captura de arriba, tenía tres pestañas abiertas, que se visualizan como tres subprocesos
separados, cada uno de los cuales tiene diferentes threads o hilos.
Visto todo esto, ya es hora de que veas como finalizar o detener un proceso.
Comandos para Detener o Matar Procesos Activos
Pidof
Para conocer el PID de un determinado proceso, conociendo el nombre de este, puedes utilizar el comando pidof.
(Aclaración: Antes había un error en el nombre de este comando, que ya ha sido corregido a fecha del 27/01/2017
gracias al comentario de Walter).
Kill
Mediante el comando kill, podrás matar un proceso en Linux conociendo su valor PID. Con la sintaxis básica, el
comando se ejecutará enviando la señal SIGTERM, que es la que viene por defecto y ordena la salida correcta
(dándole tiempo a que realice las acciones pertinentes de salida).
Si la linea anterior no ha hecho efecto, puedes optar por ejecutar el comando kill con la opción -9, la cual envía la
señal SIGKILL, forzándolo a la salida en caso de que se resista, sin darle tiempo a realizar las acciones de salida.
Killall
Con el comando killall podrás matar un proceso conociendo su nombre. Este comando solo es válido en Linux.
Pkill
Otra opción similar es utilizar pkill, que te permitirá detener un proceso indicando solo algunos caracteres de su
nombre.
Es un comando fácil de utilizar y que no requiere conocer el PID concreto. Sin embargo, hay un riesgo, y es que la
señal se enviará a todos los procesos que tengan una correspondencia en nombre. Como más caracteres introduzcas,
más ajustada sera la búsqueda.
En estos casos, no podremos utilizar la aplicación de terminal del escritorio, y el único salvavidas será poder
contar con una de las terminales TTY. Puedes acceder directamente a la terminal TTY1 mediante la combinación
de teclas ‘CTRL+ALT+F1’. Una vez allí, deberás loguearte con tu usuario antes de poder utilizar ningún comando. Tan
solo pon el nombre y la password y listo.
Hace unos días publique una entrada en la que explicaba como reiniciar el servidor X en Ubuntu en caso de que se
hubiese bloqueado la sesión gráfica. Esta puede ser otra vía para atacar el problema.
Para ello vamos a utilizar el interprete de comandos, ya que, como verás al final, esta guía forma parte de la serie de
posts dedicados a exprimir al máximo esta herramienta tan potente que tenemos en GNU/Linux. Tienes el resto de
posts de la serie enlazados al final.
Comparar Archivos de Texto
Diff
Para el propósito comentado, básicamente nos vamos a utilizar el comando diff en sus múltiples posibilidades. El
comando diff compara dos archivos línea a línea a línea para detectar diferencias entre ellos. La sintaxis básicamente
esta:
La salida generalmente muestra todos el contenido diferentes entre los dos archivos. El contenido referente al primer
archivo pasado por argumento se muestra precedido por «<«, mientras que el referente al segundo archivo por «>».
En este caso, he utilizado la opción más básica (sin parámetros) contra dos archivos de texto iguales, que he llamado
texto1 y texto2. Como son iguales, no hay ningún output por pantalla.
Si utilizas el mismo comando pero habiendo modificado uno de los archivos, diff te mostrara uno a uno todas los
caracteres, palabras o frases que no coinciden. En el caso del ejemplo había eliminado una línea de texto de uno de los
archivos que contenía el texto: #force_color_prompt=yes. Esta línea está en el segundo archivo (va precedida por «>»
en el output) pero no en el primero.
Con el parámetro [-b] tenemos la opción de hacer la comparación igual que en el caso anterior, pero ignorando todos
los espacios en blanco. El output en este caso es básicamente el mismo.
Y aunque se trata de un comando que se utiliza básicamente para comparar archivos de texto, también puedes
utilizarlo para comparar archivos que estén en otros formatos, como odt, doc, docx, pdf, mp4, etc., etc.
En este caso he utilizado el comando (sin parámetros) para comparar dos archivos iguales en formato odt. Como ves,
si no hay ningún output nos está indicando que los dos archivos que hemos pasado como parámetro son iguales.
Ahora hemos hecho la misma prueba pero con dos archivos odt diferentes. Como puedes ver, en este caso el output
no nos muestra las diferencias encontradas (al no ser archivos de texto) pero si que nos indica que los archivos no son
iguales.
Cmp
El comando cmp compara dos archivos de texto al igual que diff, pero en este caso hace una comparación byte a byte.
La sintaxis es muy similar:
También podemos hacer la prueba con , como doc, odt, pdf, mp4, etc., sin embargo en estos casos solo se limita a
indicar si son iguales o no, sin señalar las diferencias. Y ahora veamos algunos ejemplos:
Al utilizar el comando con el parámetro [-b], si hay diferencias entre los dos archivos cmp nos indica como output el
byte diferente, el número de línea y el contenido que varía.
Para ello trabajaremos con los diferentes formatos de compresión (o al menos los más comunes) con los que te puedes
encontrar en prácticamente cualquier distribución GNU/Linux de forma nativa, tales
como zip, tar, gz, bz2, tar.gz y tar.bz2. Así que, tanto si eres nuevo en Linux, como si ya llevas cierto tiempo, en esta
guía te servirá una visión clara de como tratar con los diferentes formatos de compresión desde la línea de comandos.
Gzip y Bzip2
En este grupo conocerás los comandos básicos con los que podrás comprimir y descomprimir cualquier fichero en
Linux utilizando los formatos .
En este sentido es justo señalar que, en entornos Unix, se separa lo que es el concepto de compresión de lo que es el
hecho de empaquetar varios ficheros en un único archivador (obviamente puedes utilizar formatos con los que
combinar las dos acciones, como verás un poco más adelante).
Para la compresión pura de un archivo, en Linux se utilizan mucho el formato GZIP, todo un clásico en entornos
Unix, y el formato BZIP2, algo más moderno y con un mayor índice de compresión.
Antes que nada, ten en cuenta que tenemos que situarnos en la carpeta dónde se encuentran los ficheros que
queremos comprimir. Si tienes dudas o te falta práctica a la hora de desplazarte por las diferentes carpetas desde la
terminal, puedes consultar el post que te acabo de enlazar. Para poner un ejemplo, supongamos que están en la
carpeta Documentos dentro de la home.
$ cd Documentos
#gzip
Gzip es una utilidad de GNU/Linux integrada en el propio sistema operativo y que permite la compresión o
descompresión de archivos en formato gz.
Como apunte importante, Gzip es una herramienta de compresión pura, es decir, solo comprime archivos individuales
(no directorios), y, a diferencia de formatos mas populares como RAR o ZIP, no permite empaquetar a varios dentro
del mismo paquete.
A continuación tienes los principales comandos que puedes utilizar para comprimir y descomprimir un archivo
utilizando gzip.
La sentencia que tienes a continuación es la que te servirá para comprimir cualquier archivo en Gzip, lo que dará
como resultado un paquete comprimido con la extensión .gz.
$ gzip -9 archivo
Para gestionar cualquier fichero comprimido en gzip tienes varias opciones. Si quieres conocer los principales
parámetros del archivo, véase el ratio de compresión o el nombre del archivo una vez descomprimido, puedes utilizar
la siguiente sentencia:
$ gzip -l archivo.gz
Y finalmente, para descomprimir un Gzip (que podrás reconocer porqué termina con la extensión .gz) , puedes utilizar
la siguiente sentencia:
gzip -d fichero.gz
#bzip2
La utilidad Bzip2 también forma parte del sistema en GNU/Linux y es muy similar a Gzip, lo único que en este caso
sirve para comprimir o descomprimir utilizando el formato bz2.
Al igual que ocurre con Gzip, Bzip2 solo permite la compresión de archivos individuales, ya que se trata de una
herramienta puramente de compresión.
Para comprimir un fichero cualquiera, que en este ejemplo voy a denominar archivo, en bzip2, la sentencia que debes
utilizar es la que tienes a continuación.
$ bzip2 -z archivo
Una vez tienes el archivo comprimido en la extensión bz2, que en este caso se llama archivo.bz2, puedes hacer un test
de la integridad del mismo con el comando que tienes debajo. Si todo está OK, no habrá ningún output.
$ bzip2 -t archivo.bz2
Siguiendo con el ejemplo anterior, para descomprimir el registro que se te ha generado como resultado de la
compresión en Bzip2, puedes utilizar la sentencia de debajo.
$ bzip2 -d archivo.bz2
Tar
Y si en el primer grupo nos hemos centrado en las operaciones de compresión y descompresión puras, ahora le va
tocando al turno al empaquetado y desempaquetado.
Para ello, el formato más utilizado en GNU/Linux es TAR, una utilidad que permite empaquetar varios archivos o
directorios dentro de un solo paquete en formato TAR (lo reconocerás por la extensión).
En este caso voy a abordar el uso de TAR como tal, pero lo más común es que se use en combinación con los formatos
de compresión Gzip y Bzip2 vistos más arriba (eso me lo reservo para la ultima parte del post).
#tar -cvf
Siguiendo con el primer ejemplo, podemos suponer que queremos empaquetar dos archivos, que
denominaré archivo1 y archivo2, dentro de un paquete .tar que podemos denominar paquete. Para empaquetar los
diferentes archivos uno a uno, puedes utilizar el siguiente comando:
Cuando se trata de empaquetar varios ítems, lo mas práctico es ubicarlos todos dentro de una misma carpeta y
empaquetar directamente la directorio. Para ello, puedes utilizar el mismo comando anterior pero sustituyendo los
diferentes archivos con el nombre del directorio, que en este ejemplo podemos denominar directorio.
#tar -tvf
Una vez tienes un paquete .tar, una de las cosas que podemos necesitar es conocer el contenido que hay dentro. Para
ello, si utilizas el comando que te pongo a continuación, te listara, de forma recursiva (esto es, recorriendo todos los
niveles) los diferentes archivos o directorios uno a uno.
Tar.Gz y Tar.Bz2
Llegados este punto, creo que es el momento de tratar con las operaciones que combinan compresión y empaquetado,
que al fin y al cabo son las más comunes en otro tipo de entornos como Windows (de hecho, así es como trabajan los
formatos de compresión más extendidos, léase ZIP, RAR o 7-Zip, entre otros).
Cuando hemos hablado de Gzip y Bzip2 ya has visto que se trata de dos utilidades puramente de compresión. Pues
bien, lo que no te he contado, es que puedes combinar cualquiera de estas operaciones con TAR, dando lugar a
archivos con las extensiones .tar.gz y .tar.bz2, que seguramente te resultaran muy familiares en Linux.
Esto posibilita el hecho de poder comprimir múltiples archivos dentro de un mismo archivador, al igual que puedes
hacer con otros formatos más populares. A continuación te resumo los comandos más importantes que debes conocer
en este sentido:
#tar -czvf
Para comprimir varios archivos (a modo de ejemplo vamos a llamarlos archivo1 y archivo2) dentro de un paquete
comprimido tar.gz, puedes utilizar el siguiente comando. Como verás, es el mismo que utilizamos para el
empaquetado en TAR, con el añadido del parámetro -c, que representa la compresión en Gzip.
También nos puede interesar comprimir un directorio entero, con todo su contenido dentro. En este caso, la sentencia
sería la misma pero sustituyendo los diferentes ficheros por el nombre del directorio en cuestión.
#tar -xzvf
Para descomprimir el paquete y desempaquetar su contenido, seguimos con la misma estructura, pero en este caso
sustituimos el parámetro -c, de compresión, por el parámetro -x, de descompresión. A continuación tienes la sentencia
completa.
#tar -cjvf
Para empaquetar y comprimir varios ítems (en este ejemplo utilizo dos registros denominados archivo1 y archivo2) en
un paquete .tar.bz2, te puedes valer de la siguiente sentencia, que si te fijas, es igual que en el caso de los .tar.gz pero
cambiando la -z por la -j.
#tar -xjvf
Para descomprimir un paquete .tar.bz2 y desempaquetar su contenido, seguimos con la misma estructura, pero en
este caso sustituimos nuevamente el parámetro -c, de compresión, por el parámetro -x, de descompresión.
tar -xjvf paquete.tar.bz2
ZIP
Siguiendo con las operaciones que combinan la compresión y el empaquetado de archivos, en este punto nos
centraremos en ZIP, uno de los sistemas de compresión y empaquetado más extendidos. A continuación te resumo los
principales comandos que debes conocer:
#zip
Para comprimir y empaquetar un conjunto de archivos o directorios dentro de un archivador en formato ZIP, en
cualquier distribución GNU/Linux puedes hacer uso de la utilidad ZIP de forma nativa. Aquí tienes la sentencia que
debes utilizar:
#unzip
En el caso de que tengas un paquete comprimido en ZIP, la utilidad que debes utilizar para gestionarlo es unzip. Con
ella podrás realizar acciones como listar el contenido de dentro, o descomprimir el paquete y desempaquetar los
diferentes archivos. A continuación tienes algunos ejemplos de como puedes utilizarlo.
Con este comando podrás listar todos los archivos o directorios contenidos del paquete archivador.zip. Es útil para
conocer el contenido antes de desempaquetarlo.
$ unzip -l archivador.zip
Con este otro comando podrás descomprimir el paquete archivador.zip y desempaquetar todos sus archivos y
directorios contenidos uno a uno en la misma carpeta de destino en la que se encuentra el archivador.
$ unzip archivador.zip
En caso de que solo quieras desempaquetar uno de los archivos contenidos, puedes utilizar el mismo comando, pero
indicando a continuación el nombre del archivo concreto, en este caso vamos a suponer que lo
denominamos archivo1 como en los ejemplos anteriores.
7z
Y, si bien hasta ahora me he centrado en los formatos con los que puedes trabajar de forma nativa desde
prácticamente cualquier distribución GNU/Linux, lo cierto es que creo justo hacer una excepción en este caso, y es
que el formato 7z y el software de compresión 7-Zip (el cual necesitaras para poder trabajar con este formato) lo valen
con creces.
7-Zip es un software de compresión totalmente libre, abierto y multiplataforma que ofrece compatibilidad para
diferentes formatos de compresión, si bien dispone del suyo propio. 7z es un formato de compresion sin perdida y que
destaca especialmente por su elevado ratio de compresión, superior a otros formatos más populares como ZIP, GZIP o
RAR.
En este caso, aprovechando que ya he publicado un post acerca de como instalar y poder utilizar 7-Zip en Linux, creo
que lo mejor será remitirte a dicho post, en el que podrás ver, por un lado, los paquetes que tienes que instalar para
poder trabajar con el, y en segundo lugar, como utilizarlo tanto desde la terminal, como de forma grafica desde el
propio navegador de archivos.
Muy buenas lector, seguimos con la larga serie de posts dedicados a explotar al máximo el uso de la terminal de Linux
(al final del posts tienes enlazados todos los artículos de la serie). En este caso nos centraremos en la gestión de
servicios.
Básicamente verás los diferentes comandos que puedes utilizar tanto para controlar el estado de los diferentes
servicios de tu sistema, como para iniciar, detener o reiniciar un servicio concreto. ¡Vamos allá!
El caso de la gestión de servicios es algo paradigmático, sobretodo con la adopción de systemd por parte de la
mayoría de distribuciones, que ha supuesto también la llegada de todo un nuevo conjunto de métodos para el control
de servicios. Métodos que, por otro lado, siguen conviviendo aún con los que teníamos antes de la implantación
masiva de systemd.
Siendo así las cosas, he pensado que lo mejor es empezar por conocer las principales opciones que nos ofrece systemd
de cara a la gestión de servicios, que en todas las distribuciones que utilizan systemd sería, por decirlo de algún modo,
el método más «correcto» o «aceptado».
Visto esto, te mostraré algunas otras opciones, como, como las que nos ofrece el veterano Init.d, que aunque se
encuentra obsoleto, aún sigue siendo operativo en muchos casos.
Controlar Servicios con systemd y systemctl
Lo dicho, empecemos por veo los diferentes comandos que nos permiten controlar el estado de los diferentes servicios
a través de systemd, que actualmente gestiona el proceso de arranque en gran parte de las distribuciones más
comunes, incluyendo Debian, Ubuntu, Fedora, o gran parte de sus derivadas.
systemd nace como sustituto de System V para controlar la secuencia de arranque y la administración de
servicios en GNU/Linux, aunque no ha estado exento de controversia, debido a su complejidad e invasión de
funciones de otras herramientas para la administración del sistema. Aun así, es lo que tenemos en gran parte de las
distribuciones a día de hoy.
Los diferentes objetos de control de systemd se denominan «unidades». Para el control de dichas unidades, systemd
utiliza una herramienta denominada systemctl, que es la que utilizaremos a continuación para controlar el estado de
los diferentes servicios. ¡Vamos alla!
Visto esto, vamos a centrarnos ya en un servicio determinado. Como ejemplo,voy a utilizar el servicio ufw, que es el
que va asociado a UFW, el script que se encarga de gestionar el cortafuegos del kernel en Ubuntu derivados.
Para conocer el estado de ufw puedes valerte de la siguiente sentencia:
Ojo, con el comando que acabas de ejecutar lo que estamos comprobando es que el servicio o demonio de UFW esté
activo en memoria o no. No es lo mismo que UFW como tal esté habilitado (y por tanto aplicando sus reglas en el
cortafuegos del kernel) o no. Esto ultimo se debe controlar directamente desde los propios comandos de UFW.
Iniciar, Detener o Reiniciar un Servicio
Sigamos con la parte de iniciar y detener servicios en tiempo real. Continuando con el ejemplo anterior, para iniciar
el servicio ufw utilizaremos la sentencia que muestro debajo. Por defecto lo más probable es que el output te indique
que el servicio está activo, independientemente de que el script este o no aplicando las reglas (que controlamos a
través de los comandos que provee el propio UFW).
De forma análoga, si lo que quieres es detener el servicio, puedes utilizar el comando que verás a continuación. Esto
detendrá, al momento, la ejecución del servicio, pero no alterará su orden de ejecución en el siguiente arranque del
sistema.
Hasta ahora hemos visto como controlar los servicios en tiempo real. A continuación vamos a ver como controlar su
ejecución en el momento del arranque.
Y ahora que conoces su estado de arranque, también te puede interesar saber como habilitar o deshabilitar su
ejecución en cada arranque. Esto lo vemos a continuación.
Del mismo modo, para deshabilitar un servicio para que deje de ejecutarse durante el arranque del sistema te
puedes valer de la sentencia que dejo debajo. Ojo, esto no iniciará el servicio en el momento presente (en caso de estar
apagado). Simplemente establecerá que se empiece a iniciar de forma automática a partir del siguiente arranque.
Estos son los comandos más importantes que debes conocer de cara al control de servicios a través de systemd y
systemctl, y constituyen la forma más «estándar» de hacerlo, en todas las distribuciones que hacen uso de systemd,
tales como Ubuntu, Debian y muchas de sus respectivas derivadas.
Y ahora toca ver el estado de un servicio concreto. En este caso, el comando es muy parecido al utilizado con
systemctl, y el output, almenos a simple vista, me ha parecido exactamente igual.
Ojo, como he mencionado antes en el caso de systemctl, con el comando que acabas de ejecutar lo que estamos
comprobando es que el servicio o demonio de UFW esté activo en memoria. No es lo mismo que UFW como tal esté
habilitado (y por tanto aplicando sus reglas en el cortafuegos del kernel) o no.
Iniciar, Detener o Reiniciar Servicios
Los comandos para iniciar o detener un servicio utilizando service son muy similares a los utilizados con systemctl.
Empezando por iniciar un servicio, la sentencia sería la siguiente (basándome en el mismo ejemplo de ufw):
De forma análoga, si lo que quieres es detener el servicio, puedes utilizar el comando que verás a continuación. Esto
detendrá la ejecución del servicio en el momento actual, pero no alterará su orden de ejecución en el siguiente
arranque del sistema.
Y finalmente tenemos la opción de reiniciar, que la que seguramente necesitarás utilizar más, sobretodo si sueles
hacer cambios en los ficheros de configuración.
Con esto acabo con los comandos relativos a service. Ahora pasaré a indicarte cuatro comandos básicos para hacer los
mismo utilizando Init.d.
Para detener el servicio, lo mismo. Al igual que en los otros casos, esto detiene la ejecución actual del servicio, pero
no modifica su estado en el arranque del sistema.
Con esto llego al final de la parte dedicada a Init.d, y también al final del post. Recuerda que a día de hoy, en gran
parte de las distribuciones más populares ya se utiliza systemd para el control del arranque y la gestión de servicios,
por lo que, salvo que utilices una versión bastante antigua, o una distribución que no haga uso de systemd, la forma
más «estándar» para operar es a través de systemctl.