Linux · Capítulo 3
Linux Essentials: el camino en un sistema Linux
Primeros pasos en la shell: sintaxis de comandos, comillas y variables, PATH, cómo pedir ayuda, rutas, archivos y comodines.
Este capítulo cubre el tema 2 del examen Linux Essentials: moverse por un sistema Linux desde la línea de comandos. Es donde se pasa de la teoría a la práctica, así que abre una terminal y ve probando cada comando.
La shell
La shell o intérprete de comandos es el programa que recibe las órdenes que escribes con el teclado y se las pasa al sistema operativo. También se le llama terminal o línea de comandos, aunque, en sentido estricto, la terminal es la ventana y la shell es el programa que corre dentro.
| Shell | Características |
|---|---|
| Bash | La más extendida; la shell por defecto en la mayoría de distribuciones. Es la del examen. |
| sh | La shell clásica de Unix; base del estándar POSIX. |
| zsh | Compatible con Bash y muy configurable; la shell por defecto en macOS. |
| csh / tcsh | Sintaxis parecida al lenguaje C. |
| fish | Pensada para ser amigable, con sugerencias automáticas. |
echo $SHELL # qué shell usa tu usuario
clear # limpia la pantalla (o Ctrl + L)
pwd # print working directory: en qué directorio estás
Anatomía de un comando
Un comando tiene tres partes: el comando, sus opciones (modifican cómo se comporta y suelen
empezar con - o --) y sus argumentos (sobre qué actúa).
ls # comando solo
ls -l # comando + opción
ls -l /home # comando + opción + argumento
ls -la /home # varias opciones cortas juntas: -l y -a
ls --all /home # opción larga
En los comandos GNU el orden de opciones y argumentos suele ser flexible (ls /home -la también
funciona), pero la convención es comando, opciones, argumentos.
Mostrar texto: echo y las comillas
echo "Hola mundo"
echo -e "Hola\tmundo" # -e interpreta \t (tabulador)
echo -e "Hola\nmundo" # y \n (salto de línea)
Las comillas cambian cómo la shell trata el texto:
| Comillas | Comportamiento | Ejemplo |
|---|---|---|
Dobles "..." |
Expanden las variables ($VAR) y los comandos $(...). |
echo "Tu PATH es $PATH" |
Simples '...' |
Todo es literal: no se expande nada. | echo 'Tu PATH es $PATH' |
Barra invertida \ |
Escapa un solo carácter. | echo "Cuesta \$5" |
echo "Hoy es $(date +%A)" # sustitución de comandos
Saber qué es cada comando: type, which, uname, whatis
type cd # cd is a shell builtin (comando interno de Bash)
type ls # puede ser un alias de ls --color=auto
type cp # cp is /usr/bin/cp (programa externo)
which cp # ruta del ejecutable: /usr/bin/cp
uname # nombre del kernel: Linux
uname -a # toda la información: versión, arquitectura, nombre del equipo...
cat /etc/os-release # nombre y versión de la distribución
La diferencia importa: los comandos internos (builtins) forman parte de la propia shell; los
externos son programas en disco que la shell busca en los directorios del PATH.
Variables: set, export, unset y env
saludo="hola" # variable local de la shell (sin espacios alrededor del =)
echo $saludo
export EDITOR=nano # variable de entorno: la heredan los programas que lances
env # lista las variables de entorno
set # lista variables y funciones de la shell
unset saludo # elimina la variable
set +o history # desactiva el historial en esta sesión
set -o history # lo vuelve a activar
La variable PATH
PATH contiene la lista de directorios, separados por :, donde la shell busca los comandos
externos. Gracias a ella escribes ls en lugar de /usr/bin/ls.
echo $PATH
# /usr/local/bin:/usr/bin:/bin:...
Para ejecutar tus propios scripts desde cualquier directorio, añade su carpeta al PATH:
mkdir -p ~/scripts
export PATH="$PATH:$HOME/scripts"
Ese cambio dura solo hasta cerrar la sesión. Para que sea permanente, guárdalo en ~/.bashrc
(en zsh, ~/.zshrc) y recarga el archivo:
echo 'export PATH="$PATH:$HOME/scripts"' >> ~/.bashrc
source ~/.bashrc
Usa comillas simples en el
echo: así se guarda el texto$PATHtal cual y se expande al abrir cada sesión. Con comillas dobles se guardaría el valor actual completo.
Tu primer script y el shebang
La primera línea de un script, el shebang, indica qué intérprete debe ejecutarlo:
#!/bin/bash
# ~/scripts/hola.sh
echo "Hola, $USER"
echo "Hoy es $(date +%d/%m/%Y)"
chmod +x ~/scripts/hola.sh # darle permiso de ejecución
hola.sh # funciona desde cualquier lugar si ~/scripts está en el PATH
./hola.sh # si no, se ejecuta indicando la ruta
Cómo pedir ayuda
| Herramienta | Para qué sirve |
|---|---|
comando --help |
Resumen rápido de opciones. |
man comando |
El manual completo. Se navega con flechas, / busca, q sale. |
info comando |
Documentación más extensa, con enlaces entre secciones. |
whatis comando |
Descripción de una línea (igual que man -f). |
apropos palabra |
Busca la palabra en las descripciones de los manuales (igual que man -k). |
locate archivo |
Encuentra archivos por nombre usando una base de datos que se actualiza con updatedb. |
whereis comando |
Dónde están el binario, el código fuente y el manual de un comando. |
/usr/share/doc/ |
Documentación adicional de los paquetes instalados. |
El manual está dividido en secciones. La misma palabra puede aparecer en varias:
| Sección | Contenido |
|---|---|
| 1 | Comandos de usuario |
| 5 | Formatos de archivos de configuración |
| 8 | Comandos de administración del sistema |
man passwd # sección 1: el comando passwd
man 5 passwd # sección 5: el archivo /etc/passwd
man -f cp # = whatis cp
man -k copy # = apropos copy
Directorios y rutas
El sistema de archivos de Linux es un árbol que empieza en la raíz, /. Cada usuario tiene su
directorio personal, normalmente /home/usuario, que también se escribe ~.
- Una ruta absoluta empieza en
/y es válida desde cualquier lugar:/home/usuario/documentos/notas.txt - Una ruta relativa parte del directorio donde estás y no empieza con
/: si estás en/home/usuario, la misma ruta esdocumentos/notas.txt. .es el directorio actual y..el directorio padre.
Moverse con cd
cd # ir a tu directorio personal (igual que cd ~)
cd /etc # ruta absoluta
cd documentos # ruta relativa
cd .. # subir al directorio padre
cd - # volver al directorio anterior
cd / # ir a la raíz
Listar con ls
ls -a # incluye archivos ocultos (empiezan con .)
ls -l # formato largo: permisos, propietario, tamaño, fecha
ls -lh # tamaños legibles (K, M, G)
ls -S # ordena por tamaño, el mayor primero
ls -lr # orden inverso
ls -R # recursivo: entra en los subdirectorios
Crear, mover, copiar y borrar
touch notas.txt # crea un archivo vacío (o actualiza su fecha)
mkdir proyectos # crea un directorio
mkdir dir1 dir2 dir3 # varios a la vez
mkdir -p cursos/linux/lpi # crea también los directorios intermedios
mkdir "mis fotos" # nombre con espacios (o: mkdir mis\ fotos)
cp notas.txt copia.txt # copia un archivo
cp -r proyectos respaldo # copia un directorio completo
mv notas.txt proyectos/ # mueve
mv copia.txt apuntes.txt # renombra
rm apuntes.txt # borra un archivo
rmdir dir1 # borra un directorio vacío
rm -r respaldo # borra un directorio y todo su contenido
Cuidado:
rmno usa papelera. Lo que borras desaparece. Añade-ipara que pida confirmación.
Una diferencia que cae en el examen: mv conserva el propietario y los permisos del archivo,
porque no crea uno nuevo; cp crea un archivo nuevo que pertenece al usuario que copia.
Y recuerda: Linux distingue mayúsculas de minúsculas. Notas.txt y notas.txt son archivos
distintos.
El historial
history # lista los comandos ejecutados, numerados
!123 # repite el comando número 123
!! # repite el último comando
Ctrl + R busca hacia atrás en el historial mientras escribes.
Comodines (globbing)
Los comodines permiten referirse a varios archivos a la vez. Los expande la shell antes de ejecutar el comando.
| Comodín | Significado | Ejemplo | Coincide con |
|---|---|---|---|
* |
Cualquier cantidad de caracteres (incluso ninguno) | ls *.txt |
notas.txt, a.txt |
? |
Exactamente un carácter | ls foto?.jpg |
foto1.jpg, fotoA.jpg |
[abc] |
Uno de los caracteres indicados | ls informe[123].pdf |
informe1.pdf, informe3.pdf |
[a-z] |
Un carácter del rango | ls [a-c]* |
archivos que empiezan por a, b o c |
[!abc] |
Cualquier carácter excepto esos | ls [!0-9]* |
archivos que no empiezan por un dígito |
[[:digit:]] |
Una clase de caracteres (dígitos, letras...) | ls *[[:digit:]].log |
app1.log, app2.log |
ls *.txt # todos los .txt
ls ??.conf # nombres de dos caracteres terminados en .conf
cp *.jpg ~/fotos/ # copia todas las imágenes .jpg
rm log-2026-0[1-3]-*.txt # borra los registros de enero a marzo
Un truco al construir patrones: empieza por la parte más distintiva, que muchas veces está al final del nombre (la extensión), y ve añadiendo condiciones hacia la izquierda.
Ideas clave
- La shell (Bash) interpreta lo que escribes; la sintaxis es comando, opciones, argumentos.
- Las comillas dobles expanden variables; las simples no.
typedistingue comandos internos de externos;whichmuestra la ruta de un ejecutable.PATHdice dónde buscar comandos; para cambios permanentes,~/.bashrc.- Ayuda:
--help,man(con secciones),info,whatis,apropos,locate. - Rutas absolutas empiezan en
/; las relativas, en el directorio actual..,..,~. mvconserva el propietario;cpcrea un archivo nuevo. Linux distingue mayúsculas.- Comodines:
*,?,[...],[!...]y clases como[[:digit:]].