Introducción a los Conceptos Básicos de BASH - Parte 2: Comandos BASH Útiles para Ordenadores de placa Reducida

La última vez aprendimos los comandos 'ls' y 'tree'. Aunque analizar cosas puede ser interesante, resulta más divertido en realidad hacer algo con nuestros propios datos. Este artículo contiene una lista de los comandos más comunes a la hora de manipular datos. El comando y su explicación son muy breves con el fin de evitar escribir una enciclopedia de Linux y que llegue a aburrirte hasta cansarte. Simplemente debería llamarte la atención la existencia de un determinado comando BASH.

A modo de recordatorio, cada vez que queramos conocer mejor algo, escribiremos "man" en una ventana de Terminal y nos devolverá la sintaxis de uso, así como todas las opciones disponibles para ese programa en concreto. Ten cuidado, sin embargo, porque las páginas man a menudo tienen contenido que se ha ido acumulando durante décadas y pueden ser difíciles de digerir, especialmente para los principiantes. Si quieres comenzar a trabajar de inmediato, abre www.explainshell.com en tu navegador, aquí encontrara explicaciones de los distintos comandos, como los ejemplos que vamos a ver a continuación. Para obtener información útil sobre cómo crear tus propios comandos, usa las páginas TLDR en tldr.ostera.io. Compara el manual del comando tar con la versión TLDR y verás a qué me refiero.

Comandos básicos de BASH

Los comandos básicos más utilizados son:

  • cd - cambiar de directorio. 'Cd /' cambia al directorio raíz, 'cd ~' vuelve al directorio de inicio del usuario.
  • mkdir - Crear un directorio. Prueba con 'mkdir ~/test' para crear un subdirectorio dentro de tu carpeta de inicio llamada prueba.
  • cp - copiar archivos. 'Cp /path/to/file /home/odroid/test/' genera una copia en el directorio que hemos creado antes. Con la opción -R, puedes copiar archivos y directorios de forma recursiva.
  • mv - mover archivos. La sintaxis es igual que cp, pero el archivo se elimina una vez que la copia se haya realizado correctamente.
  • rm - eliminar archivos.

$ rm exampleFile.txt

  • cat - concatenar archivos. cat lee desde entradas estándar y escribe resultados estándar si no se proporcionan otras opciones. Si usas el archivo cat, se escribe el contenido del archivo en la consola, el resultado estándar. Pruebe con 'cat/etc/fstab' para ver un ejemplo.
  • less - si deseas leer archivos más largos en consola. 'Less filename' muestra el contenido del archivo y hace una pausa después de cada página. Puede avanzar con “espacio” y regresar con “b” y “q” para salir.

$ less exampleFile.txt

  • head y tail - por defecto, el archivo head muestra las primeras 10 líneas del archivo, mientras que la tail de un archivo muestra las últimas 10 líneas del archivo.

$ tail exampleFile.txt
$ head exampleFile.txt

  • tar y zip - para archivar archivos. tar cf archive.tar /home/odroid/test/ archiva el directorio de prueba y todos sus contenidos. Si añades el parámetro z (tar czf), el archivo se comprime posteriormente.
  • sudo y su - para todo lo que requiera más privilegios, antepones sudo para ejecutar el comando como root, el superusuario. cat/etc/sudoers no funcionará. Si usas sudo cat /etc/sudoers, puedes leer el archivo. su permite 'cambiar de usuario' Si ha asignado una contraseña al usuario root o tienes otros usuarios en el sistema, puedes pasarte a ellos con este comando. Con sudo -i, también puede cambiar a un prompt de comandos con más privilegios y trabajar como root hasta que te salgas.

$ sudo -i

  • exit - para salir del prompt de comandos o del shell. Útil también para conexiones remotas.

$ exit

  • ssh - puedes iniciar sesión en una consola remota de tu ODROID con esto. Aquí es donde realmente destaca la consola BASH. Siéntate frente a tu PC, inicie sesión en el ODROID donde sea que esté y trabaja como si estuviera sentado frente a él. En este caso, utilizar una GUI es más bien un inconveniente. Ésta es la razón por la cual la consola y BASH en tu SBC son más importantes. En un PC de escritorio, es posible que puedas evitar la línea de comandos la mayor parte del tiempo. Para conectarse por ssh, necesitas la dirección IP del ordenador o del ODROID y el nombre de usuario con el que desea iniciar sesión. Por ejemplo, el usuario 'odroid' y la IP '192.168.0.1'.

$ ssh odroid@192.168.0.1

  • grep - muestra los archivos que contienen un cierto patrón de texto. ¿Desea saber qué archivos del directorio /etc/ contienen la palabra 'Ubuntu'? grep -rnw '/etc/' -e 'Ubuntu' te da la respuesta.

$ grep -rnw ‘/etc/’ -e Ubuntu

  • find - Puedes usar find para buscar archivos usando casi todos los criterios que puedas imaginar y actuar sobre ellos. El ejemplo más simple: find/home/ -name '* test *' busca todos los archivos y directorios que contienen 'test'. find / home/odroid/ -type f -size + 1M -mtime 30 es un ejemplo más elaborado. Encuentra todos los archivos (no directorios) en /home/odroid que ocupen más de 1 MB y que hayan sido modificados en los últimos 30 días. También puede usar Explainshell.com para aviriguar lo que hace.

