💻🔲 Introducción a la interfaz de línea de comandos: un ensayo temático (parte 2)

in #spanish5 years ago (edited)
banner para el artículo

💻🔲 Introducción a la interfaz de línea de comandos: un ensayo temático (parte 2)


Por Enio...


Hola, amigos de #SteemSTEM y #STEM-Espanol. En esta entrega continuaré con la temática iniciada en el pasado ensayo, en el cual se introdujo a la interfaz de línea de comandos; esa versátil herramienta puesta al alcance de los usuarios informáticos avanzados para tener un omnipotente control del computador, aunque también vimos que puede ser utilizada ocasionalmente por usuarios no expertos. [1]

Continuaré en esta ocasión con más demostraciones de uso de la Shell, presentando algunos comandos que resultan ser prácticos para aquellos desarrolladores de software que habitualmente utilizan la terminal de los sistemas UNIX-like, quienes —desde luego— no son pocos. De hecho, me incluyo entre ese grupo de programadores, por lo que me esfuerzo en presentar los comandos también desde una perspectiva 'personal', por así decirlo.

En el proceso, procuraré aportar datos interesantes alrededor de los comandos abordados, en relación con algunos conceptos que pueden enriquecer la cultura informática de aquellos lectores que no necesariamente son usuarios asiduos de la línea de comandos. Asimismo, aclararé otras terminologías que suelen ser confundidas por muchos usuarios, y ello se debe, en parte, a las distintas maneras de 'desinformación' promovidas por algunas fuentes o sencillamente por la 'flexibilidad' en el uso de la terminología que, como en el lenguaje natural, también puede ocurrir con el lenguaje técnico.

De esta manera, no me planteo con esta publicación hacer un abordaje enciclopédico de los comandos. Aquellos lectores que deseen un conocimiento profundo de las utilidades reseñadas podrán conseguir materiales útiles en la sección de referencias. [5] [6] [7] [8] Mi norte es continuar reseñando algunos comandos con los que he experimentado y que considero interesantes en mi calidad de programador, además de aportar valor mediante la discusión de conceptos informáticos afines.

Espero este post sea de su agrado. Comencemos.

1️⃣ DU

Este comando es de los relativamente más básicos a la hora de utilizar GNU/Linux. Su nombre son las iniciales de disk usage, lo cual hace alusión a su propósito, que es medir el espacio de disco duro ocupado por un archivo, directorio o un conjunto de ellos.

En un pasado artículo ya hemos estudiado qué son los archivos informáticos, pero ¿qué hay de los directorios? [2]


Por fortuna, es algo fácil de entender, puesto que normalmente se les asocia a la idea de carpeta de archivos, y se sabe que de la misma manera como las carpetas físicas de papel contienen documentos dentro de ellas, los directorios son ‘contenedores virtuales’ de archivos y otros directorios (llamados 'subdirectorios').


No obstante, vale destacar que ‘directorio’ es el nombre estricto, ya que ‘carpeta de archivo’ es un concepto introducido por las ‘interfaces gráficas’ (lo contrario al modo texto), las cuales vienen a representar la información que está dentro de la computadora de una manera marcadamente visual para el usuario. Se aprovecha la analogía de las carpetas para ilustrar mejor el funcionamiento de los directorios.

Volviendo al comando du, a fin de lograr su cometido, este hace un recorrido ‘recursivo’ de los directorios, es decir, va visitando cada subdirectorio contenido en cada subdirectorio, tal como si fuese una persona visitando cada una de las oficinas de un edificio, pudiendo haber oficinas que den acceso a otras oficinas; la persona eventualmente las visita todas. De esta manera, el comando du hace el recorrido de los directorios y va obteniendo y sumando el tamaño de cada archivo que encuentra.

Una manera de evidenciar la utilidad de du en las unidades de disco duro repletas de información es detectando aquellos directorios que contienen archivos que ocupan mucho espacio (es decir, son ‘pesados’). En la imagen siguiente muestro un ejemplo de uso de este comando en mi computador, aplicándolo sobre un directorio llamado 'Aperturas' (de ajedrez) (véase imagen 1).

uso del comando du
⬆️ Imagen 1: ejemplo de uso del comando du. Autor: @Eniolw Licencia: CC BY-SA 4.0

