Manual comandos básicos en Unix/Linux

Unix y Linux son sistemas operativos robustos y ampliamente utilizados en servidores, estaciones de trabajo y sistemas embebidos. La línea de comandos es la herramienta esencial para administrarlos con eficiencia. En este manual encontrarás los comandos que todo usuario debería conocer, organizados por categorías y con ejemplos prácticos.

Antes de empezar: la ayuda del sistema

Cualquier comando de esta guía tiene su propia documentación instalada en el sistema. Es el primer sitio donde mirar:

man ls          # Manual completo del comando
ls --help       # Resumen rápido de opciones

Dentro de man te mueves con las flechas, buscas con /palabra y sales con q.

Imagen terminal usando el comando man --help

pwd (Print Working Directory)

Muestra el directorio en el que te encuentras. Imprescindible cuando trabajas con rutas relativas.

pwd

ls (List)

Lista el contenido de un directorio.

  • ls -l: formato largo, con permisos, propietario, tamaño y fecha.
  • ls -a: incluye los archivos ocultos (los que empiezan por punto).
  • ls -h: tamaños en formato legible (K, M, G). Solo tiene efecto junto a -l.
  • ls -lt: ordena por fecha, más reciente primero. Añade -r para invertir.

Las opciones se combinan. La forma más usada en el día a día:

ls -lah /home/usuario

cd (Change Directory)

Cambia de directorio. Fíjate en los espacios: cd es un comando y lo que le sigue es un argumento separado.

cd /home/usuario   # Ruta absoluta
cd documentos      # Ruta relativa desde donde estás
cd..              # Subir un nivel (¡con espacio!)
cd ~               # Ir a tu directorio personal
cd                 # Equivalente a "cd ~"
cd -               # Volver al directorio anterior
cd /               # Ir a la raíz del sistema

Truco: pulsa Tab mientras escribes una ruta y la shell la completará sola. Ahorra tiempo y evita erratas.

mkdir (Make Directory)

mkdir proyecto
mkdir -p padre/hijo/nieto    # Crea toda la jerarquía de golpe

rmdir y rm

rmdir solo borra directorios vacíos, lo que en la práctica lo convierte en la opción segura:

rmdir directorio_vacio

rm elimina archivos y, con -r, directorios completos:

rm archivo.txt
rm -i archivo.txt          # Pide confirmación
rm -r directorio           # Borra el directorio y todo su contenido

Cuidado con rm -rf. En Linux no hay papelera de reciclaje: lo que borras desde la terminal desaparece de inmediato y sin confirmación. La opción -f silencia todos los avisos, así que un error de escritura —un espacio de más en rm -rf / home/usuario/tmp— puede arrasar el sistema. Antes de ejecutar un borrado recursivo, revisa la ruta dos veces. Un buen hábito: lanza primero ls sobre esa misma ruta y comprueba que contiene lo que crees.

Ver el contenido de los archivos

  • cat archivo.txt: vuelca el archivo entero en pantalla. Ideal para archivos cortos.
  • less archivo.log: lo abre en un visor paginado. Para archivos largos es la opción correcta. Sales con q.
  • head -n 20 archivo.txt: primeras 20 líneas.
  • tail -n 20 archivo.txt: últimas 20 líneas.
  • tail -f /var/log/mensajes: sigue el archivo en tiempo real. Es el comando para vigilar registros mientras ocurre algo.

Manipulación de archivos

touch

Crea un archivo vacío o, si ya existe, actualiza su fecha de modificación.

touch notas.txt

cp (Copy)

cp origen.txt destino.txt
cp -a directorio_origen/ directorio_destino/

Para directorios, usa -a (archivo) mejor que -r: además de copiar recursivamente, preserva permisos, propietarios, fechas y enlaces simbólicos. Con -r a secas puedes perder esos metadatos, algo que importa mucho al copiar configuraciones o webs.

Añade -i si quieres que pregunte antes de sobrescribir un archivo existente.

mv (Move)

Mueve y renombra: en Unix son la misma operación.

mv viejo.txt nuevo.txt              # Renombrar
mv archivo.txt /ruta/destino/       # Mover
mv -i archivo.txt /ruta/destino/    # Preguntar antes de sobrescribir

find

Busca archivos por nombre, tamaño, fecha o cualquier otro criterio.

find /ruta -name "archivo.txt"      # Por nombre exacto
find /ruta -iname "*.log"           # Sin distinguir mayúsculas
find /ruta -size +10M               # Archivos de más de 10 MB
find /ruta -mtime -7                # Modificados en los últimos 7 días
find /ruta -type d -name "cache"    # Solo directorios

Entrecomilla siempre los patrones con comodines, o la shell los expandirá antes de que find los reciba.

grep

Busca texto dentro de archivos. Probablemente el comando que más usarás.

