Saltar a contenido

Un repaso de los comandos de Linux

En el capítulo anterior veíamos como trabajar con la emulación de Terminal, y algunos comando básicos. Aquí veremos algunos más.

Referencia de comandos

Ya hemos visto que el programa gestor de comandos más popular en el mundo Linux es bash. Tiene su propio lenguaje de comandos, lo que da lugar a una bibliografía muy extensa. Lo explicado en este capítulo no pretende ir más allá de una introducción. Si queremos profundizar en la materia, encontraremos amplio material navegando por la red.

El recurso básico es el comando man. Por ejemplo, el comando apt permite gestionar la descarga e instalación de paquetes de software en formato Debian. Para consultar el manual básico, introducimos el comando:

$ man apt

lo que muestra un resumen del comando apt. Usando las teclas de flecha Down Up podemos desplazarnos por el texto. Pulsar Q para abandonar (quit).

¡Ojo! El comando man no es un tutorial. Es más bien un manual de referencia, en líneas generales, bastante técnico. Existen varios proyectos para poner los manuales de Linux en la red. Por ejemplo:

Si buscamos tutoriales, aquí tenemos un par de ellos:

Argumentos

En el capítulo anterior, veíamos como iniciar el procesador de textos de Gnome desde el Terminal de comandos. Por ejemplo, para ejecutarlo con dos archivos abiertos:

$  gnome-text-editor archivo1.txt archivo2.txt

A la información añadida a un comando se le llama "argumentos". Se delimitan mediante espacios separadores:

  • comando: gnome-text-editor
  • primer argumento: archivo1.txt
  • segundo argumento: archivo2.txt

¿Que pasa si el nombre de un archivo contiene espacios? Que obtendremos un error:

$  gnome-text-editor mi primer documento.txt

Esto será interpretado como tres argumentos. La solución es fácil; si un argumento contiene espacios, podemos entrecomillarlo para que sea considerado como un todo:

$  gnome-text-editor "mi primer documento.txt"

También podemos usar apóstrofos en lugar de comillas dobles:

$  gnome-text-editor 'mi primer documento.txt'

Opciones

Un caso especial de argumentos son las opciones. Son indicadores que modifican el comportamiento del comando. Por ejemplo:

$ date
sáb 27 abr 2024 10:51:48 CEST

$ date -u
sáb 27 abr 2024 08:51:48 UTC

Vemos que, por defecto, el comando date muestra la hora local, en este ejemplo, en horario CEST (Central European Summer Time). Con la opción -u, muestra la hora universal, sin desplazamiento de huso horario.

Típicamente, las opciones suelen ir precedidas de un guión. Suelen existir en dos versiones:

  • versión corta:

    $ date -u
    
  • versión larga:

    $ date --utc
    

Las opciones escritas en versión larga suelen ir precedidas de dos guiones. Su significado es más evidente y son más fáciles de interpretar, aunque requieren un mayor esfuerzo de tecleo, y si pasamos muchas opciones, el texto del comando puede resultar excesivamente largo.

¡Cuidado! Ya hemos visto que Linux diferencia mayúsculas de minúsculas. Una misma opción -u y -U podría ser válida en ambos casos, pero con diferente significado. En el caso del comando date, la opción -U en mayúsculas no existe, y mostrará un mensaje de error:

$ date -U
date: opción incorrecta -- «U»
Pruebe 'date --help' para más información.

La opción --help, y en ocasiones, su equivalente corto -h, suelen estar presentes en muchos comandos. Sirven para visualizar en la consola un texto de ayuda.

Dependiendo del comando, algunas opciones se pueden combinar en una sola. Por ejemplo, el comando cal muestra un calendario, y ncal es un comando similar, pero con más posibilidades:

$ ncal -b3

     Marzo 2024            Abril 2024            Mayo 2024        
lu ma mi ju vi sá do  lu ma mi ju vi sá do  lu ma mi ju vi sá do  
             1  2  3   1  2  3  4  5  6  7         1  2  3  4  5  
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   6  7  8  9 10 11 12  
11 12 13 14 15 16 17  15 16 17 18 19 20 21  13 14 15 16 17 18 19  
18 19 20 21 22 23 24  22 23 24 25 26 27 28  20 21 22 23 24 25 26  
25 26 27 28 29 30 31  29 30                 27 28 29 30 31

Aquí combinamos la opción -b (mostrar cada semana en una fila) con la opción -3 (mostrar tres meses, anterior, actual y siguiente). Equivale a:

