¿Por qué aprender bash?
La respuesta corta es porque linux es realmente GNU/Linux. Sólo el kernel es linux, pero la colección base de utilidades que proporcionan el entorno Unix es proporcionada por GNU y el shell de GNU es bash. Es por esto que bash el shell por defecto que te encontrarás en cualquier distribución o servidor basado en linux.
Hay muchas shells que se adaptan mejor a los propósitos o gustos individuales, como pueden ser zsh, pero creo que al ser un estandar es muy positivo dominar la herramienta para tener un desarrollo fluido, cómodo y productivo cuando necesites usarla o por si es tu shell de preferencia.
¿Que dominar de bash?
Shortcuts
Tab
➡️ autocompletar comandos
ctrl + r
➡️ buscar en el historial de comandos. Pulsa Enter
para ejecutar un comando o pulsa flecha derecha
para editar
ctrl + w
➡️ borra la última palabra
ctrl + u
➡️ borra hasta inicio de línea
ctrl + k
➡️ borra hasta final de línea
alt + b
➡️ mover cursor a palabra anterior
alt + f
➡️ mover cursor a palabra posterior
ctrl + a
➡️ mover cursor a principio de línea
ctrl + e
➡️ mover cursor a final de línea
ctrl + l
➡️ vaciar terminal, limpiarla
cd
➡️ ir al directorio principal (tu usuario)
~ == /home/usuario
➡️ abreviación de directorio principal
cd -
➡️ volver al directorio de trabajo previo
cd ..
➡️ ir un directorio más arriba
Puedes encontrar todos los que tienes asignado ejecutando en terminal:
bind -p
Trucos
Mi comando es demasiado largo o complejo
La solución es sencilla, abrirlo en un editor pero hay una forma muy rápida de realizarlo
- En primer lugar define tu editor si no lo habías hecho
export EDITOR=vim
- Comienza a escribir un comando
echo simpleTest
- Pulsa
ctrl + w
y despuésctrl + e
y automáticamente el comando se abrirá en tu editor
Detener procesos
Por nombre completo: killall process
Seleccionando ventana: xkill
Comandos en background
La sintaxis es añadir nohup al principio del comando y & al final
raul@raul-pc:~$ nohup sleep 10 &
[1] 4172
raul@raul-pc:~$ nohup: ignoring input and appending output to 'nohup.out'
^C
raul@raul-pc:~$ ps
PID TTY TIME CMD
3615 pts/1 00:00:00 bash
4172 pts/1 00:00:00 sleep
4173 pts/1 00:00:00 ps
raul@raul-pc:~$ ps
PID TTY TIME CMD
3615 pts/1 00:00:00 bash
4174 pts/1 00:00:00 ps
[1]+ Done nohup sleep 10
¿Cuanto tiempo llevo usando el PC?
Utiliza uptime
o w
que proporciona más informacion que el anterior.
Abrevia con los alias
raul@raul-pc:~$ alias hello="echo hello world"
raul@raul-pc:~$ hello
hello world
El uso de parentesis
Por ejemplo si estamos desarrollando un script y queremos movermos a otro directorio en una sola instrucción y tras esta seguir donde estabamos podemos añadir parentesis a la secuencia que se movia a otro directorio:
# do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir
Evitar reproducir un texto
raul@raul-pc:~/Desktop$ touch hola.js
raul@raul-pc:~/Desktop$ touch hola.html
raul@raul-pc:~/Desktop$ mv hola.{js,html} ~/Downloads/
Ver diferencias entre dos archivos
diff file1 file2
Redirigir resultados de un comando
Guardar salida en archivo
echo test > afile.txt
Guardar salida estándar en archivo
echo test 1> afile.txt
Guardar error estándar en archivo
echo test 2> afile.txt
echo test 2>&1
Ejecutar un comando con los argumentos del anterior
raul@raul-pc:~$ touch 4.txt
raul@raul-pc:~$ ls !$
ls 4.txt
4.txt
raul@raul-pc:~$
Ejecutar scripts al inicio
Con systemd
https://juncotic.com/systemd-ejecutando-un-script-al-inicio-de-gnu-linux/
Con crontab
#Put into crontab
@reboot /home/test/Documentos/scripts/mi-primer-script.sh
#Check if crontab is enabled
sudo systemctl status cron.service
#Enable if is needed
sudo systemctl enable cron.service
More: https://computernewage.com/2019/03/09/scripting-linux-bash-ejecutar-script-arranque/
El PC no se congela del todo
Si te pasa que el ordenador se congela al estar usandolo por la ejecucción de alguna aplicación o simplemente porque se ha congelado la sesión de escritorio actual, todavía existe una vía de escape que no es apagar el PC y volver a encenderlo. Si tienes suerte y el PC no se ha congelado del todo, es decir, solo se ha afectado la parte gráfica, puedes seguir estos pasos para restaurar la sesión en poco tiempo:
En primer lugar abriremos la terminal que no está asociada a la sesión gráfica, es decir, el clásico Ctrl + Alt + T no nos vale en este caso. En su lugar usaremos Ctrl + Alt + F2 para abrir una terminal, y nos pedirá que introduzcamos el nombre y la contraseña del usuario
Una vez dentro pasaremos a utilizar el comando htop
para acabar con el problema. Si no lo tienes instalado podrás hacerlo de forma normal con APT:
sudo apt install htop
Escribimos htop y se nos abrirá una lista de procesos que están corriendo actualmente en el sistema. Si nuestro problema es una aplicación la localizamos y pulsamos F9 (kill) sobre ella. En el menú de la izquierda aparecen muchas opciones, destacaremos dos:
15 (Sigterm) ⇒ La mayoría de procesos están escuchando por si el sistema les pide que paren su ejecucción, por lo que debería ser la primera opción que probemos
09 (Sigkill) ⇒ En el caso de que el anterior opción no nos valga, usaremos esta opción para forzar el cierre del proceso
Una vez realizado lo anterior, es momento de volver a la interfaz gráfica. Usaremos Ctrl + Alt + F1 para volver a ella.
Reemplazar texto
Con el uso del comando sed podemos reemplazar texto sin la necesidad ni el trabajo manual de realizarlo en un editor de texto. Un ejemplo de como usarlo podría ser:
Este ejemplo muestra el primer carácter de cada palabra en paréntesis:
echo "Bienvenidos al Mundo de los Bits y los Bytes" | sed 's/\\(\\b[A-Z]\\)/\\(\\1\\)/g'
Con el resultado:
(B)ienvenidos(A)l(M)undo de los(B)its y los(B)ytes
Si no se lo que hace un comando
Tienes un comando con un par de opciones definidas y no sabes que es lo que hace con todas esas opciones, ejemplo: ls -ltrh
Los comandos sueles traer consigo una opción --help
o -help
o -h
que te cuentan todo acerca del comando, también puedes recurrir a utilizar otro comando que se llama tldr
, que te soltará ejemplos muy usados y con breve descripción para un comando. Pero si aun así necesitas algo más te voy a exponer una solución muy parecida a la opción --help
, pero con una interfaz más atractiva y amigable. Es el caso de explainshell.
explainshell.com - match command-line arguments to their help text
Todo esto y mucho más en…
Recientemente me he encontrado un repositorio que contiene una serie de markdowns (mismo contenido, distintos idiomas) que tratan una serie de utilidades para aprender de la terminal, principalmente de Linux, aunque se tratan también aspectos MacOS y Windows. Lo recomiendo mucho porque está explicado de una forma sencilla y porque trata una cantidad de herramientas muy útiles que aprender.