grep "palabra" archivo.txt
grep -i "palabra" archivo.txt       # Ignora mayúsculas/minúsculas
grep -n "palabra" archivo.txt       # Muestra el número de línea
grep -r "palabra" /ruta             # Busca recursivamente en un directorio
grep -l "palabra" *.txt             # Solo lista los archivos que coinciden
grep -v "palabra" archivo.txt       # Muestra las líneas que NO coinciden

Tuberías y redirecciones

Aquí está la verdadera potencia de la línea de comandos: encadenar herramientas pequeñas para resolver problemas grandes.

comando > salida.txt      # Redirige la salida a un archivo (lo sobrescribe)
comando >> salida.txt     # Añade al final del archivo
comando1 | comando2       # La salida de comando1 alimenta a comando2

Un ejemplo real: buscar entre los procesos activos los que contengan «apache».

ps aux | grep apache

Permisos y propietarios

chmod (Change Mode)

Los permisos se dividen en tres bloques: usuario (u), grupo (g) y otros (o). Cada uno puede tener lectura (r=4), escritura (w=2) y ejecución (x=1). Se suman: 4+2+1 = 7.

chmod 755 script.sh    # rwx para el dueño, r-x para grupo y otros
chmod 644 archivo.txt  # rw- para el dueño, r-- para el resto
chmod 600 secreto.key  # Solo el dueño puede leer y escribir

El formato simbólico permite ajustes precisos. Ojo con la diferencia entre + y =:

chmod u=rwx,go=rx archivo   # Fija los permisos: equivale a 755
chmod +x script.sh          # Añade permiso de ejecución
chmod g-w archivo           # Quita escritura al grupo

Con = estableces los permisos exactos; con + solo añades sobre lo que ya había, así que el resultado depende del estado previo.

Nunca uses chmod 777. Da permisos totales a cualquier usuario del sistema y es la causa de innumerables agujeros de seguridad. Si algo «solo funciona con 777», el problema real es de propietario o de grupo, no de permisos.

chown (Change Owner)

sudo chown usuario:grupo archivo
sudo chown -R usuario:grupo directorio    # Recursivo

Requiere privilegios de administrador. Un uso típico: devolver a un servidor web la propiedad de sus archivos con sudo chown -R www-data:www-data /var/www/sitio.

Procesos y administración del sistema

ps

ps aux                  # Todos los procesos del sistema
ps aux | grep nginx     # Filtrar los que te interesan

La segunda columna es el PID, el identificador que necesitarás para actuar sobre un proceso.

top y htop

top muestra los procesos en tiempo real y viene instalado en todas partes. Sales con q.

htop hace lo mismo pero con colores, scroll y navegación con ratón. Hay que instalarlo (sudo apt install htop o sudo dnf install htop), pero merece la pena.

kill

Envía señales a un proceso. La secuencia correcta es empezar por lo suave:

kill 1234        # Pide al proceso que termine ordenadamente (SIGTERM)
kill -9 1234     # Lo mata sin contemplaciones (SIGKILL)
pkill nombre     # Por nombre en vez de por PID

kill a secas envía SIGTERM: el proceso recibe el aviso, guarda lo que tenga pendiente, cierra sus archivos y sale limpiamente. kill -9 no le da esa oportunidad: el núcleo lo elimina de inmediato, dejando posibles archivos corruptos, bloqueos huérfanos y datos sin escribir. Úsalo solo si el proceso no responde tras unos segundos al primero.

df y du

df -h                    # Espacio libre por sistema de archivos
du -sh directorio        # Cuánto ocupa un directorio concreto
du -sh * | sort -h       # Tamaño de cada elemento, ordenado

La combinación de la última línea es la forma más rápida de averiguar qué te está llenando el disco.

Redes y conectividad

ip (sustituye a ifconfig)

ip a          # Interfaces y direcciones IP
ip r          # Tabla de rutas
ip link       # Estado de las interfaces

Verás ifconfig en miles de tutoriales antiguos, pero pertenece al paquete net-tools, obsoleto desde hace más de una década y ya no instalado por defecto en las distribuciones modernas. Si lo ejecutas y te dice «orden no encontrada», no es un fallo: es que debes usar ip.

ss (sustituye a netstat)

ss -tulnp     # Puertos TCP/UDP a la escucha y qué proceso los usa

Mismo caso que el anterior: netstat es parte de net-tools y está reemplazado por ss, que además es más rápido. Las opciones significan: -t TCP, -u UDP, -l a la escucha, -n sin resolver nombres, -p mostrar el proceso (necesita sudo).

ping

ping -c 4 google.com     # Cuatro paquetes y para

Sin -c, en Linux ping no se detiene nunca: córtalo con Ctrl+C.

wget y curl

