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

in spanish •  6 years ago  (edited)
https://i.postimg.cc/gjMcsTFZ/banner-shell.png

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


Por Enio...


Aunque usted —estimado lector— tal vez no sea un usuario informático avanzado, puede que en alguna u otra ocasión haya visto en su propia computadora o la de alguien más, una pantalla o ventana oscura donde se refleja un cursor permanentemente titilando, como a la espera de algún evento, y aún si no lo ha presenciado en alguna computadora cercana, probablemente sí lo ha visto en la escena de alguna película. Dicha pantalla puede lucir como se muestra a continuación (véase imagen 1).

ejemplo de interfaz de línea de comandos a través de una aplicación terminal
⬆️ Imagen 1: ejemplo de interfaz de línea de comandos a través de una aplicación terminal. Autor: Giorgi Gzirishvili Licencia: CC BY-SA 4.0


La pantalla retratada en la imagen no es más que la interfaz de línea de comandos, también conocida como CLI (siglas en inglés de Command Line Interface) y como modo texto, aunque de manera más informal (e imprecisa) se le suele decir símplemente ‘terminal’ o ‘consola’.

Esta interfaz que integra la computadora es comúnmente frecuentada por los usuarios informáticos avanzados, como los programadores, técnicos, administradores de sistemas y otros, aunque también hay usuarios generales que han podido aventurarse a utilizar esta interfaz, ocasionalmente. No obstante, su uso frecuente por lo general está prácticamente reducido a los usuarios expertos, algunas veces etiquetados como ‘frikis’ cuando pasan mucho tiempo manipulándola o si desarrollan un gusto por esta experiencia de uso.

En este ensayo, examinaremos qué es esta interfaz y analizaremos qué conceptos están relacionados a ella, a fin de promover el uso de la terminología correcta. También comentaremos la sutil vinculación que tiene esta interfaz con el quehacer científico y tecnológico, y también veremos algunos potentes usos que puede tener y que personalmente encuentro interesantes.

I - Un breve paseo inicial

La interfaz de línea de comandos es una modalidad de interacción provista por la computadora para que el usuario se comunique con ella y la controle, pero no de manera gráfica, sino de manera puramente textual, de allí lo de modo texto. En otras palabras, es un método para acceder al sistema operativo en el cual, los datos y “comandos” (input) se ingresan a través del teclado y las respuestas (output) se reciben en forma de texto.

Se dice que es en modo texto ya que prescinde de toda interfaz gráfica, es decir, de los escritorios, ventanas, menús, barras, botones, campos de texto, íconos y todos estos elementos gráficos normales en casi todos los sistemas operativos que popularmente se conocen. Las primeras computadoras no poseían interfaz gráfica, sino una interfaz basada exclusivamente en texto, por lo que todas las indicaciones del usuario a la computadora tenían que ser pacientemente tecleadas, pues no había cursor de ratón (mouse).

Con su aspecto compuesto exclusivamente de caracteres y usualmente monocromático, la línea de comandos es visualmente minimalista pero sumamente poderosa a la hora de controlar el computador (u ‘ordenador’, como dicen los estimados españoles). Como se mostrará más adelante, esta línea de comandos puede administrar el sistema completamente, controlar otros equipos remotamente, navegar por internet, reproducir música y muchas cosas que cualquiera creería que sólo tienen sentido en el modo gráfico.

De hecho, aunque hoy día las computadoras de escritorio, dispositivos móviles y toda suerte de equipos posean onmipresentemente una interfaz gráfica, la mayoría de los sistemas operativos todavía incorporan la posibilidad de acceder al modo texto o están equipados con programas emuladores, precisamente porque hay órdenes que se expresan más eficientemente bajo esta modalidad y existen situaciones técnicas que justifican su inclusión.

