{"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> Ci siamo gi\u00e0 familiarizzati con i comandi di base di Termux, abbiamo configurato una connessione SSH con il computer, abbiamo imparato a creare alias e installato alcune utilit\u00e0 utili. Questa volta ci aspetta un passo ulteriore:<\/p>\n<p><\/p>\n<ul>\n<li>scopriremo Termux:API<\/li>\n<li>installeremo Python e nano, e scriveremo 'Hello, world!' in Python<\/li>\n<li>scopriremo gli script bash e scriveremo uno script utilizzando Termux:API<\/li>\n<li>utilizzando uno script bash, 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 immessi, da questo punto in poi non descriver\u00f2 ogni azione nei dettagli, ma spiegher\u00f2 sicuramente dove potrebbero sorgere difficolt\u00e0.<\/p>\n<p><\/p>\n<p>Uso spesso gli alias, quindi le abbreviazioni utilizzate in questa parte sono mostrate 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 iniziare! E naturalmente 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>Immergiamoci nel tunnel del coniglio di Termux:API<\/h3>\n<p><\/p>\n<p><i>API, quante cose si fondono in questa parola nel cuore di un coder<\/i><\/p>\n<p><\/p>\n<p>Se non tocchiamo il tema Termux:API, tutte le nostre azioni potrebbero essere riassunte in una semplice riscrittura di qualche brochure come 'Linux per principianti', come \u00e8 stato giustamente osservato nei commenti al primo articolo.<\/p>\n<p><\/p>\n<p>Per cominciare, installiamo Termux:API dal Google Play Market (dopo di che riavviare Termux non sar\u00e0 male):<\/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 dimentichiamoci degli alias\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Per gli esperimenti utilizzo Android 5.1.1, per i proprietari di Android 7 \u00e8 necessario \"proteggere\" Termux:API, andando in \u2018Impostazioni\u2019 &gt; \u2018App 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 approfondire le nuove funzionalit\u00e0. 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 le informazioni pi\u00f9 chiare e interessanti, che consentiranno di acquisire esperienza per un lavoro autonomo in seguito.<\/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 popup 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, insomma tipi di dati con cui Python lavora perfettamente, quindi il passo successivo sar\u00e0 installarlo.<\/p>\n<p><\/p>\n<h2>Passaggio 5<\/h2>\n<p><\/p>\n<h3>Installeremo 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 \u00e8 piaciuto di pi\u00f9 rispetto a vim, quindi installiamolo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>\u00c8 pi\u00f9 facile utilizzarlo rispetto a vim, e nano ha un'interfaccia pi\u00f9 amichevole. <i>Su un dispositivo Android, comunque, \u00e8 pi\u00f9 comodo vim.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld in Python su Termux<\/h3>\n<p><\/p>\n<p>In realt\u00e0 si poteva fare anche a meno di questo punto, ma installare Python in Termux e non scrivere HelloWorld, secondo me, \u00e8 di cattivo gusto.<\/p>\n<p><\/p>\n<p>Non ho l'obiettivo di insegnare a nessuno Python, quindi coloro che non lo conoscono possono semplicemente copiare il codice (o iniziare a studiare da soli, visto che ci sono molti libri disponibili), mentre chi gi\u00e0 sa pu\u00f2 anche creare qualcosa da solo. E io, 'nel frattempo', mostrer\u00f2 anche un modo per inserire testo nel terminale senza editor.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Se non si specifica l'origine (ricordo che cat 1.txt &gt; 2.txt)\n# cat prender\u00e0 i dati dall'input standard,\n# per dirla in parole semplici, ci\u00f2 che viene digitato da tastiera.\n\nstr = 'Hello, world!' # assegniamo alla variabile str il valore \"Hello, world!\"\nprint (str) # stampiamo a schermo il valore della variabile str\n\n# Ctrl + D per terminare l'inserimento e salvare il file (hello-world.py)\n\npy hello-world.py # eseguiamo il file (py \u00e8 un alias per 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'inserimento non hai notato un errore e hai gi\u00e0 premuto Invio, non potrai passare alla riga sopra; per farlo, termina l'inserimento premendo Ctrl + D (puoi anche interrompere completamente con Ctrl + Z) e ripeti tutto dall'inizio. Poich\u00e9 abbiamo utilizzato '&gt;', il file sar\u00e0 completamente sovrascritto. Per questo motivo, non consiglio di utilizzare questo metodo di inserimento se non sei sicuro che scriverai il codice corretto subito.<\/p>\n<p><\/p>\n<h2>Passaggio 6<\/h2>\n<p><\/p>\n<h3>Script Bash<\/h3>\n<p><\/p>\n<p>Gli script Bash sono un modo fantastico per automatizzare il lavoro nel terminale. Uno script \u00e8 un file con estensione .sh (l'estensione non \u00e8 obbligatoria) contenente un insieme di comandi del terminale, alcuni 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 fate attenzione che questa \u00e8 una lista per un 'adulto' Linux, non per Termux, mentre qui semplicemente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">materiale eccezionale sugli script bash<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Con gli script \u00e8 possibile automatizzare praticamente tutte le azioni monotone. Scriveremo un semplice script bash che visualizza il valore di una variabile creata dallo stesso script, utilizzer\u00f2 ancora cat, ma potete usare un normale editor di testo, e coloro che desiderano allenarsi possono utilizzare 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 inserite spazi prima e dopo '='\n\necho $str # Per accedere alle variabili si utilizza il simbolo '$' prima di esse\n\n# Ctrl + D\n\n# .\/test.sh per eseguire lo script, ma se lo fate adesso ci sar\u00e0 un errore\n# per risolvere l'errore \u00e8 necessario rendere il file test.sh eseguibile\n\nchmod +x test.sh\n# chmod modifica i permessi di accesso (+ aggiungere \/ - rimuovere)\n# \u2018+x\u2019 significa che rendiamo 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>Script Bash con Termux:API<\/h3>\n<p><\/p>\n<p>Scriviamo qualcosa che si discosti dai soliti HelloWorld, ma che sia altrettanto inutile. Il nostro script sar\u00e0:<\/p>\n<p><\/p>\n<ol>\n<li>eseguire una richiesta all'API termux-battery-status<\/li>\n<li>salvare i dati ricevuti nel file test.txt<\/li>\n<li>visualizzare i dati del file sullo schermo<\/li>\n<li>eseguire il programma hello-world.py precedentemente scritto<\/li>\n<li>scrivere i dati ricevuti dal programma nel file test.txt<\/li>\n<li>visualizzare i dati del file sullo schermo<\/li>\n<li>copiare i dati dal file negli appunti<\/li>\n<li>visualizzare il contenuto degli appunti sullo schermo<\/li>\n<li>visualizzare un messaggio pop-up con i dati dagli appunti<\/li>\n<\/ol>\n<p><\/p>\n<p>Iniziamo creando una cartella per lavorare e copiamo hello-world.py come test.py, creando all'interno di questa cartella i file test.sh e 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 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 conveniente:<\/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 ci troviamo nella cartella bashscript, scriviamo <code>.\/test.sh<\/code> osserviamo nel terminale sul 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 programmato. Possiamo arricchirlo con un output in console delle informazioni riguardanti l'esecuzione di ogni azione (utilizzando echo), lascio questo ai lettori.<\/p>\n<p><\/p>\n<h2>Passo 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 compito tecnico<br \/>\nL'applicazione deve, dopo l'avvio, copiare negli appunti una riga casuale dal file e notificare con un messaggio pop-up.<\/p>\n<p><\/p>\n<p>Prenderemo come base uno script bash, per estrarre una riga casuale dal file utilizzeremo una sottoprogrammazione in Python. Strutturiamo il piano di lavoro dello script:<\/p>\n<p><\/p>\n<ol>\n<li>Avviare la 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 file da cui prenderemo le righe<\/li>\n<li>rndstr.py \u2014 sottoprogramma che stampa nel terminale una riga casuale dal file source<\/li>\n<li>rndstr.sh \u2014 file di script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Creiamo la directory dell'applicazione e, una volta entrati, creiamo i file al suo interno.<\/p>\n<p><\/p>\n<p>I primi due punti del piano dello script possono essere combinati in un pipe, risultando in: 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 diviso in righe, ho deciso di inserire aforismi:<\/p>\n<p>\n<b class=\"spoiler_title\">Elenco del file source<\/b><\/p>\n<pre><code class=\"plaintext\">L'autenticit\u00e0 non \u00e8 la verit\u00e0. L. Lavelle\nSopporta e trattieni. Epitteto\nNobile \u00e8 solo ci\u00f2 che \u00e8 altruista. J. La Bruy\u00e8re\nSii con prudenza coraggioso. B. Gracian\nLa bont\u00e0 \u00e8 migliore della bellezza. G. Heine\nPer grandi opere \u00e8 necessaria una costanza instancabile. F. Voltaire\nSe vuoi sempre compiacere, servi te stesso. B. Franklin\nL'eccessiva modestia non \u00e8 altro che orgoglio nascosto. A. Ch\u00e9nier\nLe persone molto intelligenti iniziano a non essere fidate se si vedono in imbarazzo. F. Nietzsche\nLa povert\u00e0 indica mancanza di mezzi, non di nobilt\u00e0. D. Boccaccio\nBisogna fare attenzione a non spingere la modestia fino all'umiliazione. A. Bakikhanov\nChi rinuncia a molto, pu\u00f2 permettersi molto. J. Chardon\nQuando ci pagano per un atto nobile, ce lo portano via. N. Chamfort\nNon ricevere affatto non \u00e8 spaventoso, ma perdere ci\u00f2 che si \u00e8 ottenuto \u00e8 doloroso. Claudio Eliano\n\u00c8 pi\u00f9 facile sopportare pazientemente ci\u00f2 che non possiamo correggere. Orazio\nTi stanchi ad 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 ottenere di pi\u00f9 che con la forza. E. Burke\nBisogna sapersi adattare a ci\u00f2 che non si pu\u00f2 evitare. M. Montaigne\nChi \u00e8 audace nel fare, non teme le parole. Sofocle\nNon amo combattere, amo vincere. B. Shaw\nUn gatto braccato e accostato al muro diventa una tigre. M. Cervantes\nUna persona dignitosa non segue le orme degli altri. Confucio\nUn grande pensiero mostrer\u00e0 la propria forza non solo nell'abilit\u00e0 di pensare, ma anche nell'abilit\u00e0 di vivere. R. Emerson\nLa gloria \u00e8 una merce svantaggiosa. Costa caro e si conserva male. O. Balzac\nLa riservatezza e la pertinenza nei discorsi valgono pi\u00f9 dell'eloquenza. F. Bacon\nChi non sa tacere, non pu\u00f2 nemmeno parlare. Seneca il Giovane\nLe buone maniere consistono in piccoli sacrifici. F. Chesterfield\nUna persona buona non \u00e8 quella che sa fare del bene, ma quella che non sa far del male. V. Klju\u010devskij\nNon pronunciare giudizi irrevocabili! Agostino\nNulla di eccessivo! Solone<\/code><\/pre>\n<p><\/p>\n<p>Ci rimane da creare una sottoprogramma che estrae una riga casuale dal file source.<br \/>\nDettagliamo l'algoritmo di funzionamento della sottoprogramma:<\/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 pi\u00f9 del necessario)<\/li>\n<li>Generiamo un numero intero casuale all'interno del numero di righe del file source<\/li>\n<li>Apriamo il file source<\/li>\n<li>Stampiamo la riga con il numero generato<\/li>\n<li>Chiudiamo il file<\/li>\n<\/ol>\n<p><\/p>\n<p>Implementiamo l'algoritmo in Python (sto scrivendo 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__)  # \u00a0otteniamo il percorso diretto al file rndstr.py\npath = os.path.dirname(path) \u00a0#  trasformiamo in percorso della directory\npath = path \u00a0+ '\u00a0\/source'  #  trasformiamo 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#  scorriamo le righe dal 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  # \u00a0uscire dal ciclo\n \u00a0\u00a0\u00a0i+=1 \u00a0#  incrementiamo 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 veloce.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\u00a0\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Ora, digitando nel terminale <code>rnst<\/code> otterremo negli appunti un aforisma casuale, che ad esempio pu\u00f2 essere utilizzato nella corrispondenza.<\/p>\n<p><\/p>\n<p>Ecco che abbiamo scritto qualcosa di utile. Relativamente utile.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Ho volutamente omesso degli screenshot nell'ultimo passaggio e non ho analizzato in dettaglio alcune azioni, descrivendo solo il contenuto dei file, affinch\u00e9 i lettori avessero la possibilit\u00e0 di lavorare in autonomia.<\/p>\n<p><\/p>\n<p>Con questo 'Termux passo dopo passo', penso sia giusto concludere. Certamente 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 questo ciclo come usare nmap, sqlmap, ma ci sono gi\u00e0 molti articoli su questo tema. Se c'\u00e8 voglia che io continui il ciclo 'Termux passo dopo passo', c'\u00e8 un sondaggio qui sotto e nei commenti potete proporre 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. Non ci sono astenuti.<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.1.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.\" \/>\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.1.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.\" \/>\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 abbiamo familiarizzato con i comandi di base di Termux, impostato una connessione SSH con il PC, imparato a creare alias e.","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.","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":{"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\/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}]}}