wget https://ejemplo.com/archivo.tar.gz    # Descarga con ese mismo nombre
curl -O https://ejemplo.com/archivo.tar.gz # Equivalente en curl
curl -L -o nombre.tar.gz https://ejemplo.com/archivo  # Sigue redirecciones

A grandes rasgos: wget está pensado para descargar archivos (y sitios enteros); curl para interactuar con APIs y servicios web. Ninguno viene garantizado por defecto, así que puede que tengas que instalarlos.

traceroute y dig

traceroute google.com    # Ruta que siguen los paquetes
dig ejemplo.com          # Consulta DNS

Ambos suelen requerir instalación (traceroute y bind-utils / dnsutils).

Usuarios y privilegios

whoami e id

whoami        # Nombre del usuario actual
id            # UID, GID y todos los grupos a los que perteneces

sudo

Ejecuta un comando concreto con privilegios de administrador, sin necesidad de iniciar sesión como root.

sudo comando
sudo!!          # Repite el último comando, esta vez con sudo

Es la forma correcta de trabajar: usa tu cuenta normal a diario y eleva privilegios solo cuando haga falta.

Crear usuarios: useradd y adduser

Aquí hay una diferencia que confunde a mucha gente y que depende de la distribución:

  • En Debian y Ubuntu, adduser es un script interactivo que crea el usuario, su directorio personal y pide la contraseña y los datos, todo de una vez. Es la opción cómoda.
  • En RHEL, Fedora, AlmaLinux o Rocky, adduser es simplemente un enlace a useradd: no es interactivo y no pedirá nada.
  • useradd existe en todas las distribuciones y es de bajo nivel. Es el que debes usar en scripts.
# Debian / Ubuntu
sudo adduser nuevo_usuario

# Cualquier distribución
sudo useradd -m nuevo_usuario     # -m crea el directorio personal
sudo passwd nuevo_usuario

Fíjate en el -m: sin él, useradd crea el usuario pero no su carpeta en /home (según la configuración de la distribución).

passwd

passwd                  # Cambia tu propia contraseña
sudo passwd usuario     # Cambia la de otro usuario

Scripting en Bash

Tu primer script

nano script.sh        # Escribe el contenido
chmod +x script.sh    # Dale permiso de ejecución./script.sh           # Ejecútalo

El ./ no es opcional: sin él, la shell buscará el script en las rutas del sistema y no lo encontrará.

Contenido de ejemplo:

#!/bin/bash
set -euo pipefail

echo "Hola, mundo"

La primera línea (el shebang) indica qué intérprete debe ejecutar el archivo. La segunda es una buena costumbre: hace que el script se detenga ante el primer error (-e), avise si usas una variable no definida (-u) y detecte fallos dentro de una tubería (-o pipefail). Sin ella, un script puede seguir adelante alegremente después de que algo haya fallado.

Variables

nombre="Juan"
echo "Hola, $nombre"
echo "Estás en: $(pwd)"

Dos reglas que evitan la mayoría de los problemas: no dejes espacios alrededor del = al asignar, y entrecomilla siempre las variables al usarlas ("$nombre"). Sin comillas, un valor con espacios se partirá en varios argumentos.

Condicionales

if [ "$nombre" = "Juan" ]; then
  echo "Eres Juan"
else
  echo "No eres Juan"
fi

Los espacios dentro de los corchetes son obligatorios: [ es en realidad un comando, y necesita sus argumentos separados. Para comprobar archivos:

if [ -f "/ruta/archivo.txt" ]; then
  echo "El archivo existe"
fi

if [ -d "/ruta/directorio" ]; then
  echo "El directorio existe"
fi

Bucles

for i in {1..5}; do
  echo "Número $i"
done

for archivo in *.txt; do
  echo "Procesando $archivo"
done

Trucos que ahorran tiempo

  • Tab: autocompleta comandos y rutas. Púlsalo dos veces para ver todas las opciones.
  • Flecha arriba: recupera comandos anteriores.
  • Ctrl+R: busca en el historial mientras escribes. Una vez lo pruebas, no vuelves atrás.
  • Ctrl+C: interrumpe el comando en ejecución.
  • Ctrl+L: limpia la pantalla (igual que clear).
  • history: lista todos los comandos que has ejecutado.
  • !!: repite el último comando. Combinado con sudo: sudo!!

Conclusión

Estos comandos son la base del manejo de cualquier sistema Unix o Linux. Con ellos puedes gestionar archivos, controlar procesos, revisar la red y automatizar tareas repetitivas mediante scripts.

Dos consejos finales. El primero: cuando dudes de qué hace una opción, man está a un comando de distancia y siempre será más fiable que la memoria. El segundo: ten especial respeto por rm -rf, chmod 777 y kill -9. Son los tres atajos que más rápido resuelven un problema y más problemas causan a largo plazo.