Como se ve, al utilizar los parámetros b y h, he logrado mostrar el tamaño en megabytes de cada uno de los subdirectorios. Puede notarse que el directorio 'más pesado' es ./General, cuyos archivos contenidos suman en conjunto al menos 594 megabytes. Lógicamente, el comando es mucho más útil si se tiene que prescindir de las interfaces gráficas, aunque también he creado algunos interesantes scripts de Shell con él.

2️⃣ TAR

Al igual que du, este también es un comando estándar que viene incorporado en los sistemas operativo tipo UNIX. Sirve para generar archivos empaquetados. Pero ¿qué significa esto de empaquetar archivos?


En el contexto informático de manipulación de archivos, ‘empaquetar’ significa la capacidad de guardar en un único fichero todo un directorio con sus archivos y subdirectorios.


Haciendo analogía con nuestro mundo físico, es como si tomaran varias carpetas de papel repletas de documentos y se colocaran todas dentro de una caja, (se ‘empaquetan’), lo cual facilita su almacenamiento y portabilidad.

Entonces, el empaquetado sirve como un contenedor de información, tratando a todo un conjunto de archivos y directorios como si fuesen un único archivo, lo que facilita su almacenamiento y transmisión a través de una red como la Internet.

La diferencia del ‘empaquetado de archivos’ con respecto a la ‘compresión de archivos’ es que esta última posee un proceso adicional mediante el cual los datos son reorganizados internamente para hacer que el archivo sea más ligero, es decir, estén comprimidos. El empaquetado, por su parte, agrupa los ficheros, pero no los comprime.

Lo bueno del comando tar es que en muchos sistemas GNU/Linux soporta tanto el empaquetado como la compresión. Es cuestión de especificar qué operaciones se desean aplicar, usando los parámetros.

Tras estas operaciones con el programa tar, el archivo resultante es de formato y extensión también llamados tar. En la imagen siguiente se muestra un ejemplo de aplicación de este software de utilidad (véase imagen 2).

uso del comando tar
⬆️ Imagen 2: ejemplo de uso del comando tar. Autor: @Eniolw Licencia: CC BY-SA 4.0

En la imagen anterior puede notarse que se ha usado el comando tar dos veces. En la primera se usó para empaquetar y comprimir (parámetros c y z) a los directorios Scandinavian y Caro Kann, obteniendo el archivo empaquetado aperturasB.tar. Luego, se hace lo contrario: se descomprime y extrae ese archivo empaquetado (parámetros z y x).

3️⃣ MD5SUM y SHA256SUM

Estos comandos son útiles para verificar la integridad de los archivos mediante la comprobación de su hash. He aquí otro tecnicismo: ¿qué es esto de hash? Dado que es una palabra técnica que también aparece en el contexto de las blockchains, sería bueno saber a qué significa.


‘Hash’ es el nombre de una función computable y de una función criptográfica. Lo que esta función hace es básicamente tomar una cadena de valores de entrada y generar con ella una cadena de valores de salida de menor longitud, de tal manera que la salida sea un valor resumido y representativo de la entrada y su verificación sea fácil de calcular.


Es como si se hiciera el resumen de una cantidad limitada de palabras (100, 250, 400, etc.) de un libro, artículo o cualquier obra literaria. La entrada vendría siendo el escrito original, el extenso, mientras que la salida sería el resumen obtenido. Este último es representativo de la obra original, puesto que es muy improbable extraer dos resúmenes idénticos de dos obras distintas. Además, es fácil de comprobar con qué obra se correspondería dicho resumen.

Entonces, es casi el mismo principio que siguen las funciones hash de los comandos md5sum, sha256sum y otros programas. Con el valor de salida (llamado ‘resumen’ o ‘hash’) proveniente de un archivo se verifica la integridad de cada una de sus copias, es decir, que no contengan alteraciones y sean idénticas. El hash hace de huella digital para los archivos, por lo que es adecuado para saber si se está tratando con un archivo totalmente íntegro.

Esto tiene aplicación práctica cuando se descargan archivos de la Internet y se quiere comprobar si el archivo descargado es exactamente igual al archivo alojado en el servidor de donde se descargó. Muchos proveedores de descarga frecuentemente publican los hashes (MD5, SHA, etc.) de los ficheros alojados en sus servidores y esto ayuda a los clientes (usuarios y aplicaciones) a verificar que el archivo descargado no esté corrompido, bien sea por errores en la descarga o por alteración deliberada del archivo por parte de un atacante o malware.

