Conceptos Básicos de BASH: Introducción a BASH - Parte 8

La productividad es clave. Una de las razones por las que las personas trabajan sobre línea de comandos con BASH, a pesar de disponer de fantásticas opciones gráficas incluso para los SBC como nuestros ODROID, es que pueden hacer su tarea más rápido y tienen la posibilidad de recurrir a la automatización.

Productividad con BASH

Cuestiones diversas de BASH

Ctrl-t para errores tipográficos cambia la letra debajo del cursor por la anterior y, si es posible, mueve el cursor hacia adelante, o usa los dos caracteres anteriores si está al final de la línea. Ya hemos aprendido muchos atajos en las últimas partes. Una ayuda muy importante, además del conocido sudo, para prefijar el último comando con sudo, es usar !$ como argumento para extraer el argumento del último comando.

Supongamos que queremos listar un determinado archivo para ver el tamaño:

$ ls -l /path/to/filewithlongname/suspiciousbigfile
Si decides deshacerte del archivo, no necesitas volver a escribirlo todo, simplemente puedes usar !$ junto a rm:
$rm !$
Si usas Alt-. en lugar de !$, incluso puedes seleccionar qué argumentos del último comando deseas reutilizar escribiéndolo varias veces. Recorre los últimos argumentos de los comandos anteriores similares a Ctrl-R cuando buscas en tu historial BASH - te detienes en la entrada que quieres usar.

Puesto que estamos con el tema del historial de BASH: el siguiente, Alt-#, es un atajo para "abandonar esta línea, pero mantenerla en el historial". Agrega un # al inicio de la línea, convirtiéndolo en un comentario. Es fácil de localizar con la búsqueda inversa Ctrl-r, ya que a menudo no usas # en el terminal. También puedes tomar nota de algo mientras estás en el intérprete de comandos. Simplemente escríbelo y presiona Alt- #, y se añade a tu historial. También es de gran ayuda cuando queremos incluir una explicación para un comando muy complicado. Inicia un comando complejo y guárdalo temporalmente con Alt- #, luego deténgase a la mitad, quizás buscando algo. Después recupera la línea del historial con la tecla ARRIBA o Ctrl-r y finalice el comando saltando al principio con Ctrl-a, seguido de Del.

Un pequeño inconveniente es que la terminación del comando no funciona sobre las líneas que empiezan con un # (a menos que sea parte de una tubería, cualquier cosa que funcione como es de esperar): la terminación de la ruta y el nombre de archivo, sin embargo, funciona.

Guardar un archivo de historial BASH personalizado
Ahora, después de haber aprendido tanto sobre BASH, seguramente hay cosas que te llamen la atención, y después de probar determinadas frases ingeniosas, quieres asegurarte de que se conserven permanentemente en tus archivos de referencia.

Pero cuando trabajas en algo, quieres mantenerte centrado y no cambiar a un editor de texto para guardar lo más destacado de tu trabajo. Para poder tener tus propios fragmentos de BASH guardados en forma de notas, abre tu archivo ~/.bashrc con tu editor de texto favorito y agrega una función al final:

Anexar la última entrada del historial al archivo
function hsave() { history -p '!!' >> ~/bak/savedbashlines ; } Ahora puede ejecutar un comando complejo y luego introducir hsave para guardarlo en tu archivo dentro de ~/bak/savedbashlines. Escribe una aclaración sobre él en la línea de comandos, haz Alt-t hsave para guardarla, ejecuta hsave nuevamente.

Por ejemplo, coge un comando como el siguiente:

$ du -a /path/to/directory | sort -n -r | head -n 25 | awk '{$1=""}1' | $ awk '{$1=$1}1' | sed '1d' | sed 's/^.\{1,\}$/"&"/'
Te proporciona una lista con los 25 directorios más grandes de esta ruta, encapsulados entre comillas, y es muy apropiado en este caso no tener que reinventar la rueda otra vez, o pensar en lo que se está haciendo.
Copia de seguridad al sistema remoto/trabajo con espacios en rutas
¿Cuál podría ser el uso de una lista con los directorios más grandes? Uno podría ser dirigir esta lista a un archivo con > biggies.txt anexado al comando y copiar los directorios en otro sistema de almacenamiento con menos limitaciones que un ordenador de placa reducida.