De este modo, la interfaz de línea de comandos posee implementaciones considerablemente populares y desarrolladas en los sistemas UNIX-like, tales como GNU/Linux, FreeBSD y macOS, especialmente en el primero de los mencionados, en el cual goza de un marcado protagonismo, con capacidad para ahondarse en los más mínimos detalles de configuración. Los usuarios que adoptan GNU/Linux eventualmente tienen que aprender a utilizar su intérprete de comandos, lo cual por una parte es positivo, ya que incrementan sus competencias técnicas.

En Microsoft Windows también existe la línea de comandos, pero se suele asegurar que su implementación es menos versátil y apenas usada en comparación con la de los sistemas UNIX-like. De hecho, su uso en Windows frecuentemente se limita para efectos de recuperación del sistema. Algunos argumentan que “después de todo, Windows al ser dominante en el escritorio, está más que todo orientado al usuario final, quien adora y necesita lo gráfico”, a lo que otros replican: “pero macOS también está muy orientado al usuario promedio y aún así incorpora una poderosa línea de comandos”. ¿Una debilidad de Windows? La discusión está abierta.

II - Aclarando terminologías: interfaz, intérprete, terminal, consola y demás

Ahora bien, es importante dejar claro que cuando se usa la línea de comandos lo que ocurre internamente es que se interactúa con un programa cuya categoría se llama intérprete de línea de comandos, el cual se corresponde con una capa del sistema operativo que es la que remite las órdenes al kernel (núcleo del sistema) y obtiene resultados de él. Por ello, también se conoce como ‘Shell’ (caparazón, cáscara), en el sentido de que es una capa que envuelve al kernel, tal como una cáscara envuelve el hueso de la fruta.

Ejemplos de shells o intérpretes de comandos son command.com del ya extinto MS-DOS, cmd (conocido más sencillamente como ‘símbolo de sistema’) para sistemas basados en el kernel Windows NT; ksh del histórico sistema UNIX; Bash, una versión libre de Bourne Shell, adoptado por GNU/Linux y macOS, entre otros.

La interfaz de línea de comandos hace referencia, por tanto, al método o modo de comunicación usuario-computadora (contrapuesto al modo gráfico) y se lleva a la práctica a través de un intérprete de línea de comandos (Shell), que sería el componente del sistema operativo que desempeña las tareas necesarias para implementar la comunicación usuario-máquina, variando el intérprete en función del sistema operativo en particular.

Por su parte, terminal y cónsola son dos conceptos clave más que hay que conocer y diferenciar entre ellos y también con respecto a los conceptos ya vistos de ‘interfaz’ e ‘intérprete’. Muchos usuarios le dicen ‘terminal’ o ‘cónsola’ a la interfaz de línea de comandos o a su intérprete y, en ocasiones, ello es válido aunque de una manera menos estricta. En parte, esto se debe al hecho de que con el transcurrir del tiempo, los términos cambian de significado. Para entender la distinción, vale la pena hacer algo de retrospectiva.

La palabra ‘terminal’ se remonta a la época de antaño en la que el modelo de servicios de computación imperante era el de mainframe, esto es, una gran computadora centralizada a las cual se conectaban muchos usuarios simultáneamente. Eran muy comunes en universidades y grandes empresas. En este modelo, los usuarios se conectaban al mainframe a través de ‘terminales’, que constituían su medio físico de acceso al computador central.

En este contexto, las terminales eran, por tanto, nodos o estaciones de trabajo de una red. No eran computadoras independientes como las actuales (computador personal), sino un dispositivo dependiente de algún mainframe y consistía mayormente en un teclado y una pantalla o impresora. La interfaz mostrada por estos dispositivos era lo que se llamaba consola (console), que era completamente textual. Entonces, lo que estrictamente ocurría era que el usuario operaba su sesión en el mainframe a través de su terminal física, usando la consola (véase imagen 2).

terminales de antaño
⬆️ Imagen 2: composición con diferentes modelos de antiguas terminales. Autor: @Eniolw con base en las imágenes de Alves Dominic (fuente), Oscar.nierstrasz (fuente) y Wtshymanski (fuente) Licencia: CC BY-SA 4.0


