← Terminal y Línea de Comandos en Linux Bloque 1 · Primeros pasos en la consola · Tema 5 de 43

Tema 5

Escribir menos: historial, completado y atajos

La objeción más común contra la terminal es que hay que escribir mucho y sin equivocarse. Es cierta solo para quien escribe cada línea completa, letra por letra. Bash completa los nombres, recuerda lo que ya escribiste, permite corregir una línea sin rehacerla y deja ponerle un nombre corto a lo que usas a diario. Este tema reúne esas ayudas, que convierten la consola en una herramienta rápida.

1. La línea es un borrador

En el tema 1 vimos que la shell no recibe nada hasta que pulsas Enter. Mientras tanto, lo que escribes es un borrador, y hay un componente dedicado a ayudarte con él. Se llama Readline, y es la biblioteca que Bash usa para leer la línea.

Readline es el editor de una sola línea que funciona entre tu teclado y la shell. Se ocupa de mover el cursor, borrar, completar nombres y recuperar líneas anteriores. Bash solo ve el resultado final, cuando pulsas Enter.

Sus ayudas se agrupan en cuatro familias, que son las cuatro partes de este tema:

AyudaIdeaTecla o comando principal
CompletadoEscribir el principio de un nombre y que la shell ponga el resto.Tab
HistorialRecuperar una línea ya escrita en vez de escribirla otra vez.Flecha arriba, Ctrl+R
EdiciónCorregir una parte de la línea sin rehacerla.Ctrl+A, Ctrl+E, Ctrl+W, Ctrl+U
AliasDar un nombre corto a un comando que se usa siempre igual.alias

Ninguna es imprescindible: todo lo que hicimos hasta ahora se hizo sin ellas. Pero son la diferencia entre trabajar en la terminal con esfuerzo y hacerlo con comodidad, y conviene adoptarlas desde el principio, antes de que se asiente la costumbre de escribirlo todo.

En los ejemplos, una tecla que se pulsa en medio de la línea se indica entre corchetes y resaltada, así: [Tab]. Los corchetes no se escriben.

2. Tab: que la shell termine la palabra

La tecla Tab, la del tabulador, es la más útil de la terminal. Se escribe el comienzo de un nombre, se la pulsa, y la shell completa lo que falta:

terminal: lo que se teclea
$ cd ~/pr[Tab]
terminal: lo que queda escrito
$ cd ~/practica/

La línea no se ejecutó: Tab solo escribe. Queda a la espera de que sigas tecleando o pulses Enter. La barra final la añade la shell para indicar que lo completado es un directorio, y permite continuar con lo que hay dentro:

terminal
$ cat ~/pr[Tab]n[Tab]               # 11 teclas…
$ cat ~/practica/notas.txt          # …que escriben estos 24 caracteres
Mi primer archivo

La shell decide qué completar según la posición de la palabra:

PosiciónTab completa con…Ejemplo
La primera palabraNombres de comandos: los programas del PATH, los internos y los alias.whoa[Tab] → whoami
Las siguientesNombres de archivos y directorios, a partir del directorio actual o de la ruta escrita.cat no[Tab] → cat notas.txt

Completar tiene tres ventajas, y la velocidad es la menor. La segunda es que no hay errores de tipeo: el nombre lo escribe la shell, tomado de lo que existe. La tercera es que funciona como una comprobación: si Tab completa, el archivo existe y la ruta es correcta. Si no completa, algo está mal antes de ejecutar nada.

3. Tab dos veces: ver las posibilidades

Tab completa solo cuando hay una única continuación posible. Si lo escrito coincide con varios nombres, completa hasta donde todos coinciden y se detiene. Una segunda pulsación muestra los candidatos:

terminal (la lista depende de lo instalado)
$ da[Tab][Tab]
dash  date
$ da                                # la línea vuelve a aparecer, para continuar
$ dat[Tab]                           # con una letra más ya es único: date

El procedimiento es siempre el mismo: escribir unas letras, Tab; si no alcanza, Tab otra vez para ver las opciones, una letra más para desempatar, y Tab de nuevo. Los tres resultados posibles de una pulsación son estos:

Al pulsar Tab…SignificaQué hacer
Se completa la palabraHabía una sola coincidencia.Seguir escribiendo.
Se completa una parte, o nadaHay varias coincidencias.Tab otra vez para verlas.
Nada, ni con dos pulsacionesNo hay ninguna coincidencia.Revisar: el nombre está mal escrito, o no estás donde creías.

