Comandos y Atajos de Teclado en GNU/Linux que Posiblemente Desconoces
Post
Cancel

Comandos y Atajos de Teclado en GNU/Linux que Posiblemente Desconoces

Post Header

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:

AtajoAcción
Ctrl+AIr al principio de la línea
Ctrl+EIr al final de la línea
Alt+BRetroceder una palabra
Alt+FAvanzar una palabra
Ctrl+XXAlternar entre posición actual e inicio de línea
Ctrl+LLimpiar la pantalla (equivalente a clear)

Edición de Texto

AtajoAcción
Ctrl+KBorrar desde cursor hasta final de línea
Ctrl+UBorrar desde cursor hasta inicio de línea
Ctrl+WBorrar la palabra anterior
Alt+DBorrar la palabra siguiente
Ctrl+YPegar lo último borrado (yank)
Ctrl+TIntercambiar carácter actual con el anterior
Alt+TIntercambiar palabra actual con la anterior
Alt+UConvertir palabra a mayúsculas
Alt+LConvertir 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+. (o Esc+.): 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 -f sigue el descriptor de archivo. Si el log se rota (como hacen logrotate), deja de seguir el nuevo archivo.
  • tail -F sigue 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 - Salir
  • h/? - Ver ayuda
  • 1-4 - Cambiar entre CPU/Mem/Net/Procesos
  • e - Vista de árbol de procesos
  • f - 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 comandos
  • Ctrl+R - Buscar en el historial (mejora Ctrl+R nativo)
  • 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 ...

This post is licensed under CC BY 4.0 by the author.