Posteriormente, apareció la terminal virtual o consola virtual, que básicamente es un programa que, asemejando una terminal física antigua y su consola, se conecta a un computador remoto o local, trabajando una sesión en él. Esta es la idea modificada y heredada hasta la actualidad. Por eso, es común encontrar programas en GNU/Linux llamados ‘terminal’, los cuales implementan el modo texto dentro del modo gráfico, embebiendo antiguos y nuevos conceptos a manera de simulación. Emulan una terminal antigua y su consola.

III – Del qué tiene que ver con la ciencia y la tecnología

Habiendo aceptado el hecho de que el uso del intérprete de comandos puede ser referirse como "abrir una Shell, terminal o consola”, concentrémonos ahora en justificar qué tiene que ver esto con la ciencia y la tecnología. Bueno, la segunda de las nombradas está más que sobreentendida, puesto que la interfaz, sus intérpretes y emuladores de terminal son recursos de tecnología de información.

En este contexto, la línea de comandos es sumamente importante para administrar sistemas operativos de servidores, y todos sabemos que los servidores son esenciales para ofrecer la mayoría de los servicios de la Internet. Las populares distribuciones de GNU/Linux tales como Ubuntu Server, Debian Server, Red Hat Enterprise Linux Server, etc. dominan este mercado, y todas ellas pueden prescindir por completo de la interfaz gráfica, sin ser por ello inusables. También, la línea de comandos se utiliza en la supercomputación.

Otra razón técnica de peso es que la línea de comandos es muy productiva en el desarrollo de software, puesto que proporciona un mayor control sobre el sistema operativo, ofrece una intelegibilidad estándar entre las distintas distribuciones (que a pesar de diversas, aún se tiene la certeza de que pueden controlarse uniformemente a base de comandos), facilita el desarrollo backend, permite usar un software de control de versiones como Git, etc.

Los beneficios técnicos todavía abundan. La interfaz de texto posee la gran flexibilidad que aporta la notación de comandos, la cual goza de toda la potencia expresiva de los lenguajes de programación. Con esta cualidad, los comandos se pueden agrupar a manera de scripts, pudiendo ejecutar tareas por lotes, lo que a su vez puede ser aprovechado para la optimización y automatización de labores y la personalización de funciones (shell scripting). Esta ilimitada expresividad está sensiblemente ausente en las interfaces gráficas, puesto que la facilidad de uso que estas ofrecen al usuario se traduce en un set de instrucciones de programación delimitadas y muy específicas.

El intérprete de comandos suele ser el medio por excelencia para lenguajes de programación que posean sesiones interactivas o que están estrechamente vinculados al Shell, tales como Python, un lenguaje de programación que, como hemos visto en ocasiones anteriores, también es uno de los preferidos por científicos e ingenieros para sus labores profesionales y de investigación.

Esto a su vez recuerda que en la enseñanza de la computación (como ciencia e ingeniería), se suele utilizar también el intérprete de comandos y la terminal del sistema operativo para escribir programas, probarlos y depurarlos. Pasa mucho con los lenguajes C y C++ que hoy día en Venezuela, aún suelen ser los favoritos en el currículo de carreras relacionadas con la computación, aunque se sabe que también se utilizan Python y otros lenguajes en la enseñanza.

IV - El puntual caso de uso de mi línea de comandos

Para dejar de ser abstractos, mostraré tres aplicaciones o ‘comandos’ de la Shell que personalmente he encontrado interesantes y útiles, aunque no necesariamente exóticos o demasiados curiosos (que desde luego los hay y se requerirían 'enciclopedias' de posts para completarlos 😄). Debo aclarar que los comandos utilizados son válidos para GNU/Linux, el sistema operativo que yo uso, y se insertan para ilustrar parte de lo aquí planteado.

1️⃣ FIND

