01
who — Quién está conectado
Muestra información básica sobre los usuarios actualmente conectados al sistema: nombre de usuario, terminal, hora de conexión y host remoto.
| Comando | Descripción |
|---|---|
| who | Lista nombre de usuario, terminal y hora de conexión |
| who -r | Muestra el nivel de ejecución (runlevel) actual del sistema |
| who -b | Muestra la hora del último arranque (boot) del sistema |
bash
who
output
jose tty7 2025-10-11 09:00 (:0) otro_usr pts/1 2025-10-11 09:15 (192.168.1.10)
bash
who -r # nivel de ejecución actual who -b # hora del último boot
output
run-level 5 2025-10-11 09:00
Runlevels — Niveles de ejecución
Aunque los sistemas modernos con systemd usan "targets" (ej. graphical.target), who -r sigue reportando el número tradicional. En un VirtualBox con Ubuntu con escritorio, verás el nivel 5.
| Nivel | Nombre | Significado |
|---|---|---|
| 0 | Halt | Apagado del sistema |
| 1 | Single-User | Modo mantenimiento — sin red, pocos servicios |
| 2 | Multi-User (sin GUI) | Multiusuario, red activa, sin interfaz gráfica |
| 3 | Multi-User (sin GUI) | Similar al nivel 2 (depende de la distro) |
| 4 | No Usado | Reservado |
| 5 | Multi-User (con GUI) | Modo gráfico multiusuario — escritorio normal |
| 6 | Reboot | Reinicio del sistema |
02
w — Quién está y qué hacen
Como
who pero más detallado: añade la carga del sistema (load average) y el proceso activo de cada usuario.
| Comando | Descripción |
|---|---|
| w | Resumen de carga del sistema y procesos activos de todos los usuarios |
| w -h | Omite la cabecera con información de carga (header) |
| w jose | Muestra información solo del usuario jose |
bash
w w -h jose
output — w
09:43:05 up 43 min, 2 users, load average: 0.10, 0.15, 0.12 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jose tty7 :0 09:00 43m 0.58s 0.15s /usr/libexec/gnome-terminal otro_usr pts/1 192.168.1.10 09:15 1m 0.05s 0.02s bash
ℹ️ load average: Los tres valores representan la carga media del sistema en los últimos 1, 5 y 15 minutos. Un valor de 1.0 en un sistema de 1 CPU significa uso completo.
03
history — Historial de comandos
Muestra los comandos ejecutados previamente. Vital para auditar tareas y reutilizar comandos complejos sin tener que reescribirlos.
| Comando | Descripción |
|---|---|
| history | Muestra todo el historial numerado |
| history 10 | Muestra solo las últimas 10 entradas |
| !123 | Ejecuta el comando número 123 del historial |
| !ls | Ejecuta el último comando que empezó con ls |
bash
history 5 # ver últimas 5 entradas !998 # re-ejecutar comando #998
output — history 5
996 who -r 997 w -h jose 998 cat /etc/hosts 999 pwd 1000 history 5
04
watch — Ejecutar en bucle
Ejecuta un comando de forma repetitiva mostrando la salida a pantalla completa. Ideal para monitorizar cambios en tiempo real. Salir con Ctrl+C.
| Comando | Descripción |
|---|---|
| watch <cmd> | Ejecuta el comando cada 2 segundos (por defecto) |
| watch -n 5 <cmd> | Ejecuta cada 5 segundos |
| watch -d <cmd> | Resalta los cambios (-d de difference) entre actualizaciones |
bash
watch w # monitorizar usuarios cada 2s watch -n 5 -d "cat /proc/loadavg" # carga del sistema, resaltando cambios
05
whereis — Binario, manual y fuente
Busca un comando en los directorios estándar del sistema: su binario, código fuente y página de manual.
| Comando | Descripción |
|---|---|
| whereis <cmd> | Busca binario, manual y fuente |
| whereis -b <cmd> | Busca solo el binario |
| whereis -m <cmd> | Busca solo la página de manual |
bash
whereis bash whereis -m df
output
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz df: /usr/share/man/man1/df.1.gz
06
which — Ruta del ejecutable en $PATH
Busca la ruta completa del ejecutable que se usará cuando escribes el comando, comprobando solo los directorios en
$PATH.
| Comando | Descripción |
|---|---|
| which <cmd> | Muestra la ruta del primer ejecutable encontrado en $PATH |
| which -a <cmd> | Muestra todas las rutas encontradas en $PATH |
bash
which python3 which -a cat
output
/usr/bin/python3 /usr/bin/cat /bin/cat
ℹ️ whereis vs which:
whereis busca en directorios estándar del sistema (binario + man + fuente). which solo busca en tu $PATH actual y devuelve el ejecutable que realmente se usaría.
07
alias / unalias — Atajos
Crea nombres más cortos o combinaciones de opciones para comandos. Los alias definidos en la terminal son temporales (se pierden al cerrar sesión). Para que sean permanentes, añádelos a
~/.bashrc.
| Comando | Descripción |
|---|---|
| alias | Lista todos los alias actualmente definidos |
| alias nombre='cmd' | Crea un nuevo alias temporal |
| unalias nombre | Elimina el alias especificado |
| unalias -a | Elimina todos los alias del usuario |
bash
alias netinfo='ip a' # crear alias temporal alias ll='ls -lh' # ls largo y legible netinfo # usar el alias unalias netinfo # eliminar alias unalias -a # eliminar todos
💡 Alias permanentes: Para que un alias persista entre sesiones, añádelo al final de tu
~/.bashrc: echo "alias ll='ls -lh'" >> ~/.bashrc y luego source ~/.bashrc.
08
at — Programar comandos
Programa un comando para que se ejecute una sola vez en un momento futuro. El resultado se envía al correo del sistema del usuario.
bash — instalación
sudo apt install at sudo apt install mailutils # para leer el correo del sistema mesg y # aceptar mensajes en la terminal
| Comando | Descripción |
|---|---|
| at <hora> | Entra en modo programación — termina con Ctrl+D |
| at -l / atq | Lista trabajos en cola |
| at -r <n> / atrm <n> | Elimina el trabajo número n de la cola |
bash — programar un trabajo
at now + 2 minutes at> echo "¡ÉXITO! Esto se fue al mail" at> <Ctrl+D para confirmar> # Verificar y gestionar la cola atq # listar trabajos pendientes atrm 1 # eliminar trabajo #1
output
job 1 at Sat Oct 11 10:48:00 2025 1 Sat Oct 11 10:48:00 2025 a jose
Mostrar resultado directamente en la terminal
El método más fiable es redirigir la salida al dispositivo de tu terminal (obtenido con tty):
bash
tty # obtener nombre de tu terminal, ej: /dev/pts/0 at now + 2 minutes at> echo "¡ÉXITO! MENSAJE MOSTRADO" > /dev/pts/0 at> <Ctrl+D>
bash — leer correo del sistema
mail # abrir bandeja de entrada # escribir el número del mensaje y Enter para leerlo # 'q' para salir
// Bandeja de entrada del correo del sistema tras ejecutar at
// Contenido del mensaje: stdout del echo + stderr del error de sintaxis
⚠️ write vs wall:
at> ... | write jose suele fallar porque atd no puede determinar la sesión del usuario. Usar | wall es más robusto pero también puede bloquearse por restricciones de seguridad de atd. La solución más fiable es redirigir directamente a /dev/pts/N.
09
strace — Rastreo de syscalls
Intercepta y registra todas las llamadas al sistema (syscalls) que un programa hace al kernel de Linux. Fundamental para depurar y entender el comportamiento interno de un programa.
| Opción | Descripción |
|---|---|
| strace <cmd> | Inicia el rastreo del programa especificado |
| strace -p <PID> | Adjunta strace a un proceso ya en ejecución |
| strace -o <file> <cmd> | Guarda la salida del rastreo en un archivo |
| strace -c <cmd> | Cuenta tiempo, llamadas y errores por syscall — resumen tabular |
bash
strace ls -l /tmp # ver syscalls: openat, read, stat, write, close... strace -c date # resumen estadístico de syscalls strace -o trace.log ls # guardar rastreo en archivo sudo strace -p 1234 # adjuntar a proceso en ejecución
output — strace -c date
Sun Oct 12 10:00:00 AM CEST 2025 % time seconds usecs/call calls errors syscall ------ -------- ---------- ----- ------ -------- 90.00 0.000090 3 30 fstat ... ------ -------- ---------- ----- ------ -------- 100.00 0.000100 150 4 total
10
lsof — Listar archivos abiertos
Lista todos los archivos en uso por procesos activos. En Linux, "archivo" incluye archivos regulares, sockets de red, directorios, librerías y pipes.
| Opción | Descripción |
|---|---|
| lsof | Lista todos los archivos abiertos (requiere sudo habitualmente) |
| lsof -i | Muestra todos los sockets de red abiertos |
| lsof -u <user> | Archivos abiertos por un usuario |
| lsof +D <dir> | Archivos abiertos dentro de un directorio |
| sudo lsof -i :22 | Qué proceso escucha en el puerto 22 |
bash
lsof -u jose | less # archivos de jose (puede requerir sudo) sudo lsof -i :22 # proceso en puerto 22 (SSH) sudo lsof -i :80 # proceso en puerto 80 (HTTP)
output — sudo lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
ℹ️ Sin salida: Si
lsof -i :22 no devuelve nada, significa que no hay ningún servicio escuchando activamente en ese puerto.
11
tee — Redirección doble
Lee stdin y lo escribe simultáneamente a stdout y a uno o más archivos. Permite ver la salida en pantalla y guardarla al mismo tiempo.
| Comando | Descripción |
|---|---|
| cmd | tee archivo | Escribe al archivo Y muestra en pantalla |
| cmd | tee -a archivo | Añade al final del archivo existente (-a de append) |
bash
ls -l /etc | tee lista_etc.txt # ver Y guardar echo "--- Fin de Sesión ---" | tee -a lista_etc.txt # añadir al log
12
col — Filtro de pipes
Filtra caracteres de retroceso y caracteres de control de terminales antiguas. Uso principal: limpiar la salida de
man antes de guardarla como texto plano.
| Comando | Descripción |
|---|---|
| cmd | col -b | Elimina retrocesos y espacios especiales (-b de binary), dejando solo texto limpio |
bash
man ls | col -b > manual_ls_limpio.txt # man → texto plano limpio
13
fmt — Reformatear texto
Formateador de texto que ajusta el ancho de línea de un archivo. Útil para README, emails largos o cualquier texto que deba ajustarse a un ancho determinado.
| Comando | Descripción |
|---|---|
| fmt <archivo> | Reformatea al ancho por defecto (75 caracteres) |
| fmt -w <n> <archivo> | Establece el ancho máximo de línea en n caracteres |
bash
echo "Esta es una frase muy larga que no respeta ningún ancho de línea y se extiende hasta donde le da la gana." > largo.txt fmt -w 40 largo.txt
output
Esta es una frase muy larga que no respeta ningún ancho de línea y se extiende hasta donde le da la gana.
14
tput — Manipulación de terminal
Interactúa con la base de datos de capacidades de la terminal (
terminfo). Permite mover el cursor, cambiar colores y borrar la pantalla desde scripts.
| Comando | Descripción |
|---|---|
| tput clear | Borra la pantalla |
| tput cup <fila> <col> | Mueve el cursor a la posición indicada |
| tput bold | Activa texto en negrita |
| tput setaf <n> | Color de primer plano (0=negro, 1=rojo, 2=verde, 3=amarillo…) |
bash
tput clear; tput cup 10 30; tput bold; echo "¡ATENCIÓN!"
tput setaf 2; echo "Texto en verde"; tput sgr0 # sgr0 = reset
15
nc — Netcat: cuchillo suizo de redes
Lee y escribe datos a través de conexiones de red TCP/UDP. Esencial para pruebas de red, diagnóstico de puertos y transferencia simple de datos.
| Comando | Descripción |
|---|---|
| nc -l -p <puerto> | Modo escucha en un puerto específico |
| nc <host> <puerto> | Conectarse a un puerto remoto |
| nc -zv <host> <puerto> | Escanear si un puerto está abierto (-z = zero-I/O) |
bash — escaneo de puerto
nc -zv google.com 80
output
Connection to google.com 80 port [tcp/http] succeeded!
Chat simple entre dos terminales
bash — Terminal 1 (escucha)
nc -l -p 8888
bash — Terminal 2 (conecta)
nc localhost 8888 Hola, ¿me oyes?
ℹ️ Lo que escribas en la Terminal 2 aparecerá en la Terminal 1 y viceversa. Es un canal bidireccional de texto en tiempo real.
16
diff — Mostrar diferencias
Compara dos archivos línea por línea. Fundamental para control de versiones y auditoría de configuraciones. Genera parches en formato unificado aplicables con
patch.
| Comando | Descripción |
|---|---|
| diff <f1> <f2> | Diferencias en formato estándar |
| diff -u <f1> <f2> | Formato unificado — más legible y compatible con patch |
| diff -r <dir1> <dir2> | Comparar directorios recursivamente |
bash — crear archivos de prueba
echo "Linea 1 de codigo" > file_v1.txt echo "Linea 2 de codigo" >> file_v1.txt echo "Linea 3 de codigo" >> file_v1.txt echo "Linea 1 de codigo" > file_v2.txt echo "Linea 2 de codigo modificado" >> file_v2.txt echo "Linea 3 de codigo" >> file_v2.txt diff -u file_v1.txt file_v2.txt > mi_cambio.patch
output — mi_cambio.patch
@@ -1,3 +1,3 @@ Linea 1 de codigo -Linea 2 de codigo +Linea 2 de codigo modificado Linea 3 de codigo
17
patch — Aplicar cambios
Aplica las diferencias generadas por
diff a un archivo, actualizándolo o revirtiendo cambios.
| Comando | Descripción |
|---|---|
| patch <archivo> <patch> | Aplica el parche al archivo original |
| patch -R <archivo> <patch> | Revierte los cambios del parche (-R de reverse) |
bash
patch file_v1.txt < mi_cambio.patch # aplicar parche → v1 pasa a ser v2 cat file_v1.txt # verificar resultado patch -R file_v1.txt < mi_cambio.patch # revertir → vuelve a v1
output — tras aplicar el parche
patching file file_v1.txt Linea 1 de codigo Linea 2 de codigo modificado Linea 3 de codigo
18
lscpu — Información de la CPU
| Comando | Descripción |
|---|---|
| lscpu | Muestra toda la información de la arquitectura CPU |
| lscpu -e | Formato extendido/tabular — útil para sistemas multi-CPU/multi-núcleo |
bash
lscpu
output
Architecture: x86_64 CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 Vendor ID: GenuineIntel ...
19
lspci — Dispositivos PCI
Lista los dispositivos PCI del sistema: tarjetas gráficas, adaptadores de red, controladores USB, etc.
| Comando | Descripción |
|---|---|
| lspci | Lista todos los dispositivos PCI brevemente |
| lspci -nn | IDs de vendor y device en numérico (útil para buscar drivers) |
| lspci -k | Muestra el módulo del kernel en uso por cada dispositivo |
bash
lspci -k
output
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f08
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
20
df — Disk Free
| Comando | Descripción |
|---|---|
| df | Uso del disco en bloques de 1K |
| df -h | Formato legible por humanos (MB, GB) |
| df -T | Incluye columna de tipo de sistema de archivos (ext4, xfs…) |
bash
df -hT
output
Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 98G 15G 78G 16% / tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 vfat 511M 6.1M 505M 2% /boot/efi
21
du — Disk Usage
| Comando | Descripción |
|---|---|
| du | Uso del directorio actual en bloques |
| du -h | Formato legible por humanos |
| du -sh <dir> | Total sumado (-s de summarize) del directorio |
bash
du -sh ~/Descargas # total de la carpeta sudo du -h /var/log | sort -h # subdirectorios ordenados por tamaño
output
4.2G /home/jose/Descargas 4.0K /var/log/apt 12K /var/log/cups 8.1M /var/log/journal 50M /var/log
22
nohup — No Hang Up
Ejecuta un comando ignorando la señal HUP (hangup): el proceso sigue ejecutándose aunque cierres la terminal o te desconectes de SSH. La salida se redirige a
nohup.out.
| Sintaxis | Descripción |
|---|---|
| nohup <cmd> & | Ejecuta en segundo plano ignorando HUP. Salida → nohup.out |
bash
nohup ./mi_script_largo.sh & # [1] 12345 # nohup: ignoring input and appending output to 'nohup.out' # Ahora puedes cerrar la sesión — el script sigue ejecutándose
23
rsync — Sincronización eficiente
Copia y sincroniza archivos local y remotamente transfiriendo solo las diferencias. Esencial para backups y despliegues. Preserva permisos, timestamps y metadatos.
| Opción | Descripción |
|---|---|
| rsync -av src dst | Copia archivada (preserva todo) y verbosa |
| rsync -avz src dst | Añade compresión — útil para redes lentas |
| rsync --delete | Borra en destino lo que ya no existe en origen — sincronización estricta |
| rsync --progress | Muestra progreso por archivo con velocidad y tiempo restante |
bash — local
rsync -av ~/Documentos/ /mnt/backup_drive/documentos_bkp/
bash — remoto via SSH
rsync -avz --progress ~/logs/ jose@servidor01:/var/backups/
| Parte | Significado | Detalle |
|---|---|---|
| -a | Archive mode | Preserva permisos, propietario, grupo, timestamps y recursividad. Crucial para backups. |
| -v | Verbose | Lista los archivos que se están transfiriendo |
| -z | Compress | Comprime datos durante la transferencia — acelera en conexiones lentas |
| --progress | Progress | Velocidad y tiempo restante por archivo |
| ~/logs/ | Origen | La barra final / sincroniza el contenido de la carpeta, no la carpeta en sí |
| jose@servidor01: | Conexión SSH | Usuario y servidor remoto |
| /var/backups/ | Destino | Directorio en el servidor remoto |
⚠️ La barra final importa:
rsync -av ~/logs/ destino/ copia el contenido de logs/. Sin la barra (~/logs), copia la carpeta logs entera dentro de destino/.
24
screen / tmux — Multiplexores
Permiten crear sesiones de terminal persistentes: puedes desconectarte (detach) y reconectarte (reattach) más tarde manteniendo los programas en ejecución. Esenciales para servidores.
| Comando | Descripción |
|---|---|
| screen | Inicia una nueva sesión de screen |
| screen -ls | Lista sesiones abiertas |
| screen -r <pid> | Reataquea la sesión especificada |
| tmux | Inicia una nueva sesión de tmux |
| tmux ls | Lista sesiones abiertas |
| tmux attach-session -t <nombre> | Reataquea la sesión por nombre |
bash — instalación
sudo apt install screen
Flujo completo con screen
- Iniciar una sesión de screen: bash
screen
- Ejecutar el comando largo dentro de la sesión: bash
ping google.com
- Desconectarse (detach) sin detener el ping: presiona Ctrl+A luego D. Verás:
[detached from 12345.pts-0.Ubuntu2404] - Ver sesiones activas: bash
screen -ls
- Reconectarse (reattach) para ver cómo sigue el ping: bash
screen -r # si solo hay una sesión screen -r 12345 # si hay varias, especifica el PID
💡 Secuencia de detach: Mantén Ctrl, pulsa A, suelta ambas, luego pulsa D. Si lo haces bien dejarás de ver el ping y volverás al prompt principal.