Escribimos un comando largo, vemos un error al principio y empezamos a pulsar la flecha izquierda hasta llegar a él. O recordamos parte de un comando anterior y recorremos todo el historial buscándolo. Son pequeñas cosas que hacemos a menudo y que podemos resolver con unos cuantos atajos.
Vamos a ver los más útiles para Bash con su edición habitual de tipo Emacs. Es la configuración que encontramos en muchas instalaciones de Ubuntu y Linux Mint. Otros intérpretes, como Zsh o Fish, también tienen atajos, pero sus mapas de teclas y su configuración pueden ser distintos.
No todos los atajos pertenecen a Bash
La aplicación de terminal, el intérprete y el programa que estamos ejecutando pueden interpretar teclas diferentes. Por ejemplo, copiar texto con Ctrl+Mayús+C suele ser una función de la terminal gráfica. En cambio, Ctrl+C normalmente envía una interrupción al programa que está en primer plano.
Mientras estamos escribiendo un comando en Bash, buena parte de la edición depende de Readline. Si abrimos Vim o nano, pasamos a utilizar los atajos de ese editor. Y si tenemos activado el modo Vi de Bash, algunas combinaciones de esta guía no harán lo mismo.
Podemos consultar la configuración de la sesión con:
set -o | grep -E '^(emacs|vi)[[:space:]]'
Para seguir estos ejemplos basta con que aparezca emacs activado. No hace falta cambiar los ajustes de todo el sistema ni editar archivos como administrador.
Movernos por un comando sin borrarlo
Estos atajos funcionan mientras editamos la línea, antes de pulsar Intro:
| Teclas | Acción |
|---|---|
| Ctrl+A | Ir al principio de la línea |
| Ctrl+E | Ir al final |
| Ctrl+B y Ctrl+F | Retroceder o avanzar un carácter |
| Alt+B y Alt+F | Retroceder o avanzar por palabras |
Si Alt no llega a Bash porque lo utiliza la terminal o el escritorio, en muchas configuraciones podemos pulsar Esc, soltarla y después B o F. No es necesario mantener Esc pulsada.
Imaginemos que hemos escrito ls /usr/shrae/doc. Podemos ir al final con Ctrl+E, retroceder hasta el tramo incorrecto y corregirlo sin volver a escribir la ruta completa. La división en palabras de Readline también tiene en cuenta separadores, por lo que no siempre coincide con una carpeta entera.
Inicio, Fin y Ctrl+flecha también pueden funcionar, pero dependen de las secuencias que envíe la terminal y de sus asociaciones. Si nos conectamos por SSH y alguna tecla se comporta de otra forma, no significa necesariamente que falte una función en el servidor.
Cortar texto, recuperarlo y corregir errores
Readline conserva el texto que cortamos en un búfer propio. No es el portapapeles del escritorio:
| Teclas | Acción |
|---|---|
| Ctrl+U | Cortar desde el cursor hasta el principio de la línea |
| Ctrl+K | Cortar desde el cursor hasta el final |
| Ctrl+W | Cortar la palabra anterior, tomando como referencia los espacios |
| Alt+D | Cortar hasta el final de la palabra siguiente |
| Ctrl+Y | Recuperar el último texto cortado |
| Ctrl+_ | Deshacer el último cambio de edición |
Podemos practicar escribiendo printf '%s\n' ejemplo y, sin ejecutarlo, pulsar Ctrl+U. La línea quedará vacía. Con Ctrl+Y recuperamos el texto. Es una forma rápida de apartar un comando mientras hacemos otra consulta, aunque conviene recordar qué hemos dejado preparado antes de pulsar Intro.
Ctrl+T intercambia caracteres cercanos al cursor. Al final de la línea intercambia los dos anteriores, algo útil si hemos escrito dos letras en el orden equivocado. No modifica un archivo ni corrige el resultado de un comando ya ejecutado.
Ctrl+D merece una aclaración: con texto en la línea borra el carácter bajo el cursor, si lo hay. En una línea vacía puede indicar fin de entrada y cerrar Bash, salvo que su configuración lo impida. No es un atajo para terminar todos los procesos abiertos.
Buscar un comando anterior con Ctrl+R
Para recuperar un comando reciente podemos utilizar flecha arriba y abajo. Si recordamos una parte, Ctrl+R suele resultar mucho más cómodo: lo pulsamos y escribimos un fragmento.
Por ejemplo, después de ejecutar:
printf '%s\n' 'prueba-historial-terminal'
Pulsamos Ctrl+R y escribimos prueba-historial. Si hay varias coincidencias, volvemos a pulsar Ctrl+R para recorrerlas hacia atrás. Con Esc dejamos el resultado disponible para editarlo. Intro lo ejecuta, y Ctrl+G cancela la búsqueda y recupera la línea anterior.
Conviene revisar el comando recuperado. Una ruta, una dirección o el nombre de una rama pueden haber cambiado desde la última vez. El historial nos ahorra escritura, pero no comprueba que la orden siga siendo apropiada.
También existen expansiones como !!, que recupera el comando anterior, o !texto, que busca un comienzo concreto del historial. No son combinaciones de teclas. Para operaciones que cambian archivos, yo prefiero recuperar y revisar la línea antes de ejecutarla de nuevo.
Ctrl+C, Ctrl+Z, fg y bg
Estas teclas tienen efectos diferentes cuando hay un programa funcionando en primer plano:
- Ctrl+C envía normalmente SIGINT al grupo de procesos en primer plano. Muchos programas lo interpretan como una petición de terminar, pero pueden gestionarlo de otra forma.
- Ctrl+Z solicita suspenderlo. El programa queda detenido, no trabajando en segundo plano.
fgdevuelve un trabajo al primer plano y lo continúa si estaba suspendido.bgcontinúa en segundo plano un trabajo suspendido. No lo independiza de la sesión ni evita por sí solo que necesite la terminal.
Podemos verlo con un ejemplo sin cambios en archivos:
sleep 60
Mientras espera, pulsamos Ctrl+Z. Después consultamos jobs. Veremos el trabajo detenido. Con fg lo recuperamos y con Ctrl+C interrumpimos la espera. Si tenemos varios trabajos, fg %1 se refiere al número 1 que muestra jobs.
Esta distinción importa cuando pensamos que hemos dejado funcionando una copia o una conversión. Si sólo hemos pulsado Ctrl+Z, probablemente la hemos parado. Antes de cerrar la terminal comprobamos qué trabajos siguen dependiendo de ella.
Editar una línea larga en un editor
Con Ctrl+X y después Ctrl+E, Bash puede abrir el comando actual en un editor. Lo elige a partir de su configuración y de variables como VISUAL o EDITOR. No tiene por qué ser nano.