A continuación, se muestra un ejemplo de uso del comando sha256sum en mi computador (véase imagen 3).

uso del comando md5sum
⬆️ Imagen 3: ejemplo de uso del comando sha256sum Autor: @Eniolw Licencia: CC BY-SA 4.0

Puede notarse que se está aplicando el programa sha256sum a un archivo que contiene una imagen ISO de una distribución GNU/Linux. Con ello, se desea comprobar que la ISO está adecuadamente descargada y no posee alteraciones (como códigos maliciosos). El hash generado posee una longitud de 64 caracteres (más extenso y seguro que el obtenido con md5sum) y es el que debe ser comparado con el código publicado en la página oficial desde donde se descargó esa imagen. Si al compararlo son iguales, el archivo está íntegro, sino, entonces está corrompido.

4️⃣ CURL

Para cerrar esta entrega, traigo a colación el comando curl, cuyo nombre significa 'Curl URL Request Library' (Biblioteca de peticiones URL Curl). Como puede notarse, se trata de un acrónimo recursivo, lo cual —como hemos comentado en otra ocasión— es un estilo tradicional de nombrar proyectos de software libre.

Como lo indica su nombre, curl sirve para hacer distintos tipos de 'peticiones' de transferencias de archivos a equipos remotos, utilizando una gran variedad de protocolos como HTTPS, FTP, SCP, Telnet, POP3, SMB y muchos más que probablemente no conozcas a la primera.

Los usos de este comando son más avanzados y están orientados principalmente a los usuarios desarrolladores de software, quienes lo suelen utilizar para la descarga de archivos, la comprobación de cabeceras, el acceso a equipos remotos, etc. Incluso, los desarrollares web suelen emplearlo para el trabajo con RESTFul APIs, el testing de conexiones, etc. Dado que el comando es también una biblioteca, se le puede usar como módulo, paquete o biblioteca (librería) dentro de distintos proyectos de software, lo cual permite desarrollar funcionalidades que emulen a un navegador web, entre otros centenares de usos.

A continuación, se muestra un ejemplo de uso de curl para probar un endpoint de la API del Sistema de Información sobre la Biodiversidad Mundial (GBIF, siglas en inglés), el cual —por cierto— fue cubierto por mí persona en un tema previo (véase imagen 4). [3]

uso del comando curl
⬆️ Imagen 4: ejemplo de uso del comando curl. Autor: @Eniolw Licencia: CC BY-SA 4.0

Como se puede observar, el comando curl hizo una petición a la URI http://api.gbif.org/v1/species/5231190 tal como si fuese un navegador web, e imprime en pantalla la respuesta en formato JSON. Esto es un caso de un testing de la API, el cual fue exitoso.


Con esto hemos llegado al final de esta entrega, habiendo abordado cuatro programas de la línea de comandos, algunos un tanto simples y otros más sofisticados, y habiendo introducido y clarificado algunos conceptos informáticos implicados, tales como los directorios, el empaquetado de archivos, el hash, entre otros. Aprender sobre cada uno de estos comandos pueden ameritar un tratamiento profundo, en especial el de comando curl que bien puede ser objeto de estudio en próximas publicaciones.

Si tienes alguna duda, comentario o aporte, no dudes en hacerlo saber en los comentarios. En particular, sería de mucho provecho para la discusión si también has tenido la oportunidad de experimentar con algunas de estas herramientas.

¡Nos vemos!


ALGUNAS REFERENCIAS

  • [1] @Eniolw (2018). Introducción a la interfaz de línea de comandos: un ensayo temático. Publicado en mi blog de Steemit.com
  • [2] @Eniolw (2018). Estudio de nociones informáticas en torno al formato de archivos e imágenes y la creación de imágenes animadas con el lenguaje de programación Python. Publicado en mi blog de Steemit.com
  • [3] @Eniolw (2018). La informática al rescate de la biología: Servicio de Información sobre la Biodiversidad Mundial (GBIF). Publicado en mi blog de Steemit.com
  • [4] Glosario de términos de Linux: intérprete de comandos. Artículo recuperado de archive.org.
  • [5] Man Pages (s/f). Comando curl. Disponible aquí
  • [6] Man Pages (s/f). Comando du. Disponible aquí
  • [7] Man Pages (s/f). Comando md5sum. Disponible aquí
  • [8] Man Pages (s/f). Comando sha256sum. Disponible aquí
  • [9] Man Pages (s/f). Comando tar. Disponible aquí

