Check the new version here

Popular channels

10 trucos bash que deberías conocer

Acceso directo a nuestra home

Hay muchas formas de acceder directamente a nuestro directorio “home” de usuario, la más rápida es simplemente el comando “cd” sin parámetros:

$ cd

Otras formas de hacerlo:

$ cd ~
$ cd ~/


Volver atrás (directorio)

Este truco bash lo utilizo muchísimo. Permite volver al directorio en el que nos encontrábamos anteriormente:

cd -
Ejemplo:

[email protected]:~$ cd /usr/local/
[email protected]:/usr/local$ cd /tmp
[email protected]:/tmp$ cd -
/usr/local
[email protected]:/usr/local$ 


Repetir el anterior comando ejecutado


Muy útil también, podemos querer repetir el comando ejecutado anteriormente o ejecutarlo con ciertas modificaciones de parámetros, añadir pipes, etc. El comando anterior en bash siempre puede ser repetido ejecutando doble admiración:

$ !!

Ejemplo:

[email protected]:/usr/local$ echo "foo"
foo
[email protected]:/usr/local$ !! "bar"
echo "foo" "bar"
foo bar


O lo típico que nos olvidamos de poner sudo:

$ apt-get install foo
$ sudo !!


Ejecutar un comando con los argumentos del anterior


Muy similar al truco anterior, en este caso hacemos uso de la variable “!$”, que contiene todos los argumentos del comando anterior:

[email protected]:~$ touch 4.txt
[email protected]:~$ ls -ltrh !$
ls -ltrh 4
-rw-r--r-- 1 alex alex 0 2014-09-12 14:57 4.txt


Búsqueda en el history


Sin duda el comando más utilizado por la mayoría de sysadmins, es un “acceso rápido” a todas las ejecuciones almacenadas en nuestro histórico de bash “~/.bash_history“. Permite encontrar rápidamente comandos ejecutados con anterioridad. La combinación de teclas para activar la búsqueda es CTRL + r (^R). Aparecerá un “buscador en el que conforme escribamos aparecerán las coincidencias del histórico.

(reverse-i-search)`':

Ejemplo:

Quiero volver a ejecutar un comando enorme que ejecuté hace unos días que tenía un awk, es el siguiente:

cat test.txt | awk '{print $1 $3 $4}' | cut -d "a" -f 2 | sort -n | uniq -c | mail -s "ahí va este correo" [email protected]/pre>

En este caso, puedo encontrarlo de varias formas, pero la más óptima es usar una “keyword” que sepamos que está sólo en este comando, por ejemplo awk. Sólo escribo “a” ó “aw” ó “awk” y ya sale el comando para ejecutarlo o modificarlo:

(reverse-i-search)`awk': cat test.txt | awk '{print $1 $3 $4}' | cut -d "a" -f 2 | sort -n | uniq -c | mail -s "ahí va este correo" [email protected]

Cuando sale puedes editarlo, ejecutarlo o lo que quieras. Si esa no es la coincidencia que buscas, simplemente vuelve a teclear CTRL + r (^R) y pasará a la siguiente, y así sucesivamente.

Listar todos los shortcuts definidos

Es imposible acordarse de todos los shortcuts definidos en el sistema. El comando “bind -p” nos muestra el listado:

[email protected]:~$ bind -p

"C-g": abort
"C-xC-g": abort
"eC-g": abort
"C-j": accept-line
"C-m": accept-line

# alias-expand-line (not bound)
# arrow-key-prefix (not bound)
# backward-byte (not bound)
"C-b": backward-char
"eOD": backward-char
"e[D": backward-char
"C-h": backward-delete-char
"C-?": backward-delete-char
"C-xC-?": backward-kill-line
"eC-h": backward-kill-word
"eC-?": backward-kill-word
"ee[D": backward-word
"e[1;5D": backward-word
"e[5D": backward-word
"eb": backward-word
"e<": beginning-of-history
"C-a": beginning-of-line
"eOH": beginning-of-line
"e[1~": beginning-of-line
"e[H": beginning-of-line
"C-xe": call-last-kbd-macro


[...]

Renombrar o copiar archivos


Normalmente, a la hora de hacer una copia a modo de backup de un archivo, cambiar su extensión, nombre o moverlo, lo hacemos del siguiente modo:

$ cp /home/alex/foo.txt /home/alex/foo.txt.bak

Podemos hacerlo mucho más rápido del siguiente modo:

$ cp /home/alex/foo.txt{,.bak}

Y el resultado:

$ ls -l /home/alex/foo.txt*
-rw-r--r-- 1 alex alex 0 2014-09-12 18:28 /home/alex/foo.txt
-rw-r--r-- 1 alex alex 0 2014-09-12 18:31 /home/alex/foo.txt.bak


Para mover, sería lo mismo:

$ mv /home/alex/foo.txt{,.bak}
$ ls -l /home/alex/foo.txt*
-rw-r--r-- 1 alex alex 0 2014-09-12 18:31 /home/alex/foo.txt.bak


Shortcuts de edición de comandos


Movernos rápido es muy importante, estos son los “shortcuts más importantes para ser veloces en la “command line”:

  • Ctrl + u: cortar todo el contenido que está antes del cursor y llevarlo al portapapeles de la shell
  • Ctrl + k: cortar todo el contenido que está después del cursor y llevarlo al portapapeles de la shell
  • Ctrl + y: pegar el contenido de los dos comandos anteriores (el portapapeles de Ctrl + u y Ctrl + k)
  • Ctrl + a: volver al comienzo de la línea
  • Ctrl + e: ir al final de la línea
  • Ctrl + w: borrar la palabra que hay antes del cursor
  • Ctrl + l: igual que un “clear”, limpia la pantalla.

Alias

Si hay comandos que ejecutas asiduamente y son largos o complicados de escribir/recordar, añádelos como alias en el archivo .bashrc de tu home:

cat ~/.bashrc

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '''s/^s*[0-9]+s*//;s/[;&|]s*alert$//''')"'


En el archivo anterior vemos el alias “alert”. Al ejecutar en la shell bash “alert” se ejecutará el comando enorme del alias:

$ alert

Si queremos ejecutar un comando que tiene un alias pero sin que la ejecución haga referencia al alias le añadimos una contrabarra:

Si por ejemplo tenemos un alias “ls” para “ls -ltrh”, si queremos evitar que se ejecute el alias:

$ ls

Ayuda


Más que un truco, todos deberíamos saber utilizar la ayuda integrada que hay para todos los comandos y funciones de la línea de comandos, el maravilloso comando “man”

$ man
0
0
0
17
0No comments yet