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

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@eniolw·
0.000 HBD
💻🔲 Introducción a la interfaz de línea de comandos: un ensayo temático (parte 2)
<div class="text-center"><img src="https://i.postimg.cc/MK9JkhYs/banner-shell.png" alt="banner para el artículo"></div>

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

<div class="pull-right"><p><br><i>Por Enio...</i></p></div>
<div>&#8291;</div>
<p><br></p>

<div class="text-justify">
<p>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. <sup>[1]</sup></p>

<p>Continuaré en esta ocasión con más demostraciones de uso de la <i>Shell</i>, presentando algunos comandos que resultan ser prácticos para aquellos desarrolladores de software que habitualmente utilizan la terminal de los sistemas <i>UNIX-like</i>, 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.</p>

<p>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.</p>

<p>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. <sup>[5] [6] [7] [8]</sup> 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.</p>

<p>Espero este <i>post</i> sea de su agrado. Comencemos.</p>


<h3>1️⃣ DU</h3>

<p>Este comando es de los relativamente más básicos a la hora de utilizar GNU/Linux. Su nombre son las iniciales de <i>disk usage</i>, 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.</p>

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

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

<p>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.</p>

<p>Volviendo al comando <code>du</code>, a fin de lograr su cometido, este hace un recorrido ‘recursivo’ de los directorios, es decir, <b>va visitando cada subdirectorio contenido en cada subdirectorio</b>, 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 <code>du</code> hace el recorrido de los directorios y va obteniendo y sumando el tamaño de cada archivo que encuentra.</p>

<p>Una manera de evidenciar la utilidad de <code>du</code> 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).</p>
</div>

<div class="text-center"><img src="https://i.postimg.cc/285gx17y/f1.png" alt="uso del comando du">
<br><sup><b>⬆️ Imagen 1:</b> ejemplo de uso del comando <code>du</code>. <b>Autor:</b> @Eniolw <b>Licencia:</b> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></sup></div>

<div class="text-justify">

<p>Como se ve, al utilizar los parámetros <code>b</code> y <code>h</code>, he logrado mostrar el tamaño en <i>megabytes</i> de cada uno de los subdirectorios. Puede notarse que el directorio 'más pesado' es <code>./General</code>, cuyos archivos contenidos suman en conjunto al menos 594 <i>megabytes</i>. 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 <i>scripts</i> de <i>Shell</i> con él.</p>

<h3>2️⃣ TAR</h3>

<p>Al igual que <code>du</code>, 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?</p>

<hr>
<p><em>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.</em></p>
<hr>

<p>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.</p>

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

<p>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.</p>

<p>Lo bueno del comando <code>tar</code> 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.</p>

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

<div class="text-center"><img src="https://i.postimg.cc/022hCVq7/2f.png" alt="uso del comando tar">
<br><sup><b>⬆️ Imagen 2:</b> ejemplo de uso del comando <code>tar</code>. <b>Autor:</b> @Eniolw <b>Licencia:</b> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></sup></div>

<div class="text-justify">

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

<h3>3️⃣ MD5SUM y SHA256SUM</h3>

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

<hr>
<p><em><i>‘Hash’</i> 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.</em></p>
<hr>

<p>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.</p>

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