$ ncal -b -3

Las combinaciones solo se pueden hacer con opciones cortas.

cal y ncal

Muchos comandos son en realidad pequeños programas. cal y ncal son dos comandos que a veces no vienen instalados de serie. Es fácil de solucionar. Por ejemplo, para instalar ncal usamos el comando:

sudo apt install ncal

Borrar pantalla

El funcionamiento del terminal es mediante flujo de caracteres. A medida que se va llenando la ventana, el texto se irá desplazando hacia arriba para dejar espacio. Los programas de terminal suelen proporcionar una barra lateral de desplazamiento que podemos arrastrar para visualizar el texto que ha quedado oculto (algo que no existía en los terminales antiguos).

Si el terminal se llena de texto y queremos hacer "limpieza" de la ventana, podemos ejecutar el comando:

$ clear

El directorio de trabajo

Supongamos que estamos visualizando el contenido de una carpeta en la ventana del gestor de archivos, por ejemplo, las imágenes de fondo de escritorio que se suministran con Ubuntu. Están en /usr/share/backgrounds/:

Mientras navegamos usando el gestor de archivos, en todo momento hay una carpeta "actual" cuyo contenido se muestra. Para ir a otra carpeta, tendremos que abrirla pulsando sobre ella, lo que la convierte en la nueva carpeta actual.

En el uso del terminal pasa lo mismo. En todo momento hay una carpeta de trabajo, conocida como working directory. Cuando abrimos una sesión de terminal, el directorio actual comenzará siendo la carpeta principal del usuario, ubicada generalmente en el directorio /home/usuario (cambiar "usuario" por el nombre que corresponda). A esta carpeta también podemos hacer referencia por su alias, formado por un único carácter ~.

Podemos ver cual es la carpeta actual en la información que se muestra en el prompt, antes del carácter $

~ $

Otra forma de averiguar cual es la carpeta actual es ejecutando el comando pwd (print working directory):

$ pwd
/home/antonio

Un detalle histórico:

En el mundo de los ordenadores, para mostrar algo en la pantalla se usa con frecuencia la palabra print, que significa imprimir. Es una herencia de los tiempos prehistóricos, cuando no había pantallas y todos los datos se mostraban en papel.

Ver el contenido de un directorio

Para mostrar la lista de los archivos que hay en un directorio, utilizar el comando ls (abreviatura de lista) seguido del directorio a mostrar:

$ ls /usr/share/backgrounds

con lo que veremos la lista de archivos:

Flash_and_Thunder_by_Julian_Tomasini.jpg        Quokka_Everywhere_by_Dilip.png
Lonely_Quokka_by_Dilip.png                      Schattenzug_by_OrbiteLambda.webp
Questing_Quokka_Full_Color_3840x2160.png        The_Web_by_nkhdiscovery.png
Questing_Quokka_Full_Dark_3840x2160.png         Ubuntu_with_Frutiger_Metro_by_lyk_lyk.png
Questing_Quokka_Full_Dimmed_3840x2160.png       
Questing_Quokka_Full_Light_3840x2160.png        ubuntu-default-greyscale-wallpaper.png
Questing_Quokka_Wallpaper_Dimmed_3840x2160.png  ubuntu-wallpaper-d.png
Questing_Quokka_Wallpaper_Light_3840x2160.png   warty-final-ubuntu.png

Si queremos mostrar el contenido de la carpeta actual, introducir el comando ls sin especificar ningún directorio:

$ ls

Por defecto los archivos se muestran uno a continuación de otro, y a llegar al extremo derecho de la ventana de Terminal, se sigue en la línea siguiente. Podemos mejorar la presentación mostrando los archivos en forma de una sola columna, añadiendo la opción -1 como argumento. ¡Ojo! Es un número uno, no la letra ele.

$ ls -1
Arizona_night_by_Orbite_Lambda.jpg
Einsamer_Raum_by_Orbite_Lambda.jpg
Oriole_3D_by_Dilip.png
Oriole_by_Julian_Tomasini.jpg
OrioleMascot_by_Vladimir_Moskalenko_dark.png
OrioleMascot_by_Vladimir_Moskalenko_light.png
Oriole_wallpaper_dimmed_3840x2160.png
Oriole_wallpaper_light_3840x2160.png
Sunset_by_Gabriele_Fontana.jpg
ubuntu-default-greyscale-wallpaper.png
Ubuntu_Legacy_by_Aaron_J_Prisk_dark.png
Ubuntu_Legacy_by_Aaron_J_Prisk_light.png
ubuntu-wallpaper-d.png
warty-final-ubuntu.png
Warty_remastered_by_Romactu.png

