{"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\/hr\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux korak po korak (Dio 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>U <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">pro\u0161log dijela<\/a><\/noindex> Upoznali smo se s osnovnim komandama Termux-a, postavili SSH vezu s ra\u010dunalom, nau\u010dili kako kreirati alias-e i instalirali nekoliko korisnih alata. Ovaj put idemo korak dalje, s vama \u0107emo:<\/p>\n<p><\/p>\n<ul>\n<li>saznati vi\u0161e o Termux:API<\/li>\n<li>instalirati Python i nano, kao i napisati \"Hello, world!\" u Pythonu.<\/li>\n<li>saznati o bash skriptama, i napisati skriptu koriste\u0107i Termux:API<\/li>\n<li>koriste\u0107i bash skriptu, Termux:API i Python napisati jednostavan program <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Budu\u0107i da sada razumijemo \u0161to rade unesene komande, od sljede\u0107eg koraka ne\u0107u detaljno obja\u0161njavati svaku radnju, ali tamo gdje mogu nastati pote\u0161ko\u0107e, obavezno \u0107u pojasniti.<\/p>\n<p><\/p>\n<p>\u010cesto koristim alias-e, stoga su skra\u0107enice kori\u0161tene u ovom dijelu prikazane ovdje:<\/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>Plan je spreman, mo\u017eemo po\u010deti! I naravno, ne zaboravite na \"\u010darobni Tab\" (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Vidi Dio 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Korak 4<\/h2>\n<p><\/p>\n<h3>Zaronimo dublje u ze\u010dju rupu Termux:API<\/h3>\n<p><\/p>\n<p><i>API, koliko mnogo u ovoj rije\u010di se slilo za srce programera<\/i><\/p>\n<p><\/p>\n<p>Ako ne uzimamo u obzir temu Termux:API, na\u0161i koraci mogli su se svesti na jednostavno prepri\u010davanje nekog bro\u0161ure poput \"Linux za po\u010detnike\", kako su ispravno primijetili u komentarima prve dijela.<\/p>\n<p><\/p>\n<p>Za po\u010detak, instaliramo Termux:API iz Google Play Trgovine (nakon toga \u0107e biti korisno ponovno pokrenuti Termux):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sljede\u0107e, trebamo instalirati API paket u Termux konzoli:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Ne zaboravimo na alias-e\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Za eksperimentiranje koristim Android 5.1.1, a za vlasnike Android 7 potrebno je \"za\u0161tititi\" Termux: API, odlaskom u 'Postavke' &gt; 'Za\u0161ti\u0107ene aplikacije', ina\u010de \u0107e pozivi API-a, poput <code>termux-battery-status<\/code>, zamrznuti. (Vidi. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki projekta<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Sada se isplati bolje upoznati sa ste\u010denim mogu\u0107nostima. Najnoviji i najdetaljniji opis Termux:API mo\u017ee se prona\u0107i na <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki projekta<\/a><\/noindex>. Poku\u0161a\u0107u odabrati najinformativnije i zanimljive, \u0161to \u0107e omogu\u0107iti usavr\u0161avanje za samostalni rad u budu\u0107nosti.<\/p>\n<p><\/p>\n<h3>Nekoliko primjera Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nVra\u0107a stanje baterije<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nPostavlja svjetlinu ekrana od 0 do 255<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nPrikazuje privremenu iska\u010du\u0107u obavijest<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nUklju\u010duje svjetiljku<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nVra\u0107a informacije o posljednjem skeniranju Wi-Fi mre\u017ea<br \/>\n<img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Nije te\u0161ko primijetiti da su vra\u0107ene vrijednosti stringovi, rje\u010dnici, liste rje\u010dnika, op\u0107enito tipovi podataka s kojima Python radi odli\u010dno, stoga \u0107emo ga sljede\u0107i korak instalirati.<\/p>\n<p><\/p>\n<h2>Korak 5<\/h2>\n<p><\/p>\n<h3>Instalirajmo Python i nano<\/h3>\n<p><\/p>\n<p>Za instalaciju Pythona upisujemo u terminalu:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Sada imamo instalirane Python 2 i 3.<\/p>\n<p><\/p>\n<p>Tijekom rada na \u010dlanku otkrio sam jo\u0161 jedan tekstualni editor nano, koji mi se vi\u0161e svi\u0111a od vima, pa hajde da ga instaliramo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Kori\u0161tenje je jednostavnije nego s vim-om, a nano ima prijateljskiji korisni\u010dki su\u010delje. <i>Na Android ure\u0111aju je ipak lak\u0161e koristiti vim.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld u Pythonu u Termuxu<\/h3>\n<p><\/p>\n<p>U su\u0161tini, mogli smo pro\u0107i i bez ove to\u010dke, ali staviti Python u Termux i ne napisati HelloWorld bi, po mom mi\u0161ljenju, bilo neprikladno.<\/p>\n<p><\/p>\n<p>Nisam sebi postavio cilj u\u010diti nekoga Python-u, tako da oni koji ne znaju mogu jednostavno kopirati kod (ili po\u010deti u\u010diti samostalno, sre\u0107om, ima dovoljno literature), dok oni koji znaju mogu sami ne\u0161to stvoriti. A ja \u0107u \"u me\u0111uvremenu\" pokazati kako unositi tekst u terminal bez ure\u0111iva\u010da.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Ako ne navedete izvor (podsje\u0107am cat 1.txt &gt; 2.txt)\n# onda \u0107e cat uzimati podatke iz standardnog ulaznog toka,\n# drugim rije\u010dima, ono \u0161to se unosi s tipkovnice.\n\nstr = 'Hello, world!' # dodjeljujemo varijabli str vrijednost \"Hello, world!\"\nprint (str) # ispisujemo na ekran vrijednost iz varijable str\n\n# Ctrl + D zavr\u0161ava unos i snima datoteku (hello-world.py)\n\npy hello-world.py # pokre\u0107emo datoteku (py je alias za python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako tijekom unosa niste primijetili gre\u0161ku i ve\u0107 ste pritisnuli Enter, ne\u0107ete mo\u0107i pre\u0107i na prethodni redak, stoga zavr\u0161ite unos pritiskom Ctrl + D (mo\u017eete potpuno prekinuti Ctrl + Z) i ponovite sve od po\u010detka. Budu\u0107i da smo koristili '&gt;', datoteka \u0107e biti potpuno prepisana. Zbog toga ne preporu\u010dujem kori\u0161tenje ove metode unosa ako niste sigurni da \u0107ete odmah napisati kod bez gre\u0161aka.<\/p>\n<p><\/p>\n<h2>Korak 6<\/h2>\n<p><\/p>\n<h3>Bash skripte<\/h3>\n<p><\/p>\n<p>Bash skripte su odli\u010dan na\u010din za automatizaciju rada s terminalom. Skripta je datoteka s ekstenzijom .sh (ekstenzija nije obavezna) koja sadr\u017ei skup komandi terminala, od kojih smo neke ve\u0107 nau\u010dili. Evo <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">popisa ve\u0107ine komandi<\/a><\/noindex>, sve bi trebalo raditi, ali obratite pa\u017enju da je ovo popis za \"odrasli\" Linux, a ne za Termux, i eto jednostavno <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">izvrsni materijal o bash skriptama<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pomo\u0107u skripti mo\u017eemo automatizirati gotovo sve monotone radnje. Napisat \u0107emo najjednostavniju bash-skriptu koja ispisuje vrijednost iz njome definirane varijable. Ponovno \u0107u iskoristiti cat, a vi mo\u017eete koristiti obi\u010dan tekstualni urednik; oni koji se \u017eele malo potruditi mogu koristiti echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Bok, Habr!\"\n# export stvara varijablu str\n# i dodjeljuje joj vrijednost \"Bok, Habr!\"\n# Nemojte stavljati razmake prije i poslije '='\n\necho $str # Za pristup varijablama ispred njih stavite '$'\n\n# Ctrl + D\n\n# .\/test.sh za pokretanje skripte, ali ako to u\u010dinite sada, bit \u0107e gre\u0161ka\n# da biste izbjegli gre\u0161ku, potrebno je u\u010diniti datoteku test.sh izvr\u0161ivom\n\nchmod +x test.sh\n# chmod mijenja dozvole (+ dodati \/ - oduzeti)\n# \u2018+x\u2019 zna\u010di da \u010dinimo datoteku izvr\u0161ivom\n\n.\/test.sh # Pokre\u0107emo izvr\u0161avanje na\u0161e skripte<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash-skripta s Termux:API<\/h3>\n<p><\/p>\n<p>Ajmo napisati ve\u0107 ne\u0161to druga\u010dije od poznatih HelloWorld-a, ali jednako beskorisno. Na\u0161a skripta \u0107e:<\/p>\n<p><\/p>\n<ol>\n<li>izvr\u0161avati API zahtjev termux-battery-status<\/li>\n<li>spremati dobivene podatke u datoteku test.txt<\/li>\n<li>ispisivati podatke iz datoteke na ekran<\/li>\n<li>izvr\u0161avati prethodno napisan program hello-world.py<\/li>\n<li>dobivene podatke iz programa zapisivati u datoteku test.txt<\/li>\n<li>ispisivati podatke iz datoteke na ekran<\/li>\n<li>prenositi podatke iz datoteke u me\u0111uspremnik<\/li>\n<li>ispisivati sadr\u017eaj me\u0111uspremnika na ekran<\/li>\n<li>ispisivati iska\u010du\u0107u poruku s podacima iz me\u0111uspremnika<\/li>\n<\/ol>\n<p><\/p>\n<p>Prvo \u0107emo stvoriti mapu za rad i kopirati hello-world.py kao test.py, zatim \u0107emo u toj mapi stvoriti datoteke test.sh i 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 stvara datoteke\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Sada na bilo koji prikladan na\u010din zapisujemo skriptu u datoteku test.sh:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\n\n# \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c #! (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0448\u0435\u0431\u0430\u043d\u0433)\n# \u043f\u043e\u0441\u043b\u0435 \u0438\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u0448\u0435\u043b\u043b \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u043a\u0440\u0438\u043f\u0442\n\nclear # \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u043e\u043a\u043d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430\n\ntermux-battery-status &gt; test.txt # \u043f\u0443\u043d\u043a\u0442\u044b 1 \u0438 2 \u0438\u0437 \u043d\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430\n\ncat test.txt # \u043f\u0443\u043d\u043a\u0442 3\n\npython test.py &gt; test.txt # \u043f\u0443\u043d\u043a\u0442 4 \u0438 5\n\ncat test.txt # \u043f\u0443\u043d\u043a\u0442 6\n\ncat test.txt | termux-clipboard-set # \u043f\u0443\u043d\u043a\u0442 7\n# | \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440. \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0433\u043e\n\ntermux-clipboard-get # \u043f\u0443\u043d\u043a\u0442 8\n\ntermux-clipboard-get | termux-toast # \u043f\u0443\u043d\u043a\u0442 9<\/code><\/pre>\n<p><\/p>\n<p>Sada se nalaze\u0107i u mapi bashscript pi\u0161emo <code>.\/test.sh<\/code> pratimo na terminalu na Android ure\u0111aju:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux korak po korak (Dio 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eto, napisali smo planiranu bash-skriptu. Mo\u017eda bi bilo dobro dodati ispis informacija o izvr\u0161enju svake radnje (pomo\u0107u echo); to ostavljam \u010ditateljima.<\/p>\n<p><\/p>\n<h2>Korak 7<\/h2>\n<p><\/p>\n<h3>U\u010dinit \u0107emo ne\u0161to korisno<\/h3>\n<p><\/p>\n<p><i>Relativno korisno<\/i><\/p>\n<p><\/p>\n<p>Formulirat \u0107emo tehni\u010dki zadatak<br \/>\nAplikacija bi nakon pokretanja trebala staviti nasumi\u010dnu re\u010denicu iz datoteke u me\u0111uspremnik i obavijestiti o tome iska\u010du\u0107om porukom.<\/p>\n<p><\/p>\n<p>Osnovat \u0107emo se na bash-skripti, a nasumi\u010dnu re\u010denicu iz datoteke izvla\u010dit \u0107emo pomo\u0107u podprograma na Pythonu. Sastavit \u0107emo plan rada skripte:<\/p>\n<p><\/p>\n<ol>\n<li>Pokrenuti podprogram<\/li>\n<li>Prenesite rezultat rada podprograma u me\u0111uspremnik<\/li>\n<li>Prikazivanje iska\u010du\u0107e poruke<\/li>\n<\/ol>\n<p><\/p>\n<p>Odredimo nazive direktorija i datoteka aplikacije:<\/p>\n<p><\/p>\n<ul>\n<li>mapa rndstr u po\u010detnom direktoriju\n<ul>\n<li>source \u2014 datoteka iz koje \u0107emo uzimati retke<\/li>\n<li>rndstr.py \u2014 podprograma koja ispisuje nasumi\u010dni redak iz datoteke source<\/li>\n<li>rndstr.sh \u2014 datoteka skripte<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Kreiramo direktorij aplikacije i, premje\u0161taju\u0107i se u njega, kreiramo datoteke.<\/p>\n<p><\/p>\n<p>Prve dvije stavke plana skripte mogu se spojiti nizom, na kraju, koriste\u0107i Termux:API, dobijamo:<\/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>U datoteku source mo\u017eete staviti bilo koji tekst logi\u010dki razdvojen u retke, odlu\u010dio sam staviti aforizme:<\/p>\n<p>\n<b class=\"spoiler_title\">Isje\u010dak iz datoteke source<\/b><\/p>\n<pre><code class=\"plaintext\">Iskrenost nije istina. L. Lavelle\nTrpi i suzdr\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 velika dela neophodna je neumorna postojanost. F. Voltaire\nAko \u017eeli\u0161 da ti uvek udovoljavaju, slu\u017ei samom sebi. B. Franklin\nPretjerana skromnost nije ni\u0161ta drugo do skriveni ponos. A. Chenier\nVeoma pametnim ljudima po\u010dinju da ne veruju ako vide njihovu zbunjenost. F. Nietzsche\nSiroma\u0161tvo ukazuje na nedostatak sredstava, a ne na nedostatak plemenitosti. D. Boccaccio\nTrebalo bi se \u010duvati da skromnost ne odvede do poni\u017eenja. A. Bakihanov\nKo se odri\u010de mnogo toga, mo\u017ee si priu\u0161titi mnogo. J. Chardon\nKada nam plate za plemeniti postupak, oduzmu nam ga. N. Chamfort\nNije stra\u0161no ne dobiti ni\u0161ta, ali je neprijatno izgubiti ono \u0161to smo dobili. Klaudije Elijan\nLjubavnije je podnositi strpljivo ono \u0161to ne mo\u017eemo popraviti. Horacije\nUmorio si se od \u010dekanja, ali koliko je gore bilo da ne bi bilo ni\u010dega za \u010dekanje. B. Shaw\nSve dolazi na vreme, ako ljudi znaju \u010dekati. F. Rabelais\nSvojim strpljenjem mo\u017eemo posti\u0107i vi\u0161e nego snagom. E. Burke\nTrebalo bi znati podnositi ono \u0161to se ne mo\u017ee izbe\u0107i. M. Montaigne\nKo je hrabar u delu, ne pla\u0161i se re\u010di. Sofoklo\nNe volim se boriti, volim pobediti. B. Shaw\nZlostavljeni i pritisnuti ma\u010dak postaje tigar. M. Cervantes\nDostojna osoba ne ide tu\u0111im tragom. Konfucije\nVeliki um pokazat \u0107e svoju snagu ne samo u sposobnosti mi\u0161ljenja ve\u0107 i u sposobnosti \u017eivota. R. Emerson\nSlava je neprofitna roba. Skupa je, slabo se \u010duva. O. Balzac\nUmerenost i prikladnost u razgovorima vredniji su od ube\u0111ivanja. F. Bacon\nKo ne zna \u0107utati, ne zna ni govoriti. Seneka Mla\u0111i\nDobre manire \u010dine male \u017ertve. F. Chesterfield\nDobar \u010dovek nije onaj ko zna \u010diniti dobro, ve\u0107 onaj ko ne zna \u010diniti zlo. V. Klju\u010devi\u0107\nNe iznosite nepovratne sudove! Avgustin\nNema ni\u010dega previ\u0161e! Solon<\/code><\/pre>\n<p><\/p>\n<p>Preostaje da kreiramo podprogram za izvla\u010denje slu\u010dajnog niza iz datoteke source.<br \/>\nRazradimo algoritam rada podprograma:<\/p>\n<p><\/p>\n<ol>\n<li>Otvorite datoteku source<\/li>\n<li>Brojimo broj redova u otvorenoj datoteci<\/li>\n<li>Zatvorite datoteku (nema smisla dr\u017eati je otvorenom du\u017ee vreme)<\/li>\n<li>Generiramo nasumi\u010dni cijeli broj unutar broja redaka datoteke source<\/li>\n<li>Otvorite datoteku source<\/li>\n<li>Ispisujemo redak pod brojem generiranog broja<\/li>\n<li>Zatvaramo datoteku<\/li>\n<\/ol>\n<p><\/p>\n<p>Implementiramo algoritam u Pythonu (pi\u0161em pod Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  #  uvozim za generiranje nasumi\u010dnih brojeva\nimport os  #  za dobivanje putanje\n\npath = os.path.abspath(__file__)  #  dobivamo apsolutnu putanju do datoteke rndstr.py\npath = os.path.dirname(path)  #  pretvaramo u putanju do direktorija\npath = path  + 'source'  #  pretvaramo u putanju do datoteke source\n\nf = open(path)  #  otvaramo datoteku\ni = 0  #  inicijaliziramo broja\u010d\nfor str in f: i+=1  #  brojimo retke u datoteci\nf.close  #  zatvaramo datoteku\n\nj = int(round(i * random.random()))  #  generiramo cijeli nasumi\u010dni broj od 0 do i\n\nf = open(path)  #  otvaramo datoteku\ni = 0  #  inicijaliziramo broja\u010d\nfor str in f:  #  prolazimo kroz retke iz datoteke\n    if i == j:  #  ako je broja\u010d redaka jednak generiranom broju\n        print (str, end='')  #  ispisujemo redak bez prelaska u novi\n        break  #  izlazimo iz petlje\n    i+=1  #  pove\u0107avamo broja\u010d za 1\nf.close  #  zatvaramo datoteku<\/code><\/pre>\n<p><\/p>\n<p>Nakon \u0161to su datoteke kreirane i zapisane, potrebno je dodijeliti dozvole za izvr\u0161avanje datoteci <code>rndstr.sh<\/code>, i stvoriti alias za brzi pokret.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Sada, unose\u0107i u terminal <code>rnst<\/code> dobivamo u me\u0111uspremniku nasumi\u010dnu poslovicu koju, na primjer, mo\u017eemo koristiti u prepisci.<\/p>\n<p><\/p>\n<p>Eto, napisali smo ne\u0161to korisno. Relativno korisno.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Namjerno nisam prikazao snimke zaslona u posljednjem koraku i nisam detaljno obradio neke radnje, navode\u0107i samo sadr\u017eaj datoteka, kako bi \u010ditatelji imali priliku raditi sami.<\/p>\n<p><\/p>\n<p>Na ovom \"Termux korak po korak\", mislim da bi bilo dobro zavr\u0161iti. Naravno, ovo je samo prvi korak, ali sada mo\u017eete sami nastaviti dalje.<\/p>\n<p><\/p>\n<p>Isprva sam planirao pokazati u ovom ciklusu kako koristiti nmap, sqlmap, ali ve\u0107 postoji mnogo \u010dlanaka na tu temu bez mene. Ako imate \u017eelju da nastavim ciklus \"Termux korak po korak\", ispod se nalaze anketa, a u komentarima mo\u017eete predlo\u017eiti o \u010demu bih jo\u0161 mogao pisati.<\/p>\n<p class=\"for_users_only_msg\">Samo registrirani korisnici mogu sudjelovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molimo.<\/p>\n<h2 class=\"default-block__polling-title\">Nastaviti \"Termux korak po korak\"?<\/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>    Glasali su 2 korisnika. Nema suzdr\u017eanih.<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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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 po korak (Dio 2) | ProHoster","description":"U pro\u0161lom dijelu smo se upoznali s osnovnim naredbama Termuxa, postavili SSH vezu s PC-om, nau\u010dili kako stvarati alias-e i.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}