Figura 01 - explicahell.com explicando nuestro comando find

  • sort – ordenar los archivos.
  • df y du- el espacio libre y el uso del disco muestran cuánto espacio le queda con df o cuánto usan tus archivos y carpetas individuales con du -ch.
  • ps y kill, killall - ps lista los procesos en ejecución, si quieres ver todo lo que hay funcionando, usa ps aux. El número de proceso utilizado con kill, así que kill, matará el proceso al enviar una señal para que finalizar el proceso. Killall mata todos los procesos.

$ ps aux
$ kill

  • mount y umount - monta dispositivos externos y unidades con mount /dev/ /path, desmóntalos con umount /dev/.
  • dd - con dd, puede escribir desde cualquier lugar a cualquier lugar. También se conoce como destructor de disco por alguna razón, ¡así que ten cuidado! dd if=/dev/mmcblk0 of =/home/odroid/mbrbackup bs=512 count=1 hace una copia del registro de inicio maestro. Muy práctico cuando quieres grabar una nueva tarjeta SD.

$ dd  if=/input/path of=/output/path

  • shutdown y reboot: apaga y reinicia tu SBC. Hay varias opciones disponibles

Ampliaciones de BASH y comodines

  • * y ? - ls * .txt muestra todos los archivos que terminan en .txt. Usando ls Image??.jpg, puedes mostrar los archivos con nombres como Image00.jpg o ImageAB.jpg.
  • [abc] - ls/dev/sd[abcd]1 muestra las particiones /dev/sda1, /dev/sdb1, /dev/sdc1 y /dev/sdd1.
  • | como selector - Con mount | grep 'mmc\|sd', muestra unicamente las eMMC, tarjetas SD o dispositivos externos montados. Se extiende a 'todo con mmc o sd en el nombre'.

Comandos BASH avanzados - redirección, flujo de datos y bucles

  • stdin, stdout y stderr - estos tres archivos (recuerda que todo en UNIX es un archivo) siempre existen. stdin es el teclado, stdout es la pantalla y stderr son los mensajes de error que aparecen en pantalla.
  • | - Puedes canalizar el resultado de un programa en el siguiente. El resultado del ejemplo anterior con find es mucho más fácil de leer si usas find /home/odroid -type f -size + 1M -mtime -30 -exec du -h {} \; 2>/dev/null | sort -n. El resultado de find es usado por du para mostrar los tamaños, y todos los errores de stderr van a /dev/null, el receptor para datos innecesarios. Una vez más, si pegas este comando en explainhell.com, verás una vista desglosada de lo que hace cada parte.

$ find /home/odroid -type f -size +1M -mtime -30 -exec du -h {} \; 2>/dev/null | sort -n

    • /dev/zero y /dev/null son la fuente para los bytes nulos y el receptor para todo lo que no necesitas.
    • > y <, >> y << - Estos redirigen la salida o la entrada a archivos. ls * .txt> texts.list genera una lista de archivos de texto en el directorio actual. ls Documents/ *. txt >> texts.list añadiría la lista de archivos .txt al directorio de Documentos. 2> es el resultado de stderr. La parte 2>/dev/null en el ejemplo anterior redirige todos los mensajes de error fuera de la consola al Big Bit Bucket.

for, do, done - Los bucles BASH se pueden crear con estos comandos.

if, then, else - creación de bucle avanzado, principalmente para scripts.

Ejemplo de aplicación práctica

Hagamos un ejemplo para ver el potencial de shell y de los bucles. La carpeta Imágenes contiene varios subdirectorios, cada uno de los cuales deseas comprimirlo en un archivo individual para enviarlos a otra persona. Esto se puede hacer fácilmente con la GUI si solo tiene carpetas de tus viajes con la etiqueta 'EE. UU.', 'Corea del Sur' y 'España': haces clic derecho, seleccionas comprimir y listo.

Ahora piensa en el mismo problema, pero con las carpetas generadas por un programa desde una cámara conectada al ODROID. Si tiene 100 carpetas o más, esta tarea se vuelve tremendamente repetitiva. ¡Aquí es donde BASH entra en acción!

Si usamos el comando 'ls -F' para mostrar un directorio, los símbolos se añaden a los nombres de acuerdo con su tipo. Los directorios tienen una barra añadida, que también es como los ve BASH. Haz memoria: la barra inclinada puede ser parte del nombre de la ruta de un archivo en este directorio, de modo que reciben una barra inclinada:

$ for i in */; do zip -r "${i%/}.zip" "$i"; done
Este comando coge todos los directorios que hay dentro del directorio en el que nos encontramos: la parte “for i in */;” Para cada uno de ellos, hacemos lo siguiente: zip -r "$ {i% /}. zip", donde $i es la variable i que introducíamos antes, i%/ es el nombre sin la barra y "$ {i % /}. zip" es el nombre del directorio con .zip adjunto; el directorio 2018 05 20 daría el archivo 2018 05 20.zip. Las comillas evitan que los nombres con espacios sean tratados como dos nombres diferentes, lo cual podría tener consecuencias desastrosas. Después de que este comando se haya ejecutado para todo i, habremos terminado.

Una breve frase ingeniosa ahorra mucho trabajo tedioso. Esto es lo que hace a BASH tan atractivo. En el próximo artículo, veremos el arranque y el inicio de sesión, y personalizaremos el prompt de BASH.

Be the first to comment

Leave a Reply