El tercer caso es el más instructivo. Recuerda que Linux distingue mayúsculas de minúsculas: cat No[Tab] no completa notas.txt.

La doble pulsación sirve además para explorar. Con una ruta terminada en barra, lista lo que hay en ese directorio sin salir de la línea; y con muy pocas letras, la shell avisa antes de inundar la pantalla:

terminal
$ ls ~/practica/[Tab][Tab]
fotos/       informe.txt  notas.txt
$ l[Tab][Tab]
Display all 142 possibilities? (y or n)

A esa pregunta se responde con n, y se escriben más letras.

4. Todo lo que Tab sabe completar

Los comandos y los archivos son lo básico. Ubuntu, como casi todas las distribuciones, incluye además el paquete bash-completion, que enseña a la shell qué espera cada comando en cada posición:

Qué se completaSe tecleaResultado
Opciones largasls --al[Tab][Tab]Muestra --all y --almost-all.
Subcomandosapt ins[Tab]apt install
Nombres de paquetesapt install tre[Tab]apt install tree, o la lista de los que empiezan así.
Páginas del manualman mkd[Tab][Tab]Muestra las páginas cuyo nombre empieza así, mkdir entre ellas.
Solo directorios, tras cdcd ~/practica/[Tab]cd ~/practica/fotos/: es el único directorio.
Variablesecho $HO[Tab][Tab]Muestra $HOME, $HOSTNAME y $HOSTTYPE.

La primera fila merece atención: dos pulsaciones de Tab después de dos guiones muestran todas las opciones largas de un comando. Es una forma más de ayuda, que se suma a las del tema 4.

Tab resuelve también un problema que todavía no tuvimos: los nombres con caracteres que la shell interpreta, como el espacio. Si en un directorio hay un archivo llamado mis notas.txt, escribirlo tal cual daría dos argumentos. Tab lo completa de la forma correcta:

terminal
$ cat mis[Tab]
$ cat mis\ notas.txt                # la barra invertida quita al espacio su papel de separador

El mecanismo lo estudiamos en el tema 9. Por ahora alcanza con saber que, completando con Tab, los nombres difíciles se escriben bien solos.

La regla de las tres letras

Un hábito que conviene fijar: no escribir nunca completo un nombre que la shell puede completar. Dos o tres letras y Tab. Al principio parece más lento, porque obliga a mirar la pantalla; en pocos días es automático, y los errores por nombres mal tecleados desaparecen.

5. El historial: las flechas y history

Bash guarda cada línea que ejecutas. Esa lista es el historial, y la forma más simple de usarla son las flechas:

TeclaAcción
Flecha arribaTrae la línea anterior. Cada pulsación retrocede una más.
Flecha abajoAvanza hacia las más recientes, hasta volver a la línea vacía.
EnterEjecuta la línea que está a la vista.

La línea recuperada no es una copia de solo lectura: se puede modificar antes de ejecutarla. Ese es el uso más frecuente del historial. Un comando falló por una letra; flecha arriba, se corrige la letra, Enter.

El comando history muestra la lista, numerada:

terminal
$ history 6                         # las últimas seis líneas
  498  cd ~/practica
  499  ls -l
  500  cp /etc/services informe.txt
  501  head -2 informe.txt
  502  ls -lS
  503  history 6

Sin número, history muestra todo lo guardado, que pueden ser cientos de líneas. El número de la izquierda identifica cada una y sirve para repetirla, como vemos enseguida. El historial conserva lo que escribiste, no lo que respondió el sistema: guarda los comandos, nunca sus salidas.

6. Repetir sin reescribir

Para los casos más repetidos, Bash tiene abreviaturas que empiezan con un signo de exclamación. La shell las reemplaza por texto del historial antes de ejecutar la línea:

Se escribeSe reemplaza por
!!La línea anterior, completa.
!$El último argumento de la línea anterior.
!501La línea número 501 del historial.
!cpLa línea más reciente que empieza con cp.

La primera tiene un uso que justifica aprenderla. En el tema 2 actualizamos la lista de paquetes con sudo. Olvidarlo es un error de todos los días, y se corrige sin reescribir la línea:

terminal (salida abreviada)
$ apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
$ sudo !!
sudo apt update
[sudo] password for ana:

Antes de ejecutar, Bash muestra la línea tal como quedó tras el reemplazo: es la que aparece resaltada. La segunda abreviatura, !$, sirve cuando dos comandos seguidos actúan sobre lo mismo:

terminal
$ ls -l ~/practica/informe.txt
-rw-rw-r-- 1 ana ana 12813 oct 12 10:41 /home/ana/practica/informe.txt
$ head -2 !$
head -2 ~/practica/informe.txt
# Network services, Internet style
#

La línea resaltada muestra un detalle: lo que se recupera es el argumento tal como lo escribiste, con la virgulilla, porque el historial guarda el texto de la línea y no lo que la shell hizo con él.

Las abreviaturas con ! se ejecutan sin mostrarse antes

Con !cp o !501 confías en recordar qué línea es, y la shell la ejecuta en cuanto pulsas Enter. Si la que coincide no es la que pensabas, ya es tarde. Para verla sin ejecutarla se añade :p, como en !cp:p. Más seguro todavía es usar los métodos que dejan la línea a la vista: la flecha arriba y la búsqueda de la sección siguiente.

Hay un equivalente de !$ que sí deja ver lo que hace. Es el atajo Alt+. (la tecla Alt y el punto): escribe en la línea, en el lugar del cursor, el último argumento del comando anterior. Pulsado otra vez, lo cambia por el del comando previo a ese. Como el texto queda a la vista antes del Enter, es la forma recomendable.

7. Buscar en el historial con Ctrl+R

Las flechas sirven para lo que escribiste hace un momento. Para un comando de ayer, o de la semana pasada, hay algo mejor: la búsqueda inversa. Se pulsa Ctrl+R y se empieza a escribir cualquier parte de la línea que se busca:

terminal, tras pulsar Ctrl+R y escribir «serv»
(reverse-i-search)`serv': cp /etc/services informe.txt

El indicador cambia: a la izquierda queda lo que tecleaste, y a la derecha, la línea más reciente del historial que lo contiene. La búsqueda es incremental: se actualiza con cada letra. Y el texto puede estar en cualquier lugar de la línea, no solo al comienzo, de modo que alcanza con recordar un fragmento característico: parte del nombre de un archivo, una opción poco común.

Durante la búsquedaAcción
Seguir escribiendoAfina la búsqueda.
Ctrl+R otra vezPasa a la coincidencia anterior, más antigua.
EnterEjecuta la línea encontrada.
Flecha derecha o izquierdaDeja la línea en el indicador, sin ejecutarla, para modificarla.
Ctrl+G, o Ctrl+CCancela y vuelve a la línea vacía.

La cuarta fila es la que conviene usar por costumbre: traer la línea, mirarla, ajustarla si hace falta, y recién entonces Enter.

Cuando no se recuerda ni un fragmento exacto, queda una alternativa que combina dos comandos con una tubería: listar todo el historial y quedarse con las líneas que contienen una palabra.

terminal
$ history | grep cp
  500  cp /etc/services informe.txt
  504  history | grep cp

grep es el filtro de texto del tema 27. A diferencia de Ctrl+R, muestra todas las coincidencias juntas, con su número, y la elegida se puede repetir con !500.

8. Dónde vive el historial

El historial sobrevive al cierre de la terminal porque se guarda en un archivo de tu directorio personal, ~/.bash_history. Su comportamiento depende de unas variables que Ubuntu trae configuradas así:

VariableValor en UbuntuEfecto
HISTSIZE1000Líneas que la sesión recuerda.
HISTFILESIZE2000Líneas que conserva el archivo.
HISTCONTROLignorebothNo guarda una línea igual a la anterior, ni las que empiezan con un espacio.

Cómo cambiar esos valores lo vemos en el tema 34. Hay dos consecuencias prácticas que importan desde ahora.

La primera: el archivo se escribe al cerrar la sesión, no con cada comando. Mientras la terminal está abierta, sus líneas están solo en memoria. Por eso, con dos terminales abiertas a la vez, lo que escribes en una no aparece en el historial de la otra; cada una añade lo suyo al archivo cuando se cierra.

La segunda tiene que ver con la seguridad. El historial es un archivo de texto sin cifrar, y todo lo que escribas en una línea de comandos queda en él.

Nunca una contraseña en la línea de comandos

Algunos programas aceptan la contraseña como argumento. Escribirla así la deja guardada, legible, en ~/.bash_history. Los programas bien hechos la piden aparte, sin mostrarla, como hace sudo: esa es la forma correcta. Si ya ocurrió, la línea se elimina con history -d seguido de su número.

ComandoEfecto
history -d 500Borra del historial la línea 500.
history -cVacía el historial de la sesión actual.
Un espacio antes del comandoCon la configuración de Ubuntu, esa línea no se guarda.

9. Mover el cursor por la línea

Recuperar una línea para corregirla obliga a moverse por ella. Las flechas izquierda y derecha avanzan de a un carácter, lo que en una línea larga es lento. Estos atajos saltan:

AtajoMueve el cursor…
Ctrl+A, o InicioAl principio de la línea.
Ctrl+E, o FinAl final de la línea.
Ctrl+Flecha izquierda, o Alt+BUna palabra hacia atrás.
Ctrl+Flecha derecha, o Alt+FUna palabra hacia adelante.

El caso típico de Ctrl+A es el del sudo olvidado, cuando la línea todavía no se ejecutó: se salta al principio, se escribe sudo y un espacio, y Enter. No hace falta volver al final: Enter envía la línea entera esté donde esté el cursor.

Las letras vienen del editor Emacs, del que Readline tomó sus atajos, y algunas tienen una lógica que ayuda a recordarlas: la A es la primera letra del alfabeto; la E es de end, final; la B, de back, atrás; la F, de forward, adelante.

En algunos emuladores de terminal la tecla Alt abre los menús de la ventana y el atajo no llega a la shell. En ese caso, pulsar y soltar Esc, y luego la letra, tiene el mismo efecto.

10. Borrar, recuperar y deshacer

La tecla de retroceso borra un carácter. Para borrar más de una vez, están estos:

AtajoBorra…
Ctrl+WLa palabra que está antes del cursor.
Ctrl+UDesde el cursor hasta el principio de la línea.
Ctrl+KDesde el cursor hasta el final de la línea.
Alt+DLa palabra que está después del cursor.
Una línea de comandos con el cursor en el medio: Ctrl+A y Ctrl+E llevan el cursor al inicio y al final; Ctrl+W borra la palabra anterior, Ctrl+U todo lo que está a la izquierda y Ctrl+K todo lo que está a la derecha Ctrl+A · al inicio Ctrl+E · al final cp informe.txt fotos/copia.txt Ctrl+W · palabra anterior Ctrl+K · hasta el final Ctrl+U · hasta el inicio
La línea cp informe.txt fotos/copia.txt con el cursor, la barra vertical, entre el segundo y el tercer elemento. Arriba, los atajos que mueven el cursor; abajo, el tramo que borra cada uno.

Lo borrado con estos atajos no se pierde: queda guardado, y Ctrl+Y lo vuelve a escribir donde esté el cursor. Es un cortar y pegar interno de la línea, independiente del portapapeles de la ventana. Tiene un uso muy práctico: estás a mitad de una línea larga y notas que antes necesitas ejecutar otra cosa. Ctrl+U la quita, ejecutas lo otro, y Ctrl+Y la recupera intacta.

Tres atajos más completan el juego:

AtajoAcción
Ctrl+_ (Ctrl y el guion bajo)Deshace el último cambio hecho en la línea.
Ctrl+CDescarta la línea entera y da un indicador nuevo. No se ejecuta ni se guarda en el historial.
Ctrl+LLimpia la pantalla, conservando la línea que estás escribiendo.

Ctrl+C y Ctrl+L ya aparecieron en el tema 2. El primero es la salida de emergencia para cualquier línea que se complicó: en lugar de borrarla, se la abandona.

11. Líneas largas y el indicador >

Una línea puede ser tan larga como haga falta: cuando llega al borde de la ventana, continúa en el renglón siguiente y sigue siendo una sola. Para partirla a propósito, por legibilidad, se termina el renglón con una barra invertida y se pulsa Enter:

terminal
$ cp /etc/services \
> ~/practica/informe.txt

La barra invertida le quita al Enter su significado: en lugar de «ejecutar», pasa a ser «seguir abajo». Bash lo señala cambiando el indicador por un signo >, que no se escribe: lo pone la shell para avisar que espera el resto.

Ese mismo indicador aparece en una situación que confunde a todos alguna vez, y que conviene reconocer:

terminal
$ echo "Hola
> 

Falta la comilla de cierre. La shell no ejecutó nada ni se colgó: considera que el texto sigue y espera que lo termines. Todo lo que escribas se irá sumando. Hay dos salidas: escribir la comilla que falta y pulsar Enter, o cancelar con Ctrl+C.

Si ves un > donde esperabas el $

La shell está esperando que completes algo: una comilla sin cerrar, una barra invertida al final, un paréntesis abierto. Ctrl+C descarta todo y devuelve el indicador normal.

12. Alias: un nombre corto para una línea larga

El completado y el historial ahorran teclas en comandos que varían. Para los que se escriben siempre igual hay un recurso más directo: ponerles un nombre.

Un alias es un nombre que la shell reemplaza por otro texto cuando aparece como primera palabra de una línea.

Ya los usaste sin saberlo. En el tema 3, type ls respondió que ls era un alias. El comando alias, sin argumentos, muestra los definidos:

terminal (salida abreviada)
$ alias
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

Los trae la configuración inicial de Ubuntu, y muestran los dos usos de un alias. ll es una abreviatura: dos letras en lugar de ls -alF. ls y grep son opciones por defecto: el alias tiene el mismo nombre que el comando y le añade una opción, de modo que siempre se ejecute con ella. Por eso los listados salen en colores.

Definir uno propio es una línea:

terminal
$ alias pr='cd ~/practica'
$ pr
$ pwd
/home/ana/practica
$ type pr
pr is aliased to `cd ~/practica'