O bien, para obtener un directorio concreto en lugar del actual:

$ ls -1 /usr/share/backgrounds

Si queremos una lista detallada, usar la opción -l (letra ele minúscula) para mostrar los archivos en formato "largo":

$ ls -l /usr/share/backgrounds

-rw-r--r-- 1 root root 10979580 Sep  3 06:48 Flash_and_Thunder_by_Julian_Tomasini.jpg
-rw-r--r-- 1 root root   219212 Sep  3 06:48 Lonely_Quokka_by_Dilip.png
-rw-r--r-- 1 root root  4013573 Sep  3 06:48 Questing_Quokka_Full_Color_3840x2160.png
-rw-r--r-- 1 root root  1320176 Sep  3 06:48 Questing_Quokka_Full_Dark_3840x2160.png
-rw-r--r-- 1 root root  1363529 Sep  3 06:48 Questing_Quokka_Full_Dimmed_3840x2160.png
-rw-r--r-- 1 root root  1541072 Sep  3 06:48 Questing_Quokka_Full_Light_3840x2160.png
-rw-r--r-- 1 root root  4546613 Sep  3 06:48 Questing_Quokka_Wallpaper_Dimmed_3840x2160.png
-rw-r--r-- 1 root root  5757248 Sep  3 06:48 Questing_Quokka_Wallpaper_Light_3840x2160.png
-rw-r--r-- 1 root root  3473785 Sep  3 06:48 Quokka_Everywhere_by_Dilip.png
-rw-r--r-- 1 root root  1798496 Sep  3 06:48 Schattenzug_by_OrbiteLambda.webp
-rw-r--r-- 1 root root  7600879 Sep  3 06:48 The_Web_by_nkhdiscovery.png
-rw-r--r-- 1 root root   931613 Sep  3 06:48 Ubuntu_with_Frutiger_Metro_by_lyk_lyk.png
drwxr-xr-x 2 root root     4096 Oct  7 04:44 contest
lrwxrwxrwx 1 root root       46 Sep  3 06:48 ubuntu-default-greyscale-wallpaper.png ->  Questing_Quokka_Wallpaper_Dimmed_3840x2160.png
-rw-r--r-- 1 root root  3678190 Sep  3 06:48 ubuntu-wallpaper-d.png
-rw-r--r-- 1 root root  4248111 Oct  7 04:46 warty-final-ubuntu.png

Cada entrada de la lista es un archivo. Veamos el significado de las columnas.

  • el primer carácter - indica que se trata de un archivo. Un directorio mostrará una d, y un enlace a otro fichero mostraría una letra l (abreviatura de "link")

  • los nueve siguientes caracteres son los permisos que tiene el archivo. Puede
    ser:

    rwxrwxrwx
    

    los guiones indican permisos desactivados:

    rw-r--r--
    

    rwx significa read, write, execute, es decir, permiso para examinar el archivo, modificarlo o ejecutarlo. En la secuencia de nueve caracteres, los tres primeros, rw- indican los permisos que tiene el usuario "propietario" de ese archivo. Evidentemente, tratándose de un archivo .jpg, es decir, una imagen, el permiso para ejecutarlo está desactivado, ya que no es un programa.

    Los tres siguientes caracteres muestran los permisos para los usuarios que pertenezcan al grupo propietario. Todo archivo tiene un usuario y un grupo de usuarios. En este caso, se establece que los usuarios del grupo propietario no tienen permiso write. Es decir, no pueden modificar ni borrar el archivo.

    Los tres últimos caracteres muestran los permisos para el resto de usuarios.

  • la siguiente columna muestra el número de enlaces al fichero. Un 1 significa que esta es la única entrada de directorio que hace referencia a ese archivo.

  • seguidamente se muestran los nombres de usuario y grupo propietario. En el ejemplo vemos que solo podemos modificar o borrar el fichero si actuamos como usuario administrador del sistema (root).

  • en la siguiente columna vemos el tamaño del archivo en bytes

  • fecha de la última modificación

  • nombre del archivo, seguido del archivo apuntado, en el caso de los enlaces.

Una opción interesante del comando ls es -F (en mayúsculas), que muestra un carácter añadido a los nombres de carpetas y archivos, indicando el tipo. Por ejemplo, las carpetas se señalan con un carácter /, y los programas ejecutables llevan un asterisco *.

