{"id":30531,"date":"2019-10-31T21:36:03","date_gmt":"2019-10-31T18:36:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/termux-shag-za-shagom-chast-2\/"},"modified":"2019-10-31T21:36:03","modified_gmt":"2019-10-31T18:36:03","slug":"termux-shag-za-shagom-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux paso a paso (Parte 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>En <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">en la parte anterior<\/a><\/noindex> Hemos aprendido sobre los comandos b\u00e1sicos de Termux, configurado una conexi\u00f3n SSH con el PC, aprendido a crear alias y instalado algunas utilidades \u00fatiles. Esta vez vamos a dar un paso m\u00e1s all\u00e1, y haremos lo siguiente:<\/p>\n<p><\/p>\n<ul>\n<li>vamos a aprender sobre Termux:API<\/li>\n<li>installaremos Python y nano, y tambi\u00e9n escribiremos '\u00a1Hola, mundo!' en Python<\/li>\n<li>aprenderemos sobre scripts bash y escribiremos un script utilizando Termux:API<\/li>\n<li>usando un script bash, Termux:API y Python, escribiremos un programa simple <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Dado que ahora entendemos lo que hacen los comandos que ingresamos, en el siguiente paso no detallar\u00e9 tanto cada acci\u00f3n, pero donde haya posibles dificultades, explicar\u00e9 sin falta.<\/p>\n<p><\/p>\n<p>A menudo utilizo alias, por lo que los atajos utilizados en esta secci\u00f3n est\u00e1n indicados aqu\u00ed:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias updg='apt update &amp;&amp; apt upgrade'\nalias py='python'<\/code><\/pre>\n<p><\/p>\n<p>\u00a1El plan est\u00e1 listo, podemos empezar! Y, por supuesto, no olvides el 'm\u00e1gico Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Ver Parte 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Paso 4<\/h2>\n<p><\/p>\n<h3>Sumergi\u00e9ndonos en el mundo de Termux:API<\/h3>\n<p><\/p>\n<p><i>API, cu\u00e1ntas cosas se han unido en este t\u00e9rmino para el coraz\u00f3n de un coder<\/i><\/p>\n<p><\/p>\n<p>Si no habl\u00e1ramos de Termux:API, podr\u00edamos resumir todos nuestros pasos en un simple resumen de alg\u00fan tipo de folleto como 'Linux para principiantes', como se ha se\u00f1alado acertadamente en los comentarios de la primera parte.<\/p>\n<p><\/p>\n<p>Primero, instalaremos Termux:API desde Google Play Market (despu\u00e9s, reiniciar Termux no har\u00e1 da\u00f1o):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Luego necesitamos instalar el paquete API en la consola de Termux:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # No olvidemos los alias\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Para experimentos, estoy utilizando Android 5.1.1. Para los propietarios de Android 7, es necesario \"proteger\" Termux: API yendo a 'Configuraciones' &gt; 'Aplicaciones protegidas'; de lo contrario, las llamadas a la API, como <code>termux-battery-status<\/code>, se bloquear\u00e1n. (Ver <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki del proyecto<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Ahora vale la pena conocer m\u00e1s de cerca las capacidades adquiridas. La descripci\u00f3n m\u00e1s reciente y detallada de Termux:API se puede encontrar en <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki del proyecto<\/a><\/noindex>. Yo tratar\u00e9 de seleccionar lo m\u00e1s visual e interesante para que se familiaricen y puedan trabajar de forma independiente en el futuro.<\/p>\n<p><\/p>\n<h3>Algunos ejemplos de Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nDevuelve el estado de la bater\u00eda<br \/>\n<img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nEstablece el brillo de la pantalla de 0 a 255<br \/>\n<img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nMuestra una notificaci\u00f3n emergente temporal<br \/>\n<img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nActiva la linterna<br \/>\n<img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nDevuelve informaci\u00f3n sobre el \u00faltimo escaneo de redes Wi-Fi<br \/>\n<img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>No es dif\u00edcil notar que los valores devueltos son cadenas, diccionarios, listas de diccionarios, en general, tipos de datos con los que Python trabaja a la perfecci\u00f3n, por lo que el siguiente paso es instalarlo.<\/p>\n<p><\/p>\n<h2>Paso 5<\/h2>\n<p><\/p>\n<h3>Instalaremos Python y nano<\/h3>\n<p><\/p>\n<p>Para instalar Python, escribimos en la terminal:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Ahora tenemos instalado Python 2 y 3.<\/p>\n<p><\/p>\n<p>Mientras trabajaba en el art\u00edculo, descubr\u00ed otro editor de texto, nano, que me gust\u00f3 m\u00e1s que vim, as\u00ed que lo instalemos:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Es m\u00e1s f\u00e1cil de usar que vim, y nano tiene una interfaz m\u00e1s amigable. <i>En un dispositivo Android, sin embargo, es m\u00e1s conveniente usar vim.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld en Python en Termux<\/h3>\n<p><\/p>\n<p>En gran parte, se podr\u00eda haber prescindido de este paso, pero instalar Python en Termux y no escribir HelloWorld, en mi opini\u00f3n, es un error.<\/p>\n<p><\/p>\n<p>No tengo la intenci\u00f3n de ense\u00f1ar Python a nadie, as\u00ed que aquellos que no lo conocen pueden simplemente copiar el c\u00f3digo (o empezar a aprender por su cuenta, hay mucha literatura disponible), y aquellos que ya saben pueden crear algo por su cuenta. Y 'de paso' tambi\u00e9n mostrar\u00e9 c\u00f3mo ingresar texto en la terminal sin un editor.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Si no se especifica la fuente (recuerden cat 1.txt &gt; 2.txt)\n# entonces cat tomar\u00e1 datos de la entrada est\u00e1ndar,\n# en otras palabras, lo que se escribe en el teclado.\n\nstr = 'Hello, world!' # asignamos a la variable str el valor \"Hello, world!\"\nprint (str) # mostramos en pantalla el valor de la variable str\n\n# Ctrl + D para terminar la entrada y guardar el archivo (hello-world.py)\n\npy hello-world.py # ejecutamos el archivo (py es un alias de python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si durante la entrada no notas un error y ya has presionado Enter, no podr\u00e1s volver a la l\u00ednea anterior, por lo que tendr\u00e1s que terminar la entrada presionando Ctrl + D (puedes cancelar por completo con Ctrl + Z) y repetir todo desde el principio. Dado que usamos '&gt;', el archivo se sobrescribir\u00e1 completamente. Por esta raz\u00f3n, no recomiendo usar este m\u00e9todo de entrada si no est\u00e1s seguro de que escribir\u00e1s el c\u00f3digo sin errores desde el principio.<\/p>\n<p><\/p>\n<h2>Paso 6<\/h2>\n<p><\/p>\n<h3>Scripts de Bash<\/h3>\n<p><\/p>\n<p>Los scripts de Bash son una manera maravillosa de automatizar el trabajo en la terminal. Un script es un archivo con la extensi\u00f3n .sh (la extensi\u00f3n no es obligatoria) que contiene un conjunto de comandos de la terminal, algunos de los cuales ya hemos estudiado. Aqu\u00ed est\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">la lista de la mayor\u00eda de los comandos<\/a><\/noindex>, todo deber\u00eda funcionar, pero ten en cuenta que esta es una lista para un Linux 'maduro', no para Termux, y aqu\u00ed simplemente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">un material excelente sobre scripts de bash<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Con scripts se puede automatizar pr\u00e1cticamente todas las acciones mon\u00f3tonas. Escribamos un sencillo script de bash que muestre el valor de una variable que \u00e9l mismo ha creado; yo usar\u00e9 nuevamente cat, pero ustedes pueden usar un editor de texto normal, y aquellos que deseen practicar pueden utilizar echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"\u00a1Hola, Habr!\"\n# export crea la variable str\n# y le asigna el valor \"\u00a1Hola, Habr!\"\n# No pongas espacios antes y despu\u00e9s de \u2018=\u2019\n\necho $str # Para referirse a las variables se coloca \u2018$\u2019 antes\n\n# Ctrl + D\n\n# .\\\/test.sh para ejecutar el script, pero si se hace ahora habr\u00e1 un error\n# para evitar el error, hay que hacer el archivo test.sh ejecutable\n\nchmod +x test.sh\n# chmod cambia los permisos de acceso (+ agregar \/ - quitar)\n# \u2018+x\u2019 significa que estamos haciendo el archivo ejecutable\n\n.\\\/test.sh # Ejecutamos nuestro script<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Script Bash con Termux:API<\/h3>\n<p><\/p>\n<p>Vamos a escribir algo diferente de los t\u00edpicos HelloWorld, pero igualmente in\u00fatil. Nuestro script ser\u00e1:<\/p>\n<p><\/p>\n<ol>\n<li>realizar una solicitud API termux-battery-status<\/li>\n<li>guardar los datos obtenidos en el archivo test.txt<\/li>\n<li>mostrar los datos del archivo en pantalla<\/li>\n<li>ejecutar el programa hello-world.py que hemos escrito anteriormente<\/li>\n<li>guardar los datos del programa en el archivo test.txt<\/li>\n<li>mostrar los datos del archivo en pantalla<\/li>\n<li>copiar los datos del archivo al portapapeles<\/li>\n<li>mostrar en pantalla el contenido del portapapeles<\/li>\n<li>mostrar un mensaje emergente con los datos del portapapeles<\/li>\n<\/ol>\n<p><\/p>\n<p>Primero, crearemos una carpeta de trabajo y copiaremos hello-world.py como test.py, crearemos en esta carpeta los archivos test.sh y test.txt:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">mkdir bashscript\n\ncat hello-world.py &gt;&gt; bashscript\/test.py\n\ncd bashscript\/\n\ntouch test.sh test.txt # touch crea archivos\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Ahora, de cualquier manera conveniente, escribiremos el script en el archivo test.sh:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\n\n# \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c #! (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0448\u0435\u0431\u0430\u043d\u0433)\n# \u043f\u043e\u0441\u043b\u0435 \u0438\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u0448\u0435\u043b\u043b \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u043a\u0440\u0438\u043f\u0442\n\nclear # \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u043e\u043a\u043d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430\n\ntermux-battery-status &gt; test.txt # \u043f\u0443\u043d\u043a\u0442\u044b 1 \u0438 2 \u0438\u0437 \u043d\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430\n\ncat test.txt # \u043f\u0443\u043d\u043a\u0442 3\n\npython test.py &gt; test.txt # \u043f\u0443\u043d\u043a\u0442 4 \u0438 5\n\ncat test.txt # \u043f\u0443\u043d\u043a\u0442 6\n\ncat test.txt | termux-clipboard-set # \u043f\u0443\u043d\u043a\u0442 7\n# | \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440. \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0433\u043e\n\ntermux-clipboard-get # \u043f\u0443\u043d\u043a\u0442 8\n\ntermux-clipboard-get | termux-toast # \u043f\u0443\u043d\u043a\u0442 9<\/code><\/pre>\n<p><\/p>\n<p>Ahora, estando en la carpeta bashscript, escribimos <code>.\\\/test.sh<\/code> observamos en la terminal en el dispositivo Android:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux paso a paso (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed que hemos escrito el script de bash planeado. Se puede enriquecer con la salida en consola de informaci\u00f3n sobre la ejecuci\u00f3n de cada acci\u00f3n (usando echo), esto lo dejo para los lectores.<\/p>\n<p><\/p>\n<h2>Paso 7<\/h2>\n<p><\/p>\n<h3>Hagamos algo \u00fatil<\/h3>\n<p><\/p>\n<p><i>Relativamente \u00fatil<\/i><\/p>\n<p><\/p>\n<p>Formulemos el pliego de condiciones<br \/>\nLa aplicaci\u00f3n debe colocar en el portapapeles una cadena aleatoria del archivo y notificarlo con un mensaje emergente.<\/p>\n<p><\/p>\n<p>Tomaremos como base el script de bash, extraeremos una cadena aleatoria del archivo usando un subprograma en Python. Elaboraremos el plan de trabajo del script:<\/p>\n<p><\/p>\n<ol>\n<li>Ejecutar el subprograma<\/li>\n<li>Transferir el resultado del subprograma al portapapeles<\/li>\n<li>Mostrar un mensaje emergente<\/li>\n<\/ol>\n<p><\/p>\n<p>Definamos los nombres del directorio y los archivos de la aplicaci\u00f3n:<\/p>\n<p><\/p>\n<ul>\n<li>carpeta rndstr en el directorio home\n<ul>\n<li>source \u2014 archivo del que tomaremos las l\u00edneas<\/li>\n<li>rndstr.py \u2014 subprograma que imprime en consola una l\u00ednea aleatoria del archivo source<\/li>\n<li>rndstr.sh \u2014 archivo de script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Creamos el directorio de la aplicaci\u00f3n y, una vez dentro, creamos los archivos all\u00ed.<\/p>\n<p><\/p>\n<p>Los dos primeros puntos del plan del script se pueden combinar en una tuber\u00eda, al final, utilizando Termux:API obtenemos:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\n\npython ~\/rndstr\/rndstr.py | termux-clipboard-set # 1 \u0438 2 \u043f\u0443\u043d\u043a\u0442\u044b \u043f\u043b\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u044b\n\ntermux-toast \"OK\" # 3 \u043f\u0443\u043d\u043a\u0442. \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \"\u041e\u041a\"<\/code><\/pre>\n<p><\/p>\n<p>En el archivo source puedes colocar cualquier texto l\u00f3gicamente dividido en l\u00edneas, yo decid\u00ed colocar aforismos:<\/p>\n<p>\n<b class=\"spoiler_title\">Listado del archivo source<\/b><\/p>\n<pre><code class=\"plaintext\">La sinceridad no es la verdad. L. Lavelle\nSoporta y abstente. Epiceto\nSolo es noble lo que es desinteresado. J. La Bruy\u00e8re\nS\u00e9 prudentemente valiente. B. Graci\u00e1n\nLa bondad es mejor que la belleza. G. Heine\nPara grandes obras, se necesita una constancia infatigable. F. Voltaire\nSi quieres que siempre te hagan caso, s\u00edrvete a ti mismo. B. Franklin\nLa excesiva modestia no es m\u00e1s que un orgullo oculto. A. Chenier\nLas personas muy inteligentes comienzan a no ser de fiar si ven su confusi\u00f3n. F. Nietzsche\nLa pobreza indica la falta de medios, no la falta de nobleza. D. Boccaccio\nHay que tener cuidado de llevar la modestia hasta el punto de la humillaci\u00f3n. A. Bakihanov\nQuien renuncia a mucho, puede permitirse mucho. J. Chardon\nCuando nos pagan por una buena acci\u00f3n, nos la quitan. N. Chamfort\nNo recibir nada no es aterrador, pero perder lo que has recibido es doloroso. Claudio Eliano\nEs m\u00e1s f\u00e1cil soportar pacientemente lo que no podemos corregir. Horacio\nTe cansas de esperar, pero cu\u00e1nto peor ser\u00eda si no hubiera nada que esperar. B. Shaw\nTodo llega a su debido tiempo, si la gente sabe esperar. F. Rabelais\nCon nuestra paciencia podemos lograr m\u00e1s que con la fuerza. E. Burke\nHay que saber soportar lo inevitable. M. Montaigne\nQuien es valiente en acci\u00f3n no se asustar\u00e1 con palabras. S\u00f3focles\nNo me gusta luchar, me gusta ganar. B. Shaw\nUn gato acorralado y acorralado se convierte en un tigre. M. Cervantes\nUna persona digna no sigue las huellas de otros. Confucio\nUna gran mente mostrar\u00e1 su fuerza no solo en saber pensar, sino tambi\u00e9n en saber vivir. R. Emerson\nLa fama es una mercanc\u00eda poco ventajosa. Es cara y se conserva mal. O. Balzac\nLa moderaci\u00f3n y la adecuaci\u00f3n en las conversaciones valen m\u00e1s que la elocuencia. F. Bacon\nQuien no sabe callar, tampoco sabe hablar. S\u00e9neca el Joven\nLos buenos modales consisten en peque\u00f1os sacrificios. F. Chesterfield\nUn hombre bueno no es quien sabe hacer el bien, sino quien no sabe hacer el mal. V. Kliuchevski\n\u00a1No emitas juicios irrevocables! Agust\u00edn\n\u00a1Nada en exceso! Sol\u00f3n<\/code><\/pre>\n<p><\/p>\n<p>Nos queda crear un subprograma que extraiga una cadena aleatoria del archivo source.<br \/>\nDescribamos el algoritmo de funcionamiento del subprograma:<\/p>\n<p><\/p>\n<ol>\n<li>Abrimos el archivo source<\/li>\n<li>Contamos la cantidad de l\u00edneas en el archivo abierto<\/li>\n<li>Cerramos el archivo (no hay necesidad de mantenerlo abierto m\u00e1s tiempo del necesario)<\/li>\n<li>Generamos un n\u00famero entero aleatorio dentro del n\u00famero de l\u00edneas del archivo source<\/li>\n<li>Abrimos el archivo source<\/li>\n<li>Mostramos la l\u00ednea con el n\u00famero generado<\/li>\n<li>Cerramos el archivo<\/li>\n<\/ol>\n<p><\/p>\n<p>Implementamos el algoritmo en Python (estoy escribiendo para Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  # importamos para generar n\u00fameros aleatorios\nimport os  # para obtener la ruta\n\npath = os.path.abspath(__file__)  # obtenemos la ruta directa al archivo rndstr.py\npath = os.path.dirname(path)  # transformamos en la ruta al directorio\npath = path  + ' \/source'  # transformamos en la ruta al archivo source\n\nf = open(path)  # abrimos el archivo\ni = 0  # reiniciamos el contador\nfor str in f: i+=1  # contamos las l\u00edneas del archivo\nf.close  # cerramos el archivo\n\nj = int(round(i * random.random()))  # generamos un n\u00famero entero aleatorio de 0 a i\n\nf = open(path)  # abrimos el archivo\ni = 0  # reiniciamos el contador\nfor str in f:  # iteramos sobre las l\u00edneas del archivo\n    if i == j:  # si el contador de l\u00edneas es igual al n\u00famero generado\n        print (str, end='')  # mostramos la l\u00ednea sin un salto de l\u00ednea\n        break  # salimos del ciclo\n    i+=1  # aumentamos el contador en 1\nf.close  # cerramos el archivo<\/code><\/pre>\n<p><\/p>\n<p>Despu\u00e9s de que los archivos son creados y escritos, es necesario dar derechos de ejecuci\u00f3n al archivo <code>rndstr.sh<\/code>, y crear un alias para un lanzamiento r\u00e1pido.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Ahora, al introducir en la terminal <code>rnst<\/code> obtendremos en el portapapeles un aforismo aleatorio, que, por ejemplo, se puede usar en la correspondencia.<\/p>\n<p><\/p>\n<p>Aqu\u00ed hemos escrito algo \u00fatil. Relativamente \u00fatil.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Intencionalmente, en el \u00faltimo paso no inclu\u00ed capturas de pantalla y no detall\u00e9 algunas acciones, solo describ\u00ed el contenido de los archivos, para que los lectores tuvieran la oportunidad de trabajar por su cuenta.<\/p>\n<p><\/p>\n<p>Con esto, 'Termux paso a paso' deber\u00eda llegar a su fin. Por supuesto, estos son solo los primeros pasos, pero ahora puedes avanzar por tu cuenta.<\/p>\n<p><\/p>\n<p>Inicialmente, planeaba mostrar en este ciclo c\u00f3mo usar nmap, sqlmap, pero ya hay muchos art\u00edculos al respecto. Si deseas que contin\u00fae el ciclo 'Termux paso a paso', hay una encuesta a continuaci\u00f3n y puedes sugerir en los comentarios sobre qu\u00e9 m\u00e1s escribir.<\/p>\n<p class=\"for_users_only_msg\">Solo los usuarios registrados pueden participar en la encuesta. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Inicie sesi\u00f3n<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">\u00bfContinuar 'Termux paso a paso'?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ed<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No<\/p>\n<\/li>\n<\/ul>\n<p>    Votaron 2 usuarios. No hay abstenciones.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/445868\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 Termux&#8217;\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 SSH \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u041f\u041a, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c alias&#8217;\u044b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0448\u0430\u0433\u043d\u0443\u0442\u044c \u0435\u0449\u0435 \u0434\u0430\u043b\u044c\u0448\u0435, \u043c\u044b \u0441 \u0432\u0430\u043c\u0438: \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e Termux:API \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c Python \u0438 nano, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c &#171;Hello, world!&#187; \u043d\u0430 Python \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e bash-\u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22529,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30531","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 Termux&#039;\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 SSH \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u041f\u041a, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c alias&#039;\u044b \u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Termux \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c (\u0427\u0430\u0441\u0442\u044c 2) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 Termux&#039;\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 SSH \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u041f\u041a, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c alias&#039;\u044b \u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:36:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Termux paso a paso (Parte 2) | ProHoster","description":"En la parte anterior, nos familiarizamos con los comandos b\u00e1sicos de Termux, configuramos la conexi\u00f3n SSH con una PC, aprendimos a crear alias y.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Termux \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c (\u0427\u0430\u0441\u0442\u044c 2) | ProHoster","og:description":"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 Termux'\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 SSH \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u041f\u041a, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c alias'\u044b \u0438.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:36:03+00:00","article:modified_time":"2019-10-31T18:36:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30531","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 01:39:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:16:48","updated":"2026-08-11 12:50:36","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}