Si estás interesado en más temas sobre Ciencia, Tecnología, Ingeniería y Matemáticas (STEM, siglas en inglés), consulta las etiquetas #STEM-Espanol y #SteemSTEM, donde puedes encontrar más contenido de calidad y también hacer tus aportes. Puedes unirte al servidor de Discord de STEM-Espanol para participar aún más en nuestra comunidad y consultar los reportes semanales publicados por @STEM-Espanol.



Créditos: @IAmPhysical

Créditos: @Eniolw


NOTAS ACLARATORIAS

  • La imagen de pie es de @CarlosERP-2000 y @IAmPhysical y es de dominio público.
  • A menos que haya sido indicado lo contrario, las imágenes de esta publicación han sido elaboradas por el autor, lo que incluye la imagen de banner, creada con base en imágenes de dominio público.
imagen de pie
Sort:  

Fantástico Oniel...sos un genio en la programación...!!

Psdt: deberías ser el desarrollador de steemstem.io :D

Mil gracias, Carlos. Eso sería un honor! Saludos.


Colmena-Curie.jpg

¡Felicidades! Esta publicación obtuvo upvote y fue compartido por @la-colmena, un proyecto de Curación Manual para la comunidad hispana de Steemit que cuenta con el respaldo de @curie.

Si te gusta el trabajo que hacemos, te invitamos a darle tu voto a este comentario y a votar como testigo por Curie.

Si quieres saber más sobre nuestro proyecto, acompáñanos en Discord: La Colmena.


Oh, muy agradecido con ustedes, @la-colmena! Saludos.

Guao esto es sumamente pesado para mi jejeje siempre es admirable el potencial que tienen las personas que publican en stem-espanol y sobre tu qué te dedicas a este mundo tan pero tan complicado como la tecnología en diseño de programa o software..me cuesta mucho entender lo que expresas en tu post, pero algo que noto es el gran trabajo que le dedicas a esto bastante minucioso y detallista felicidades @eniolw

Gracias, Dra. Ana. Eso siempre pasa en una comunidad tan diversa como la nuestra. Aprendemos de todo un poco. Saludos y gracias por su apreciación!

Saludos amigo @eniolw. Reconozco que la programación no es un área atractiva para mí pero explicas muy bien el uso de estos comandos, estaré atento a otras entregas para aprender un poco del lenguaje de programación.

Hola, Emilio. Está bien, continuaré ofreciendo más entregas. Gracias por leer y comentar. Saludos!

Este post fue compartido en el canal #spanish-curation de la comunidad de curación Curation Collective y obtuvo upvote y resteem por la cuenta de la comunidad @c-squared después de su curación manual.
This post was shared in the #spanish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.

Muchas gracias por el apoyo! Saludos :D

Excelente mi estimado eniolw... Siempre apoyo y aprendo de tus contenidos. Un abrazo desde Barquisimeto 😎

Muchas gracias, @yrmaleza :D
Saludos!





This post has been voted on by the SteemSTEM curation team and voting trail in collaboration with @utopian-io and @curie.

If you appreciate the work we are doing then consider voting all three projects for witness by selecting stem.witness, utopian-io and curie!

For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!

Excelente serie de post's para aprender a programar mi estimado @eniolw. Saludos.

Gracias, estimado @djredimi2! Efectivamente, la línea de comandos puede muy útil a la hora de programar con varios lenguaje de programación.

Hi @eniolw!

Your post was upvoted by Utopian.io in cooperation with @steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Congratulations @eniolw! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 1750 upvotes. Your next target is to reach 2000 upvotes.

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemFest³ - SteemitBoard Contest Teaser
The new Steemfest³ Award is ready!

Support SteemitBoard's project! Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.31
TRX 0.12
JST 0.033
BTC 64605.91
ETH 3159.61
USDT 1.00
SBD 4.11