$ ls ~ -lF

total 32
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Descargas/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Documentos/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Escritorio/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Imágenes/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Música/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Plantillas/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Público/
drwxr-xr-x 2 jf jf 4096 mar 11 12:05 Vídeos/

Véase que cuando combinamos varias opciones que estén limitadas a una letra y un guión, podemos escribirlas combinándolas en una sola, como -lF. A mí me gusta añadir también la opción -a, que muestra los archivos ocultos y las entradas correspondientes a la carpeta actual y la padre. Los archivos ocultos se distinguen porque el nombre lleva un punto como prefijo:

$ ls ~ -alF
total 80
drwxr-x--- 16 usuario usuario 4096 ene  8 16:45 ./
drwxr-xr-x  3 root    root    4096 ene  8 10:30 ../
-rw-------  1 usuario usuario   97 ene  8 17:09 .bash_history
-rw-r--r--  1 usuario usuario  220 ago 20 10:58 .bash_logout
-rw-r--r--  1 usuario usuario 3771 ago 20 10:58 .bashrc
drwx------ 15 usuario usuario 4096 ene  8 20:15 .cache/
drwx------ 14 usuario usuario 4096 ene  8 16:27 .config/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Descargas/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Documentos/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Escritorio/
drwx------  2 usuario usuario 4096 ene  8 13:07 .gnupg/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Imágenes/
drwx------  4 usuario usuario 4096 ene  8 10:30 .local/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Música/
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Plantillas/
-rw-r--r--  1 usuario usuario  807 ago 20 10:58 .profile
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Público/
drwx------  6 usuario usuario 4096 ene  8 16:13 snap/
drwx------  2 usuario usuario 4096 ene  8 10:30 .ssh/
-rw-r--r--  1 usuario usuario    0 ene  8 16:45 .sudo_as_admin_successful
drwxr-xr-x  2 usuario usuario 4096 ene  8 10:30 Vídeos/

Mostrar determinados archivos

Si no queremos ver el directorio completo, podemos especificar el nombre del archivo buscado, o usar comodines:

ls -alF /home/teresa/doc*

este ejemplo muestra las entradas que hay en esa carpeta, cuyo nombre empiece por doc.

Cambiar de directorio

En comandos como ls, si no especificamos el directorio se utiliza la carpeta actual. Ya hemos visto que podemos saber cual es la carpeta de trabajo usando el comando pwd. Para establecer otra carpeta como tal, debemos usar el comando cd (change directory) seguido del directorio al que queremos cambiar. Por ejemplo:

cd /home/teresa/documentos

La ruta de carpetas indicada puede ser absoluta o relativa.

Una ruta absoluta es aquella que comienza con el carácter / (que representa el directorio raíz) o con el carácter ~, que representa el directorio de usuario. Por ejemplo, los programas del sistema suelen estar en /usr/bin.

$ cd /usr/bin
$ pwd
/usr/bin

Una ruta relativa puede ser de tres tipos:

  • Si se escribe ./carpeta hace referencia a una carpeta que cuelga de la actual, representada por el punto.

  • Si se escribe ../carpeta hace referencia a una carpeta que cuelga de la carpeta padre de la actual. La carpeta padre se representa con dos puntos.

  • Si la ruta comienza directamente con un nombre de carpeta, es que se trata de una que cuelga de la actual. Por ejemplo, carpeta1/carpeta2 equivale a ./carpeta1/carpeta2.

Nótese que podemos ir a una carpeta con varios comandos cd, paso a paso:

$ cd ~
$ cd carpeta1
$ cd carpeta2
$ pwd
/home/teresa/carpeta1/carpeta2

El primer comando nos deja en la carpeta raíz del usuario. El resto van descendiendo por la estructura de carpetas del usuario.

Para subir a la carpeta de la que cuelga la actual escribimos:

$ pwd
/home/teresa/carpeta1/carpeta2
$ cd ..
$ pwd
/home/teresa/carpeta1

Un comando cd sin indicar el directorio nos lleva a la carpeta raíz del usuario:

$ cd
$ pwd
/home/teresa/

Los siguientes cuatro comandos son equivalentes, suponiendo que tenemos un usuario llamado "usuario":

cd
cd ~
cd /home/usuario
cd $HOME

Más adelante veremos las variables del sistema. La variable $HOME representa la carpeta principal del usuario.