Es útil para comandos de varias líneas, pero tiene una particularidad: al guardar y salir, Bash puede ejecutar el contenido. Si sólo estábamos probando, dejamos la línea vacía antes de guardar. No utilizamos este atajo sobre una orden delicada sin entender ese comportamiento.
Si la terminal parece bloqueada
Ctrl+L vuelve a dibujar la pantalla y deja el comando actual disponible. No equivale a borrar de forma segura todo el historial o el contenido desplazable de la terminal.
Si hemos pulsado Ctrl+S y la salida se ha parado, Ctrl+Q puede reanudarla cuando está activado el control de flujo de la terminal. No ocurre igual en todas las configuraciones, y no sirve para arreglar cualquier programa bloqueado.
Por último, si una combinación no coincide, podemos consultar las asociaciones efectivas de Readline:
bind -q beginning-of-line
bind -q reverse-search-history
El manual de Bash sobre edición de comandos recoge estas funciones y su configuración. Para empezar no hace falta aprenderlas todas. Con Ctrl+A, Ctrl+E, Ctrl+U, Ctrl+Y y Ctrl+R ya podemos corregir y recuperar buena parte de los comandos sin recorrer cada carácter.

Gracias por el apunte.
Una pequeña apreciación: estos atajos funcionan en gran parte de las distribuciones de Linux, pero no en todas. Funcionan en todas aquellas en las que el intérprete de comandos sea Bash; no funciona con Fish o zbash.
Saludos.
Hola, gracias por la aclaración. Vamos a actualizar la entrada con esta información.