La forma de escribirlo tiene dos reglas, y las dos producen errores si se olvidan:

ReglaMalQué ocurre
Sin espacios alrededor del signo igual.alias pr = 'cd ~/practica'La shell ve tres argumentos y responde alias: pr: not found.
Entre comillas, si el texto tiene espacios.alias pr=cd ~/practicaEl alias queda definido solo como cd.

Para consultar, quitar o esquivar un alias:

ComandoEfecto
aliasLista todos los alias.
alias llMuestra la definición de uno.
type llIndica que es un alias, y a qué equivale.
unalias prLo elimina.
\lsEjecuta ls ignorando el alias, por esta vez.

La última fila es útil para comprobar cómo se comporta un comando sin los agregados del alias.

13. Alias que duran

Un alias definido en la línea de comandos existe solo en esa shell. Al cerrar la terminal desaparece, y en otra ventana abierta al mismo tiempo no está. Para que sea permanente hay que escribirlo en un archivo que Bash lea al comenzar cada sesión.

Ese archivo es ~/.bashrc, la configuración personal de Bash, que estudiamos en el tema 34. Ubuntu prevé además un archivo aparte, pensado solo para los alias: ~/.bash_aliases. No existe de entrada; si lo creas, .bashrc lo lee automáticamente. Usarlo tiene la ventaja de no tocar el archivo principal.

  1. Abrir el archivo con un editor: nano ~/.bash_aliases. editar
  2. Escribir los alias, uno por línea, igual que en la terminal. editar
  3. Guardar con Ctrl+O y Enter, y salir con Ctrl+X. editar
  4. Cargar los cambios en la sesión actual: source ~/.bashrc. aplicar
  5. Comprobar con alias que figuran en la lista. comprobar
~/.bash_aliases
# Alias personales
alias pr='cd ~/practica'
alias actualizar='sudo apt update'

nano es un editor de texto que funciona dentro de la terminal; lo vemos con detalle en el tema 13. Las líneas que empiezan con # son comentarios.

El cuarto paso es necesario porque Bash lee su configuración una sola vez, al arrancar. El comando source le hace leer el archivo de nuevo. La alternativa es abrir una terminal nueva, que lo leerá por su cuenta.

14. Alias con criterio

Los alias son cómodos y tienen límites que conviene conocer antes de llenarse de ellos:

LímiteConsecuencia
Solo valen como primera palabra.pr funciona; ls pr busca un archivo llamado pr.
Solo existen en tu shell interactiva.No funcionan dentro de los scripts, ni para otros usuarios, ni en otra máquina.
Tapan lo que se llame igual.Un alias con el nombre de un comando existente lo reemplaza. Antes de elegir un nombre, type nombre dice si está libre.
No reciben argumentos en el medio.Lo que escribas después del alias se añade al final del texto, y nada más.

