{"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\/it\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux passo dopo passo (Parte 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">parte precedente<\/a><\/noindex> abbiamo introdotto i comandi di base di Termux, configurato una connessione SSH con il PC, imparato a creare alias e installato alcune utilit\u00e0 utili. Questa volta ci aspetta di fare un ulteriore passo avanti, faremo:<\/p>\n<p><\/p>\n<ul>\n<li>scoprire Termux:API<\/li>\n<li>installeremo Python e nano, e scriveremo 'Hello, world!' in Python.<\/li>\n<li>imparare i bash script e scrivere uno script che utilizzi Termux:API<\/li>\n<li>utilizzando bash script, Termux:API e Python, scriveremo un semplice programma <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Poich\u00e9 ora comprendiamo cosa fanno i comandi che digitiamo, da questo passo non descriver\u00f2 ogni azione cos\u00ec dettagliatamente, ma spiegher\u00f2 sicuramente dove potrebbero sorgere difficolt\u00e0.<\/p>\n<p><\/p>\n<p>Utilizzo spesso gli alias, quindi gli acronimi usati in questa parte sono mostrati qui:<\/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>Il piano \u00e8 pronto, possiamo cominciare! E ovviamente non dimenticate il 'magico Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Vedi Parte 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Passo 4<\/h2>\n<p><\/p>\n<h3>Ci immergiamo nella tana del coniglio di Termux:API<\/h3>\n<p><\/p>\n<p><i>API, quante cose pu\u00f2 trasmettere questo termine al cuore di un programmatore<\/i><\/p>\n<p><\/p>\n<p>Se non tocchiamo l'argomento Termux:API, tutte le nostre azioni potrebbero essere riassunte in un semplice racconto di qualche brochure tipo 'Linux per principianti', come giustamente osservato nei commenti della prima parte.<\/p>\n<p><\/p>\n<p>Iniziamo con l'installare Termux:API dal Google Play Market (dopo \u00e8 utile riavviare Termux):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poi dobbiamo installare il pacchetto API nella console di Termux:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Non dimentichiamo gli alias\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Per esperimenti, utilizzo Android 5.1.1; per i possessori di Android 7 \u00e8 necessario \"proteggere\" Termux: API, andando in \u2018Impostazioni\u2019 &gt; \u2018Applicazioni protette\u2019, altrimenti le chiamate API, come <code>termux-battery-status<\/code>, si bloccheranno. (Vedi <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki del progetto<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Ora vale la pena familiarizzare meglio con le capacit\u00e0 acquisite. La descrizione pi\u00f9 recente e dettagliata di Termux:API pu\u00f2 essere trovata su <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki del progetto<\/a><\/noindex>. Cercher\u00f2 di selezionare gli esempi pi\u00f9 chiari e interessanti, che permetteranno di acquisire esperienza per lavorare autonomamente in futuro.<\/p>\n<p><\/p>\n<h3>Alcuni esempi di Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nRestituisce lo stato della batteria<br \/>\n<img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nImposta la luminosit\u00e0 dello schermo da 0 a 255<br \/>\n<img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nMostra una notifica temporanea<br \/>\n<img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nAccende la torcia<br \/>\n<img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nRestituisce informazioni sull'ultima scansione delle reti Wi-Fi<br \/>\n<img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Non \u00e8 difficile notare che i valori restituiti sono stringhe, dizionari, liste di dizionari, in generale tipi di dati con cui Python lavora perfettamente, quindi il passo successivo sar\u00e0 installarlo.<\/p>\n<p><\/p>\n<h2>Passo 5<\/h2>\n<p><\/p>\n<h3>Installiamo Python e nano<\/h3>\n<p><\/p>\n<p>Per installare Python scriviamo nel terminale:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Ora abbiamo installato Python 2 e 3.<\/p>\n<p><\/p>\n<p>Durante il lavoro su questo articolo, ho scoperto un altro editor di testo, nano, che mi piace pi\u00f9 di vim; vediamo come installarlo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>\u00c8 pi\u00f9 semplice da usare rispetto a vim, e nano ha un'interfaccia pi\u00f9 amichevole. <i>Su un dispositivo Android, vim \u00e8 comunque pi\u00f9 comodo.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld in Python su Termux<\/h3>\n<p><\/p>\n<p>In fin dei conti, si poteva anche evitare questo punto, ma installare Python su Termux e non scrivere HelloWorld, a mio avviso, \u00e8 inaccettabile.<\/p>\n<p><\/p>\n<p>Non ho l'obiettivo di insegnare a qualcuno Python, quindi chi non lo conosce pu\u00f2 semplicemente copiare il codice (o iniziare a studiare da solo, visto che ci sono molte risorse disponibili), mentre chi lo conosce pu\u00f2 anche creare qualcosa da solo. E io, 'nel mentre', mostrer\u00f2 anche un modo per inserire testo nel terminale senza un editor.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Se non si specifica la sorgente (ricordo cat 1.txt &gt; 2.txt)\n# cat prender\u00e0 i dati dal flusso di input standard,\n# in altre parole dall'input tastiera.\n\nstr = \u2018Hello, world!\u2019 # assegniamo alla variabile str il valore \"Hello, world!\"\nprint (str) # stampiamo sullo schermo il valore dalla variabile str\n\n# Ctrl + D per terminare l'input e scrivere il file (hello-world.py)\n\npy hello-world.py # eseguiamo il file (py \u00e8 un alias di python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se durante l'input non hai notato un errore e hai gi\u00e0 premuto Invio, non puoi tornare alla riga sopra, per farlo devi terminare l'input premendo Ctrl + D (puoi anche interrompere con Ctrl + Z) e ripetere tutto dall'inizio. Poich\u00e9 abbiamo usato \u2018&gt;\u2019, il file sar\u00e0 riscritto completamente. Per questo motivo non consiglio di usare questo metodo di input se non sei sicuro di poter scrivere il codice subito senza errori.<\/p>\n<p><\/p>\n<h2>Passo 6<\/h2>\n<p><\/p>\n<h3>Script Bash<\/h3>\n<p><\/p>\n<p>Gli script Bash sono un ottimo modo per automatizzare il lavoro con il terminale. Uno script \u00e8 un file con estensione .sh (l'estensione non \u00e8 obbligatoria) che contiene un insieme di comandi del terminale, parte dei quali abbiamo gi\u00e0 studiato. Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">l'elenco della maggior parte dei comandi<\/a><\/noindex>, tutto dovrebbe funzionare, ma tenete presente che questa \u00e8 una lista per un 'Linux adulto', non per Termux, per\u00f2 solo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">un ottimo materiale sui bash script<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Con gli script, \u00e8 possibile automatizzare praticamente tutte le azioni monotone. Scriviamo un semplice bash script che stampa il valore di una variabile creata da esso stesso, utilizzer\u00f2 di nuovo cat, voi potreste usare un editor di testo normale, e chi vuole esercitarsi pu\u00f2 usare echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Ciao, Habr!\"\n# export crea la variabile str\n# e le assegna il valore \"Ciao, Habr!\"\n# Non mettere spazi prima e dopo \u2018=\u2019\n\necho $str # Per accedere alle variabili, anteporre \u2018$\u2019\n\n# Ctrl + D\n\n# .\/test.sh per eseguire lo script, ma se lo fai ora, ci sar\u00e0 un errore\n# per eliminare l'errore, \u00e8 necessario rendere il file test.sh eseguibile\n\nchmod +x test.sh\n# chmod cambia i permessi di accesso (+ aggiungere \/ - rimuovere)\n# \u2018+x\u2019 significa che stiamo rendendo il file eseguibile\n\n.\/test.sh # Avviamo l'esecuzione del nostro script<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash script con Termux:API<\/h3>\n<p><\/p>\n<p>Scriviamo gi\u00e0 qualcosa di diverso dai famosi HelloWorld, ma altrettanto inutile. Il nostro script sar\u00e0:<\/p>\n<p><\/p>\n<ol>\n<li>eseguire la richiesta API termux-battery-status<\/li>\n<li>salvare i dati ottenuti nel file test.txt<\/li>\n<li>visualizzare i dati dal file sullo schermo<\/li>\n<li>eseguire il programma scritto in precedenza hello-world.py<\/li>\n<li>scrivere i dati ricevuti dal programma nel file test.txt<\/li>\n<li>visualizzare i dati dal file sullo schermo<\/li>\n<li>trasferire i dati dal file negli appunti<\/li>\n<li>visualizzare sullo schermo il contenuto degli appunti<\/li>\n<li>visualizzare un messaggio popup con i dati dagli appunti<\/li>\n<\/ol>\n<p><\/p>\n<p>Innanzitutto, creiamo una cartella di lavoro e copiamo hello-world.py in test.py, quindi creiamo i file test.sh e test.txt in questa cartella:<\/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 i file\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Ora scriviamo lo script nel file test.sh in qualsiasi modo comodo:<\/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>Ora, mentre siamo nella cartella bashscript, scriviamo <code>.\/test.sh<\/code> osserviamo nel terminale del dispositivo Android:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux passo dopo passo (Parte 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ecco, abbiamo scritto lo script bash pianificato. Possiamo arricchirlo con informazioni sullo stato di ciascuna azione (utilizzando echo), lascio questo ai lettori.<\/p>\n<p><\/p>\n<h2>Passaggio 7<\/h2>\n<p><\/p>\n<h3>Facciamo qualcosa di utile<\/h3>\n<p><\/p>\n<p><i>Relativamente utile<\/i><\/p>\n<p><\/p>\n<p>Formuliamo un incarico tecnico<br \/>\nL'applicazione deve, al suo avvio, copiare una stringa casuale dal file negli appunti e avvisare con un messaggio popup.<\/p>\n<p><\/p>\n<p>Prendiamo come base uno script bash, estrarremo una stringa casuale da un file utilizzando un sottoprogramma in Python. Elaboriamo un piano per il lavoro dello script:<\/p>\n<p><\/p>\n<ol>\n<li>Avviare il sottoprogramma<\/li>\n<li>Trasferire il risultato del sottoprogramma negli appunti<\/li>\n<li>Visualizzare un messaggio popup<\/li>\n<\/ol>\n<p><\/p>\n<p>Definiamo i nomi della directory e dei file dell'applicazione:<\/p>\n<p><\/p>\n<ul>\n<li>cartella rndstr nella directory home\n<ul>\n<li>source \u2014 il file da cui prenderemo le stringhe<\/li>\n<li>rndstr.py \u2014 sottoprogramma che restituisce in console una stringa casuale dal file source<\/li>\n<li>rndstr.sh \u2014 file dello script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Creiamo la directory dell'applicazione e, spostandoci in essa, creiamo i file.<\/p>\n<p><\/p>\n<p>I primi due punti del piano dello script possono essere uniti in una pipeline, alla fine, utilizzando Termux:API otteniamo:<\/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>Nel file source puoi inserire qualsiasi testo logicamente suddiviso in righe; io ho deciso di inserire degli aforismi:<\/p>\n<p>\n<b class=\"spoiler_title\">Elenco del file source<\/b><\/p>\n<pre><code class=\"plaintext\">L'onest\u00e0 non \u00e8 verit\u00e0. L. Laval\nSopporta e astieniti. Epitteto\n\u00c8 nobile solo ci\u00f2 che \u00e8 disinteressato. J. La Bruy\u00e8re\nSii ragionevolmente audace. B. Graci\u00e1n\nLa bont\u00e0 \u00e8 meglio della bellezza. H. Heine\nPer grandi opere \u00e8 necessaria una costanza instancabile. F. Voltaire\nSe vuoi che gli altri ti compiaciano sempre, servi te stesso. B. Franklin\nL'eccessiva modestia \u00e8 nient'altro che orgoglio nascosto. A. Ch\u00e9nier\nLe persone molto intelligenti cominciano a non essere fidate se si vede il loro imbarazzo. F. Nietzsche\nLa povert\u00e0 indica l'assenza di mezzi, non l'assenza di nobilt\u00e0. D. Boccaccio\nBisogna stare attenti a non portare la modestia al punto di umiliazione. A. Bakhanov\nChi rinuncia a molto pu\u00f2 permettersi molto. J. Chardon\nQuando ci pagano per un atto nobile, ci viene tolto. N. Chamfort\nNon ricevere nulla non \u00e8 spaventoso, ma perdere ci\u00f2 che si \u00e8 ottenuto \u00e8 frustrante. Claudio Eliano\n\u00c8 pi\u00f9 facile sopportare pazientemente ci\u00f2 che non possiamo correggere. Orazio\nTi stanchi di aspettare, ma quanto sarebbe peggio se non ci fosse nulla da aspettare. B. Shaw\nTutto arriva in tempo, se le persone sanno aspettare. F. Rabelais\nCon la nostra pazienza possiamo raggiungere pi\u00f9 di quanto con la forza. E. Burke\nBisogna saper sopportare ci\u00f2 che non si pu\u00f2 evitare. M. Montaigne\nChi \u00e8 coraggioso negli affari, non teme le parole. Sofocle\nNon mi piace combattere, mi piace vincere. B. Shaw\nUn gatto cacciato e spinto contro il muro si trasforma in una tigre. M. Cervantes\nUna persona degna non segue le tracce degli altri. Confucio\nUn grande intelletto manifester\u00e0 la sua potenza non solo nella capacit\u00e0 di pensare, ma anche nella capacit\u00e0 di vivere. R. Emerson\nLa gloria \u00e8 una merce svantaggiosa. \u00c8 costosa e si conserva male. O. Balzac\nModerazione e adeguatezza nei discorsi valgono pi\u00f9 dell'eloquenza. F. Bacon\nChi non sa tacere, non \u00e8 capace neanche di parlare. Seneca il Giovane\nLe buone maniere consistono in piccoli sacrifici. F. Chesterfield\nLa persona buona non \u00e8 quella che sa fare del bene, ma quella che non sa fare del male. V. Kliuchevsky\nNon pronunciare giudizi irrevocabili! Agostino\nNiente in eccesso! Solone<\/code><\/pre>\n<p><\/p>\n<p>Dobbiamo creare una sottofunzione che estrae una riga casuale dal file source.<br \/>\nDescriviamo l'algoritmo di funzionamento della sottofunzione:<\/p>\n<p><\/p>\n<ol>\n<li>Apriamo il file source<\/li>\n<li>Contiamo il numero di righe nel file aperto<\/li>\n<li>Chiudiamo il file (non ha senso tenerlo aperto inutilmente)<\/li>\n<li>Generiamo un numero intero casuale nell'intervallo del numero di righe del file source<\/li>\n<li>Apriamo il file source<\/li>\n<li>Stampiamo la riga corrispondente al numero generato<\/li>\n<li>Chiudiamo il file<\/li>\n<\/ol>\n<p><\/p>\n<p>Implementiamo l'algoritmo in Python (scrivo per Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random \u00a0#  importiamo per generare numeri casuali\nimport os \u00a0#  per ottenere il percorso\n\npath = os.path.abspath(__file__)  #  otteniamo il percorso diretto del file rndstr.py\npath = os.path.dirname(path) \u00a0#  convertiamo in percorso della directory\npath = path \u00a0+ '\/source' \u00a0#  convertiamo in percorso del file source\n\nf = open(path) \u00a0#  apriamo il file\ni = 0 \u00a0#  azzeriamo il contatore\nfor str in f: i+=1 \u00a0#  contiamo le righe del file\nf.close \u00a0#  chiudiamo il file\n\nj = int(round(i * random.random())) \u00a0#  generiamo un numero intero casuale da 0 a i\n\nf = open(path) \u00a0#  apriamo il file\ni = 0 \u00a0#  azzeriamo il contatore\nfor str in f: \u00a0#  iteriamo sulle righe del file\n \u00a0\u00a0\u00a0if i == j: \u00a0#  se il contatore delle righe \u00e8 uguale al numero generato\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print (str, end='') \u00a0#  stampiamo la riga senza andare a capo\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break \u00a0#  usciamo dal ciclo\n \u00a0\u00a0\u00a0i+=1 \u00a0#  aumentiamo il contatore di 1\nf.close \u00a0#  chiudiamo il file<\/code><\/pre>\n<p><\/p>\n<p>Dopo che i file sono stati creati e scritti, \u00e8 necessario dare i permessi di esecuzione al file <code>rndstr.sh<\/code>, e creare un alias per un avvio rapido.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Ora, inserendo nel terminale <code>rnst<\/code> avremo negli appunti un aforisma casuale, che, ad esempio, pu\u00f2 essere usato nella corrispondenza.<\/p>\n<p><\/p>\n<p>Ecco, abbiamo scritto qualcosa di utile. Relativamente utile.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Ho evitato intentionalmente di includere screenshot nell'ultimo passaggio e non ho descritto dettagliatamente alcune azioni, menzionando solo il contenuto dei file, per dare ai lettori la possibilit\u00e0 di lavorare in autonomia.<\/p>\n<p><\/p>\n<p>Con questo 'Termux passo dopo passo', penso sia giunto il momento di concludere. Certo, questi sono solo i primi passi, ma ora potete andare avanti da soli.<\/p>\n<p><\/p>\n<p>Inizialmente avevo pianificato di mostrare in questa serie come utilizzare nmap, sqlmap, ma ci sono gi\u00e0 molti articoli su questo tema. Se avete voglia che continui la serie 'Termux passo dopo passo', c'\u00e8 un sondaggio qui sotto e nei commenti potete suggerire di cosa scrivere ancora.<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Continuare \"Termux passo dopo passo\"?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    S\u00ec<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 2 utenti. Nessun astenuto.<br \/>\n<br \/>Fonte: <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.0.1 - 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 \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 &quot;Hello, world!&quot; \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\" \/>\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\/it\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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 &quot;Hello, world!&quot; \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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 passo dopo passo (Parte 2) | ProHoster","description":"Nella parte precedente ci siamo familiarizzati con i comandi di base di Termux, abbiamo configurato una connessione SSH con il PC, abbiamo imparato a creare alias e abbiamo installato alcuni utili strumenti. Questa volta faremo un ulteriore passo avanti: scopriremo Termux:API, installeremo Python e nano, e scriveremo \"Hello, world!\" in Python, esploreremo gli script bash e scriveremo uno script.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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 \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 &quot;Hello, world!&quot; \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","og:url":"https:\/\/prohoster.info\/it\/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":null,"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-01-21 01:39:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}