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.