
Si llevas tiempo trabajando con GNU/Linux, probablemente conoces los comandos básicos: ls, cd, mkdir, grep. Pero el terminal guarda secretos que pueden transformar tu flujo de trabajo. En este post te cuento los comandos y atajos que más me han sorprendido y que uso a diario.
Atajos de Teclado
El shell Bash (y la mayoría de shells compatibles) usa la librería Readline, que proporciona atajos de edición poderosos. Aquí van los más útiles que quizás no conoces:
Navegación Rápida
| Atajo | Acción |
|---|---|
Ctrl+A | Ir al principio de la línea |
Ctrl+E | Ir al final de la línea |
Alt+B | Retroceder una palabra |
Alt+F | Avanzar una palabra |
Ctrl+XX | Alternar entre posición actual e inicio de línea |
Ctrl+L | Limpiar la pantalla (equivalente a clear) |
Edición de Texto
| Atajo | Acción |
|---|---|
Ctrl+K | Borrar desde cursor hasta final de línea |
Ctrl+U | Borrar desde cursor hasta inicio de línea |
Ctrl+W | Borrar la palabra anterior |
Alt+D | Borrar la palabra siguiente |
Ctrl+Y | Pegar lo último borrado (yank) |
Ctrl+T | Intercambiar carácter actual con el anterior |
Alt+T | Intercambiar palabra actual con la anterior |
Alt+U | Convertir palabra a mayúsculas |
Alt+L | Convertir palabra a minúsculas |
Búsqueda en Historia
Este es el que más uso:
Ctrl+R: Buscar inversamente en el historial. Pulsa repetidamente para navegar entre resultados.Ctrl+G: Cancelar la búsqueda.Alt+.(oEsc+.): Insertar el último argumento del comando anterior.
Ejemplo práctico:
Instalar y crear un directorio:
1
mkdir -p projects/my-new-project/src
Navegar al directorio creado (usar Alt+. para completar automáticamente):
1
cd projects/my-new-project/src
Pulsar Alt+. para insertar automáticamente el último argumento:
1
Alt+.
Trucos con el Historial
El historial de Bash es más potente de lo que parece:
Ejecutar el último comando (equivalente a ↑ + Enter):
1
!!
Ejecutar el último argumento del comando anterior:
1
cd !$
Ejecutar el primer argumento del comando anterior:
1
ls -la !^
Ejecutar el último comando que empezó por “git”:
1
!git
Reemplazar “old” por “new” en el último comando:
1
^python^python3
Personalizar atajos con .inputrc
También puedes configurar tu .inputrc para aún más atajos. Por ejemplo, para buscar con las flechas:
Buscar hacia atrás:
1
"\e[A": history-search-backward
Buscar hacia adelante:
1
"\e[B": history-search-forward
Con esto, al escribir el principio de un comando y pulsar ↑, solo mostrará comandos que empiezan por eso.
Comandos
Estos comandos no son tan populares pero son tremendamente útiles:
tail -F
Uno de los comandos más útiles para monitorizar logs es tail, pero ¿sabes cuándo usar cada bandera?
Seguir archivo mediante descriptor (si se rota, deja de seguir):
1
tail -f /var/log/syslog
Seguir nombre del archivo (reabre si se rota o recrea):
1
tail -F /var/log/syslog
La diferencia es sutil pero importante:
tail -fsigue el descriptor de archivo. Si el log se rota (como hacen logrotate), deja de seguir el nuevo archivo.tail -Fsigue el nombre del archivo. Si el log se rota o se recrea, sigue mostrando el contenido.
Mi recomendación: Usa siempre tail -F para monitorizar logs en producción. Te evitarás sorpresas cuando el sistema rote los archivos.
ncdu
ncdu (https://dev.yorhel.nl/ncdu) es un analizador de uso de disco con interfaz ncurses. Te permite navegar visualmente por los directorios y ver cuál consume más espacio. Es perfecto cuando necesitas encontrar ese directorio que está ocupando demasiado espacio y no sabes dónde está.
Instalar en Debian/Ubuntu:
1
sudo apt install ncdu
Instalar en Arch Linux:
1
sudo pacman -S ncdu
Instalar en Fedora/RHEL:
1
sudo dnf install ncdu
Instalar en openSUSE:
1
sudo zypper install ncdu
Ejecutar en el directorio actual:
1
ncdu
Analizar un directorio específico:
1
ncdu /var/log
btop
btop (https://github.com/aristocratos/btop) es el sucesor moderno de bashtop y bpytop. Muestra CPU, memoria, red, discos y procesos en una interfaz visual bonita con gráficos. Es mucho más completo que top y más moderno que htop. Soporta mouse, atajos de teclado y temas personalizables.
Instalar en Debian/Ubuntu:
1
sudo apt install btop
Instalar en Arch Linux:
1
sudo pacman -S btop
Instalar en Fedora/RHEL:
1
sudo dnf install btop
Instalar en openSUSE:
1
sudo zypper install btop
Ejecutar:
1
btop
Atajos principales:
q- Salirh/?- Ver ayuda1-4- Cambiar entre CPU/Mem/Net/Procesose- Vista de árbol de procesosf- Filtrar procesos
mtr
mtr (https://www.bitwizard.nl/mtr/) combina traceroute y ping en una sola herramienta que muestra la ruta y la latencia de cada salto. Mucho más útil que cualquiera de los dos por separado.
Instalar en Debian/Ubuntu:
1
sudo apt install mtr
Instalar en Arch Linux:
1
sudo pacman -S mtr
Instalar en Fedora/RHEL:
1
sudo dnf install mtr
Instalar en openSUSE:
1
sudo zypper install mtr
Ejecutar:
1
mtr google.com
tree
tree muestra la estructura de directorios en forma de árbol.
Instalar en Debian/Ubuntu:
1
sudo apt install tree
Instalar en Arch Linux:
1
sudo pacman -S tree
Instalar en Fedora/RHEL:
1
sudo dnf install tree
Instalar en openSUSE:
1
sudo zypper install tree
Ver solo 2 niveles de profundidad:
1
tree -L 2
Incluir archivos ocultos:
1
tree -a
Excluir patrones:
1
tree -I 'node_modules|.git'
shuf
shuf es un comando básico de GNU coreutils, viene preinstalado en la mayoría de distribuciones.
Obtener una línea aleatoria de un archivo:
1
shuf -n 1 archivo.txt
Barajar un playlist:
1
shuf lista.txt
nl
nl es un comando básico de GNU coreutils, viene preinstalado en la mayoría de distribuciones.
Numerar todas las líneas:
1
nl archivo.txt
Numerar solo líneas no vacías:
1
nl -ba archivo.txt
ss
ss es el reemplazo moderno de netstat para ver sockets y conexiones. Viene preinstalado en la mayoría de distribuciones modernas (incluido en el paquete iproute2).
Ver puertos escuchando:
1
ss -tuln
Ver conexiones establecidas:
1
ss -tn
fzf
fzf (https://github.com/junegunn/fzf) es un buscador fuzzy universal para la terminal. Puedes usarlo para buscar archivos, historial de comandos, procesos, o cualquier cosa que piping a él. Cuando lo pruebas, no puedes vivir sin él.
Instalar en Debian/Ubuntu:
1
sudo apt install fzf
Instalar en Arch Linux:
1
sudo pacman -S fzf
Instalar en Fedora/RHEL:
1
sudo dnf install fzf
Instalar en openSUSE:
1
sudo zypper install fzf
Lanzar buscador interactivo:
1
fzf
Buscar archivos:
1
find . -name "*.md" | fzf
Integraciones útiles:
Ctrl+T- Buscar archivos para insertar en la línea de comandosCtrl+R- Buscar en el historial (mejoraCtrl+Rnativo)Alt+C- Cambiar a un directorio
bat
bat (https://github.com/sharkdp/bat) es un reemplazo moderno de cat con resaltado de sintaxis, números de línea y git integration. Mucho más agradable a la vista que el simple cat.
Instalar en Debian/Ubuntu:
1
sudo apt install bat
Instalar en Arch Linux:
1
sudo pacman -S bat
Instalar en Fedora/RHEL:
1
sudo dnf install bat
Instalar en openSUSE:
1
sudo zypper install bat
Ver archivo con resaltado de sintaxis:
1
bat archivo.py
Mostrar números de línea:
1
bat -n archivo.md
Listar themes disponibles:
1
bat --list-themes
ripgrep
ripgrep (https://github.com/BurntSushi/ripgrep) (rg) es mucho más rápido que grep y por defecto ya ignora archivos .gitignore, node_modules y binarios. Es el estándar de facto para buscar en código.
Instalar en Debian/Ubuntu:
1
sudo apt install ripgrep
Instalar en Arch Linux:
1
sudo pacman -S ripgrep
Instalar en Fedora/RHEL:
1
sudo dnf install ripgrep
Instalar en openSUSE:
1
sudo zypper install ripgrep
Buscar recursivamente:
1
rg "pattern" .
Buscar solo en archivos Python:
1
rg "function" -t py
Ignorar node_modules y .git:
1
rg "TODO" --ignore-case --glob '!node_modules/*'
fd
fd (https://github.com/sharkdp/fd) es un reemplazo de find más rápido y con sintaxis más simple. Por defecto ignora .gitignore y tiene salida coloreada.
Instalar en Debian/Ubuntu:
1
sudo apt install fd-find
Instalar en Arch Linux:
1
sudo pacman -S fd
Instalar en Fedora/RHEL:
1
sudo dnf install fd
Instalar en openSUSE:
1
sudo zypper install fd
Buscar archivos por nombre:
1
fd "config" .
Buscar con extensión específica:
1
fd -e md .
Buscar directorios:
1
fd -t d .
Ignorar patrones:
1
fd -I -E 'node_modules' -E '.git' .
tldr
tldr (https://tldr.sh/) te da ejemplos prácticos y concretos de comandos, mucho más útil que las páginas de man cuando necesitas algo rápido. Ideal para comandos que no usas frecuentemente.
Instalar en Debian/Ubuntu:
1
sudo apt install tldr
Instalar en Arch Linux:
1
sudo pacman -S tldr
Instalar en Fedora/RHEL:
1
sudo dnf install tldr
Instalar en openSUSE:
1
sudo zypper install tldr
Ver ejemplo rápido de tar:
1
tldr tar
Ver ejemplo rápido de rsync:
1
tldr rsync
Ver ejemplo rápido de docker:
1
tldr docker
duf
duf (https://github.com/muesli/duf) es un reemplazo moderno de df con una interfaz bonita que muestra el uso de discos de forma clara y colorida.
Instalar en Debian/Ubuntu:
1
sudo apt install duf
Instalar en Arch Linux:
1
sudo pacman -S duf
Instalar en Fedora/RHEL:
1
sudo dnf install duf
Instalar en openSUSE:
1
sudo zypper install duf
Ver uso de discos:
1
duf
zoxide
zoxide es un reemplazo inteligente de cd que aprende de tus hábitos de navegación. Mantiene un registro de los directorios que más usas y te permite saltar a ellos con solo escribir parte del nombre.
Instalar en Debian/Ubuntu:
1
sudo apt install zoxide
Instalar en Arch Linux:
1
sudo pacman -S zoxide
Instalar en Fedora/RHEL:
1
sudo dnf install zoxide
Instalar en openSUSE:
1
sudo zypper install zoxide
Añadir al shell (añadir al final de ~/.bashrc o ~/.zshrc):
1
eval "$(zoxide init bash)"
Usar (en lugar de cd):
1
z Descargas
Usar con fzf interactivo:
1
zoxide query --interactive
¿Por qué usar zoxide?
- No tienes que escribir rutas completas
- Aprende de tus directorios más visitados
- Compatible con todos los shells
Alias Útiles
Estos alias y funciones pueden hacer tu vida mucho más fácil. Añádelos a tu ~/.bashrc o ~/.zshrc:
** mkcd - Crear y entrar a un directorio:**
1
2
3
mkcd() {
mkdir -p "$1" && cd "$1"
}
Usar:
1
mkcd nuevo-proyecto
Crear y entrar al directorio con padres:
1
2
3
mkcdp() {
mkdir -p "$1" && cd "$1"
}
Crear un directorio y copiar un archivo:
1
2
3
mkcp() {
mkdir -p "$2" && cp -r "$1" "$2"
}
Crear un directorio y mover un archivo:
1
2
3
mkmv() {
mkdir -p "$2" && mv "$1" "$2"
}
Extraer cualquier archivo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2) tar xjf "$1" ;;
*.tar.gz) tar xzf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*.rar) unrar x "$1" ;;
*) echo "No puedo extraer: $1" ;;
esac
else
echo "$1 no es un archivo válido"
fi
}
Usar:
1
extract archivo.zip
Dónde Añadir los Alias
Según el shell y el usuario, el archivo de configuración varía. Para que los alias estén disponibles para todos los usuarios del sistema, lo mejor es añadirlos en /etc/profile.d/:
Para Bash - Todos los usuarios:
Crear el archivo global:
1
sudo nano /etc/profile.d/aliases.sh
Añadir los alias:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
mkcd() {
mkdir -p "$1" && cd "$1"
}
mkcdp() {
mkdir -p "$1" && cd "$1"
}
mkcp() {
mkdir -p "$2" && cp -r "$1" "$2"
}
mkmv() {
mkdir -p "$2" && mv "$1" "$2"
}
extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2) tar xjf "$1" ;;
*.tar.gz) tar xzf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*.rar) unrar x "$1" ;;
*) echo "No puedo extraer: $1" ;;
esac
else
echo "$1 no es un archivo válido"
fi
}
Hacer ejecutable:
1
sudo chmod +x /etc/profile.d/aliases.sh
Para Zsh - Todos los usuarios:
Crear el archivo global:
1
sudo nano /etc/profile.d/aliases.zsh
Añadir los mismos alias o diferentes.
Por usuario específico:
- Bash:
~/.bashrc - Zsh:
~/.zshrc - Todos los shells (global):
/etc/profile.d/ - Usuario específico (global):
/home/usuario/.bashrc
Para aplicar los cambios sin reiniciar la sesión:
1
2
source ~/.bashrc # Para Bash
source ~/.zshrc # Para Zsh
Preguntas Frecuentes
¿Cuál es la diferencia entre tail -f y tail -F?
La diferencia principal es que tail -f sigue el descriptor de archivo (si el log se rota, deja de seguir), mientras que tail -F sigue el nombre del archivo y lo reopen si se crea uno nuevo. Para monitorizar logs en producción, usa siempre tail -F.
¿Cómo buscar en el historial de Bash?
Usa Ctrl+R para hacer una búsqueda inversa en el historial. Pulsa Ctrl+R repetidamente para navegar entre resultados o Ctrl+G para cancelar.
¿Qué es Readline?
Readline es la librería que proporciona la edición de línea de comandos en Bash. Todos los atajos de edición (Ctrl+A, Ctrl+E, Alt+B, etc.) vienen de Readline y funcionan en cualquier programa que la use.
¿Cómo usar el último argumento sin escribirlo?
Usa Alt+. (o Esc seguida de punto) para insertar automáticamente el último argumento del comando anterior. Es ideal para encadenar comandos en el mismo archivo o directorio.
Conclusión
El terminal de GNU/Linux es una herramienta extraordinariamente potente, pero su verdadero poder está en conocer estos pequeños detalles que te ahorran segundos repetidos miles de veces. Empieza por integrar uno o dos de estos atajos en tu rutina diaria y verás cómo tu productividad aumenta.
Compártelo si te ha gustado.
¿Tienes algún atajo o comando favorito que no menciono aquí? Cuéntamelo en los comentarios.
Y… hasta aquí por hoy!
Loading comments from Disqus ...