Los 10 mejores trucos para el terminal

30
18211

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/
Al continuar apretando el atajo de teclado mencionado es posible ir navegando en el historial de últimos comandos ejecutados.

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.

¿Falta algún truco? No te olvides de compartirlo y comentar más abajo. 🙂

30 COMENTARIOS

  1. 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.

  2. 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!!

  3. 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”.

    • 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.

  4. 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.

  5. 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.

  6. 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

  7. 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

  8. 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 !

  9. 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..!!

Dejar una respuesta