Quien no se acuerda de la primera vez que... abres una terminal de Linux, impone respeto!!
Esa pantalla oscura con un cursor que te espera parpadeando suele intimidar a quienes en su día hicimos nuestros primeros pinitos. Sin embargo, si te metes en el mundo de la informática, el desarrollo de software o la ciberseguridad, la línea de comandos no es una opción, es tu mayor herramienta.
La interfaz gráfica es útil para tareas cotidianas, pero cuando necesitas buscar un error específico en un archivo de registro de miles de líneas, automatizar respaldos o auditar la seguridad de un servidor, la terminal te ahorra muchas horas de trabajo.
Hoy mi propósito para evitar el hábito de copiar y pegar código sin comprender, en esta guía vamos a analizar los 30 comandos de Linux imprescindibles para empezar explicados con algunos ejemplos del mundo real.
Bloque 1: Navegación y gestión básica de archivos
Hay que saber orientarse dentro del sistema de archivos, moverse entre diferentes directorios y realizar operaciones esenciales como crear, copiar o eliminar elementos de forma segura.
1. "pwd" (Print Working Directory)
Muestra la ruta absoluta del directorio en el que te encuentras posicionado actualmente.
Esencial para saber tu ubicación exacta antes de ejecutar un script o para definir rutas en archivos de configuración.
2. `ls` (List)
Lista el contenido de un directorio.
Evita usarlo de forma aislada, combínalo con modificadores para obtener información útil.
- ls -la Muestra todos los archivos (incluyendo los ocultos que empiezan por un punto) en formato largo con detalles de permisos, tamaño y propietario.
- ls -lh Muestra los tamaños de los archivos en un formato legible (KB, MB, GB).
3. "cd" (Change Directory)
Cambia el directorio de trabajo actual.
Atajos rápidos:
- cd .. Sube un nivel en las carpetas.
- cd Te lleva directamente al directorio de inicio (/home) de tu usuario.
- cd - Regresa al directorio inmediatamente anterior donde estabas trabajando.
4. "mkdir" (Make Directory)
Crea uno o varios directorios nuevos en el sistema.
- mkdir -p Permite crear una estructura completa de carpetas anidadas de golpe, sin que el sistema lance un error si las carpetas intermedias aún no existen.
5. "cp" (Copy)
Copia archivos o directorios de un origen a un destino.
- cp -r Copia directorios de forma recursiva (incluyendo todo su contenido interno).
- cp -p Preserva los permisos, propietario y marcas de tiempo originales del archivo, algo crucial en auditorías forenses y respaldos.
6. "mv" (Move)
Mueve archivos o directorios de ubicación. También se utiliza para renombrar elementos si el destino permanece dentro de la misma ruta.
7. "rm" (Remove)
Elimina archivos o directorios.
Recuerda que en la terminal no existe una "Papelera de reciclaje", lo que se elimina, desaparece de forma permanente!
- rm -rf : Fuerza la eliminación recursiva de directorios y su contenido sin solicitar confirmación. Debe usarse con extrema precaución.
Bloque 2: Búsqueda avanzada e inspección de texto
Con ellos vamos a localizar archivos perdidos en el disco duro e inspeccionar, filtrar o modificar cadenas de texto de manera eficiente sin necesidad de abrir un entorno gráfico o un editor pesado.
8. "find"
Busca archivos y directorios en tiempo real basándose en criterios avanzados como nombre, tamaño, tipo, permisos o fecha de modificación.
- -name : Filtra por el nombre del archivo (soporta comodines como *).
- -type : Define si buscas archivos (`f`) o directorios (`d`).
9. "tar" (Tape Archive)
Se utiliza para empaquetar, comprimir y descomprimir archivos y carpetas, una tarea imprescindible para la transferencia de datos, casi siempre entre servidores.
- tar -czvf archivo.tar.gz carpeta/ : Crea (c) un archivo comprimido mediante gzip (z), mostrando el proceso (v) en el archivo especificado (f).
- tar -xzvf archivo.tar.gz : Extrae (x) el contenido de un archivo comprimido.
10. "cat" (Concatenate)
Despliega el contenido completo de un archivo directamente en la salida estándar de la terminal. Deberíamos utilizarlo solo para archivos cortos, si el archivo cuenta con muchas líneas puede saturar el buffer de la pantalla.
11. "less"
Abre un visor interactivo que permite paginar y navegar por archivos de texto extensos sin cargar el archivo completo en la memoria RAM (a diferencia de los editores tradicionales). Nos podemos desplazar con las flechas del teclado, buscar términos escribiendo "/palabra" y salimos del visor presionando la tecla "q".
12. "head"
Lo usamos para visualizar las primeras líneas de un archivo de texto, si no me equivoco creo muestra las primeras 10.
- -n [número] : Para especificar la cantidad exacta de líneas que deseas inspeccionar.
- ejemplo: head -n 5 /etc/passwd
13. "tail"
Visualizamos las últimas líneas de un archivo de texto.
- tail -f : Podemos activar un modo interactivo que actualiza la pantalla en tiempo real a medida que se añaden nuevas líneas al archivo. Herramienta por excelencia para monitorizar servidores y detectar ataques en vivo!!
- ejemplo: tail -f /var/log/nginx/access.log
14. "grep" (Global Regular Expression Print)
Lo utilizaremos mucho para filtrar y buscar líneas que coincidan con un patrón o cadena de texto específica dentro de uno o varios archivos.
- grep -i : Ignorar la diferencia entre mayúsculas y minúsculas.
- grep -r : Buscamos de manera recursiva en todos los archivos de un directorio.
- grep -n : Muestra el número de línea exacto donde se encontró la coincidencia.
15. "sed" (Stream Editor)
Editor de flujo que permite transformar, buscar y reemplazar texto en un archivo de manera automatizada directamente desde la línea de comandos, sin necesidad de abrirlo interactivamente. Para que se entienda, buscamos cambiar la palabra "localhost" por "127.0.0.1" en un archivo de configuración...
- sed -i 's/localhost/127.0.0.1/g' config.php
16. "nano" / "vim"
Son los editores de texto integrados en la consola. "nano" ofrece una curva de aprendizaje sencilla y directa mediante atajos visibles, mientras que "vim" es una herramienta avanzada basada en modos, altamente eficiente.
17. "echo"
Imprime argumentos en la salida estándar. Si lo combinamos con redirecciones, es muy útil para escribir datos rápidos en archivos sin necesidad de abrir un editor. Por ejemplopara añadir texto al final preservando lo existente.
- echo "PermitRootLogin no" >> /etc/ssh/sshd_config
Bloque 3: Gestión de permisos, procesos y servicios del sistema
Aquí ya podemos tener algunos comandos un poco más enfocados a la administración avanzada, controlar quién tiene acceso a los archivos, gestionar los servicios en segundo plano y monitorizar la salud y los procesos activos de tu infraestructura.
18. "sudo" (SuperUser Do)
Ejecuta un comando temporalmente con los privilegios de seguridad del superusuario (root) o de otro usuario definido en el archivo de configuración "sudoers".
- sudo apt update
19. "chmod" (Change Mode)
Modifica los permisos de acceso de archivos y directorios (lectura, escritura y ejecución para el propietario, el grupo y el resto de usuarios).
- chmod +x script.sh : Otorga permisos de ejecución a un archivo de comandos.
- chmod 600 id_rsa : Permiso de lectura y escritura exclusivo para el dueño (requisito obligatorio de seguridad por ejemplo para llaves privadas SSH).
20. "chown" (Change Owner)
Cambia el propietario o el grupo al que pertenece un archivo o directorio en el sistema.
- sudo chown usuario:grupo_usuarios index.html
21. "systemctl"
Permite controlar el sistema de inicio, la gestión de los servicios del sistema (systemd), etc. Es indispensable para arrancar, detener, reiniciar o auditar servidores web, bases de datos, daemons...
Los comandos más comunes son start, stop, restart, status, enable.
- sudo systemctl status ssh
- sudo systemctl restart nginx
22. "journalctl"
Consulta y analiza los registros de log generados por el sistema de "systemd".
- journalctl -u [servicio] : Filtra logs específicos de una unidad o servicio.
- journalctl -n 20 : Muestra únicamente los 20 registros más recientes.
23. "ps" (Process Status)
Informa sobre el estado de los procesos activos en el sistema. Si combinamos con un "ps aux" no va a mostrar una instantánea detallada de todos los procesos en ejecución, revelando el usuario que lo ha invocado, el uso de CPU y memoria, y el PID.
24. "htop"
Administrador de tareas interactivo para la terminal. Podemos ver de manera visual e intuitiva el uso de los hilos de la CPU, la memoria RAM, la partición Swap y el árbol completo de procesos activos. Si no lo tienes simplemente instalalo con "sudo apt install htop".
25. "kill" / "killall"
Con estos comandos podemos mandar señales de terminación a los procesos del sistema mediante su ID (PID) o su nombre. Deberemos tener cuidado, si utilizamos el modificador "-9" (SIGKILL) como primera opción, finaliza el proceso de forma abrupta sin permitirle guardar datos ni cerrar conexiones y podríamos tener problemas. Utilizaremos siempre primero el comando estándar "kill [PID]"que envía una señal (SIGTERM) para solicitar un cierre limpio y controlado.
- kill 1423 : Cierre limpio (SIGTERM)
- kill -9 1423 : Último recurso, terminación forzada (SIGKILL)
26. "df" (Disk Free)
Muestra el espacio disponible, utilizado y total en las diferentes particiones de los discos duros montados en el sistema.
- df -h : transforma los bloques numéricos complejos a unidades comprensibles como Megabytes o Gigabytes.
27. "du" (Disk Usage)
Estima el espacio en disco que ocupa un archivo o directorio específico.
- du -sh : Resumen de cada elemento del directorio actual, para identificar rápidamente qué carpetas están saturando el almacenamiento.
Bloque 4: Redes, conectividad y transferencia de datos
Veremos comandos de conectividad de nuestra máquina, podremos revisar la configuración de las interfaces de red y transferir datos o conectarnos a servidores remotos de forma segura.
28. "ping"
Envía paquetes ICMP de solicitud de eco a un host remoto para verificar si está activo en la red y medir la latencia de la conexión.
- ping -c 4 google.com
29. "ip a" (IP Address)
Despliega información detallada de las interfaces de red de la máquina (direcciones IP locales, máscaras, estados y direcciones MAC).
30. "curl" (Client URL)
Con este comando podemos transferir datos desde o hacia un servidor utilizando múltiples protocolos (HTTP, HTTPS, FTP, etc.).
- curl -I : Solicita únicamente las cabeceras HTTP de la respuesta para auditar servidores web.
- curl -X [METODO] : Define el método HTTP específico (GET, POST, PUT, DELETE).
Ejemplo:
- curl -I https://www.debian.org
Bonus:
"wget"
A diferencia de "curl", "wget" es un descargador de archivos puro, no interactivo! Está diseñado para descargar de forma robusta instaladores, imágenes ISO o contenidos web de forma recursiva en segundo plano.
- wget https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso
"ssh" (Secure Shell)
Para establecer una conexión cifrada y segura con la terminal de una máquina remota, permitiendo su administración a distancia a través de la red.
- ssh -p 2222 usuario@192.168.1.123
Preguntas Frecuentes (FAQ)
¿Por qué mi distribución dice que "ifconfig" no existe?
"ifconfig" forma parte de las herramientas tradicionales de red (net-tools) que ya han dejado de actualizarse hace años. Las distribuciones modernas como Ubuntu, Debian o Red Hat lo han marcado como obsoleto y lo omiten en sus instalaciones limpias, de ahí que utilicemos el comando "ip a".
¿Por qué se desaconseja usar "kill -9" de forma habitual?
Cuando ejecutas "kill" envías una señal que le pide al programa que finalice dando tiempo para cerrar conexiones abiertas, guardar archivos temporales y liberar memoria limpiamente. "kill -9" envía una señal que el sistema operativo ejecuta de forma inmediata y violenta en el kernel y nos puede fastidiar bases de datos o perder datos. Yo? lo recomendaría como último recurso.
¿Se puede limpiar la terminal sin escribir "clear"?
Sí, la combinación de teclas "Ctrl + L" limpia visualmente la pantalla de la terminal, es un atajo!
¿Cuál es la diferencia real entre "wget" y "curl"?
"wget" está pensado para la descarga directa de archivos al almacenamiento local, "curl" está diseñado para interactuar con transferencias de datos mediante flujos.
Conclusión
Aprender la línea de comandos de Linux no consiste en memorizar tablas de manera teórica, hay que practicar y lo mas importante, toquetear!!! Es la forma más eficiente de consolidar conocimientos y no tengáis miedo en crear laboratorios virtuales locales, para eso están.
No sé si este post te ha resultado útil, igualmente gracias por tu lectura!!
Ya sé que nos hemos dejado fuera algún comando imprescindible para el día a día de un principiante, pero puedes dejarlo en los comentarios y cuando subamos de nivel... ahí los verás.
¡Me encantaría debatir y leer vuestras experiencias con la terminal!
>_Saludos!
No hay comentarios:
Publicar un comentario