{"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\/et\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux samm-sammult (Osa 2).","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Uues <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">eelmisel osal<\/a><\/noindex> Me tutvustasime Termuxi p\u00f5hikomandeid, s\u00e4ttisime SSH \u00fchenduse arvutiga, \u00f5ppisime looma alias'e ja installisime m\u00f5ned kasulikud utiliidid. Seekord astume veelgi kaugemale, me:<\/p>\n<p><\/p>\n<ul>\n<li>saame teada Termux:API-st<\/li>\n<li>installime Python'i ja nano, samuti kirjutame 'Tere, maailm!' Pythonis<\/li>\n<li>\u00f5pime tundma bash-skripte ja kirjutame skripti, mis kasutab Termux:API-d<\/li>\n<li>kasutades bash-skripti, Termux:API-d ja Python\u2019it kirjutame lihtsa programmi <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Kuna me n\u00fc\u00fcd m\u00f5istame, mida sisestatud k\u00e4skudel teha lasta, siis j\u00e4rgmise sammu juures ei hakka ma iga toimingut nii p\u00f5hjalikult seletama, kuid seal, kus v\u00f5ivad olla raskused, annan kindlasti selgitusi.<\/p>\n<p><\/p>\n<p>Ma kasutan sageli alias'e, seega on selles osas kasutatud l\u00fchendid siin n\u00e4idatud:<\/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>Plaan on valmis, v\u00f5ime alustada! Ja loomulikult \u00e4rge unustage 'maagilist Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Vaata osa 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Samm 4<\/h2>\n<p><\/p>\n<h3>S\u00fcveneme Termux:API kr\u00fcptosse<\/h3>\n<p><\/p>\n<p><i>API, kui palju on selle s\u00f5na sees kooderi s\u00fcdame jaoks kokkupuuteid<\/i><\/p>\n<p><\/p>\n<p>Kui Termux:API teemat k\u00f5rvale j\u00e4tta, siis k\u00f5ik meie sammud oleks v\u00f5inud kokku v\u00f5tta m\u00f5ne bro\u0161\u00fc\u00fcri t\u00fc\u00fcpi 'Linux algajatele' \u00fctlemisse, nagu \u00f5igesti m\u00e4rgiti esimese osa kommentaarides.<\/p>\n<p><\/p>\n<p>Esmalt installime Termux:API Google Play turult (p\u00e4rast tasub Termuxi taask\u00e4ivitada):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seej\u00e4rel peame Termuxi konsoolis installima API paketi:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # \u00c4rge unustage alias'e\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Eksperimenteerin Android 5.1.1 peal, Android 7 omanikele tuleb Termux:API \"katte alla v\u00f5tta\", minnes 'Seaded' &gt; 'Kaitstud rakendused', vastasel juhul API kutsete, nagu <code>termux-battery-status<\/code>, toimingud j\u00e4\u00e4vad seisma. (Vaata. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">projekt wiki<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd on aeg tutvuda saadud v\u00f5imalustega l\u00e4hemalt. K\u00f5ige v\u00e4rskemat ja p\u00f5hjalikumat kirjeldust Termux:API-st leiab aadressilt <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">projekt wiki<\/a><\/noindex>. \u00dcritan valida k\u00f5ige silmatorkavama ja huvitavama, mis aitab k\u00e4e harjutamisel edasiste iseseisvate t\u00f6\u00f6de jaoks.<\/p>\n<p><\/p>\n<h3>M\u00f5ned n\u00e4ited Termux:API-st <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nTagastab aku oleku<br \/>\n<img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nSeab ekraani heleduse vahemikus 0 kuni 255<br \/>\n<img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nKuvab ajutise h\u00fcpikteate<br \/>\n<img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nL\u00fclitab taskulambi sisse<br \/>\n<img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nTagastab viimase Wi-Fi v\u00f5rgu skaneerimise teabe<br \/>\n<img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Pole raske m\u00e4rgata, et tagastatud v\u00e4\u00e4rtused on stringid, s\u00f5nastikud, s\u00f5nastike loendid, \u00fcldiselt andmet\u00fc\u00fcbid, millega Python suurep\u00e4raselt t\u00f6\u00f6tab, seega installime j\u00e4rgmise sammuna selle.<\/p>\n<p><\/p>\n<h2>Samm 5<\/h2>\n<p><\/p>\n<h3>Paigaldame Python'i ja nano<\/h3>\n<p><\/p>\n<p>Python'i installimiseks kirjutame terminalis:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd on meil installitud Python 2 ja 3.<\/p>\n<p><\/p>\n<p>Artikli kirjutamise k\u00e4igus avastasin veel \u00fche tekstiredaktori, nano, mis meeldib mulle rohkem kui vim, paigaldame selle:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Seda on lihtsam kasutada kui vim'i ja nano'l on s\u00f5bralikum kasutajaliides. <i>Android-seadmest on siiski mugavam kasutada vim'i.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld Pythonis Termuxis<\/h3>\n<p><\/p>\n<p>Tegelikult oleks olnud v\u00f5imalik ka ilma selle punktita hakkama saada, kuid Python'i paigaldamine Termux'i ja HelloWorld'i kirjutamata j\u00e4\u00e4mine on minu arvates vale.<\/p>\n<p><\/p>\n<p>Ma ei p\u00fc\u00fca kedagi Python'iga \u00f5petada, nii et need, kes ei tea, saavad lihtsalt koodi kopeerida (v\u00f5i hakata iseseisvalt \u00f5ppima, \u00f5nneks on kirjandust piisavalt), ja need, kes teavad, saavad ise midagi kirjutada. Ja ma 'k\u00f5rval tegelikult' n\u00e4itan ka, kuidas terminalis ilma redigeerijata teksti kirjutada.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Kui allikat ei t\u00e4psustata (m\u00e4letan, et cat 1.txt &gt; 2.txt)\n# siis cat v\u00f5tab andmed standardse sisendi voogust,\n# lihtsamalt \u00f6eldes klaviatuurilt sissetulev.\n\nstr = 'Hello, world!' # m\u00e4\u00e4rame muutuja str v\u00e4\u00e4rtuse \"Hello, world!\"\nprint (str) # Prindime ekraanile muutuja str v\u00e4\u00e4rtuse\n\n# Ctrl + D l\u00f5petab sisendi ja salvestab faili (hello-world.py)\n\npy hello-world.py # K\u00e4ivitame faili (py on alias python'i jaoks)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui sisestamise protsessis sa ei m\u00e4rganud viga ning oled juba Enter'it vajutanud, siis ei saa sa \u00fcle minna eelmisse ritta, l\u00f5petamiseks vajuta Ctrl + D (v\u00f5id ka t\u00e4ielikult katkestada Ctrl + Z) ja korda k\u00f5ike algusest. Kuna kasutasime '&gt;' siis faili kirjutatakse t\u00e4ielikult \u00fcle. Seet\u00f5ttu ei soovita ma sellist sisestamismeetodit kasutada, kui sa ei ole kindel, et kirjutad koodi kohe ilma vigadeta.<\/p>\n<p><\/p>\n<h2>Samm 6<\/h2>\n<p><\/p>\n<h3>Bash-skripti<\/h3>\n<p><\/p>\n<p>Bash-skripti on suurep\u00e4rane viis terminali t\u00f6\u00f6 automatiseerimiseks. Skript on fail, mis on .sh laiendiga (laiend ei ole kohustuslik) ja sisaldab kogumit terminali k\u00e4ske, millest osa oleme juba \u00f5ppinud. Siin on <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">enamik k\u00e4skude loetelu<\/a><\/noindex>, k\u00f5ik peaks toimima, kuid pidage meeles, et see on nimekiri 't\u00e4iskasvanud' Linuxile, mitte Termuxile, ja lihtne. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">suurep\u00e4rane materjal bash-skriptide kohta<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Scriptide abil saab automatiseerida pea k\u00f5iki monotoonseid toiminguid. Kirjutame k\u00f5ige lihtsama bash-skripti, mis v\u00e4ljastab v\u00e4\u00e4rtuse, mis on ise loodud, ja kasutan taas cat'i; te saate kasutada normaalset tekstiredaktorit, aga eriti soovijad v\u00f5ivad harjutada echo'ga.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Tere, Habr!\"\n# export loob muutujat str\n# ja m\u00e4\u00e4rab sellele v\u00e4\u00e4rtuse \"Tere, Habr!\"\n# \u00c4rge j\u00e4tke t\u00fchikuid enne ja p\u00e4rast '='\n\necho $str # Muutujatele viitamiseks tuleb nende ette panna '$'\n\n# Ctrl + D\n\n# .\\\/test.sh skripti k\u00e4ivitamiseks, kuid kui seda n\u00fc\u00fcd teha, tekib viga\n# vea v\u00e4ltimiseks peab fail test.sh olema t\u00e4itmiseks lubatud\n\nchmod +x test.sh\n# chmod muudab p\u00e4\u00e4su\u00f5igusi (+ lisada \/ - eemaldada)\n# '+x' t\u00e4hendab, et teeme faili t\u00e4itmiseks lubatuks\n\n.\\\/test.sh # K\u00e4ivitame oma skripti t\u00e4itmise<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash-skript Termux:API jaoks<\/h3>\n<p><\/p>\n<p>Kiri kirjutame juba miskit, mis erineb kuulsatest HelloWorld'idest, aga on sama kasutu. Meie skript teeb j\u00e4rgmist:<\/p>\n<p><\/p>\n<ol>\n<li>teeb API p\u00e4ringu termux-battery-status<\/li>\n<li>salvestab saadud andmed faili test.txt<\/li>\n<li>v\u00e4ljastab faili andmed ekraanile<\/li>\n<li>t\u00e4idab varem kirjutatud programmi hello-world.py<\/li>\n<li>saadud programmist andmed salvestatakse faili test.txt<\/li>\n<li>v\u00e4ljastab faili andmed ekraanile<\/li>\n<li>\u00fclewied kirjutatakse andmed failist vahem\u00e4llu<\/li>\n<li>v\u00e4ljastatakse ekraanile vahem\u00e4lu sisu<\/li>\n<li>v\u00e4ljastatakse h\u00fcpikakna teade vahem\u00e4lu andmetest<\/li>\n<\/ol>\n<p><\/p>\n<p>Esiteks loome t\u00f6\u00f6deldavale kaustale ja kopeerime sinna hello-world.py failina test.py, loome selles kaustas failid test.sh ja 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 loob failid\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd kirjutame failile test.sh skripti mis tahes mugaval viisil:<\/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>N\u00fc\u00fcd, olles bashscript kaustas, kirjutame <code>.\/test.sh<\/code> vaatame Android seadme terminalis:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux samm-sammult (Osa 2).\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd oleme kirjutanud kavandatud bash-skripti. Selle v\u00e4ljundit saab t\u00e4iendada konsolile iga toimingu t\u00e4itmise kohta teabe v\u00e4ljastamisega (echo abil), j\u00e4tan selle lugejate hooleks.<\/p>\n<p><\/p>\n<h2>Samm 7<\/h2>\n<p><\/p>\n<h3>Teeme l\u00f5puks midagi kasulikku<\/h3>\n<p><\/p>\n<p><i>Suhteliselt kasulik<\/i><\/p>\n<p><\/p>\n<p>Koostame tehnilise \u00fclesande<br \/>\nRakendus peaks p\u00e4rast k\u00e4ivitamist kopeerima vahem\u00e4llu juhusliku stringi failist ja teavitama sellest h\u00fcpikakna teatega.<\/p>\n<p><\/p>\n<p>V\u00f5tame aluseks bash-skripti, juhusliku stringi failist ekstraktime Python'i abiprogrammiga. Koostame skripti t\u00f6\u00f6plaani:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00e4ivitada abiprogramm<\/li>\n<li>Kanda tulemus alaprogrammi t\u00f6\u00f6st l\u00f5ikepresidendil<\/li>\n<li>Kuva h\u00fcpikaken<\/li>\n<\/ol>\n<p><\/p>\n<p>Leppige kokku rakenduse kataloogide ja failide nimed:<\/p>\n<p><\/p>\n<ul>\n<li>kataloog rndstr kodukataloogis\n<ul>\n<li>source \u2014 fail, millest v\u00f5tame read<\/li>\n<li>rndstr.py \u2014 alaprogramm, mis v\u00e4ljastab juhusliku rea failist source konsoolis<\/li>\n<li>rndstr.sh \u2014 skriptifail<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Loome rakenduse katalooge ja liikudes sinna, loome seal failid.<\/p>\n<p><\/p>\n<p>Skripti plaani kahte esimest punkti saab kombineerida torustikus, tulemuseks, kasutades Termux:API saame:<\/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>Faili source saate paigutada mis tahes teksti, mis on loogiliselt jagatud ridadeks, otsustasin paigutada aforisme:<\/p>\n<p>\n<b class=\"spoiler_title\">Faili source loetelu<\/b><\/p>\n<pre><code class=\"plaintext\">Siirus ei ole t\u00f5de. L. Lavelle\nOle kannatlik ja peatuma. Epiktet\nAinult see on \u00fcllas, mis on isetu. J. La Bruy\u00e8re\nOle m\u00f5istlikult julge. B. Gracian\nHeadus on parem kui ilu. G. Heine\nSuurep\u00e4raste tegude jaoks on vajalik v\u00e4simatu p\u00fcsivus. F. Voltaire\nKui sa tahad, et sulle alati meelditaks, teenindage iseennast. B. Franklin\nLiigne tagasihoidlikkus on mitte midagi muud kui varjatud uhkus. A. Chenier\n\u00dckski v\u00e4ga intelligentne inimene ei saa usaldusv\u00e4\u00e4rseks, kui teda n\u00e4hakse h\u00e4belikuna. F. Nietzsche\nVaesus n\u00e4itab vahendite puudumist, mitte \u00fcllasuse puudumist. D. Boccaccio\nPeame ettevaatlikud olema, et tagasihoidlikkus ei muutuks alanduseks. A. Bakikhanov\nKes loobub paljust, v\u00f5ib endale lubada palju. J. Chardon\nKui meile makstakse \u00fclla teo eest, siis v\u00f5tame selle meist \u00e4ra. N. Chamfort\nSugugi mitte saada - pole hirmutav, aga saadud kaotamine on kurb. Klaudius Elian\nOn kergem kannatada kannatlikult seda, mida me ei saa parandada. Horatius\nSa v\u00e4sid ootamise eest, aga kui halb oleks, kui ei olekski enam oodata. B. Shaw\nK\u00f5ik tuleb \u00f5igel ajal, kui inimesed oskavad oodata. F. Rabelais\nOma kannatlikkusega v\u00f5ime saavutada rohkem kui j\u00f5u abil. E. Burke\nPeame oskama taluda seda, mida ei saa v\u00e4ltida. M. Montaigne\nKes on teoses julge, ei karda s\u00f5nu. Sofokles\nMa ei armasta vaielda, ma armastan v\u00f5ita. B. Shaw\nSurvestatud ja nurka surutud kass muutub tiigriks. M. Cervantes\nAuv\u00e4\u00e4rne inimene ei k\u00e4i teiste j\u00e4lgedes. Konfutsius\nSuurep\u00e4rane meel n\u00e4itab oma j\u00f5udu mitte ainult m\u00f5tlemise oskuses, vaid ka elamise oskuses. R. Emerson\nKuulsus on kahjumlik kaup. See maksab palju, aga p\u00fcsib halvasti. O. Balzac\nPiiratus ja sobivus vestluses on v\u00e4\u00e4rtuslikumad kui k\u00f5neoskus. F. Bacon\nKes ei oska vaikida, ei oska ka r\u00e4\u00e4kida. Seneca Noorem\nHead kombed koosnevad v\u00e4ikestest ohvritest. F. Chesterfield\nHea inimene pole see, kes oskab head teha, vaid see, kes ei oska halba teha. V. Kljuchevsky\n\u00c4rge tehke p\u00f6\u00f6rdumatuid otsuseid! Augustinus\nNoh, mitte liiga palju! Solon<\/code><\/pre>\n<p><\/p>\n<p>Meil on j\u00e4\u00e4nud luua alamprogrammi, mis t\u00f5mbab juhusliku rea failist source.<br \/>\nKirjutame v\u00e4lja alamprogrammi t\u00f6\u00f6 algoritmi:<\/p>\n<p><\/p>\n<ol>\n<li>Avame faili source<\/li>\n<li>Loeme avatud failis olevate ridade arvu<\/li>\n<li>Sulgeme faili (pole m\u00f5tet hoida seda liigse aja jooksul \u00f6ppinguna)<\/li>\n<li>Kogume juhuslik t\u00e4isarv faili source ridade arvust<\/li>\n<li>Avame faili source<\/li>\n<li>V\u00e4ljastame juhusliku numbri j\u00e4rgi vastava rea<\/li>\n<li>Sulgeme faili<\/li>\n<\/ol>\n<p><\/p>\n<p>Rakendame algoritmi Pythonis (kirjutan Python 3.7 jaoks):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  #  juhuslike arvude genereerimiseks\nimport os  #  tee saamiseks\n\npath = os.path.abspath(__file__)  #  saadame otse tee faili rndstr.py\npath = os.path.dirname(path)  #  muudame tee kaustapuhuks\npath = path  + 'source'  #  muudame faili source teeks\n\nf = open(path)  #  avame faili\ni = 0  #  l\u00e4htestame loenduri\nfor str in f: i+=1  #  loendame faili read\nf.close  #  sulgeme faili\n\nj = int(round(i * random.random()))  #  genereerime juhusliku t\u00e4isarvu vahemikus 0 kuni i\n\nf = open(path)  #  avame faili\ni = 0  #  l\u00e4htestame loenduri\nfor str in f:  #  k\u00e4ime failis l\u00e4bi read\n    if i == j:  #  kui loenduri v\u00e4\u00e4rtus on genereeritud numbriga sama\n        print (str, end='')  #  v\u00e4ljastame rea ilma uuele reale liikumata\n        break  #  l\u00f5petame ts\u00fckli\n    i+=1  #  suurendame loenduri v\u00e4\u00e4rtust 1 v\u00f5rra\nf.close  #  sulgeme faili<\/code><\/pre>\n<p><\/p>\n<p>P\u00e4rast failide loomist ja kirjutamist tuleb faili k\u00e4ivitus\u00f5igused m\u00e4\u00e4rata <code>rndstr.sh<\/code>, ja luua alias kiireks k\u00e4ivitamiseks.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd, kui sisestate terminalis <code>rnst<\/code> , saame vahem\u00e4llu juhusliku aforismi, mida v\u00f5ib n\u00e4iteks kasutada vestluses.<\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd oleme kirjutanud v\u00e4hemalt midagi kasulikku. Suhteliselt kasulikku.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>J\u00e4tan viimases etapis tahtlikult vahele ekraaniv\u00f5tted ja ei k\u00e4sitle detailides m\u00f5ningaid toiminguid, tuues v\u00e4lja ainult failide sisu, et lugejad saaksid ise t\u00f6\u00f6tada.<\/p>\n<p><\/p>\n<p>Sellega v\u00f5ib 'Termux samm-sammult' l\u00f5petada. Loomulikult on need vaid esimesed sammud, kuid n\u00fc\u00fcd saate ise edasi liikuda.<\/p>\n<p><\/p>\n<p>Alguses plaanisin n\u00e4idata, kuidas kasutada nmap'i ja sqlmap'i, kuid ilma minuta on juba palju artikleid sellel teemal. Kui soovite, et ma j\u00e4tkaks 'Termux samm-sammult' ts\u00fcklit, siis allpool on k\u00fcsitlus ja kommentaarides v\u00f5ite ettepanekuid teha, millest veel kirjutada.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Kas j\u00e4tkata \"Termux samm-sammult\"?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jah<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ei<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 2 kasutajat. Erakondi ei ole.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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 samm-sammult (Osa 2) | ProHoster","description":"Eelmises osas tutvusime Termux'i p\u00f5hik\u00e4skudega, seadsime SSH \u00fchenduse arvutiga, \u00f5ppisime looma alias'e.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}