<p>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 <i>hashes</i> (<i>MD5</i>, <i>SHA</i>, 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 <i>malware</i>.</p>

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

<div class="text-center"><img src="https://i.postimg.cc/J46vYj1v/tsha.png" alt="uso del comando md5sum">
<br><sup><b>⬆️ Imagen 3:</b> ejemplo de uso del comando <code>sha256sum</code> <b>Autor:</b> @Eniolw <b>Licencia:</b> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></sup></div>

<div class="text-justify">

<p>Puede notarse que se está aplicando el programa <code>sha256sum</code> 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 <i>hash</i> generado posee una longitud de 64 caracteres (más extenso y seguro que el obtenido con <code>md5sum</code>) 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.</p>

<h3>4️⃣ CURL</h3>

<p>Para cerrar esta entrega, traigo a colación el comando <code>curl</code>, cuyo nombre significa '<i><b>C</b>url <b>U</b>RL <b>R</b>equest <b>L</b>ibrary</i>' (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.</p>

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

<p>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 <i>web</i> suelen emplearlo para el trabajo con <i>RESTFul APIs</i>, el <i>testing</i> 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 <i>web</i>, entre otros centenares de usos.</p>

<p>A continuación, se muestra un ejemplo de uso de <code>curl</code> para probar un <i>endpoint</i> 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). <sup>[3]</sup></p>

</div>

<div class="text-center"><img src="https://i.postimg.cc/NfPSCQd4/s5.png" alt="uso del comando curl">
<br><sup><b>⬆️ Imagen 4:</b> ejemplo de uso del comando <code>curl</code>. <b>Autor:</b> @Eniolw <b>Licencia:</b> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></sup></div>

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

<hr>

<p>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 <i>hash</i>, entre otros. Aprender sobre cada uno de estos comandos pueden ameritar un tratamiento profundo, en especial el de comando <code>curl</code> que bien puede ser objeto de estudio en próximas publicaciones.</p>

<p>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.</p>

<p>¡Nos vemos!</p>
</div>

<hr>
<p><b>ALGUNAS REFERENCIAS</b></p>
<ul>
<li>[1] @Eniolw (2018). Introducción a la interfaz de línea de comandos: un ensayo temático. Publicado en mi <i>blog</i> de <a href="https://steemit.com/spanish/@eniolw/introduciendo-a-la-interfaz-de-linea-de-comandos-un-ensayo-tematico">Steemit.com</a></li>
<li>[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 <i>blog</i> de <a href="https://steemit.com/steemstem/@eniolw/estudio-de-nociones-informaticas-en-torno-al-formato-de-archivos-e-imagenes-y-la-creacion-de-imagenes-animadas-con-el-lenguaje">Steemit.com</a></li>
<li>[3] @Eniolw (2018). La informática al rescate de la biología: Servicio de Información sobre la Biodiversidad Mundial (GBIF). Publicado en mi <i>blog</i> de <a href="https://steemit.com/stem-espanol/@eniolw/la-informatica-al-rescate-de-la-biologia-servicio-de-informacion-sobre-la-biodiversidad-mundial-gbif">Steemit.com</a></li>
<li>[4] Glosario de términos de Linux: intérprete de comandos. Artículo recuperado de <a href="http://www.linux10.com.ar/Glosario/terminos/interprete_de_comandos.htm">archive.org</a>.</li>
<li>[5] <i>Man Pages</i> (s/f). Comando <i>curl</i>. Disponible <a href="https://linux.die.net/man/1/curl">aquí</a></li>
<li>[6] <i>Man Pages</i> (s/f). Comando <i>du</i>. Disponible <a href="https://linux.die.net/man/1/du">aquí</a></li>
<li>[7] <i>Man Pages</i> (s/f). Comando <i>md5sum</i>. Disponible <a href="https://linux.die.net/man/1/md5sum">aquí</a></li>
<li>[8] <i>Man Pages</i> (s/f). Comando <i>sha256sum</i>. Disponible <a href="https://linux.die.net/man/1/sha256sum">aquí</a></li>
<li>[9] <i>Man Pages</i> (s/f). Comando <i>tar</i>. Disponible <a href="https://linux.die.net/man/1/tar">aquí</a></li>
</ul>

<hr>
<div class="text-justify"><p><em>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 <a href="https://discord.gg/bw6aH9W">servidor de Discord</a> de STEM-Espanol para participar aún más en nuestra comunidad y consultar los reportes semanales publicados por @STEM-Espanol.</em></p></div>

<hr>
<div class="text-center"><img src="https://steemitimages.com/0x0/https://i.imgur.com/Mlgwrhf.jpg">
<br><sup><b>Créditos:</b> @IAmPhysical</sup></div>

<div class="text-center"><img src="https://i.postimg.cc/xCf7bHT4/logo-con-base1.png">
<br><sup><b>Créditos:</b> @Eniolw</sup></div></div>

<hr>
<p><br><b>NOTAS ACLARATORIAS</b></p>
<ul>
<li>La imagen de pie es de @CarlosERP-2000 y @IAmPhysical y es de dominio público.</li>
<li>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 <i>banner</i>, creada con base en imágenes de dominio público.</li>
</ul>
<div class="text-center"><img src="https://steemitimages.com/0x0/http://i.picasion.com/pic87/f6171e50de4ba9ae17c018b092dc3b1d.gif" alt="imagen de pie"></div>
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,