No debemos olvidar que Linux es case sensitive. Una carpeta llamada /Documentos u otra /documentos son distintas, ya que el primer carácter difiere.

También hay que tener presente que un nombre de carpeta o archivo puede llevar espacios, y eso hará que actúen como separadores para identificar cada argumento del comando. Para evitarlo, podemos delimitar el texto de cada argumento entre comillas o entre apóstrofos, como hemos visto anteriormente:

cd "/mis documentos"

Abrir carpeta en Terminal

A veces, navegar por la estructura de carpetas a base de sucesivos comandos cd para cambiar de directorio, y ls para averiguar los nombres de las carpetas, puede ser farragoso. Podemos usar el gestor de archivos Nautilus, para navegar hasta la carpeta deseada, y abrir una ventana de terminal con la carpeta ya seleccionada.

Para ello, en el fondo de la ventana del gestor de arhivos, pulsar con el botón secundario del ratón para obtener un menú desplegable. Seleccionar Abrir en un terminal:

Permisos de administrador

Para ejecutar algunos comandos necesitamos permisos de administrador. En sistemas tipo UNIX, a los usuarios "de a pie" no se les permite realizar operaciones de configuración del sistema, instalación de nuevas aplicaciones, etcétera. Generalmente hay un usuario con permisos especiales denominado "root", o superusuario.

Algunas distribuciones Linux, como es el caso de Ubuntu y derivados, no tienen habilitada la cuenta de superusuario. En este caso, para realizar tareas administrativas, de configuración, instalación de software, y cosas así, debemos escribir todos los comandos precedidos por la palabra sudo (abreviatura de superuser do). Se nos pedirá la password de nuestro usuario.

Por ejemplo, si escribimos:

$ ls /root
ls: no se puede abrir el directorio '/root': Permiso denegado

es decir, no tenemos permiso para visualizar el contenido de la carpeta del administrador. Pero si escribimos:

$ sudo ls /root
[sudo] contraseña:

se nos pide nuestra contraseña de usuario y seguidamente se ejecuta el comando.

Habilitar cuenta de administrador

En sistemas tipo Ubuntu, donde la cuenta de superusuario está deshabilitada, podemos activarla asignándole una password al usuario "root". Para ello usamos el comando passwd seguido del nombre de usuario:

$ sudo passwd root

lo que nos pide nuestra propia contraseña para permitirnos hacer el cambio:

[sudo] contraseña para usuario:

Seguidamente nos pide la contraseña para el usuario root

Nueva contraseña: 
Vuelva a escribir la nueva contraseña: 
passwd: contraseña actualizada correctamente

Para conectarnos como superusuario tenemos que introducir el comando su (abreviatura de superuser):

$ su

Se nos pide la password del usuario root, y seguidamente el prompt cambia, para advertirnos que estamos trabajando en modo administrador:

#

Mientras estemos en esta sesión privilegiada, no hace falta anteponer la palabra sudo antes de cada comando. No debemos abusar de esta situación, ya que, aunque nos da más libertad, supone un peligro para el sistema. Podemos salir de la sesión de superusuario con el comando exit:

# exit
$

Véase que se recupera el prompt $ indicando que estamos trabajando con permisos normales. Para cerrar la sesión de Terminal, volver a introducir el comando exit nuevamente. Cada comando exit cierra solo la sesión en curso.

Existe otra forma de abrir una sesión de superusuario sin necesidad de activar la cuenta "root". Se hace con el comando:

$ sudo -i

...lo que mostrará el prompt #. No olvidar finalizar con el comando exit.

Crear y editar archivos de texto

Para modificar archivos de configuración y otras labores varias, necesitaremos un editor de textos. Ubuntu proporciona uno gráfico, el de Gnome, pero también podemos usar editores que se ejecuten en la misma ventana del terminal.

Veamos un ejemplo. Comenzamos por situarnos en nuestra carpeta de documentos:

$ cd ~/Documentos

Vamos a crear un archivo de texto y editarlo. Para crear un nuevo archivo vacío en la carpeta actual, usamos el comando touch:

$ touch prueba.txt

El siguiente paso es abrirlo para su edición. El editor clásico en las antiguas consolas de texto es un programa llamado vi, pero su uso resulta una experiencia algo farragosa. Hay libros enteros dedicados a ello.

Optemos por algo más sencillo. Un editor de consola bastante popular es nano (véase wikipedia). Lo iniciamos introduciendo su nombre seguido del archivo a editar:

$ nano prueba.txt

Si quisiéramos modificar un archivo protegido, necesitaremos privilegios de administrador:

$ sudo nano prueba.txt

La ventana del terminal se convierte en editor de texto. Por ahora el contenido está en blanco. Podemos teclear texto, aunque aquí no funciona el ratón (en algunos sistemas se puede habilitar). Tenemos que desplazarnos con las teclas de flechas para introducir cambios en el contenido:

  GNU nano 8.1                       prueba.txt *                               









^G Ayuda     ^O Guardar   ^W Buscar    ^K Cortar    ^T Ejecutar  ^C Ubicación
^X Salir     ^R Leer fich.^\ Reemplazar^U Pegar     ^J Justificar^/ Ir a línea

Hemos introducido un texto:

  GNU nano 8.1                       prueba.txt *                               

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam eget tortor 
non urna imperdiet vulputate. Nulla nisl lacus, accumsan sed nunc id, 
sollicitudin dignissim velit. Suspendisse aliquam lacus vitae enim maximus 
fermentum. Phasellus sodales leo in porttitor auctor. 

Aenean pretium quam ipsum, id porta erat dignissim tristique. 
Suspendisse ultricies feugiat ullamcorper. Phasellus vel sapien diam. 
Mauris id mi id augue condimentum ornare non nec massa. 
Cras in imperdiet erat. In venenatis lacus a metus fermentum, vel tincidunt 
neque tempor. Duis hendrerit ante vitae euismod pretium. 
Suspendisse in aliquam nulla.



^G Ayuda     ^O Guardar   ^W Buscar    ^K Cortar    ^T Ejecutar  ^C Ubicación
^X Salir     ^R Leer fich.^\ Reemplazar^U Pegar     ^J Justificar^/ Ir a línea

En la fila superior se muestra el nombre del programa y el del fichero en edición. Un asterisco significa que tenemos modificaciones en el texto pendientes de guardar:

GNU nano 8.1                       prueba.txt *

En las filas inferiores se muestran las combinaciones de teclas ligadas
a alguna operación:

^G Ayuda     ^O Guardar   ^W Buscar    ^K Cortar    ^T Ejecutar  ^C Ubicación
^X Salir     ^R Leer fich.^\ Reemplazar^U Pegar     ^J Justificar^/ Ir a línea

El carácter ^ representa la tecla Ctrl. Para guardar los cambios, pulsar ^O, es decir, Ctrl+O (output). Para salir del editor, se teclea Ctrl+X.

nano tiene muchas opciones que no están a la vista. Por ejemplo:

  • pulsando Alt+M se activa el uso del ratón para posicionar el cursor (cuando el Terminal lo permite)
  • con Alt+N se visualizan los números de línea en el margen izquierdo
  • con Ctrl+G se accede a la ayuda (salir con Ctrl+X)
  • con Alt+U se deshace la última operación
  • con Alt+X se muestra/oculta las dos líneas inferiores de ayuda, ganando espacio para el texto a editar

El manual de nano es algo técnico, pero tiene información interesante.

Operaciones con archivos y carpetas

Para crear una carpeta dentro de otra, nos situamos en esta:

$ cd micarpeta

y ejecutamos el comando mkdir (make directory):

$ mkdir nuevacarpeta

Para suprimir una carpeta (remove) usamos el comando rm:

$ rm -r nombrecarpeta

Sin la opción -r (borrado recursivo) solo podríamos suprimir carpetas vacías. Con -r se borran también los contenidos.

Para suprimir un archivo:

$ rm miarchivo

Para mover un archivo a otro directorio:

$ mv miarchivo nombredirectorio

Para renombrar un archivo:

$ mv miarchivo nombrenuevo

!Cuidado!

El uso de comandos para borrar carpetas y archivos no los envía a la carpeta de reciclaje. El borrado es definitivo. Este tipo de comandos deben teclearse con mucho cuidado.

Un truco interesante es que, si vamos a borrar un grupo de archivos:

$ rm arch*

...previamente comprobar cuales serán los afectados por el comando:

$ ls arch*

y comprobados los archivos, cambiar ls por rm

Buscando archivos

Si no sabemos donde se encuentra un archivo, podemos buscarlo con el comando locate:

$ locate miarchivo

locate es un comando muy potente, que se basa en el mantenimiento en la sombra de bases de datos para localizar cada archivo. Ubuntu no lo trae de serie, por lo que tendremos que instalarlo o usar en su lugar otros comandos tales como:

$ which miprograma
$ whereis miarchivo

