{"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\/sl\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux korak po korak (Deo 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>V <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">prej\u0161njem delu<\/a><\/noindex> Spoznali smo se z osnovnimi ukazi Termuxa, nastavili SSH povezavo s PC-jem, se nau\u010dili izdelovati alias-e in namestili nekaj uporabnih orodij. Tokrat nas \u010daka \u0161e ve\u010dji korak naprej, skupaj bomo:<\/p>\n<p><\/p>\n<ul>\n<li>spoznali Termux:API<\/li>\n<li>namestili Python in nano ter napisali 'Hello, world!' v Pythonu.<\/li>\n<li>spoznali bash-skripte in napisali skript z uporabo Termux:API<\/li>\n<li>s pomo\u010djo bash-skripta, Termux:API in Pythona napisali preprosto aplikacijo <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Ker zdaj razumemo, kaj po\u010dnejo vneseni ukazi, brez podrobnih razlag ne bom razlagal vsakega dejanja, vendar bom pojasnil tam, kjer bodo te\u017eave.<\/p>\n<p><\/p>\n<p>Pogosto uporabljam alias-e, zato so skraj\u0161ave, ki jih uporabljam v tem delu, tukaj prikazane:<\/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>Na\u010drt je pripravljen, lahko za\u010dnemo! In seveda ne pozabite na '\u010darobni Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Poglej del 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Korak 4<\/h2>\n<p><\/p>\n<h3>Potopimo se v zaj\u010djo luknjo Termux:API<\/h3>\n<p><\/p>\n<p><i>API, koliko v tem besedilu se je zdru\u017eilo v srcu programerja<\/i><\/p>\n<p><\/p>\n<p>\u010ce ne bi obravnavali teme Termux:API, bi vse na\u0161e korake lahko strnili v preprost povzetek neke bro\u0161ure, kot je 'Linux za za\u010detnike', kar je bilo pravilno opaziti v komentarjih prvega dela.<\/p>\n<p><\/p>\n<p>Najprej namestimo Termux:API iz Google Play Trgovine (po tem se spla\u010da znova zagnati Termux):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nato moramo v Termux konzoli namestiti paket API:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Ne pozabimo na alias-e\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Za eksperimente uporabljam Android 5.1.1, lastniki Android 7 pa morajo 'za\u0161\u010dititi' Termux: API, tako da gredo v 'Nastavitve' &gt; 'Za\u0161\u010ditene aplikacije', sicer bodo API klici, kot so <code>termux-battery-status<\/code>, naleteli na te\u017eave. (Poglej <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki projekta<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Zdaj se moramo podrobneje seznaniti z pridobljenimi zmo\u017enostmi. Najve\u010dje in najbolj podrobno opis Termux:API lahko najdete na <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki projekta<\/a><\/noindex>. Posku\u0161al bom izbrati najbolj pregledne in zanimive primere, ki bodo omogo\u010dili pridobitev izku\u0161enj za samostojno delo v prihodnosti.<\/p>\n<p><\/p>\n<h3>Ve\u010d primerov Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nVra\u010da stanje baterije<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nNastavi svetlost zaslona od 0 do 255<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nPrika\u017ee za\u010dasno pojavna obvestila<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nVklopi svetilko<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nVra\u010da informacije o zadnjem skeniranju omre\u017eij Wi-Fi<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Ni te\u017eko opaziti, da so vra\u010dene vrednosti nizi, slovarji, sezname slovarjev in na splo\u0161no podatkovne tipe, s katerimi Python odli\u010dno dela, zato ga bomo naslednji\u010d namestili.<\/p>\n<p><\/p>\n<h2>Korak 5<\/h2>\n<p><\/p>\n<h3>Namestimo Python in nano<\/h3>\n<p><\/p>\n<p>Za namestitev Pythona v terminalu vpi\u0161emo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Sedaj imamo name\u0161\u010dena Python 2 in 3.<\/p>\n<p><\/p>\n<p>Med pisanjem tega \u010dlanka sem odkril \u0161e en besedilni urejevalnik nano, ki mi je bil bolj v\u0161e\u010d kot vim, zato ga namestimo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Uporabljati ga je la\u017eje kot vim, nano pa ima bolj prijazen vmesnik. <i>Na Android napravi je vim vseeno bolj priro\u010den.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld v Pythonu v Termux<\/h3>\n<p><\/p>\n<p>Na splo\u0161no bi se lahko brez tega koraka ob\u0161li, a namestiti Python v Termux in ne napisati HelloWorld je po mojem mnenju neprimerno.<\/p>\n<p><\/p>\n<p>Ne trudim se u\u010diti nikogar Pythona, tako da lahko neizku\u0161eni preprosto kopirajo kodo (ali za\u010dnejo sami raziskovati, saj je gradiva dovolj), tisti, ki pa poznajo, pa lahko sami kaj ustvarijo. In med tem bom \u0161e pokazal na\u010din vnosa besedila v terminal brez urejevalnika.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# \u010ce ne navedete vira (opominjam, cat 1.txt &gt; 2.txt)\n# bo cat vzel podatke iz standardnega vhodnega toka,\n# druga\u010de povedano, vpisujete iz tipkovnice.\n\nstr = \u2018Hello, world!\u2019 # dodelimo spremenljivki str vrednost \"Hello, world!\"\nprint (str) # izpi\u0161emo vrednost iz spremenljivke str na zaslon\n\n# Ctrl + D zaklju\u010di vnos in shrani datoteko (hello-world.py)\n\npy hello-world.py # pognamo datoteko (py je alias za python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010ce med vnosom niste opazili napake in ste \u017ee pritisnili Enter, ne boste mogli preiti na prej\u0161nji vrstici; zato zaklju\u010dite vnos s Ctrl + D (lahko tudi prekinete s Ctrl + Z) in ponovite vse od za\u010detka. Ker smo uporabili \u2018&gt;\u2019, bo datoteka v celoti prepisana. Iz tega razloga ne priporo\u010dam uporabe tak\u0161nega na\u010dina vnosa, \u010de niste prepri\u010dani, da boste kodo napisali takoj brez napak.<\/p>\n<p><\/p>\n<h2>Korak 6<\/h2>\n<p><\/p>\n<h3>Bash skripte<\/h3>\n<p><\/p>\n<p>Bash skripte so odli\u010dna metoda za avtomatizacijo dela s terminalom. Skript je datoteka z raz\u0161iritvijo .sh (raz\u0161iritev ni obvezna), ki vsebuje niz terminalskih ukazov, od katerih smo nekatere \u017ee spoznali. Tukaj je <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">seznam ve\u010dine ukazov<\/a><\/noindex>, vse bi moralo delovati, toda bodite pozorni, da je to seznam za 'zreli' Linux, ne za Termux, tukaj pa samo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">odli\u010den material o bash skriptah<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>S pomo\u010djo skriptov lahko avtomatiziramo skoraj vse monotone naloge. Naredimo najpreprostej\u0161i bash-skript, ki bo izpisal vrednost iz spremenljivke, ki jo je sam ustvaril, ponovno bom uporabil cat, vi pa lahko uporabite normalen urejevalnik besedila, tisti, ki \u017eelijo, pa se lahko preizkusijo z echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"\u017divjo, Habr!\"\n# export ustvari spremenljivko str\n# in ji dodeli vrednost \"\u017divjo, Habr!\"\n# Ne postavljajte presledkov pred in za '='\n\necho $str # Za dostop do spremenljivk pred njimi postavimo '$'\n\n# Ctrl + D\n\n# .\/test.sh za zagon skripta, toda \u010de to naredimo zdaj, bomo dobili napako\n# za odpravo napake je treba datoteko test.sh narediti izvajalno\n\nchmod +x test.sh\n# chmod spreminja pravice dostopa (+ dodajanje \/ - odstranjevanje)\n# '+x' pomeni, da datoteko naredimo izvajalno\n\n.\/test.sh # Za\u010dnemo izvajanje na\u0161ega skripta<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash-skript z Termux:API<\/h3>\n<p><\/p>\n<p>Naredimo \u017ee nekaj druga\u010dnega od znamenitih HelloWorldov, a prav tako brezupnega. Na\u0161 skript bo:<\/p>\n<p><\/p>\n<ol>\n<li>izvajal zahtevo API termux-battery-status<\/li>\n<li>shranjeval pridobljene podatke v datoteko test.txt<\/li>\n<li>izpisoval podatke iz datoteke na zaslon<\/li>\n<li>izvajal prej napisani program hello-world.py<\/li>\n<li>pridobljene podatke iz programa shranjeval v datoteko test.txt<\/li>\n<li>izpisoval podatke iz datoteke na zaslon<\/li>\n<li>prena\u0161al podatke iz datoteke v odlo\u017ei\u0161\u010de<\/li>\n<li>izpisoval vsebino odlo\u017ei\u0161\u010da na zaslon<\/li>\n<li>izpisoval pojavna sporo\u010dila s podatki iz odlo\u017ei\u0161\u010da<\/li>\n<\/ol>\n<p><\/p>\n<p>Najprej ustvarimo mapo za delo in vanjo kopiramo hello-world.py kot test.py, v tej mapi pa ustvarimo datoteki test.sh in 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 ustvari datoteke\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Zdaj na katerikoli priro\u010den na\u010din v datoteko test.sh zapi\u0161emo skript:<\/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>Zdaj, ko smo v mapi bashscript, pi\u0161emo <code>.\/test.sh<\/code> opazujemo v terminalu na Android napravi:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Deo 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tako smo napisali na\u010drtovani bash-skript. Izpis lahko obogatimo z informacijami o izvajanju vsakega dejanja (s pomo\u010djo echo), to pa prepu\u0161\u010dam bralcem.<\/p>\n<p><\/p>\n<h2>Korak 7<\/h2>\n<p><\/p>\n<h3>Naredimo vsaj nekaj koristnega<\/h3>\n<p><\/p>\n<p><i>Relativno koristno<\/i><\/p>\n<p><\/p>\n<p>Oblikujemo tehni\u010dne zahteve<br \/>\nAplikacija mora po zagonu v odlo\u017ei\u0161\u010de postaviti naklju\u010dni niz iz datoteke in obvestiti o tem s pojavnim sporo\u010dilom.<\/p>\n<p><\/p>\n<p>Za osnovo vzamemo bash-skript, naklju\u010dni niz iz datoteke bomo pridobivali s podprogramom v Pythonu. Sestavimo na\u010drt dela skripta:<\/p>\n<p><\/p>\n<ol>\n<li>Za\u017eeni podprogram<\/li>\n<li>Prenesite rezultat dela podprograma v odlo\u017ei\u0161\u010de<\/li>\n<li>Izpi\u0161i pojavna sporo\u010dila<\/li>\n<\/ol>\n<p><\/p>\n<p>Dolo\u010dimo imena direktorijev in datotek aplikacije:<\/p>\n<p><\/p>\n<ul>\n<li>Mapa rndstr v doma\u010di direktoriji\n<ul>\n<li>source \u2014 datoteka, iz katere bomo jemali vrstice<\/li>\n<li>rndstr.py \u2014 podprogram, ki v konzolo izpi\u0161e naklju\u010dno vrstico iz datoteke source<\/li>\n<li>rndstr.sh \u2014 datoteka skripte<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ustvarimo mapo aplikacije in se vanjo preselimo ter tam ustvarimo datoteke.<\/p>\n<p><\/p>\n<p>Prva dva koraka na\u010drta skripte lahko zdru\u017eimo v cevovod, na koncu, z uporabo Termux:API dobimo:<\/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>V datoteko source lahko vstavite katerikoli tekst, logi\u010dno razdeljen na vrstice, jaz sem se odlo\u010dil, da vstavim aforizme:<\/p>\n<p>\n<b class=\"spoiler_title\">Seznam datoteke sourse<\/b><\/p>\n<pre><code class=\"plaintext\">Iskrenost ni je istina. L. Laval\nIzdr\u017ei i uzdr\u017ei se. Epiktet\nPlemenito je samo ono \u0161to je nesebi\u010dno. J. La Bruy\u00e8re\nBudi razborito hrabar. B. Gracian\nDobrota je bolja od lepote. G. Heine\nZa velike stvari potrebno je neumorno postojano. F. Voltaire\nAko \u017eeli\u0161 da ti uvek ugode, slu\u017ei samom sebi. B. Franklin\nPrekomerna skromnost je ni\u0161ta drugo nego skrivena ponositost. A. Chenier\nVeoma pametnim ljudima po\u010dinju da ne veruju kada vide njihovu zbunjenost. F. Nietzsche\nSiroma\u0161tvo ukazuje na nedostatak sredstava, a ne na nedostatak plemenitosti. D. Boccaccio\nTreba se \u010duvati da skromnost ne dovede do pon\u017eenja. A. Bakihanov\nKo odustaje od mnogo toga, mo\u017ee mnogo toga da priu\u0161ti. J. Chardon\nKada nam pla\u0107aju za plemenit postupak, on nam se oduzima. N. Chamfort\nNije stra\u0161no ne dobiti ni\u0161ta, ali je ru\u017eno izgubiti ono \u0161to se dobilo. Klavdije Elijan\nLak\u0161e je strpljivo podnositi ono \u0161to ne mo\u017eemo ispraviti. Horacije\nUmorim se \u010dekaju\u0107i, ali koliko bi bilo gore kada ne bismo imali \u0161ta da \u010dekamo. B. Shaw\nSve dolazi na vreme, ako ljudi umeju da \u010dekaju. F. Rabelais\nSvojim strpljenjem mo\u017eemo posti\u0107i vi\u0161e nego snagom. E. Burke\nTreba znati podnositi ono \u0161to se ne mo\u017ee izbe\u0107i. M. Montaigne\nKo je u delu hrabar, taj se ne boji re\u010di. Sofokle\nNe volim se boriti, volim pobe\u0111ivati. B. Shaw\nU\u017ealjeni i pritisnuti ma\u010dak pretvara se u tigra. M. Cervantes\nDostojna osoba ne ide tu\u0111im stopama. Konfu\u010dije\nVeliki um \u0107e pokazati svoju snagu ne samo u ume\u0107u razmi\u0161ljanja, nego i u ume\u0107u \u017eivljenja. R. Emerson\nSlava - nije profitabilna roba. Skupa je i lo\u0161e se odr\u017eava. O. Balzac\nUmerenost i prikladnost u razgovorima vrede vi\u0161e od elokvencije. F. Bacon\nKo ne zna da \u0107uti, ne mo\u017ee ni da govori. Seneka Mla\u0111i\nDobre manire se sastoje od malih \u017ertava. F. Chesterfield\nDobri \u010dovek nije onaj ko ume da \u010dini dobro, ve\u0107 onaj ko ne ume da \u010dini zlo. V. Klu\u010devski\nNe izgovarajte nepovratne sudove! Avgustin\nNi\u0161ta previ\u0161e! Solon<\/code><\/pre>\n<p><\/p>\n<p>Ostalo je da kreiramo podprogram koji \u0107e izvla\u010diti slu\u010dajnu liniju iz datoteke source.<br \/>\nNapi\u0161imo algoritam rada podprograma:<\/p>\n<p><\/p>\n<ol>\n<li>Otvaramo datoteku source<\/li>\n<li>Brojimo broj linija u otvorenoj datoteci<\/li>\n<li>Zatvaramo datoteku (nema potrebe da je bespotrebno dr\u017eimo otvorenom)<\/li>\n<li>Generiramo naklju\u010dne celo \u0161tevilo znotraj \u0161tevila vrstic datoteke source<\/li>\n<li>Otvaramo datoteku source<\/li>\n<li>Izpi\u0161emo vrstico pod \u0161tevilko naklju\u010dno generiranega \u0161tevila<\/li>\n<li>Zapremo datoteko<\/li>\n<\/ol>\n<p><\/p>\n<p>Uresni\u010dujemo algoritem v Pythonu (pi\u0161em pod Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  # uvozimo za generiranje naklju\u010dnih \u0161tevil\nimport os  # za pridobitev poti\n\npath = os.path.abspath(__file__)  # pridobimo neposredno pot do datoteke rndstr.py\npath = os.path.dirname(path)  # spremenimo v pot do direktorija\npath = path + 'source'  # spremenimo v pot do datoteke source\n\nf = open(path)  # odpiramo datoteko\ni = 0  # ponastavimo \u0161tevec\nfor str in f: i+=1  # \u0161tetje vrstic datoteke\nf.close  # zapremo datoteko\n\nj = int(round(i * random.random()))  # generiramo celo naklju\u010dno \u0161tevilo od 0 do i\n\nf = open(path)  # odpiramo datoteko\ni = 0  # ponastavimo \u0161tevec\nfor str in f:  # prebiramo vrstice iz datoteke\n    if i == j:  # \u010de je \u0161tevec vrstic enak naklju\u010dno generiranemu \u0161tevilu\n        print (str, end='')  # izpi\u0161emo vrstico brez preloma vrstice\n        break  # zapustimo zanko\n    i+=1  # pove\u010damo \u0161tevec za 1\nf.close  # zapremo datoteko<\/code><\/pre>\n<p><\/p>\n<p>Ko so datoteke ustvarjene in zabele\u017eene, je potrebno dati pravice za izvajanje datoteki <code>rndstr.sh<\/code>, in ustvariti alias za hitro zagon.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Zdaj, \u010de vpi\u0161ete v terminal <code>rnst<\/code> bomo dobili v odlo\u017ei\u0161\u010de naklju\u010den aforizem, ki ga lahko, na primer, uporabimo v komunikaciji.<\/p>\n<p><\/p>\n<p>Tako smo napisali vsaj nekaj koristnega. Razmeroma koristnega.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Nameravno v zadnjem koraku nisem prilo\u017eil posnetkov zaslona in nisem podrobno razlo\u017eil nekaterih dejanj, temve\u010d sem zapisal le vsebino datotek, da bi bralci imeli prilo\u017enost delati samostojno.<\/p>\n<p><\/p>\n<p>Na tem 'Termux korak za korakom' bi verjetno bilo pametno zaklju\u010diti. Seveda so to le prvi koraki, sedaj pa lahko nadaljujete naprej sami.<\/p>\n<p><\/p>\n<p>Sprva sem nameraval pokazati, kako uporabljati nmap, sqlmap, vendar je \u017ee brez mene na to temo veliko \u010dlankov. \u010ce \u017eelite, da nadaljujem serijo 'Termux korak za korakom', je spodaj anketa, v komentarjih pa lahko predlagate, o \u010dem drugem naj pi\u0161em.<\/p>\n<p class=\"for_users_only_msg\">Samo registrovani korisnici mogu u\u010destvovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molim vas.<\/p>\n<h2 class=\"default-block__polling-title\">Nadaljevati \u201eTermux korak za korakom\u201c?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Da<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ne<\/p>\n<\/li>\n<\/ul>\n<p>    Glasovali so 2 uporabnika. Nih\u010de se ni vzdr\u017eal.<br \/>\n<br \/>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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 korak za korakom (Del 2) | ProHoster","description":"V prej\u0161njem delu smo se spoznali z osnovnimi ukazi Termuxa, nastavili SSH povezavo z ra\u010dunalnikom, se nau\u010dili ustvarjati aliase in.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}