El arte de la línea de comandos

¿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

  1. En primer lugar define tu editor si no lo habías hecho export EDITOR=vim
  2. Comienza a escribir un comando echo simpleTest
  3. Pulsa ctrl + w y después ctrl + 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

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

jlevy/the-art-of-command-line

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *