{"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\/sv\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux steg f\u00f6r steg (Del 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">den f\u00f6reg\u00e5ende delen<\/a><\/noindex> Vi har bekantat oss med de grundl\u00e4ggande kommandona i Termux, st\u00e4llt in en SSH-anslutning till datorn, l\u00e4rt oss att skapa alias och installerat n\u00e5gra anv\u00e4ndbara verktyg. Den h\u00e4r g\u00e5ngen ska vi ta ett steg l\u00e4ngre, vi kommer att:<\/p>\n<p><\/p>\n<ul>\n<li>f\u00e5 veta mer om Termux:API<\/li>\n<li>installera Python och nano, samt skriva 'Hello, world!' i Python.<\/li>\n<li>f\u00e5 veta om bash-skript och skriva ett skript med anv\u00e4ndning av Termux:API<\/li>\n<li>anv\u00e4nda ett bash-skript, Termux:API och Python f\u00f6r att skriva ett enkelt program <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Eftersom vi nu f\u00f6rst\u00e5r vad de inmatade kommandona g\u00f6r, kommer jag inte att beskriva varje steg s\u00e5 detaljerat fram\u00f6ver, men d\u00e4r det kan uppst\u00e5 sv\u00e5righeter kommer jag definitivt att f\u00f6rklara.<\/p>\n<p><\/p>\n<p>Jag anv\u00e4nder ofta alias, s\u00e5 f\u00f6rkortningarna som anv\u00e4nds i detta avsnitt visas h\u00e4r:<\/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>Planen \u00e4r klar, vi kan b\u00f6rja! Och gl\u00f6m sj\u00e4lvklart inte den 'magiska Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Se Del 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Steg 4<\/h2>\n<p><\/p>\n<h3>Vi dyker ner i kaninh\u00e5let Termux:API<\/h3>\n<p><\/p>\n<p><i>API, s\u00e5 mycket finns i detta ord f\u00f6r kodarens hj\u00e4rta<\/i><\/p>\n<p><\/p>\n<p>Om vi inte ber\u00f6r \u00e4mnet Termux:API, s\u00e5 kunde alla v\u00e5ra steg ha sammanfattats till en enkel \u00e5terber\u00e4ttelse av n\u00e5gon broschyr som 'Linux f\u00f6r nyb\u00f6rjare', vilket p\u00e5 r\u00e4tt s\u00e4tt p\u00e5pekades i kommentarerna till del ett.<\/p>\n<p><\/p>\n<p>F\u00f6rst installerar vi Termux:API fr\u00e5n Google Play Butik (det kan vara bra att starta om Termux efter\u00e5t):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e4refter beh\u00f6ver vi installera API-paketet i Termux-konsolen:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Kom ih\u00e5g aliasen\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>F\u00f6r experimenten anv\u00e4nder jag Android 5.1.1; f\u00f6r \u00e4gare av Android 7 m\u00e5ste du \"skydda\" Termux:API, genom att g\u00e5 till 'Inst\u00e4llningar' &gt; 'S\u00e4kerhetsappar', annars kan API-anrop som <code>termux-battery-status<\/code>, h\u00e4nga sig. (Se. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">projektets wiki<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Nu \u00e4r det dags att bekanta sig n\u00e4rmare med de f\u00f6rv\u00e4rvade m\u00f6jligheterna. Den senaste och mest detaljerade beskrivningen av Termux:API g\u00e5r att hitta p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">projektets wiki<\/a><\/noindex>. Jag ska f\u00f6rs\u00f6ka v\u00e4lja de mest tydliga och intressanta, som kommer att hj\u00e4lpa till att tr\u00e4na f\u00f6r framtida sj\u00e4lvst\u00e4ndigt arbete.<\/p>\n<p><\/p>\n<h3>N\u00e5gra exempel p\u00e5 Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\n\u00c5terger batteristatus<br \/>\n<img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nSt\u00e4ller in sk\u00e4rmens ljusstyrka fr\u00e5n 0 till 255<br \/>\n<img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nVisar en tillf\u00e4llig popup-notifikation<br \/>\n<img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nSl\u00e5r p\u00e5 ficklampan<br \/>\n<img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\n\u00c5terger information om den senaste Wi-Fi-n\u00e4tverksscanningen<br \/>\n<img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Det \u00e4r inte sv\u00e5rt att m\u00e4rka att de returnerade v\u00e4rdena \u00e4r str\u00e4ngar, ordb\u00f6cker, listor av ordb\u00f6cker, i allm\u00e4nhet datatyper som Python fungerar utm\u00e4rkt med, s\u00e5 n\u00e4sta steg blir att installera det.<\/p>\n<p><\/p>\n<h2>Steg 5<\/h2>\n<p><\/p>\n<h3>Vi installerar Python och nano<\/h3>\n<p><\/p>\n<p>F\u00f6r att installera Python skriver vi i terminalen:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Nu har vi installerat b\u00e5de Python 2 och 3.<\/p>\n<p><\/p>\n<p>Under arbetet med artikeln uppt\u00e4ckte jag ocks\u00e5 en textredigerare som heter nano, som jag gillar mer \u00e4n vim, l\u00e5t oss installera den:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Det \u00e4r enklare att anv\u00e4nda \u00e4n vim, och nano har ett mer v\u00e4nligt gr\u00e4nssnitt. <i>P\u00e5 en Android-enhet \u00e4r vim dock smidigare.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld i Python i Termux<\/h3>\n<p><\/p>\n<p>I stort sett kunde vi ha hoppat \u00f6ver det h\u00e4r steget, men att installera Python i Termux och inte skriva HelloWorld tycker jag \u00e4r en d\u00e5lig stil.<\/p>\n<p><\/p>\n<p>Jag har inte som m\u00e5l att l\u00e4ra n\u00e5gon Python, s\u00e5 de som inte kan kan helt enkelt kopiera koden (eller b\u00f6rja studera p\u00e5 egen hand, det finns gott om litteratur), och de som kan kan skapa n\u00e5got sj\u00e4lva. Och jag kommer att visa ett s\u00e4tt att skriva text i terminalen utan en redigerare, lite 'i f\u00f6rbig\u00e5ende'.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Om du inte anger en k\u00e4lla (kom ih\u00e5g cat 1.txt &gt; 2.txt)\n# s\u00e5 kommer cat att ta data fr\u00e5n standard inmatningsstr\u00f6m,\n# enklare sagt det som skrivs in fr\u00e5n tangentbordet.\n\nstr = 'Hello, world!' # tilldelar variabeln str v\u00e4rdet \"Hello, world!\"\nprint (str) # skriver ut v\u00e4rdet fr\u00e5n variabeln str p\u00e5 sk\u00e4rmen\n\n# Ctrl + D f\u00f6r att avsluta inmatningen och spara filen (hello-world.py)\n\npy hello-world.py # k\u00f6r filen (py \u00e4r ett alias f\u00f6r python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Om du inte m\u00e4rker ett fel under inmatningen och redan har tryckt p\u00e5 Enter, kommer du inte kunna g\u00e5 tillbaka en rad, s\u00e5 avsluta inmatningen genom att trycka p\u00e5 Ctrl + D (du kan \u00e4ven avbryta med Ctrl + Z) och b\u00f6rja om. Eftersom vi anv\u00e4nde '&gt;' kommer filen att skrivas \u00f6ver helt. Av denna anledning rekommenderar jag inte att anv\u00e4nda den h\u00e4r inmatningsmetoden om du inte \u00e4r s\u00e4ker p\u00e5 att du skriver koden direkt utan fel.<\/p>\n<p><\/p>\n<h2>Steg 6<\/h2>\n<p><\/p>\n<h3>Bash-skript<\/h3>\n<p><\/p>\n<p>Bash-skript \u00e4r ett utm\u00e4rkt s\u00e4tt att automatisera arbete i terminalen. Ett skript \u00e4r en fil med .sh (\u00e4ven om fil\u00e4ndelsen inte \u00e4r n\u00f6dv\u00e4ndig) som inneh\u00e5ller en upps\u00e4ttning terminalkommandon, varav n\u00e5gra redan har studerats. H\u00e4r \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">en lista med de flesta kommandon<\/a><\/noindex>, allt borde fungera, men observera att detta \u00e4r en lista f\u00f6r 'vuxen' Linux, inte f\u00f6r Termux, och bara <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">ett fantastiskt material om bash-skript<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Med hj\u00e4lp av skript kan man automatisera n\u00e4stan alla monotona uppgifter. L\u00e5t oss skriva ett enkelt bash-skript som skriver ut v\u00e4rdet fr\u00e5n en variabel som det sj\u00e4lv har skapat. Jag kommer \u00e5terigen att anv\u00e4nda cat, men ni kan anv\u00e4nda en vanlig textredigerare, och de som s\u00e4rskilt vill tr\u00e4na sig kan anv\u00e4nda echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Hej, Habr!\"\n# export skapar variabeln str\n# och tilldelar den v\u00e4rdet \"Hej, Habr!\"\n# S\u00e4tt inga mellanslag f\u00f6re eller efter \u2018=\u2019\n\necho $str # F\u00f6r att referera till variabler s\u00e4tter man \u2018$\u2019 f\u00f6re dem\n\n# Ctrl + D\n\n# .\\\/test.sh f\u00f6r att k\u00f6ra skriptet, men om man g\u00f6r det nu kommer det att ge ett fel\n# f\u00f6r att bli av med felet m\u00e5ste man g\u00f6ra filen test.sh k\u00f6rbar\n\nchmod +x test.sh\n# chmod \u00e4ndrar \u00e5tkomstr\u00e4ttigheter (+ l\u00e4gg till \/ - ta bort)\n# \u2018+x\u2019 betyder att vi g\u00f6r filen k\u00f6rbar\n\n.\\\/test.sh # Startar exekveringen av v\u00e5rt skript<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash-skript med Termux:API<\/h3>\n<p><\/p>\n<p>L\u00e5t oss skriva n\u00e5got som skiljer sig fr\u00e5n de v\u00e4lk\u00e4nda HelloWorld-programmen, men som \u00e4r lika meningsl\u00f6st. V\u00e5rt skript kommer att:<\/p>\n<p><\/p>\n<ol>\n<li>utf\u00f6ra API-beg\u00e4ran termux-battery-status<\/li>\n<li>spara den mottagna datan i filen test.txt<\/li>\n<li>visa datan fr\u00e5n filen p\u00e5 sk\u00e4rmen<\/li>\n<li>k\u00f6ra det tidigare skrivna programmet hello-world.py<\/li>\n<li>spara data fr\u00e5n programmet i filen test.txt<\/li>\n<li>visa datan fr\u00e5n filen p\u00e5 sk\u00e4rmen<\/li>\n<li>kopiera data fr\u00e5n filen till urklipp<\/li>\n<li>visa inneh\u00e5llet i urklipp p\u00e5 sk\u00e4rmen<\/li>\n<li>visa ett popup-meddelande med data fr\u00e5n urklipp<\/li>\n<\/ol>\n<p><\/p>\n<p>F\u00f6rst skapar vi en mapp f\u00f6r arbetet och kopierar hello-world.py dit som test.py, vi skapar filerna test.sh och test.txt i denna mapp:<\/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 skapar filer\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Nu kan vi p\u00e5 n\u00e5got bekv\u00e4mt s\u00e4tt skriva skriptet i filen 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>Nu g\u00e5r vi till mappen bashscript och skriver <code>.\/test.sh<\/code> vi observerar i terminalen p\u00e5 Android-enheten:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg f\u00f6r steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r har vi skrivit det planerade bash-skriptet. Man kan sp\u00e4da ut dess utmatning med information om utf\u00f6randet av varje \u00e5tg\u00e4rd (med hj\u00e4lp av echo), detta l\u00e4mnar jag \u00e5t l\u00e4sarna.<\/p>\n<p><\/p>\n<h2>Steg 7<\/h2>\n<p><\/p>\n<h3>L\u00e5t oss g\u00f6ra n\u00e5got nyttigt<\/h3>\n<p><\/p>\n<p><i>Relativt nyttigt<\/i><\/p>\n<p><\/p>\n<p>Formulera en teknisk specifikation<br \/>\nProgrammet ska efter starten placera en slumpm\u00e4ssig rad fr\u00e5n filen i urklipp och meddela detta med ett popup-meddelande.<\/p>\n<p><\/p>\n<p>Vi utg\u00e5r fr\u00e5n bash-skriptet, en slumpm\u00e4ssig rad fr\u00e5n filen kommer att extraheras med hj\u00e4lp av ett Python-program. L\u00e5t oss formulera en arbetsplan f\u00f6r skriptet:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00f6ra underprogrammet<\/li>\n<li>\u00d6verf\u00f6ra resultatet av underst\u00f6dsprogrammet till urklipp<\/li>\n<li>Visa ett popup-meddelande<\/li>\n<\/ol>\n<p><\/p>\n<p>L\u00e5t oss fastst\u00e4lla namnen p\u00e5 katalogen och applikationsfilerna:<\/p>\n<p><\/p>\n<ul>\n<li>mappen rndstr i hemkatalogen\n<ul>\n<li>source \u2014 filen fr\u00e5n vilken vi kommer att h\u00e4mta rader<\/li>\n<li>rndstr.py \u2014 underst\u00f6dsprogrammet som skriver ut en slumpm\u00e4ssig rad fr\u00e5n filen source till konsolen<\/li>\n<li>rndstr.sh \u2014 skriptfilen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Vi skapar applikationens katalog och flyttar dit f\u00f6r att skapa filerna.<\/p>\n<p><\/p>\n<p>De f\u00f6rsta tv\u00e5 punkterna i skriptplanen kan kombineras med en pipeline, och f\u00e5r d\u00e4rmed, med hj\u00e4lp av Termux:API, f\u00f6ljande:<\/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>I filen source kan du placera vilken text som helst logiskt uppdelad i rader, jag valde att inkludera citat:<\/p>\n<p>\n<b class=\"spoiler_title\">Listing av filen source<\/b><\/p>\n<pre><code class=\"plaintext\">\u00c4kthet \u00e4r inte sanning. L. Lavelle\nT\u00e5la och avh\u00e5ll dig. Epiktetos\nEndast det som \u00e4r osj\u00e4lviskt \u00e4r \u00e4delt. J. La Bruy\u00e8re\nVar klokt modig. B. Graci\u00e1n\nGodhet \u00e4r b\u00e4ttre \u00e4n sk\u00f6nhet. G. Heine\nF\u00f6r stora g\u00e4rningar kr\u00e4vs of\u00f6rtr\u00f6ttlig uth\u00e5llighet. F. Voltaire\nOm du vill att andra alltid ska tillfredsst\u00e4lla dig, betj\u00e4nar du dig sj\u00e4lv. B. Franklin\n\u00d6verdriven blygsamhet \u00e4r inget annat \u00e4n dold stolthet. A. Chaine\nMycket intelligenta m\u00e4nniskor b\u00f6rjar man inte lita p\u00e5 om man ser deras f\u00f6rl\u00e4genhet. F. Nietzsche\nFattigdom anger brist p\u00e5 resurser, inte brist p\u00e5 \u00e4delhet. D. Boccaccio\nMan m\u00e5ste akta sig f\u00f6r att driva blygsamhet till f\u00f6rnedringens grad. A. Bakihanov\nDen som avst\u00e5r fr\u00e5n mycket kan till\u00e5ta sig mycket. J. Chardon\nN\u00e4r vi f\u00e5r betalt f\u00f6r en \u00e4del handling, tar man den ifr\u00e5n oss. N. Chamfort\nAtt inte f\u00e5 n\u00e5got alls \u00e4r inte skr\u00e4mmande, men att f\u00f6rlora det man har f\u00e5tt \u00e4r s\u00e5rande. Klaudius Elianus\nDet \u00e4r l\u00e4ttare att t\u00e5lmodigt hantera det som vi inte kan \u00e4ndra. Horatius\nMan blir tr\u00f6tt p\u00e5 att v\u00e4nta, men hur mycket v\u00e4rre skulle det vara om det inte fanns n\u00e5got att v\u00e4nta p\u00e5. B. Shaw\nAllt kommer i tid, om m\u00e4nniskor kan v\u00e4nta. F. Rabelais\nMed v\u00e5rt t\u00e5lamod kan vi uppn\u00e5 mer \u00e4n med styrka. E. Burke\nMan m\u00e5ste kunna uth\u00e4rda det som inte g\u00e5r att undvika. M. Montaigne\nDen som \u00e4r modig i handling fruktar inte ord. Sofokles\nJag \u00e4lskar inte att sl\u00e5ss, jag \u00e4lskar att vinna. B. Shaw\nEn f\u00f6rf\u00f6ljd och pressad katt f\u00f6rvandlas till ett lejon. M. Cervantes\nEn v\u00e4rdig m\u00e4nniska g\u00e5r inte i sp\u00e5ren av andra. Konfucius\nDen stora tanken visar sin kraft inte bara genom att kunna t\u00e4nka, utan ocks\u00e5 genom att kunna leva. R. Emerson\nBer\u00f6mmelse \u00e4r en ol\u00f6nsam vara. Den kostar mycket och bevaras d\u00e5ligt. O. Balzac\n\u00c5terh\u00e5llsamhet och l\u00e4mplighet i samtal \u00e4r mer v\u00e4rdefullt \u00e4n talekonst. F. Bacon\nDen som inte kan vara tyst, kan inte tala heller. Seneca den yngre\nGoda manerer best\u00e5r av sm\u00e5 uppoffringar. F. Chesterfield\nEn god m\u00e4nniska \u00e4r inte den som kan g\u00f6ra gott, utan den som inte kan g\u00f6ra ont. V. Kljuchevsky\nUttala inte o\u00e5terkalleliga omd\u00f6men! Augustinus\nInget f\u00f6r mycket! Solon<\/code><\/pre>\n<p><\/p>\n<p>Vi m\u00e5ste skapa ett underprogram f\u00f6r att extrahera en slumpm\u00e4ssig rad fr\u00e5n filen source.<br \/>\nVi skriver ner algoritmen f\u00f6r hur underprogrammet fungerar:<\/p>\n<p><\/p>\n<ol>\n<li>\u00d6ppna filen source<\/li>\n<li>R\u00e4kna antalet rader i den \u00f6ppna filen<\/li>\n<li>St\u00e4ng filen (det \u00e4r on\u00f6digt att ha den \u00f6ppen l\u00e4ngre \u00e4n n\u00f6dv\u00e4ndigt)<\/li>\n<li>Vi genererar ett slumpm\u00e4ssigt heltal inom antalet rader i filen source<\/li>\n<li>\u00d6ppna filen source<\/li>\n<li>Vi skriver ut raden med det genererade numret<\/li>\n<li>Vi st\u00e4nger filen<\/li>\n<\/ol>\n<p><\/p>\n<p>Vi implementerar algoritmen i Python (jag skriver f\u00f6r Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random \u00a0#  importerar f\u00f6r att generera slumpm\u00e4ssiga tal\nimport os \u00a0#  f\u00f6r att f\u00e5 s\u00f6kv\u00e4gen\n\npath = os.path.abspath(__file__)  # \u00a0f\u00e5r den direkta s\u00f6kv\u00e4gen till filen rndstr.py\npath = os.path.dirname(path) \u00a0#  omvandlar till s\u00f6kv\u00e4gen till katalogen\npath = path \u00a0+ '\\\/source'  # \u00a0omvandlar till s\u00f6kv\u00e4gen till filen source\n\nf = open(path) \u00a0#  \u00f6ppnar filen\ni = 0 \u00a0#  nollst\u00e4ller r\u00e4knaren\nfor str in f: i+=1 \u00a0#  r\u00e4knar filens rader\nf.close \u00a0#  st\u00e4nger filen\n\nj = int(round(i * random.random())) \u00a0#  genererar ett helt slumpm\u00e4ssigt tal mellan 0 och i\n\nf = open(path) \u00a0#  \u00f6ppnar filen\ni = 0 \u00a0#  nollst\u00e4ller r\u00e4knaren\nfor str in f: \u00a0#  loopar igenom raderna i filen\n \u00a0\u00a0\u00a0if i == j: \u00a0#  om r\u00e4knaren \u00e4r lika med det genererade numret\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print (str, end='') \u00a0#  skriver ut raden utan att bryta raden\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break  # \u00a0avslutar loopen\n \u00a0\u00a0\u00a0i+=1 \u00a0#  \u00f6kar r\u00e4knaren med 1\nf.close \u00a0#  st\u00e4nger filen<\/code><\/pre>\n<p><\/p>\n<p>Efter att filerna har skapats och skrivits, m\u00e5ste vi ge k\u00f6rbeh\u00f6righet till filen <code>rndstr.sh<\/code>, och skapa ett alias f\u00f6r snabb k\u00f6rning.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\\\/rndstr\\\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Nu kan vi skriva i terminalen <code>rnst<\/code> s\u00e5 f\u00e5r vi en slumpm\u00e4ssig aforism i urklippet, som till exempel kan anv\u00e4ndas i kommunikation.<\/p>\n<p><\/p>\n<p>S\u00e5, vi har skrivit n\u00e5got anv\u00e4ndbart. Relativt anv\u00e4ndbart.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Jag valde medvetet att inte inkludera sk\u00e4rmdumpar i sista steget och inte g\u00e5 igenom vissa \u00e5tg\u00e4rder i detalj, utan bara skriva inneh\u00e5llet i filerna, f\u00f6r att ge l\u00e4sarna m\u00f6jlighet att arbeta p\u00e5 egen hand.<\/p>\n<p><\/p>\n<p>S\u00e5 h\u00e4r avslutar vi 'Termux steg f\u00f6r steg', jag tror det \u00e4r dags att runda av. Sj\u00e4lvklart \u00e4r detta bara de f\u00f6rsta stegen, men nu kan ni g\u00e5 vidare sj\u00e4lva.<\/p>\n<p><\/p>\n<p>Jag planerade ursprungligen att visa hur man anv\u00e4nder nmap, sqlmap i denna serie, men det finns redan m\u00e5nga artiklar om detta \u00e4mne utan mig. Om det finns intresse f\u00f6r att jag ska forts\u00e4tta serien 'Termux steg f\u00f6r steg', finns det en unders\u00f6kning nedan och ni kan f\u00f6resl\u00e5 vad ni vill att jag ska skriva mer om i kommentarerna.<\/p>\n<p class=\"for_users_only_msg\">Endast registrerade anv\u00e4ndare kan delta i omr\u00f6stningen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logga in<\/a><\/noindex>, tack.<\/p>\n<h2 class=\"default-block__polling-title\">Vill du forts\u00e4tta \"Termux steg f\u00f6r steg\"?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ingen<\/p>\n<\/li>\n<\/ul>\n<p>    2 anv\u00e4ndare r\u00f6stade. Ingen avstod.<br \/>\n<br \/>K\u00e4lla: <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.5 - 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\/sv\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 steg f\u00f6r steg (Del 2) | ProHoster","description":"I f\u00f6rra delen bekantade vi oss med de grundl\u00e4ggande kommandona i Termux, st\u00e4llde in SSH-anslutning med PC, l\u00e4rde oss att skapa alias och.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}