Para copias de seguridad completas, tienes la excelente herramienta Odroid-Backup, pero con bastante frecuencia, queremos una copia de seguridad de sólo una parte del sistema. La herramienta habitual para esto es rsync. En pocas palabras, puede usar el siguiente comando para hacer una copia de seguridad del directorio y su contenido en un ordenador remoto:

`rsync -avr /path/to/local/directory user@remotepc.lan:/path/to/backup`
Sin embargo, ten cuidado, porque la inclusión de una "/" después del nombre del directorio con una barra inclinada tras el directorio realiza una copia de seguridad de contendido del directorio, no del directorio en sí:
 `rsync -avr /path/to/local/directory/ user@remotepc.lan:/path/to/backup`
Hasta ahora, esto es normal. Pero en la vida real, los detalles pueden ser llegar a ser complicados: cuando tus rutas contienen espacios o corchetes, debes poner comillas para que rsync funcione. ¡Pero solo un par de comillas en el sistema local no es suficiente! Ya que necesitas evitar que el intérprete de comandos BASH expanda estos caracteres dos veces, una vez en el sistema local y otra en el sistema remoto. Puede resultar muy molesto trabajar y tener como resultado constantes problemas si tienes prisa.

Pero hay una opción de la que casi nunca se habla: en lugar de usar rsync -avr, utiliza rsync -avrs para asegurarte de que rsync tenga en cuenta los caracteres especiales. Por lo tanto, cuando trabajes con archivos con nombres extraños, como archivos de audio o video, debe usar el parámetro -s de rsync para asegurarte de que sus nombres se mantengan intactos. Cuando descubrí esto, me sorprendió la cantidad de quebraderos de cabeza que me iba a evitar relacionados con los espacios en el sistema local y remoto.

Gráficos en el terminal

En esta última sección, usamos el script templogger.sh para registrar las temperaturas de nuestro sistema durante un tiempo, y cerrar la sesión y volver a iniciarla en el sistema mientras tanto. ¿No sería genial tener la opción de observar las temperaturas en tiempo real? Existe gnuplot, pero esto es demasiado complicado para una gráfica rápida y fácil. Me he vuelto aficionado a ttyplot, un reciente programa que aún no se ha incluido en las distribuciones. La página del proyecto está en GitHub.

Descarga la versión adecuada para tu sistema, en la mayoría de los casos será ttyplot-arm-linux:

$ wget https://github.com/tenox7/ttyplot/releases/download/1.1/ttyplot-arm-linux
$ sudo mv ttyplot-arm-linux /usr/local/bin/ttyplot
y ejecútala en paralelo con una tarea exigente desde una segunda sesión ssh (Ejemplo en XU4, modifícala para los sistemas que no son Exynos):
$ { while true; do echo `cat /sys/devices/virtual/thermal/thermal_zone0/temp`/1000 | \
bc; sleep 1; done } | ttyplot -t "XU4 CPU temp" -u "°C" -s 105
Para probar tu sistema, puede usar stress-ng de la distribución normal. El factor estresante de la matriz con 0 como modificador hará hincapié en los 8 núcleos de CPU con alta carga:
$ sleep 5; stress-ng --matrix 0 -t 1m --times
En mi sistema, la gráfica se ve así:

Figura 1 - ttyplot de temperatura XU4

Además, ejecuté como root, cpufreq que no se puede leer de otra forma.

$ { while true; do echo `cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq`/`cat \
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq`*100 | bc; sleep 1; done } | \
ttyplot -t "XU4 CPU freq [%max]" -u "%" -s 105
para asegurarme de que la frecuencia de la CPU no caiga por debajo del 100% de la frecuencia máxima:

Figura 2- ttyplot de frecuencia de la cpu XU4

Este es un ejemplo real; probar que mi XU4 con Cloudshell y modificado con un ventilador Noctua NF-A4x10 5V sea suficiente para mantener el sistema frro bajo alta carga de trabajo, incluso con el sistema de refrigeración estándar más pequeño.

Figura 3 - Cloudshell XU4 con sistema de refrigeración Noctua

Esta es una modificación que puedo recomendar a todos los propietarios de un XU4, ya que el ventilador estándar suena como una abeja enfadada dentro de una bolsa de papel. Un anticipo de la siguiente parte, continuaremos con la búsqueda de productividad y más líneas prácticas. ¿Habrá un final para esto? ¡Lo averiguaremos!

Referencias https://github.com/tenox7/ttyplot https://forum.odroid.com/viewtopic.php?f=52&t=22930

Be the first to comment

Leave a Reply