Sin embargo, estos comandos son más limitados en sus posibilidades, y no valen para cualquier tipo de archivo. which busca programas, y whereis busca solo programas y texto en los manuales.

El comando find es el más potente y versátil. Básicamente, la sintaxis es:

$ find / -name miarchivo

El primer argumento / indica el directorio raíz del sistema como punto de partida. Podemos limitar la búsqueda a un directorio concreto y sus subdirectorios:

$ find /home/usuario -name miarchivo

El nombre del archivo a buscar debe ir precedido por la palabra -name.

Por ejemplo, vamos a buscar el archivo de configuración fstab, que indica
la lista de discos del sistema:

$ find / -name fstab

Esto plantea un problema, intentamos acceder a carpetas para las que no tenemos permiso. Obtendremos sucesivos mensajes de error:

$ find: ‘/carpeta’: Permiso denegado

Podemos añadir una opción especial 2>/dev/null para suprimir la visualización de estos mensajes:

$ find / -name fstab 2>/dev/null

lo que nos da la ubicación del archivo:

/etc/fstab

¿Que significa 2>/dev/null? Literalmente, enviar (el símbolo >) los mensajes de error (mesajes tipo 2, el texto ordinario sería el 1) al dispositivo (device) nulo (/dev/null).

Si no estamos seguros del nombre, podemos usar asteriscos como comodines:

$ find / -name fstab* 2>/dev/null

/etc/fstab
/usr/sbin/fstab-decode
/usr/share/doc/mount/examples/fstab
/usr/share/doc/m4/examples/fstab.m4
/usr/share/man/man8/fstab-decode.8.gz
/usr/share/man/man5/fstab.5.gz

Esto muestra todos los archivos cuyo nombre comienza por fstab.

Redireccionamiento

Si la salida del comando find es muy extensa, podemos beneficiarnos de la posibilidad que tienen los comandos de crear un archivo de texto en lugar de mostrar los resultados en pantalla:

$ find / -name fstab* 2>/dev/null  > archivo.txt

Esto reenvía el texto a un nuevo archivo, archivo.txt, que se creará en el directorio actual, salvo que especifiquemos otro:

$ find / -name fstab* 2>/dev/null  > ~/Documentos/archivo.txt

¡Ojo! Si el archivo ya existe, se sobreescribirá.

El redireccionamiento vale para cualquier comando:

$ ls -alf > lista.txt

Podemos examinar el fichero de texto que hemos creado:

$ nano archivo.txt

o con el comando less:

$ less archivo.txt

El comando less muestra en la pantalla el contenido del fichero indicado como argumento, sin posibilidad de edición. Permite desplazar el texto usando las teclas Up y Down. Salimos pulsando la tecla Q (quit).

Un usuario avanzado combinarán ambos comandos sin llegar a crear un archivo de trabajo:

$ find / -name fstab* 2>/dev/null | less

A esto se le llama un pipe. Encadenamos un comando tras otro, intercalando un símbolo |. La salida del primer comando sirve como entrada del siguiente, y lo que se ve en pantalla es la salida del último comando.

Variables de entorno

Para que cualquier programa (gráfico o de texto) se ejecute desde la línea de comandos, es necesario que esté ubicado en alguna de las carpetas estándar para alojar programas. Esta lista de carpetas está reflejada en la variable del sistema PATH.

Las variables del sistema son etiquetas asociadas a los valores de configuración del equipo. Podemos ver esos valores con el comando printenv. Por ejemplo:

$ printenv PATH

muestra algo así como:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Nota: una vez más, linux es case-sensitive. Una variable PATH y otra path son diferentes.

El valor de esta variable muestra las carpetas donde por defecto se buscarán los programas. Los elementos de la lista se separan entre ellos con dos puntos. En este ejemplo, los programas se buscarán, y por ese orden, en:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

¡Importante! Véase que solo podemos ejecutar programas ubicados en estas carpetas, a menos que los escribamos precedidos por el nombre de carpeta:

$ ./miPrograma

Aquí estamos ejecutando un programa ubicado en la carpeta actual, representada por un punto "."

Algunas variables interesantes:

  • La variable SHELL indica cual es el programa que se utiliza para imterpretar y ejecutar comandos:

    $ printenv SHELL
    /bin/bash
    
  • La variable HOME indica la carpeta raíz del usuario

    $ printenv HOME
    /home/Teresa
    
  • La variable USER indica el nombre del usuario

    $ printenv USER
    Teresa
    

