3  Terminal de sistemas Linux

Comandos más habituales para la shell bash.

3.1 Sistema de archivos de los sistemas Linux

El sistema de archivos de los sistemas Linux organiza el contenido de todos los discos duros y sistemas de almacenamiento siguiendo una estructura de árbol cuya raíz es siempre el directorio principal que se representa como la barra diagonal /. El directorio principal contiene todos los archivos del sistema, organizados en subdirectorios estándar como /bin (programas del sistema), /etc (ficheros de configuración), /home (directorios de los usuarios) o /var (datos variables como registros del sistema).

Por otro lado, cada usuario del sistema tiene asignado un directorio principal de usuario que está dentro del directorio /home y se representa con el carácter ~. Cualquier usuario puede hacer los cambios que quiera en su directorio de usuario pero no podrá acceder a los directorios de otros usuarios ni del resto del sistema de archivos salvo que tenga permiso de administrador del sistema (root).

3.2 Rutas absolutas y relativas

La ubicación de un archivo o un directorio en la estructura de árbol de la unidad se puede determinar mediante una ruta absoluta o una ruta relativa.

La ruta absoluta de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio raíz. La ruta se expresa separando los directorios con la barra diagonal /.

La ruta relativa de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio activo. Para referirse al directorio madre se utiliza el alias .., mientras que para referirse al propio directorio activo se utiliza el alias ..

Mientras que la ruta absoluta de un archivo o directorio es única, la ruta relativa depende del directorio activo.

Ejemplo. Supongamos el siguiente árbol de directorios.

Ejemplo de árbol de archivos

La ruta absoluta al directorio Programación sería /home/alumno/Grado/Primero/Programación, mientras que la ruta relativa, asumiendo que el directorio activo es Primero, es ./Programación. Del mismo modo, la ruta relativa hasta el directorio Segundo sería ../Segundo.

3.3 La terminal de los sistemas Linux

La terminal de los sistemas Linux proporciona una interfaz de línea de comando (CLI) para acceder a los archivos y dar instrucciones al sistema.

