Cuando usa la línea de comandos de Linux con frecuencia, usar el historial de manera efectiva puede ser un gran aumento de la productividad. De hecho, una vez que haya dominado los 15 ejemplos que he proporcionado aquí, encontrará que usar la línea de comandos es más agradable y divertido.
1. Muestra la marca de tiempo usando HISTTIMEFORMAT
Por lo general, cuando escribe el historial desde la línea de comandos, muestra el número de comando y el comando. Para propósitos de auditoría, puede ser beneficioso mostrar la marca de tiempo junto con el comando como se muestra a continuación.
# export HISTTIMEFORMAT='%F %T ' # history | more 1 2008-08-05 19:02:39 service network restart 2 2008-08-05 19:02:39 exit 3 2008-08-05 19:02:39 id 4 2008-08-05 19:02:39 cat /etc/redhat-release
2. Buscar en el historial usando Control+R
Creo firmemente que esta puede ser la característica de la historia que usa con más frecuencia. Cuando ya haya ejecutado un comando muy largo, simplemente puede buscar en el historial usando una palabra clave y volver a ejecutar el mismo comando sin tener que escribirlo por completo. Presiona Control+R y escribe la palabra clave . En el siguiente ejemplo, busqué rojo , que mostraba el comando anterior “cat /etc/redhat-release ” en la historia que contenía la palabra rojo.
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`red': cat /etc/redhat-release [Note: Press enter when you see your command, which will execute the command from the history] # cat /etc/redhat-release Fedora release 9 (Sulphur)
A veces desea editar un comando del historial antes de ejecutarlo. Por ej. puedes buscar httpd , que mostrará servicio httpd detener desde el historial de comandos, seleccione este comando y cambie la parada para comenzar y vuelva a ejecutarlo como se muestra a continuación.
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`httpd': service httpd stop [Note: Press either left arrow or right arrow key when you see your command, which will display the command for you to edit, before executing it] # service httpd start
3. Repite el comando anterior rápidamente usando 4 métodos diferentes
En algún momento puede terminar repitiendo los comandos anteriores por varias razones. Las siguientes son las 4 formas diferentes de repetir el último comando ejecutado.
- Use la flecha hacia arriba para ver el comando anterior y presione enter para ejecutarlo.
- Escriba !! y presione enter desde la línea de comando
- Escriba !-1 y presione enter desde la línea de comando.
- Presiona Control+P mostrará el comando anterior, presione enter para ejecutarlo
4. Ejecutar un comando específico del historial
En el siguiente ejemplo, si quiere repetir el comando #4, puede hacer !4 como se muestra a continuación.
# history | more 1 service network restart 2 exit 3 id 4 cat /etc/redhat-release # !4 cat /etc/redhat-release Fedora release 9 (Sulphur)
5. Ejecuta el comando anterior que comienza con una palabra específica
Escribe ! seguido de las primeras letras del comando que le gustaría volver a ejecutar. En el siguiente ejemplo, al escribir !ps y enter, se ejecutó el comando anterior comenzando con ps, que es 'ps aux | grep yp'.
# !ps ps aux | grep yp root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
6. Controla el número total de líneas en el historial usando HISTSIZE
Agregue las siguientes dos líneas al .bash_profile y vuelva a iniciar sesión en el shell bash para ver el cambio. En este ejemplo, solo se almacenarán 450 comandos en el historial de bash.
# vi ~/.bash_profile HISTSIZE=450 HISTFILESIZE=450
7. Cambie el nombre del archivo de historial usando HISTFILE
De forma predeterminada, el historial se almacena en ~/.bash_history expediente. Agregue la siguiente línea a .bash_profile y vuelva a iniciar sesión en bash Shell, para almacenar el comando de historial en el archivo .commandline_warrior en lugar del archivo .bash_history. Todavía tengo que descubrir un uso práctico para esto. Puedo ver que esto se usa cuando desea realizar un seguimiento de los comandos ejecutados desde diferentes terminales usando un nombre de archivo de historial diferente.
# vi ~/.bash_profile HISTFILE=/root/.commandline_warrior
Si tiene una buena razón para cambiar el nombre del archivo de historial, compártala conmigo, ya que me interesa saber cómo está utilizando esta función.
8. Elimine la entrada repetida continua del historial usando HISTCONTROL
En el siguiente ejemplo, pwd se escribió tres veces, cuando haces el historial, puedes ver las 3 ocurrencias continuas. Para eliminar duplicados, establezca HISTCONTROL en Ignorados como se muestra a continuación.
# pwd # pwd # pwd # history | tail -4 44 pwd 45 pwd 46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above] 47 history | tail -4 # export HISTCONTROL=ignoredups # pwd # pwd # pwd # history | tail -3 56 export HISTCONTROL=ignoredups 57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above] 58 history | tail -4
9. Borre duplicados en todo el historial usando HISTCONTROL
Los ignorados que se muestran arriba eliminan los duplicados solo si son comandos consecutivos. Para eliminar los duplicados en todo el historial, configure HISTCONTROL en borrados como se muestra a continuación.
# export HISTCONTROL=erasedups # pwd # service httpd stop # history | tail -3 38 pwd 39 service httpd stop 40 history | tail -3 # ls -ltr # service httpd stop # history | tail -6 35 export HISTCONTROL=erasedups 36 pwd 37 history | tail -3 38 ls -ltr 39 service httpd stop [Note that the previous service httpd stop after pwd got erased] 40 history | tail -6
10. Obligar al historial a no recordar un comando en particular usando HISTCONTROL
Cuando ejecuta un comando, puede indicarle al historial que ignore el comando configurando HISTCONTROL para ignorar el espacio Y escribiendo un espacio delante del comando como se muestra a continuación. Veo que muchos administradores de sistemas junior se emocionan con esto, ya que pueden ocultar un comando del historial. Es bueno entender cómo funciona ignorespace. Pero, como práctica recomendada, no oculte nada del historial a propósito.
# export HISTCONTROL=ignorespace # ls -ltr # pwd # service httpd stop [Note that there is a space at the beginning of service, to ignore this command from history] # history | tail -3 67 ls -ltr 68 pwd 69 history | tail -3
11. Borre todo el historial anterior usando la opción -c
En algún momento, es posible que desee borrar todo el historial anterior, pero desea que el historial siga avanzando.
# history -c
12. Sustituir palabras de los comandos del historial
Cuando esté buscando en el historial, es posible que desee ejecutar un comando diferente pero usar el mismo parámetro del comando que acaba de buscar.
En el siguiente ejemplo, !!:$ junto al comando vi obtiene el argumento del comando anterior al comando actual.
# ls anaconda-ks.cfg anaconda-ks.cfg # vi !!:$ vi anaconda-ks.cfg
En el siguiente ejemplo, !^ junto al comando vi obtiene el primer argumento del comando anterior (es decir, el comando cp) al comando actual (es decir, el comando vi).
# cp anaconda-ks.cfg anaconda-ks.cfg.bak anaconda-ks.cfg # vi !^ vi anaconda-ks.cfg
13. Sustituya un argumento específico por un comando específico.
En el siguiente ejemplo, !cp:2 busca el comando anterior en el historial que comienza con cp y toma el segundo argumento de cp y lo sustituye por el comando ls -l como se muestra a continuación.
# cp ~/longname.txt /really/a/very/long/path/long-filename.txt # ls -l !cp:2 ls -l /really/a/very/long/path/long-filename.txt
En el siguiente ejemplo, !cp:$ busca el comando anterior en el historial que comienza con cp y toma el último argumento (en este caso, que también es el segundo argumento como se muestra arriba) de cp y lo sustituye por el comando ls -l como se muestra a continuación.
# ls -l !cp:$ ls -l /really/a/very/long/path/long-filename.txt
14. Deshabilite el uso del historial usando HISTSIZE
Si desea deshabilitar el historial por completo y no quiere que bash Shell recuerde los comandos que ha escrito, configure HISTSIZE en 0 como se muestra a continuación.
# export HISTSIZE=0 # history # [Note that history did not display anything]
15. Ignora comandos específicos del historial usando HISTIGNORE
A veces, es posible que no desee saturar su historial con comandos básicos como pwd y ls. Use HISTIGNORE para especificar todos los comandos que desea ignorar del historial. Tenga en cuenta que agregar ls a HISTIGNORE ignora solo ls y no ls -l. Por lo tanto, debe proporcionar el comando exacto que le gustaría ignorar del historial.
# export HISTIGNORE="pwd:ls:ls -ltr:" # pwd # ls # ls -ltr # service httpd stop # history | tail -3 79 export HISTIGNORE="pwd:ls:ls -ltr:" 80 service httpd stop 81 history [Note that history did not record pwd, ls and ls -ltr]
Lecturas recomendadas
Bash 101 Hacks, por Ramesh Natarajan . Paso la mayor parte de mi tiempo en el entorno Linux. Entonces, naturalmente, soy un gran admirador de la línea de comandos de Bash y las secuencias de comandos de Shell. Hace 15 años, cuando estaba trabajando en diferentes versiones de *nix, solía escribir mucho código en C shell y Korn shell. Años más tarde, cuando comencé a trabajar en Linux como administrador del sistema, prácticamente automaticé todas las tareas posibles utilizando scripts de shell Bash. Basado en mi experiencia con Bash, he escrito el libro electrónico Bash 101 Hacks que contiene 101 ejemplos prácticos tanto en la línea de comandos de Bash como en las secuencias de comandos de shell. Si ha estado pensando en dominar Bash, hágase un favor y lea este libro, que lo ayudará a tomar el control de su línea de comandos y secuencias de comandos de shell de Bash.
Impresionantes artículos de Linux
Los siguientes son algunos 15 ejemplos impresionantes artículos que pueden resultarle útiles.
- Comando Unix LS:15 ejemplos prácticos
- ¡Contrólate con el Grep! – 15 ejemplos prácticos de comandos Grep
- Linux Crontab:15 impresionantes ejemplos de trabajos de Cron
- ¡Mami, lo encontré! — 15 ejemplos prácticos de comandos de búsqueda de Linux