Podemos utilizar las variables en los comandos. Su valor se obtiene anteponiendo un símbolo $ al nombre de la variable. Antes de la ejecución del comando, se sustituirá el nombre de la variable por su valor:

$ cd /home/$USER

equivale a:

$ cd /home/Teresa

o bien a:

$ cd $HOME

lo que equivale a:

$ cd ~

ya que el símbolo ~ es un alias de la carpeta de usuario.

Nótese que si no anteponemos el símbolo $ al nombre de la variable:

$ cd HOME

no se sustituirá el nombre de la variable por su valor, y se buscará una carpeta llamada "HOME".

Información del sistema

Existe un programa llamado Neofetch, disponible para distintos sistemas operativos, que sirve para mostrar información del sistema. Lo ejecutamos con el comando

$ neofetch

Ubuntu no incluye de serie neofetch. Tendremos que instalarlo con:

$ sudo apt install neofetch

De todas formas, el proyecto fue abandonado en 2024.

Alternativamente, tenemos información del sistema abriendo el programa de Configuración de Ubuntu, apartado Sistema > Acerca de.

Cambiar permisos

Recordemos que un archivo o carpeta tiene nueve permisos:

  • como usuario propietario: lectura, escritura y ejecución
  • como grupo propietario: lectura, escritura y ejecución
  • otros usuarios: lectura, escritura y ejecución

Para cambiar los permisos de un archivo o carpeta, se usa el comando chmod (change mode). El permiso puede ser:

  • r es el permiso de lectura (read)
  • w es el permiso de escritura (write)
  • x es el permiso de ejecución (execute)

Un permiso se puede otorgar añadiendo un símbolo +, y suprimir con -. Por ejemplo, para especificar un permiso de ejecución a un archivo de texto con comandos:

chmod u+x miarchivo

Para especificar a quien se otorga el permiso, añadimos:

  • u al usuario propietario (user)
  • g al grupo propietario (group)
  • o al resto de usuarios (others)
  • a a todos los usuarios (all)

Si no se indica nada, se considera "all":

chmod +x miarchivo

Crear un script

Supongamos que actualizamos el sistema operativo periódicamente. Hacemos copia de documentos, borramos el disco duro, reinstalamos el sistema y recuperamos los archivos. Pero hay que reinstalar nuestras aplicaciones favoritas de nuevo.

Pongamos por caso que queremos instalar el programa para visualizar vídeos VLC. El comando sería:

sudo apt install vlc

Pero, ¿que pasa si tenemos una veintena de programas a instalar? La labor puede ser farragosa.

Existe un mecanismo consistente en poner una secuencia de comandos en un archivo de textos y usarlo como guión de trabajo, algo que se conoce como "script". Lo podemos ejecutar como si fuera un programa.

Vamos a crear un script que haga esta labor. Imaginemos que queremos instalar tres aplicaciones:

  • VLC es un programa para visualizar vídeos
  • Chromium es un navegador web
  • Calibre es un lector de libros electrónicos

Comenzamos por asegurarnos de que estamos en la carpeta donde vamos a guardar nuestro script:

$ cd /home/luis/scripts

Creamos un archivo de texto vacío:

$ touch instalaciones.sh

El sufijo sh es típico para indicar un script del shell, pero no es obligatorio. Podemos editar el archivo con el comando:

$ nano instalaciones.sh

El texto del script podría ser algo asi como:

#!/bin/bash
sudo apt install vls
sudo apt install chromium
sudo apt install calibre

La primera línea indica al sistema que se trata de una secuencia de comandos a resolver por el programa bash, que se encuentra en la carpeta /bin. El resto son los tres comandos a ejecutar.

Una vez creado el archivo, tenemos que darle permisos de ejecución:

$ chmod +x instalaciones.sh

Ejecutamos el script introduciendo su nombre precedido por el directorio donde se ubica:

$ /home/luis/scripts/instalaciones.sh

O bien, tratándose del directorio actual:

$ ./instalaciones.sh

y con esto se descargarán e instalarán los tres paquetes de software. También podemos quitar la palabra sudo de los comandos y trasladarla a la orden de ejecución del script:

$ sudo ./instalaciones.sh

El lenguaje de comandos de bash es un mundo que daría lugar a un libro entero. En este cuaderno solo se pretende hacer una introducción, por lo que lo dejaremos aquí. Más adelante veremos un script para acceder a las carpetas compartidas con la máquina física en el caso de estar usando una máquina virtual.