El tercer punto tiene una ironía: el alias pr del ejemplo tapa un comando que existe, pr, un programa poco usado que prepara textos para imprimir. Aquí no molesta; con otro nombre, podría.

Hay un alias muy difundido que ilustra el riesgo mayor: alias rm='rm -i', que hace que el comando de borrar pregunte antes de actuar. Parece prudente. El problema es que acostumbra a borrar confiando en la pregunta, y el día que trabajes en un servidor, o como otro usuario, o dentro de un script, el alias no estará y el borrado será inmediato. Una protección que no viaja contigo es peor que no tenerla, porque enseña un hábito equivocado.

De ahí sale un criterio general: los alias son buenos para abreviar lo que ya dominas, y malos para cambiar el comportamiento de un comando de maneras de las que luego dependas. Y mientras estés aprendiendo, conviene escribir los comandos completos: un alias ahorra teclas, pero esconde justamente las opciones que necesitas fijar.

15. Todo junto

Veamos las cuatro ayudas en una secuencia corta. La tarea: mirar el comienzo de informe.txt, y luego contar sus líneas con wc -l, estando en el directorio personal.

Se tecleaQueda en la líneaAyuda usada
hea[Tab]head Completado de comandos
~/pr[Tab]i[Tab] y Enterhead ~/practica/informe.txtCompletado de rutas
Flecha arribahead ~/practica/informe.txtHistorial
Ctrl+AEl cursor, al principioEdición
Alt+D ~/practica/informe.txtEdición: borra head
wc -l y Enterwc -l ~/practica/informe.txt—

Dos comandos que suman 55 caracteres, escritos con unas veinte pulsaciones y sin posibilidad de equivocar la ruta. La segunda línea podía resolverse también de otra forma: escribir wc -l y pulsar Alt+. para traer el argumento. Casi siempre hay más de un camino, y cada persona termina con sus preferidos.

No hace falta aprenderlos todos a la vez. Este es un orden razonable, por lo que rinde cada uno:

  1. Tab, siempre, para todo nombre. desde hoy
  2. Flecha arriba para repetir y corregir. desde hoy
  3. Ctrl+R para lo que escribiste hace más tiempo. primera semana
  4. Ctrl+A, Ctrl+E, Ctrl+W y Ctrl+U para editar. primera semana
  5. Alt+. y Ctrl+Y, cuando lo anterior ya sea automático. después
  6. Alias, cuando notes que repites la misma línea todos los días. después

Y la referencia rápida del tema:

Tecla o comandoQué hace
TabCompleta el nombre; dos veces, muestra las posibilidades.
Flecha arriba y abajoRecorre el historial.
Ctrl+RBusca en el historial.
historyLista el historial, numerado.
!! y sudo !!Repite la línea anterior.
Alt+.Inserta el último argumento de la línea anterior.
Ctrl+A y Ctrl+ELleva el cursor al principio y al final.
Ctrl+W, Ctrl+U, Ctrl+KBorra una palabra, hasta el principio, hasta el final.
Ctrl+YVuelve a escribir lo último borrado.
Ctrl+CAbandona la línea.
alias nombre='texto'Define un alias.
unalias nombreLo elimina.

Con este tema termina el primer bloque. Ya sabes qué es la terminal, cómo se arma un comando, dónde encontrar ayuda y cómo escribir con economía. En el tema 6 empieza el segundo bloque, con lo primero que hay que dominar para hacer cualquier otra cosa: moverse por el árbol de directorios.

16. Resumen

17. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué ventajas tiene completar con Tab, además de la velocidad?

Evita los errores de tipeo, porque el nombre lo escribe la shell a partir de lo que existe, y sirve de comprobación: si Tab completa, el archivo o el comando existe y la ruta es correcta.

2. Pulsas Tab y no ocurre nada. ¿Qué puede significar y qué haces?

Que hay varias coincidencias o que no hay ninguna. Se pulsa Tab otra vez: si aparece una lista, se escriben más letras para desempatar; si sigue sin ocurrir nada, no existe nada que empiece así y hay que revisar el nombre o el directorio.

3. ¿Qué completa Tab en la primera palabra de la línea, y qué en las siguientes?

En la primera, nombres de comandos. En las siguientes, nombres de archivos y directorios, salvo que el comando tenga un completado propio, como las opciones o los subcomandos.

4. ¿Cómo se ve la lista de opciones largas de un comando sin abrir su ayuda?