Esta es una muy poderosa utilidad integrada en los sistemas UNIX-Like. Sirve para hacer todo tipo de búsquedas sobre el sistema de archivos a nivel de ficheros y directorios. Es una alternativa a la misma función de búsqueda a través de Nemo, Nautilus o cualquier otro navegador de archivos en modo gráfico. Por mi experiencia puedo decir que el comando find es más rápido, sobre todo cuando la cantidad de directorios y archivos es muy grande.

Aunque parezca complicado usarlo, con la pŕactica deja de serlo. Puede hacer la búsqueda tomando varios parámetros de entrada, como -name (buscar por nombre), -type (para especificar la búsqueda de archivos o directorios), -perm (para obtener resultados en función de ciertos permisos que posean), -time (para hacer búsquedas minuciosas en función del tiempo de modificación que tienen los archivos). Incluso, otros comandos pueden anidarse a find con el parámetro -exec, lo que le da una potencia increíble a la utilidad.

En la siguiente imagen, he realizado una consulta en mi directorio personal para buscar archivos que contengan partidas de ajedrez (formato PGN), especificando aquellas que han sido accedidas en un lapso no mayor a 30 días, que es cuando tenía certeza de que accedí a las partidas de un determinado jugador, cuyo nombre no recordaba. De tal manera, con esa información mínima puedo añadir parámetros con los criterios de búsqueda al comando find. Los resultados se muestran a continuación (véase imagen 3).


⬆️ Imagen 3: ubicando archivos con el comando find. Autor: @Eniolw Licencia: CC BY 3.0


2️⃣ TREE

Este comando es muy práctico para listar los archivos y directorios del sistema de archivos de manera jerárquica y mejor organizada que como los presenta el comando ls. En realidad, es un comando muy básico, pero puede ser muy útil cuando se accede a un escritorio remoto en modo texto (a través del poderoso comando ssh, que trabajaremos en el futuro). En estas circunstancias, al no poseer interfaz gráfica, es más conveniente tener a la mano este directorio para mejorar la presentación de la información textual. La imagen siguiente muestra un ejemplo de su uso (véase imagen 4).


⬆️ Imagen 4: listado jerárquicamente directorios con tree. Autor: @Eniolw Licencia: CC BY 3.0


3️⃣ LYNX

Este sí es verdaderamente un programa que resultaría bastante curioso para la mayoría de los usuarios, y lo he seleccionado para mostrar la versatilidad de la línea de comandos. Es un navegador web que funciona por completo en modo texto. Para el usuario final promedio esto debe ser extraño, en especial si tiene como antecedentes en la experiencia de uso a navegadores como Firefox, Chrome, Opera y otros que son eminentemente gráficos y muy modernos.

No obstante, antes del surgimiento de la Internet como la conocemos actualmente, las grandes redes precursoras se hacían accesibles a través de programas en modo texto, por lo que este tipo de software era muy común aquellos días. Incluso, tras la irrupción de la Internet en la década de los 90, aún se desarrollaban y usaban algunos navegadores CLI tales como Line Mode Browser.

Pero eso es tema para otro post. El comando lynx, además de contar con varios parámetros personalizables, ejecuta el navegador de manera interactiva, lo que hace muy fácil su uso. Este navegador ha probado ser bastante útil para situaciones excepcionales como conexiones lentas y ahorro de datos, y otras como escritorios remotos, web scraping y demás proyectos de software. Seguidamente se insertan ejemplos de ejecución del navegador (véanse imágenes 5 y 6).



⬆️ Imágenes 5 y 6: usando lynx para navegar por internet. Nótese que visitamos la página de Google.com (imagen 5) y también ¡mi blog en Steemit! (imagen 6) Autor: @Eniolw Licencia: CC BY 3.0


Con estos ejemplos concluyo este artículo, habiendo abordado qué es la interfaz de línea de comandos y los conceptos relacionados, haciendo demostración de su utilización y destacando su importancia para la ciencia y la tecnología. También se han dejando abiertas muchas cuestiones sugeridas a lo largo del artículo, lo cual es fuente de inspiración para futuras discusiones. Si tienes alguna duda sobre el contenido o algún aporte o anécdota sobre la línea de comandos, no dudes en participar con tus comentarios.


