Los siguientes comandos harán su aparición:
- clear – Limpia la pantalla
- history – Muestra los contenidos de la lista de historia
bash usa una librería (una colección compartida de rutinas que pueden utilizar diferentes programas) llamada Readline para implementar la edición de la línea de comandos. Ya hemos visto algo de ésto. Sabemos, por ejemplo, que las teclas de las flechas mueven el cursor, pero hay muchas más características. Piensa en ello como herramientas adicionales que podemos emplear en nuestro trabajo. No es importante aprenderlo todo sobre ellas, pero muchas son muy útiles. Cójelas y elígelas como quieras.
Nota: Muchas de las siguientes secuencias de teclas (particularmente aquellas que usan la tecla Alt) podrían ser interceptadas por el GUI para otras funciones. Todas las secuencias de teclas deberían funcionar adecuadamente cuando usamos una consola virtual.
Movimiento del cursor
Teclas usadas para mover el cursor:
Ctrl -a
Mueve el cursor al principio de la línea
Ctrl -e
Mueve el cursor al final de la línea
Ctrl -f
Mueve el cursor un carácter hacia delante; igual que la flecha derecha
Ctrl -b
Mueve el cursor un carácter hacia atrás; igual que la flecha izquierda
Alt -f
Mueve el cursor hacia delante una palabra.
Alt -b
Mueve el cursor hacia detrás una palabra.
Ctrl -l
Limpia la pantalla y mueve el cursor a la esquina superior izquierda. El comando clear hace lo mismo.
Modificando el texto
Comandos de teclado que se usan para editar caracteres en la línea de comandos.
Ctrl -d
Borra un carácter en la localización del cursor
Ctrl -t
Ctrl -t
Traspasa (intercambia) el carácter en la localización del cursor con el que le precede
Alt -t
Alt -t
Traspasa la palabra en la localización del cursor con la que le precede
Alt -l
Alt -l
Convierte los caracteres desde la localización del cursor hasta el final de la palabra a minúsculas
Alt -u
Alt -u
Convierte los caracteres desde la localización del cursor hasta el final de la palabra a mayúsculas
Cortar y pegar (Killing and Yanking) textoLa documentación Readline utiliza los términos killing (matar) y yanking (tirar) para referirse a lo que comúnmente denominamos cortar y pegar. Los elementos que se cortan son almacenados en un buffer llamado kill-ring.
Comando para Cortar y Pegar
Ctrl-k
Kill (corta) el texto desde la localización del cursor al final de la línea.
Ctrl-u
Kill (corta) el texto desde la localización del cursor hasta el principio de la línea.
Alt-d
Kill (corta) el texto desde la localización del curso hasta el final de la palabra actual.
Alt-Retroceso
Kill (corta) el texto desde la localización del cursor hasta el principio de la palabra actual. Si el cursor está al principio de una palabra, corta la palabra anterior.
Ctrl-y
Yank (pega) texto del kill-ring y lo coloca en la localización del cursor
La Meta teclaSi te aventuras en la documentación Readline, que puedes encontrar en la sección READLINE de la man page de bash, encontrarás el término “meta key”. En los teclados modernos te dirige a la tecla Alt pero no siempre es así.
Volviendo a los tiempos oscuros (antes de los Pcs pero después de Unix) no todo el mundo tenía su propio ordenador. Lo que podían tener era un dispositivo llamado terminal. Un terminal era un dispositivo de comunicación que con contaba con una pantalla para mostrar texto y únicamente la electrónica suficiente dentro para mostrar los caracteres y mover el cursor. Estaba conectado (normalmente con un cable serie) a una computadora mayor o a la red de comunicación de una computadora mayor. Había muchas marcas diferentes de terminales y todas tenían configuraciones de pantalla y teclado diferentes. Como todas tendían al menos a entender ASCII, los desarrolladores de software querían escribir aplicaciones portables reducidas al mínimo común denominador. Los sistemas Unix tienen una forma muy elaborada de tratar con los terminales y sus pantallas. Como los desarrolladores de Readline no podían estar seguros de la presencia de una tecla de control extra, se inventaron una y la llamaron “meta”. Igual que la tecla Alt sirve como tecla meta en los teclados modernos, puedes también pulsar y soltar la tecla Esc para tener el mismo efecto que pulsando la tecla Alt si todavía estás usando un terminal (¡Lo que aún puedes hacer en Linux!).
Completado
Otra forma en que el shell puede ayudarte es mediante un mecanismo llamado completado. El completado ocurre cuando presionas la tecla tabulador mientras escribes un comando. Veamos como funciona. Dado un directorio home que aparece así:
[me@linuxbox ~]$ ls
Desktop ls-output.txt Pictures Templates Videos
Documents Music Public
Prueba escribiendo lo siguiente pero no pulses la tecla Enter:
[me@linuxbox ~]$ ls l
Ahora pulsa la tecla tabulador:
[me@linuxbox ~]$ ls ls-output.txt
¿Ves como el shell completa la línea por tí? Probemos otra vez. De nuevo, no pulses Enter:
[me@linuxbox ~]$ ls D
Pulsa tab:
[me@linuxbox ~]$ ls D
No completa, sólo da un pitido. Esto ocurre porque “D” coincide con más de una entrada en el directorio. Para que el completado funcione, el “indicio” que le des no debe ser ambiguo. Si seguimos:
[me@linuxbox ~]$ ls Do
Y pulsamos tab:
[me@linuxbox ~]$ ls Documents
El completado funciona.
Aunque este ejemplo muestra el completado de nombres de archivo, que es su uso más común, el completado también funciona con variables (si el principio de la palabra es un “$”), nombres de usuario (si la palabra empieza con “~”), comandos (si la palabra es la primera en la línea.) y nombres de equipo (si la palabra empieza con “@”). El completado de nombres de equipo sólo funciona para los nombres de equipo listados en /etc/hosts.
Hay un número de secuencias de meta teclas y teclas de control que están asociadas al completado:
Comandos de completado
Alt-?
Muestra una lista de posibles completados. En la mayoría de los sistemas también puedes hacerlo pulsando la tecla tabulador una segunda vez, que es mucho más fácil.
Alt-*
Introduce todos los completados posibles. Ésto es útil cuando quieres usar más de un resultado posible.
Completado programabscriptle
Versiones recientes de bash tienen una característica llamada completado programable. El completado programable te permite (o mejor dicho, el proveedor de tu distribución te permite) añadir reglas de completado adicionales. Normalmente ésto se hace para añadir soporte para aplicaciones específicas. Por ejemplo es posible añadir completados para la lista de opciones de un comando o para buscar tipos de archivo en concreto que soporte una aplicación. Ubuntu tiene una gran colección definida por defecto. El completado programable se implementa mediante funciones de shell, un tipo de mini scripts de shell que veremos en próximos capítulos. Si eres curioso, prueba:
set | less
y mira si puedes encontrarlos. No todas las distribuciones las incluyen por defecto.
Usando el historial
Como descubrimos en el Capítulo 1, bash mantiene un historial de los comandos que hemos introducido. Esta lista de comandos se guarda en nuestro directorio home en un archivo llamado .bash_history. El historial es un recurso útil para reducir la cantidad de pulsaciones que tenemos que hacer, especialmente cuando lo combinamos con la edición en la línea de comandos.
Buscando en el Historial
En cualquier momento, podemos ver el contenido del historial así:
[me@linuxbox ~]$ history | less
Por defecto, bash almacena los últimos 500 comandos que has utilizado. Veremos como ajustar este valor en un capítulo posterior. Digamos que queremos encontrar los comandos que hemos usado para listar /usr/bin. Una de las formas en que podríamos hacerlo sería así:
[me@linuxbox ~]$ history | grep /usr/bin
Y digamos que entre los resultados tenemos una línea que contiene un comando interesante como éste:
88 ls -l /usr/bin > ls-output.txt
El número “88” es el número de línea del comando en el historial. Podríamos usarlo inmediatamente mediante otro tipo de expansión llamada expansión del historial. Para utilizar la línea que hemos descubierto podríamos hacer ésto:
[me@linuxbox ~]$ !88
bash expandirá “!88!” en el contenido de la octogésimo octava línea del historial. Hay otras formas de expandir el historial que veremos un poco más tarde.
bash cuenta también con la capacidad de buscar en el historial incrementalmente. Ésto significa que podemos decirle a bash que busque en el historial mientras vamos introduciendo caracteres, con cada carácter adicional más refinada será nuestra búsqueda. Para empezar una búsqueda incremental pulsamos Ctrl-r seguido del texto que estamos buscando. Cuando lo encuentras, puedes pulsar Enter para ejecutar el comando o pulsar Ctrl-j para copiar la línea del historial a la actual linea de la consola. Para buscar la siguiente coincidencia del texto (en el sentido “hacia arriba” en el historial), pulsamos Ctrl-r de nuevo. Para dejar de buscar, pulsamos Ctrl-g o Ctrl-c. Aquí lo vemos en acción:
[me@linuxbox ~]$
Primero pulsamos Ctrl-r:
(reverse-i-search)`':
El prompt cambia para indicar que estamos realizando un búsqueda incremental inversa. Es “inversa” porque estamos buscando desde “ahora” a algún momento en el pasado. Ahora, empezamos a escribir nuestro texto de búsqueda. En este ejemplo “/usr/bin”:
(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt
Inmediatamente, la búsqueda nos devuelve nuestro resultado. Con nuestro resultado podemos ejecutar el comando presionando Enter, o copiarlo a nuestra consola de comandos para editarlo después presionando Ctrl-j. Vamos a copiarlo. Pulsamos Ctrl-j:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Nuestro prompt de shell vuelve y nuestra línea de comandos está cargada y ¡lista para la acción!
El shell ofrece un tipo especializado de expansión para elementos del historial usando el carácter “!”. Ya hemos visto cómo el signo de exclamación puede ir seguido por un número para insertar una entrada del historial. Hay otras aplicaciones de la expansión:
Comandos de la expansión del historial
!!
Repite el último comando. Probablemente es más fácil pulsar la flecha y luego enter.
!número
Repite el elemento del historial número.
!texto
Repite el último elemento del historial que empiece con texto.
!?texto
Repite el último elemento del historial que contenga texto.
scriptAdemás de la función del historial de comandos en bash, la mayoría de las distribuciones Linux incluyen un programa llamado script que se puede utilizar para grabar una sesión de shell completa y almacenarla en un archivo. La sintaxis básica del comando es:
script [archivo]
donde archivo es el nombre del archivo utilizado para almacenar la grabación. Si no se especifica ningún archivo, se usa el archivo typescript. Mira la man page de script para ver una lista completa de las opciones y funciones del programa.
Resumiendo
En este capítulo hemos tratado algunos de los trucos de teclado que el shell ofrece para ayudar a los duros pulsadores de teclas reducir su carga de trabajo. Sospecho que según pase el tiempo y te familiarices más con la línea de comandos, volverás a este capítulo para recoger más de estos trucos. Por ahora, considéralos opcionales y potencialmente útiles.
Para saber más
Wikipedia tiene un buen artículo sobre los terminales:
Cortar y pegar (Killing and Yanking) textoLa documentación Readline utiliza los términos killing (matar) y yanking (tirar) para referirse a lo que comúnmente denominamos cortar y pegar. Los elementos que se cortan son almacenados en un buffer llamado kill-ring.
Comando para Cortar y Pegar
Ctrl-k
Kill (corta) el texto desde la localización del cursor al final de la línea.
Ctrl-u
Kill (corta) el texto desde la localización del cursor hasta el principio de la línea.
Alt-d
Kill (corta) el texto desde la localización del curso hasta el final de la palabra actual.
Alt-Retroceso
Kill (corta) el texto desde la localización del cursor hasta el principio de la palabra actual. Si el cursor está al principio de una palabra, corta la palabra anterior.
Ctrl-y
Yank (pega) texto del kill-ring y lo coloca en la localización del cursor
La Meta teclaSi te aventuras en la documentación Readline, que puedes encontrar en la sección READLINE de la man page de bash, encontrarás el término “meta key”. En los teclados modernos te dirige a la tecla Alt pero no siempre es así.
Volviendo a los tiempos oscuros (antes de los Pcs pero después de Unix) no todo el mundo tenía su propio ordenador. Lo que podían tener era un dispositivo llamado terminal. Un terminal era un dispositivo de comunicación que con contaba con una pantalla para mostrar texto y únicamente la electrónica suficiente dentro para mostrar los caracteres y mover el cursor. Estaba conectado (normalmente con un cable serie) a una computadora mayor o a la red de comunicación de una computadora mayor. Había muchas marcas diferentes de terminales y todas tenían configuraciones de pantalla y teclado diferentes. Como todas tendían al menos a entender ASCII, los desarrolladores de software querían escribir aplicaciones portables reducidas al mínimo común denominador. Los sistemas Unix tienen una forma muy elaborada de tratar con los terminales y sus pantallas. Como los desarrolladores de Readline no podían estar seguros de la presencia de una tecla de control extra, se inventaron una y la llamaron “meta”. Igual que la tecla Alt sirve como tecla meta en los teclados modernos, puedes también pulsar y soltar la tecla Esc para tener el mismo efecto que pulsando la tecla Alt si todavía estás usando un terminal (¡Lo que aún puedes hacer en Linux!).
Completado
Otra forma en que el shell puede ayudarte es mediante un mecanismo llamado completado. El completado ocurre cuando presionas la tecla tabulador mientras escribes un comando. Veamos como funciona. Dado un directorio home que aparece así:
[me@linuxbox ~]$ ls
Desktop ls-output.txt Pictures Templates Videos
Documents Music Public
Prueba escribiendo lo siguiente pero no pulses la tecla Enter:
[me@linuxbox ~]$ ls l
Ahora pulsa la tecla tabulador:
[me@linuxbox ~]$ ls ls-output.txt
¿Ves como el shell completa la línea por tí? Probemos otra vez. De nuevo, no pulses Enter:
[me@linuxbox ~]$ ls D
Pulsa tab:
[me@linuxbox ~]$ ls D
No completa, sólo da un pitido. Esto ocurre porque “D” coincide con más de una entrada en el directorio. Para que el completado funcione, el “indicio” que le des no debe ser ambiguo. Si seguimos:
[me@linuxbox ~]$ ls Do
Y pulsamos tab:
[me@linuxbox ~]$ ls Documents
El completado funciona.
Aunque este ejemplo muestra el completado de nombres de archivo, que es su uso más común, el completado también funciona con variables (si el principio de la palabra es un “$”), nombres de usuario (si la palabra empieza con “~”), comandos (si la palabra es la primera en la línea.) y nombres de equipo (si la palabra empieza con “@”). El completado de nombres de equipo sólo funciona para los nombres de equipo listados en /etc/hosts.
Hay un número de secuencias de meta teclas y teclas de control que están asociadas al completado:
Comandos de completado
Alt-?
Muestra una lista de posibles completados. En la mayoría de los sistemas también puedes hacerlo pulsando la tecla tabulador una segunda vez, que es mucho más fácil.
Alt-*
Introduce todos los completados posibles. Ésto es útil cuando quieres usar más de un resultado posible.
Completado programabscriptle
Versiones recientes de bash tienen una característica llamada completado programable. El completado programable te permite (o mejor dicho, el proveedor de tu distribución te permite) añadir reglas de completado adicionales. Normalmente ésto se hace para añadir soporte para aplicaciones específicas. Por ejemplo es posible añadir completados para la lista de opciones de un comando o para buscar tipos de archivo en concreto que soporte una aplicación. Ubuntu tiene una gran colección definida por defecto. El completado programable se implementa mediante funciones de shell, un tipo de mini scripts de shell que veremos en próximos capítulos. Si eres curioso, prueba:
set | less
y mira si puedes encontrarlos. No todas las distribuciones las incluyen por defecto.
Usando el historial
Como descubrimos en el Capítulo 1, bash mantiene un historial de los comandos que hemos introducido. Esta lista de comandos se guarda en nuestro directorio home en un archivo llamado .bash_history. El historial es un recurso útil para reducir la cantidad de pulsaciones que tenemos que hacer, especialmente cuando lo combinamos con la edición en la línea de comandos.
Buscando en el Historial
En cualquier momento, podemos ver el contenido del historial así:
[me@linuxbox ~]$ history | less
Por defecto, bash almacena los últimos 500 comandos que has utilizado. Veremos como ajustar este valor en un capítulo posterior. Digamos que queremos encontrar los comandos que hemos usado para listar /usr/bin. Una de las formas en que podríamos hacerlo sería así:
[me@linuxbox ~]$ history | grep /usr/bin
Y digamos que entre los resultados tenemos una línea que contiene un comando interesante como éste:
88 ls -l /usr/bin > ls-output.txt
El número “88” es el número de línea del comando en el historial. Podríamos usarlo inmediatamente mediante otro tipo de expansión llamada expansión del historial. Para utilizar la línea que hemos descubierto podríamos hacer ésto:
[me@linuxbox ~]$ !88
bash expandirá “!88!” en el contenido de la octogésimo octava línea del historial. Hay otras formas de expandir el historial que veremos un poco más tarde.
bash cuenta también con la capacidad de buscar en el historial incrementalmente. Ésto significa que podemos decirle a bash que busque en el historial mientras vamos introduciendo caracteres, con cada carácter adicional más refinada será nuestra búsqueda. Para empezar una búsqueda incremental pulsamos Ctrl-r seguido del texto que estamos buscando. Cuando lo encuentras, puedes pulsar Enter para ejecutar el comando o pulsar Ctrl-j para copiar la línea del historial a la actual linea de la consola. Para buscar la siguiente coincidencia del texto (en el sentido “hacia arriba” en el historial), pulsamos Ctrl-r de nuevo. Para dejar de buscar, pulsamos Ctrl-g o Ctrl-c. Aquí lo vemos en acción:
[me@linuxbox ~]$
Primero pulsamos Ctrl-r:
(reverse-i-search)`':
El prompt cambia para indicar que estamos realizando un búsqueda incremental inversa. Es “inversa” porque estamos buscando desde “ahora” a algún momento en el pasado. Ahora, empezamos a escribir nuestro texto de búsqueda. En este ejemplo “/usr/bin”:
(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt
Inmediatamente, la búsqueda nos devuelve nuestro resultado. Con nuestro resultado podemos ejecutar el comando presionando Enter, o copiarlo a nuestra consola de comandos para editarlo después presionando Ctrl-j. Vamos a copiarlo. Pulsamos Ctrl-j:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Nuestro prompt de shell vuelve y nuestra línea de comandos está cargada y ¡lista para la acción!
Atajos de teclas usados para manipular el historial:
Comandos del historial
Ctrl-p
Se mueve a la anterior entrada del historial. Misma acción que la flecha hacia arriba
Ctrl-n
Se mueve al la siguiente entrada del historial. Misma acción que la flecha hacia abajo
Alt-<
Se mueve al principio (arriba) del historial.
Alt->
Se mueve al final (abajo) del historial, p.ej., la actual línea de comandos.
Ctrl-r
Búsqueda incremental inversa. Busca incrementalmente desde el actual comando hacia arriba en el historial.
Alt-p
Búsqueda inversa, no incremental. Con esta combinación de teclas, escribes las palabras a buscar y presionas enter antes de que la búsqueda se realice.
Alt-n
Búsqueda hacia delante, no incremental.
Ctrl-o
Ejecuta el elemento actual en el historial y avanza al siguiente. Ésto es práctico si estás intentando reejecutar !?texto una secuencia de comandos del historial.
Expansión del historial
Comandos del historial
Ctrl-p
Se mueve a la anterior entrada del historial. Misma acción que la flecha hacia arriba
Ctrl-n
Se mueve al la siguiente entrada del historial. Misma acción que la flecha hacia abajo
Alt-<
Se mueve al principio (arriba) del historial.
Alt->
Se mueve al final (abajo) del historial, p.ej., la actual línea de comandos.
Ctrl-r
Búsqueda incremental inversa. Busca incrementalmente desde el actual comando hacia arriba en el historial.
Alt-p
Búsqueda inversa, no incremental. Con esta combinación de teclas, escribes las palabras a buscar y presionas enter antes de que la búsqueda se realice.
Alt-n
Búsqueda hacia delante, no incremental.
Ctrl-o
Ejecuta el elemento actual en el historial y avanza al siguiente. Ésto es práctico si estás intentando reejecutar !?texto una secuencia de comandos del historial.
Expansión del historial
El shell ofrece un tipo especializado de expansión para elementos del historial usando el carácter “!”. Ya hemos visto cómo el signo de exclamación puede ir seguido por un número para insertar una entrada del historial. Hay otras aplicaciones de la expansión:
Comandos de la expansión del historial
!!
Repite el último comando. Probablemente es más fácil pulsar la flecha y luego enter.
!número
Repite el elemento del historial número.
!texto
Repite el último elemento del historial que empiece con texto.
!?texto
Repite el último elemento del historial que contenga texto.
scriptAdemás de la función del historial de comandos en bash, la mayoría de las distribuciones Linux incluyen un programa llamado script que se puede utilizar para grabar una sesión de shell completa y almacenarla en un archivo. La sintaxis básica del comando es:
script [archivo]
donde archivo es el nombre del archivo utilizado para almacenar la grabación. Si no se especifica ningún archivo, se usa el archivo typescript. Mira la man page de script para ver una lista completa de las opciones y funciones del programa.
Resumiendo
En este capítulo hemos tratado algunos de los trucos de teclado que el shell ofrece para ayudar a los duros pulsadores de teclas reducir su carga de trabajo. Sospecho que según pase el tiempo y te familiarices más con la línea de comandos, volverás a este capítulo para recoger más de estos trucos. Por ahora, considéralos opcionales y potencialmente útiles.
Para saber más
Wikipedia tiene un buen artículo sobre los terminales:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.