Escribiendo el comando, dos guiones y pulsando Tab dos veces, como en ls --[Tab][Tab].

5. Ejecutaste apt install tree y falló por falta de permisos. ¿Cuál es la forma más corta de repetirlo con sudo?

sudo !!. La shell reemplaza !! por la línea anterior. Otra forma: flecha arriba, Ctrl+A, y escribir sudo delante.

6. ¿Qué hace Ctrl+R y en qué se diferencia de la flecha arriba?

Busca en el historial la línea más reciente que contiene el texto que se va escribiendo. La flecha recorre las líneas una por una en orden; Ctrl+R salta directamente a la que coincide, aunque sea muy antigua.

7. Encontraste una línea con Ctrl+R pero quieres cambiarle un argumento antes de ejecutarla. ¿Qué tecla pulsas?

Una flecha lateral, derecha o izquierda. La línea queda en el indicador sin ejecutarse, lista para editarla.

8. ¿Por qué un comando escrito en una terminal no aparece en el historial de otra que está abierta al mismo tiempo?

Porque cada sesión mantiene su historial en memoria y lo escribe en ~/.bash_history recién al cerrarse.

9. ¿Por qué no debe escribirse una contraseña como argumento de un comando?

Porque la línea queda guardada, en texto legible, en el archivo del historial. Si ocurrió, se borra con history -d y el número de la línea.

10. ¿Qué borran Ctrl+W, Ctrl+U y Ctrl+K?

Ctrl+W, la palabra anterior al cursor. Ctrl+U, desde el cursor hasta el principio de la línea. Ctrl+K, desde el cursor hasta el final.

11. Estás escribiendo una línea larga y necesitas ejecutar antes otro comando. ¿Cómo evitas reescribirla?

Ctrl+U la borra y la guarda; se ejecuta el otro comando; Ctrl+Y la vuelve a escribir.

12. En lugar del indicador habitual aparece un signo >. ¿Qué pasó?

La shell considera que la línea no terminó: hay una comilla sin cerrar o una barra invertida al final. Se completa lo que falta, o se cancela con Ctrl+C.

13. ¿Qué está mal en alias ll = 'ls -l'?

Los espacios alrededor del signo igual. La shell los toma como separadores de argumentos. La forma correcta es alias ll='ls -l'.

14. Definiste un alias, cerraste la terminal y ya no está. ¿Por qué, y cómo se evita?

Porque un alias definido en la línea de comandos vive solo en esa shell. Para que sea permanente se lo escribe en ~/.bash_aliases o en ~/.bashrc, que Bash lee al iniciar cada sesión.

15. ¿Por qué se desaconseja depender de alias rm='rm -i'?

Porque el alias solo existe en tu shell interactiva. En otra máquina, como otro usuario o en un script no estará, y el hábito de borrar confiando en la pregunta llevará a un borrado sin confirmación.

Para practicar

  1. Desde tu directorio personal, muestra el contenido de ~/practica/notas.txt usando Tab para todos los nombres. Cuenta cuántas teclas pulsaste.
  2. Escribe ls /etc/host y pulsa Tab dos veces. ¿Qué archivos empiezan así en tu sistema?
  3. Escribe mkdir -- y pulsa Tab dos veces. Compara la lista con la de mkdir --help.
  4. Ejecuta history 15 y repite una de las líneas usando su número. Antes, mírala con :p.
  5. Con Ctrl+R, busca el comando con el que copiaste /etc/services. Tráelo a la línea sin ejecutarlo y abandónalo con Ctrl+C.
  6. Escribe ls -l /etc/hostname y ejecútalo. Luego escribe cat y pulsa Alt+. para completar la línea.
  7. Escribe una línea larga cualquiera sin ejecutarla y practica: Ctrl+A, Ctrl+E, Ctrl+W varias veces, Ctrl+Y, Ctrl+U, Ctrl+Y y, al final, Ctrl+C.
  8. Escribe echo "sin cerrar y pulsa Enter. Observa el indicador, y sal de las dos maneras posibles.
  9. Ejecuta un comando cualquiera con un espacio delante y comprueba con history 3 si quedó guardado.
  10. Crea el archivo ~/.bash_aliases con un alias propio, cárgalo con source ~/.bashrc y verifica con type que existe. Abre otra terminal y comprueba que también está allí.