Según la distribución de Linux y el entorno de escritorio instalado, la aplicación de terminal recibe distintos nombres, como GNOME Terminal, Konsole o xterm, pero todas ellas se pueden ejecutar como cualquier otra aplicación desde el menú de aplicaciones del sistema. Cuando se ejecuta abre una ventana de texto que muestra el prompt, que es una cadena de texto que incluye el nombre del usuario, el nombre del equipo y la ruta del directorio actual (inicialmente el directorio principal del usuario ~) terminada con el carácter $ (o # si se opera como usuario root). A partir de aquí el usuario puede dar órdenes al sistema tecleando comandos.

El programa encargado de interpretar los comandos que el usuario introduce en la terminal se denomina shell y en la mayoría de las distribuciones de Linux la shell instalada por defecto es bash, aunque también es habitual encontrar otras shells como zsh o fish.

3.4 Comandos básicos de la shell bash

Un comando es una instrucción a ejecutar por el sistema operativo. Los comandos suelen llevar asociados parámetros y argumentos. Los parámetros modifican la manera de realizar la instrucción y van precedidos de un guión - o un doble guión --, mientras que los argumentos indican sobre qué objeto se realiza la acción que indica la instrucción (un archivo, un directorio, etc.)

Comando Acción
ls Muestra un listado con el contenido del directorio actual.
ls -l Muestra un listado detallado con el contenido del directorio actual.
ls -la Muestra un listado detallado con el contenido del directorio actual, incluyendo los archivos ocultos.
ls <dir> Muestra un listado del directorio <dir>.
cd <dir> Cambia al directorio <dir> convirtiéndolo en el directorio activo.
mkdir <dir> Crea el directorio <dir>.
mv <origen> <destino> Mueve el archivo o directorio <origen> al directorio <destino>.
rm <f> Elimina el archivo <f>.
rm -r <dir> Elimina el directorio <dir> y todo su contenido.
cat <f> Muestra el contenido del fichero de texto <f>.
touch <f> Crea el fichero <f> si no existe, o actualiza su fecha de modificación si ya existe.
nano <f> Abre el fichero <f> en el editor de texto nano.
chmod <permisos> <f> Cambia los permisos de acceso del fichero o directorio <f>.

3.5 Ejemplos de uso

A continuación se muestran algunos ejemplos de uso de los comandos anteriores en la shell bash.

3.5.1 Cambiar de directorio

# Muestra el directorio activo
alumno@equipo:~$ pwd

# Cambia al subdirectorio Documentos, dentro del directorio activo
alumno@equipo:~$ cd Documentos

# Sube al directorio superior (madre)
alumno@equipo:~/Documentos$ cd ..

# Vuelve directamente al directorio principal del usuario
alumno@equipo:~$ cd ~

# Cambia a un directorio mediante su ruta absoluta
alumno@equipo:~$ cd /home/alumno/Grado/Primero/Programación

3.5.2 Listar el contenido de un directorio

# Lista el contenido del directorio activo
alumno@equipo:~$ ls

# Lista el contenido con información detallada (tamaño, fecha, permisos, etc.)
alumno@equipo:~$ ls -l

# Lista el contenido detallado incluyendo los archivos ocultos
alumno@equipo:~$ ls -la

# Lista el contenido de un directorio distinto al activo
alumno@equipo:~$ ls Documentos

3.5.3 Crear y eliminar directorios

# Crea el directorio Proyectos dentro del directorio activo
alumno@equipo:~$ mkdir Proyectos

# Crea un subdirectorio dentro de Proyectos
alumno@equipo:~$ mkdir Proyectos/Python

# Elimina el directorio vacío Proyectos/Python
alumno@equipo:~$ rmdir Proyectos/Python

# Elimina el directorio Proyectos y todo su contenido
alumno@equipo:~$ rm -r Proyectos

3.5.4 Crear ficheros de texto

# Crea un fichero de texto vacío llamado notas.txt
alumno@equipo:~$ touch notas.txt

# Crea (o sobrescribe) el fichero con una línea de contenido
alumno@equipo:~$ echo "Primera línea de notas" > notas.txt

# Añade una nueva línea al final del fichero sin borrar el contenido anterior
alumno@equipo:~$ echo "Segunda línea de notas" >> notas.txt

# Muestra el contenido del fichero
alumno@equipo:~$ cat notas.txt

3.5.5 Editar ficheros de texto

# Abre el fichero notas.txt en el editor de texto nano, integrado en la terminal
alumno@equipo:~$ nano notas.txt

# Abre el fichero notas.txt en el editor de texto vim (si está instalado)
alumno@equipo:~$ vim notas.txt

# Abre el fichero notas.txt en Visual Studio Code (si está instalado)
alumno@equipo:~$ code notas.txt

Dentro de nano, la combinación Ctrl + o guarda los cambios y Ctrl + x cierra el editor.

3.5.6 Eliminar ficheros de texto

# Elimina el fichero notas.txt
alumno@equipo:~$ rm notas.txt

3.5.7 Cambiar los permisos de ficheros y directorios

Cada fichero o directorio tiene asociados permisos de lectura (r), escritura (w) y ejecución (x) para tres tipos de usuario: el propietario (u), el grupo (g) y el resto de usuarios (o). Los permisos se consultan con ls -l y se modifican con el comando chmod, bien en notación simbólica (u, g, o combinados con +, - para añadir o quitar permisos) o en notación numérica (donde r=4, w=2, x=1, y se suman los valores de cada tipo de usuario).

# Consulta los permisos actuales del fichero notas.txt
alumno@equipo:~$ ls -l notas.txt
-rw-r--r-- 1 alumno alumno 42 sep  1 12:00 notas.txt

# Da permiso de ejecución al propietario del fichero
alumno@equipo:~$ chmod u+x notas.txt

# Da permisos de lectura, escritura y ejecución al propietario, y solo lectura al resto
alumno@equipo:~$ chmod 744 notas.txt

# Quita todos los permisos al resto de usuarios (ni lectura, ni escritura, ni ejecución)
alumno@equipo:~$ chmod o-rwx notas.txt

# Aplica los permisos de forma recursiva a un directorio y a todo su contenido
alumno@equipo:~$ chmod -R 755 Proyectos

Para modificar los permisos de ficheros o directorios que no pertenecen al usuario activo es necesario anteponer el comando sudo, que ejecuta la instrucción con permisos de administrador (root) previa introducción de la contraseña del usuario.

3.6 Trucos de la terminal

Para manejar con soltura la terminal conviene utilizar algunos trucos que facilitan su uso.

  • Tabulador. La tecla tabulador (⇥) permite completar la entrada del usuario automáticamente, es decir, el usuario comienza a teclear un comando o ruta de archivo y, sin necesidad de escribirla por completo, cuando se pulsa la tecla tabulador el sistema intenta completarla siempre y cuando no haya más de un comando o ruta que comiencen por esos caracteres.

  • Teclas de desplazamiento. Las teclas con las flechas de desplazamiento arriba (↑) y abajo (↓) permiten reutilizar comandos que se han usado previamente en la misma sesión de la terminal.

  • Limpiar la terminal. El comando clear, o la combinación de teclas Ctrl + l, limpia la terminal.