Índice
- 1 1. Ejecutar el último comando con !!
- 2 2. Ejecutar el último comando pero corrigiendo un error de tipeo
- 3 3. Invocar un editor de texto para ingresar un comando extenso
- 4 4. Ejecutar un comando sin que se guarde en el historial
- 5 5. Colocar automáticamente el último parámetro de un comando
- 6 6. Ejecutar un comando a una hora determinada
- 7 7. Obtener tu IP externa
- 8 8. Aprender cómo usar Ctrl+u y Ctrl+y
- 9 9. Limpiar el terminal fácilmente
- 10 10. Ir a un directorio, ejecutar un comando y volver al directorio actual
- 11 Yapa. Listar los comandos más utilizados
1. Ejecutar el último comando con !!
El título lo dice todo, basta con ingresar lo siguiente en un terminal…
!!
…para volver a ejecutar el último comando ingresado. Este truco es muy útil cuando nos olvidamos de ingresar sudo al comienzo. En ese caso, habría que ingresar:
sudo !!
Para descubrir formas más complejas de sacarle todo el jugo a este truco, recomiendo leer este antiguo post.
2. Ejecutar el último comando pero corrigiendo un error de tipeo
Este truco es realmente útil cuando ingresamos un comando con un error de tipeo simple. Por ejemplo, si ejecutamos:
echo "desdelinuxz"
Es posible corregirlo ingresando lo siguiente:
^z
3. Invocar un editor de texto para ingresar un comando extenso
A veces es necesario ingresar comandos interminables en el terminal. En ese caso, puede resultar útil la ayuda de un editor de texto simple, como nano o emacs.
Para abrir el editor sólo basta presionar Ctrl+x+e en un terminal. El texto que hayas ingresado hasta el momento se copiará en el editor de texto una vez abierto éste.
Por su parte, el editor utilizado será aquél que se encuentre especificado en la variable $EDITOR. Para cambiar esta configuración, es posible ejecutar…
export EDITOR=nano
…reemplazando nano por tu editor preferido.
4. Ejecutar un comando sin que se guarde en el historial
Un verdadero hacker no puede desconocer este truco. Como todos saben, bash guarda el historial de comandos ejecutados, al cual es muy fácil de acceder mediante las flechas del teclado o Ctrl+R (para realizar una búsqueda inversa en el historial).
En este caso, lo que hay que hacer para que el comando ingresado no se guarde en el historial es poner un espacio adelante:
<espacio> comando
5. Colocar automáticamente el último parámetro de un comando
Supongamos que el comando ejecutado anteriormente fue
cp archivo.txt /var/www/wp-content/uploads/2009/03/
Para acceder al directorio en cuestión es posible ingresar el comando cd seguido de Alt+. o Esc+. :
cd 'ALT+.'
Esto no es más que una forma abreviada de ingresar:
cd /var/www/wp-content/uploads/2009/03/
6. Ejecutar un comando a una hora determinada
Sí, sí, para eso existe cron. Sin embargo, a veces queremos ejecutar un comando se ejecute a una determinada hora pero por única vez.
Supongamos que queremos ejecutar el comando ls -l a la medianoche. En ese caso, debemos ejecutarlo de la siguiente forma:
echo "ls -l" | at midnight
7. Obtener tu IP externa
Gracias al servicio provisto por http://ifconfig.me/ es posible conocer varios datos de tu conexión a Internet, directo desde el terminal:
curl ifconfig.me/ip // Dirección IP curl ifconfig.me/host // Servidor Remoto curl ifconfig.me/ua // User Agent curl ifconfig.me/port // Puerto
8. Aprender cómo usar Ctrl+u y Ctrl+y
¿Cuántas veces te pasó que empezabas a escribir un comando y recordaste que antes era necesario hacer otra cosa? Bueno, es posible hacer una suerte de cortar-pegar para que luego sea más fácil volver a ingresar el comando que quedó a medias.
Supongamos que empezaste a escribir…
cd /home/usuario
y recordaste que antes tenías que verificar algo en el directorio actual. En ese caso presioná Ctrl+u (sería algo así como un «cortar»).
Ingresá el comando que hacía falta ejecutar primero. Supongamos…
ls -l
…y luego presioná Ctrl+y (funciona como un «pegar»).
9. Limpiar el terminal fácilmente
Con Ctrl+l es posible limpiar el terminal en un santiamén.
10. Ir a un directorio, ejecutar un comando y volver al directorio actual
Este truco es una delicia. Para ejecutar una serie de comandos sin salirse del directorio actual sólo hay que agruparlos entre paréntesis. Como casi todos saben, para ejecutar una serie de comandos, hay que concatenarlos usando &&. Usando estos conceptos, podemos ejecutar algo como lo siguiente:
(cd /tmp && ls)
El resultado de este comando (noten los paréntesis) será un listado de los archivos y directorios dentro de la carpeta /tmp. Todo sin salirnos de nuestro directorio actual. ¡Una joya!
Yapa. Listar los comandos más utilizados
Para ver los comandos más utilizados basta ejecutar lo siguiente:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
En mi caso, los ganadores fueron:
450 yaourt 415 sudo 132 git 99 cd 70 leafpad 70 killall 68 ls 52 pacman 50 xrandr 45 top
A los fanáticos del terminal, como este servidor, les recomiendo visitar commandlinefu. También, por qué no, no dejen de buscar en el archivo de nuestro blog.
había uno que usaba yo que en mi inputrc que omitía las mayúsculas, porque sinceramente se me colaban muchos ficheros que comenzaban así.
Creo que uno de los mas importantes es el comando history en el cual te regresa una lista numerada
de los comandos que haz usado y si quieres usar alguno de ellos solo usas la siguiente linea
!22
eso ejecutara el comando que se encuentra en tu historial en el numero 22 😀
Para buscar algun comando con auto-completado es
Ctrl + r
Yo también utilizo siempre Ctrl+r para repetir la última orden; una vez que aparece la última, se puede ir recorriendo el historial hacia atrás pulsando Re Pag (flecha de dirección hacia arriba).
Saludos.
Buen articulo. Gracias por compartir esos Tips.
Yo quiero compartir uno que uso diariamente que es ‘fg’, el cual te permite abrir las aplicaciones que detuviste antes con ‘Ctrl+z’.
Y con ‘bg’ las envías a background 🙂
Mirá vos… buen truco! Gracias x compartirlo.
Abrazo! Pablo.
Excelente el post, siempre te hacen recordar cosas que uno sabía y con el tiempo olvidó, pero que son realmente útiles.
Los trucos de Terminal siempre son bienvenidos.
Increíblemente no sabia que el agregar un espacio al comando se omitía del Historial.
Muchas Gracias, Saludos!!
para usar autompletado filtrando el historial agregar en el alrchivo $HOME/.inputrc
«\e[5~»: history-search-backward
«\e[6~»: history-search-forward
y por ejemplo en algún momento habías usado:
$ cd /una/ruta/mas/larga/que/la/mierda
y ahora querés usarla nuevamente, tenés que hacer:
$ cd
y luego presionar las teclas «RePag» o «AvPag» para navegar por todos los comandos en el historial que hayan empezado con «cd».
O…. sin editar nada, pulsas Ctrl+R y luego cd (si quieres buscar algo con ‘cd’) y pulsando Ctrl+R repetidas veces verás todos los comandos que lo contienen hasta que llegues al que quieres. Obvio que si es el inmediato anterior te va a salir de una.
Muy bueno!
En realidad ls /tmp deberia bastar para listar el directorio sin salir del actual.
Tambien se puede concadenar el comando utilizando «;» como en el ejemplo n° 10 seria asi:
(cd /tmp; ls)
Saludos
El «;» funciona distinto que el «&&» (and), cuando hacemos comando-1 && comando-2 el segundo comando solo se ejecuta si la salida del primero es «0», o sea, sin error. En el caso del punto y coma el segundo comando se ejecuta sin importar la salida del primero. Para ampliar, existe el operador «||» (or), en este caso el segundo comando se ejecuta solo si el primero arroja error en la salida. Saludos.
Para que cada línea que recuerda history tenga fecha y hora, hay que una variable de ambiente en el ~.bashrc del usuario normal o del root.
# nano .bashrc
export HISTTIMEFORMAT=»%F %T »
# history
492 2014-09-02 14:25:57 revdep-rebuild -i -v
493 2014-09-02 14:31:14 eclean-dist -d
494 2014-09-02 14:31:23 localepurge -v
495 2014-09-02 14:31:29 etc-update
496 2014-09-02 14:31:54 emerge –depclean –pretend
497 2014-09-02 14:39:08 updatedb
Hay mas opciones, que son para la cantidad de líneas que guarda, las estoy probando.
Muy buen post. Realmente muy útiles. El truco número 4, el de ejecutar un comando sin que se guarde en el historial, solo me ha funcionado en ubuntu, no así en debian, ni centos.
A mi me funcionó en raspbian y no en arch.
Merveilleux !!
Hola,
lo de poner un espacio antes de ejecutar un comando para que no se registre en el history, como que no funciona…
[user@host /]$ ls -l
total 104
dr-xr-xr-x. 2 root root 4096 Aug 21 03:55 bin
dr-xr-xr-x. 5 root root 3072 Aug 20 17:26 boot
drwxr-xr-x. 2 root root 4096 Dec 9 2013 cgroup
[user@host /]$ history
1024 ls
1025 ls
1026 history
1027 ls -l
1028 history
interesante articulo..
Un saludo
Perdon, por no leer todos los post,
La prueba tambien esta hecha en centos.
Buena con lo de Ctrl + U y Ctrl + Y.
En mi sistema, la lista de comandos mas usados me funciono cambiando la variable a $5.
Ejemplo de salida:
1122 sudo
362 ls
279 clear
214 cd
142 dig
141 yaourt
130 vnstat
122 mv
112 vim
112 history
Esto se debe a que en mi archivo .bashrc tengo la siguiente linea:
# Muestra la fecha al comando history
export HISTTIMEFORMAT=’%F %T : ‘
Estoy casi seguro, que muchos por aquí han hecho uso de varias terminales al mismo tiempo.
Ahora, esto no se si decirle que sea un truco de la terminal, pero como suelo tener muchas ventanas o haciendo uso de screen para tener varias terminales abiertas, esto habilita que cualquier comando introducido en una de esas terminales, pues se vera reflejada en todas.
Esto va en el archivo .bashrc:
HISTSIZE=90000
HISTFILESIZE=$HISTSIZE
HISTCONTROL=ignorespace:ignoredups
history() {
_bash_history_sync
builtin history «$@»
}
_bash_history_sync() {
builtin history -a #1
HISTFILESIZE=$HISTSIZE #2
builtin history -c #3
builtin history -r #4
}
PROMPT_COMMAND=_bash_history_sync
Muy buen aporte! Gracias x pasar.
Abrazo! Pablo.
Enhorabuena por el articulo.
Muy practico y he aprendido unos cuantos comandos.
Aunque soy ya algo «experimentada» en estos menesteres, estos trucos siempre se agradecen, así que… ¡¡¡para el baúl de los trucos!!!
genial, gracias por los trucos, son realmente utiles 😀
Los caminos de la consola son inescrutables 😉
El truco de pulsar control + u y control + y no depende de la shell, sino de la configuración que tienen los tty. A dia de hoy bajo linux los tty son entidades muy complejas, yo de hecho he estado indagando en su funcionamiento y puedo asegurar que tienen muchos más entresijos de los que parece. Los tty tienen algunos caracteres de control que cambian su estatus, por ejemplo a mi me ha pasado a veces que hago cat a un fichero binario, y despues de salir toda la «basura» por pantalla, el prompt se me queda raro o con otra codificación. Esto se debe a que en un archivo aleatorio hay una alta probabilidad de encontrar con caracteres de control del tty.
Por ejemplo, ejecutad esto en una shell :
print ’33c’
Eso os limpiará la pantalla ( como si ejecutais clear ).
Otras combinaciones, como control + L para limpiar la pantalla provienen del propio shell que se esté usando, los shells clasicos /bin/sh no suelen traer esta característica.
Además, a dia de hoy existen un monton de complejas opciones de manejo de ficheros y sockets bajo linux. Por ejemplo, si abres un dispositivo tty usando open(), en modo AIO ( Asynchronous Input / Output ), el proceso recibira un SIGIO cada vez que haya datos disponibles en el buffer de entrada.
Si por ejemplo bash funcionase sencillamente leyendo las lineas y ejecutando comandos ( tal y como lo hace cuando ejecuta un script ), al pulsar control + L sencillamente esta secuencia de caracteres se incluiria como parte de los comandos, pero como bash tiene control del buffer de entrada puede detectarlo.
Por ejemplo, yo a veces programando he llegado a usar fcntl para conseguir un buffer no bloqueante de entrada, lo cual he usado incluso con las librerias ncurses ( manipular el tty de control antes de iniciar ncurses en el programa ).
Saludos !
Para los que no les funcionó el espacio al principio, y quizás para agregarlo a la nota, hay una variable llamada HISTIGNORE donde se configura el caracter que se agrega antes de un comando para que sea ignorado en el history.
En algunas instalaciones esta variable no viene por de
Saludos y buen post! directo a favoritos!
Ojo que en los comentarios también ví varias cosas interesantes..!!
Todo realmente muy útil. Gracias.