ALGUNAS REFERENCIAS

  • Glosario de términos de Linux: intérprete de comandos. Artículo recuperado de archive.org.
  • @Eniolw (2018). Python científico: argumentos e hipótesis para su adopción en la ciencia y la tecnología. Publicado en mi blog de Steemit.com
  • Man Pages (s/f). Comando find. Disponible aquí
  • Man Pages (s/f). Comando lynx. 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
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Tu post me hizo recordar bastante, tuve que usar ubuntu durante un tiempo hace algunos años y aprendí lo básico de la interfaz de línea de comandos, el comando find era uno de los que mas usaba porque tenía un desastre con los archivos y ahí se me hacia muy fácil conseguirlos.

Oh, me alegra que hayas compartido esa experiencia aquí! Qué casualidad que se parece mucho a lo tratado, jeje. Espero aún uses Ubuntu de vez en cuando. Saludos!

Utilizar un discurso técnico y a la vez accesible no es común y tú lo lograste, y el contenido es algo que en estos tiempos nos compete a todos, gracias por enseñarnos algo nuevo.

Gracias por su apreciación, Dra. @IvyMalifred. Saludos!

Excelente.

Muy buen articulo amigo cabe destacar que casi todos los programas tienen una interface de comandos, algunos juegos tienen esta interface incorporada para dar habilidades o poderes al jugador, incluso windows trae su propio interprete de comandos, es muy amplio el tema y no solo se ve en sistemas Linux y sus descendientes, me habria gustado que mencionaras otras aplicaciones de las interfaces en otros sistemas, espero verlo en otra oportunidad, gracias por compartir.

Umm, sí, esos serían otros tipos de interfaces de comando. Windows también trae su línea de comandos, le mencioné en el artículo ;) Gracias por leer y compartir tu sincera opinión

Saludos amigo @eniolw. Se trata de un post nutrido en contenido y calidad informativa.

Felicitaciones por el excelente aporte.

Gracias @ulisesfl17!





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!

Thank you! :D

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

Award for the number of comments
Award for the number of comments received

Click on the badge 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:

SteemitBoard Ranking update - Resteem and Resteemed added

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

Thanks!

👍

Excelente publicación, yo perdí la práctica con la interfaz de comandos desde hace mucho, a pesar de haber iniciado con DOS y haber tenido cierta experiencia con UNIX en la universidad, la verdad que desde hace tiempo que no la uso si no para muy pocas cosas y como no he tenido mucha interacción con LINUX no lo he requerido, digamos que es uno de esos aprendizajes que tengo pendiente.

Oye, buenas anéctodas. Yo también usé MS-DOS hace unos años, UNIX no, jeje. Si algún día llegas a incursionar en GNU/Linux, seguro te será útil la terminal.

Fijate mi amigo que el dicho es muy cierto "zapatero a su zapato" jejejeje yo si me he percatado de esa pantalla que aparece en la computadora pero no le tomaba la importancia en realidad, pero leyendo tu post me parece interesante lo que ella significa y su funcion

Excelente hermano! Un abrazo grande!!

Me alegra, @ErickYoussif. Gracias!

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

Award for the number of upvotes received

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:

SteemitBoard Ranking update - Resteem and Resteemed added

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

Thanks!

Just sublime, friend.

Thanks! :D

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

You made more than 1500 upvotes. Your next target is to reach 1750 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:

SteemitBoard notifications improved

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

👏🏼👏🏼

Muy buen trabajo estimado @eniolw, de mucha pertinencia para tener un acercamiento al maravilloso mundo de la programación. Felicidades @eniolw, saludos!

Gracias estimado @EliasChess333. Sí, de la línea de comandos a la programación hay muy pocos saltos. Gracias por visitar mi blog. Saludos!

Excelente artículo el que presentas mi amigo @eniolw, disfruté leerlo. Gracias por compartirlo. Saludos.

Gracias, profesor @tsoldovieri! Reciba un cordial saludo.