{"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\/no\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux steg for 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\/\">i forrige del<\/a><\/noindex> Vi har blitt kjent med de grunnleggende kommandoene i Termux, satt opp SSH-tilkobling til PCen, l\u00e6rt \u00e5 lage aliaser og installert flere nyttige verkt\u00f8y. Denne gangen skal vi ta et steg videre, vi skal:<\/p>\n<p><\/p>\n<ul>\n<li>l\u00e6re om Termux:API<\/li>\n<li>installere Python og nano, samt skrive 'Hello, world!' i Python<\/li>\n<li>l\u00e6re om bash-skript, og skrive et skript ved hjelp av Termux:API<\/li>\n<li>ved \u00e5 bruke et bash-skript, Termux:API og Python skal vi skrive et enkelt program <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Siden vi n\u00e5 forst\u00e5r hva de innlagte kommandoene gj\u00f8r, vil jeg fra dette punktet ikke g\u00e5 s\u00e5 detaljert gjennom hvert steg, men der hvor det kan oppst\u00e5 problemer, vil jeg selvf\u00f8lgelig gi forklaringer.<\/p>\n<p><\/p>\n<p>Jeg bruker ofte aliaser, s\u00e5 forkortelsene som brukes i denne delen vises her:<\/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 er klar, vi kan begynne! Og husk selvf\u00f8lgelig 'den magiske Tab' (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Se Del 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Trinn 4<\/h2>\n<p><\/p>\n<h3>Dykker inn i Termux:API<\/h3>\n<p><\/p>\n<p><i>API, s\u00e5 mye i dette ordet smelter sammen for hjertet til en programmerer<\/i><\/p>\n<p><\/p>\n<p>Hvis vi ikke tar for oss emnet Termux:API, kunne alle stegene v\u00e5re blitt oppsummert som en enkel omtale av en brosjyre som 'Linux for dummies', som det ble p\u00e5pekt i kommentarene til del \u00e9n.<\/p>\n<p><\/p>\n<p>For \u00e5 begynne, la oss installere Termux:API fra Google Play-butikken (det kan v\u00e6re lurt \u00e5 starte Termux p\u00e5 nytt etterp\u00e5):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Deretter m\u00e5 vi installere API-pakken i Termux-konsollen:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Husk aliasene\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>For eksperimenter bruker jeg Android 5.1.1, for eiere av Android 7 m\u00e5 man \u00abbeskytte\u00bb Termux: API ved \u00e5 g\u00e5 til \u2018Innstillinger\u2019 &gt; \u2018Sikrede apper\u2019, ellers vil API-kall, som <code>termux-battery-status<\/code>, henge seg. (Se <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">prosjektwiki<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>N\u00e5 er det p\u00e5 tide \u00e5 bli bedre kjent med de tilegnede mulighetene. Den nyeste og mest detaljerte beskrivelsen av Termux:API kan finnes p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">prosjektwiki<\/a><\/noindex>. Jeg vil fors\u00f8ke \u00e5 velge de mest illustrative og interessante, noe som vil hjelpe med \u00e5 opparbeide seg erfaring for videre arbeid.<\/p>\n<p><\/p>\n<h3>Noen eksempler p\u00e5 Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nReturnerer batteristatus<br \/>\n<img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nSetter skjermens lysstyrke fra 0 til 255<br \/>\n<img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nViser en midlertidig popup-melding<br \/>\n<img decoding=\"async\" alt=\"Termux steg for 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 lommelykten<br \/>\n<img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nReturnerer informasjon om den siste Wi-Fi-skanningen<br \/>\n<img decoding=\"async\" alt=\"Termux steg for 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 er ikke vanskelig \u00e5 legge merke til at de returnerte verdiene er strenger, ordb\u00f8ker, lister av ordb\u00f8ker, generelt datatyper som Python fungerer godt med, s\u00e5 neste steg er \u00e5 installere det.<\/p>\n<p><\/p>\n<h2>Trinn 5<\/h2>\n<p><\/p>\n<h3>La oss installere Python og nano<\/h3>\n<p><\/p>\n<p>For \u00e5 installere 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>N\u00e5 har vi installert Python 2 og 3.<\/p>\n<p><\/p>\n<p>I l\u00f8pet av arbeidet med artikkelen oppdaget jeg en annen tekstredigerer, nano, som jeg likte bedre enn vim, la oss installere den:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Det er enklere \u00e5 bruke enn vim, og nano har et mer vennlig grensesnitt. <i>P\u00e5 Android-enheter er vim likevel mer praktisk.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld i Python i Termux<\/h3>\n<p><\/p>\n<p>I utgangspunktet kunne vi ha klart oss uten dette punktet, men \u00e5 installere Python i Termux og ikke skrive HelloWorld, er etter min mening en tabbe.<\/p>\n<p><\/p>\n<p>Jeg har ikke som m\u00e5l \u00e5 l\u00e6re noen Python, s\u00e5 de som ikke vet kan bare kopiere koden (eller begynne \u00e5 studere selv, det er mye litteratur tilgjengelig), og de som kan det, kan lage noe selv. Og jeg vil 'i forbifarten' ogs\u00e5 vise en m\u00e5te \u00e5 skrive tekst i terminalen uten redakt\u00f8r.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Hvis du ikke spesifiserer kilden (husker cat 1.txt &gt; 2.txt)\n# s\u00e5 vil cat ta data fra standard inndata,\n# med andre ord, det som skrives inn fra tastaturet.\n\nstr = 'Hello, world!' # vi gir variabelen str verdien \"Hello, world!\"\nprint (str) # skriver ut verdien fra variabelen str\n\n# Ctrl + D for \u00e5 avslutte inndata og lagre filen (hello-world.py)\n\npy hello-world.py # kj\u00f8r filen (py er et alias for python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvis du ikke la merke til en feil mens du skrev, og allerede har trykket Enter, kan du ikke g\u00e5 tilbake til linjen over. Du m\u00e5 avslutte innf\u00f8ringen ved \u00e5 trykke Ctrl + D (du kan ogs\u00e5 bryte med Ctrl + Z) og gjenta alt fra starten. Siden vi brukte '&gt;', vil filen bli overskrevet helt. Derfor anbefaler jeg ikke \u00e5 bruke denne metoden for inndata, hvis du ikke er sikker p\u00e5 at du skriver koden riktig umiddelbart.<\/p>\n<p><\/p>\n<h2>Trinn 6<\/h2>\n<p><\/p>\n<h3>Bash-skript<\/h3>\n<p><\/p>\n<p>Bash-skript er en fantastisk m\u00e5te \u00e5 automatisere arbeidet med terminalen. Skriptet er en fil med filendelsen .sh (filendelsen er ikke obligatorisk) som inneholder en samling av terminalkommandoer, noen av dem har vi allerede l\u00e6rt. Her er <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">listen over de fleste kommandoer<\/a><\/noindex>, alt skal fungere, men v\u00e6r oppmerksom p\u00e5 at dette er en liste for 'voksent' Linux, ikke for Termux, og bare <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">flott ressurs om bash-skript<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Ved hjelp av skript kan man automatisere nesten alle monotone handlinger. La oss skrive et enkelt bash-skript som viser verdien fra en variabel opprettet av skriptet selv. Jeg vil igjen bruke cat, men du kan bruke en vanlig tekstbehandler, og de som \u00f8nsker det kan trene seg p\u00e5 \u00e5 bruke echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Hei, Habr!\"\n# export oppretter variabelen str\n# og tilordner den verdien \"Hei, Habr!\"\n# Ikke sett mellomrom f\u00f8r og etter \u2018=\u2019\n\necho $str # For \u00e5 referere til variabler setter man \u2018$\u2019 foran dem\n\n# Ctrl + D\n\n# .\\\/test.sh for \u00e5 kj\u00f8re skriptet, men hvis vi gj\u00f8r det n\u00e5 vil det v\u00e6re en feil\n# for \u00e5 unng\u00e5 feilen m\u00e5 filen test.sh gj\u00f8res kj\u00f8rbar\n\nchmod +x test.sh\n# chmod endrer tilgangsrettigheter (+ legge til \/ - fjerne)\n# \u2018+x\u2019 betyr at vi gj\u00f8r filen kj\u00f8rbar\n\n.\\\/test.sh # Vi kj\u00f8rer skriptet v\u00e5rt<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg for 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>La oss skrive noe annet enn de velkjente HelloWorld, men like bortkastet. Skriptet v\u00e5rt vil:<\/p>\n<p><\/p>\n<ol>\n<li>utf\u00f8re API-anropet termux-battery-status<\/li>\n<li>lagre mottatte data i filen test.txt<\/li>\n<li>vise data fra filen p\u00e5 skjermen<\/li>\n<li>kj\u00f8re det tidligere skrevne programmet hello-world.py<\/li>\n<li>lagre dataene fra programmet til filen test.txt<\/li>\n<li>vise data fra filen p\u00e5 skjermen<\/li>\n<li>kopiere data fra filen til utklippstavlen<\/li>\n<li>vise innholdet i utklippstavlen p\u00e5 skjermen<\/li>\n<li>vise en popup-melding med data fra utklippstavlen<\/li>\n<\/ol>\n<p><\/p>\n<p>F\u00f8rst lager vi en mappe for arbeid og kopierer hello-world.py dit som test.py, og oppretter filene test.sh og test.txt i denne mappen:<\/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 lager filer\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>N\u00e5 skriver vi skriptet inn i filen test.sh p\u00e5 en praktisk m\u00e5te:<\/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\u00e5, mens vi er i mappen bashscript, skriver vi <code>.\/test.sh<\/code> og observerer i terminalen p\u00e5 Android-enheten:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux steg for steg (Del 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her har vi skrevet det planlagte bash-skriptet. Vi kan krydre det med \u00e5 vise informasjon om utf\u00f8relsen av hver handling (ved hjelp av echo), noe jeg lar st\u00e5 til leserne.<\/p>\n<p><\/p>\n<h2>Trinn 7<\/h2>\n<p><\/p>\n<h3>La oss gj\u00f8re noe nyttig<\/h3>\n<p><\/p>\n<p><i>Relativt nyttig<\/i><\/p>\n<p><\/p>\n<p>La oss formulere en spesifikasjon<br \/>\nProgrammet skal etter oppstart kopiere en tilfeldig streng fra filen til utklippstavlen og varsle om dette med en popup-melding.<\/p>\n<p><\/p>\n<p>Vi tar utgangspunkt i et bash-skript, og vi vil hente en tilfeldig streng fra filen ved \u00e5 bruke en Python-undermodul. La oss lage en arbeidsplan for skriptet:<\/p>\n<p><\/p>\n<ol>\n<li>Kj\u00f8re undermodulen<\/li>\n<li>Overf\u00f8re resultatet av underprogrammet til utklippstavlen<\/li>\n<li>Vise en popup-melding<\/li>\n<\/ol>\n<p><\/p>\n<p>La oss bli enige om navna p\u00e5 katalogen og filene til appen:<\/p>\n<p><\/p>\n<ul>\n<li>mappen rndstr i hjemmebiblioteket\n<ul>\n<li>source \u2014 filen vi skal ta linjene fra<\/li>\n<li>rndstr.py \u2014 underprogrammet som skriver ut en tilfeldige linje fra filen source til konsollen<\/li>\n<li>rndstr.sh \u2014 skriptfilen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Vi oppretter katalogen for applikasjonen, og flytter oss inn i den for \u00e5 opprette filene der.<\/p>\n<p><\/p>\n<p>De to f\u00f8rste punktene i skriptplanen kan sl\u00e5s sammen til en pipeline, og ved \u00e5 bruke Termux:API f\u00e5r vi:<\/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 plassere hvilken som helst tekst logisk delt opp i linjer; jeg har valgt \u00e5 plassere aforismer:<\/p>\n<p>\n<b class=\"spoiler_title\">Listing av filen source<\/b><\/p>\n<pre><code class=\"plaintext\">Oppriktighet er ikke sannhet. L. Lavelle\nLid og hold deg tilbake. Epiktet\nBare det som er uselvisk, er edelt. J. La Bruy\u00e8re\nV\u00e6r klok og modig. B. Graci\u00e1n\nGodhet er bedre enn skj\u00f8nnhet. G. Heine\nFor store handlinger er utrettelig utholdenhet n\u00f8dvendig. F. Voltaire\nHvis du vil at andre alltid skal tilfredsstille deg, tjen deg selv. B. Franklin\nOverdreven beskjedenhet er ikke annet enn skjult stolthet. A. Ch\u00e9nier\nVeldig kloke mennesker begynner \u00e5 miste tillit hvis de viser forlegenhet. F. Nietzsche\nFattigdom viser mangel p\u00e5 midler, ikke mangel p\u00e5 edelhet. D. Boccaccio\nMan m\u00e5 passe p\u00e5 \u00e5 ikke la beskjedenhet g\u00e5 over i ydmykelse. A. Bakihanov\nDen som gir avkall p\u00e5 mye, kan unne seg mye. J. Chardon\nN\u00e5r vi blir betalt for en edel handling, mister vi den. N. Chamfort\nDet er ikke skummelt \u00e5 ikke f\u00e5 noe, men \u00e5 miste det man har f\u00e5tt er trist. Klaudius Elysian\nDet er lettere \u00e5 t\u00e5lmodig b\u00e6re det vi ikke kan endre. Horatius\nMan blir tr\u00f8tt av \u00e5 vente, men hvor mye verre ville det v\u00e6rt om det ikke var noe \u00e5 vente p\u00e5. B. Shaw\nAlt kommer i tide, hvis folk vet \u00e5 vente. F. Rabelais\nMed v\u00e5r t\u00e5lmodighet kan vi oppn\u00e5 mer enn med styrke. E. Burke\nVi m\u00e5 v\u00e6re i stand til \u00e5 b\u00e6re det vi ikke kan unng\u00e5. M. Montaigne\nDen som er modig i handling, vil ikke skremmes av ord. Sofokles\nJeg liker ikke \u00e5 kjempe, jeg liker \u00e5 vinne. B. Shaw\nEt forfulgt og presset katt blir til en tiger. M. Cervantes\nEn verdig person g\u00e5r ikke i andres fotspor. Konfucius\nEt stort sinn vil vise sin styrke ikke bare i evnen til \u00e5 tenke, men ogs\u00e5 i evnen til \u00e5 leve. R. Emerson\nBer\u00f8mmelse er en ul\u00f8nnsom vare. Den koster mye, men blir d\u00e5rlig bevart. O. Balzac\nSanktion og passende i samtaler er mer verdifulle enn veltalenhet. F. Bacon\nDen som ikke kan tie, kan heller ikke tale. Seneca Den Yngre\nGode manerer best\u00e5r av sm\u00e5 oppofrelser. F. Chesterfield\nEn god mann er ikke den som kan gj\u00f8re godt, men den som ikke kan gj\u00f8re ondt. V. Kljuchevsky\nIkke kom med uomtvistelige dommer! Augustin\nIngenting for mye! Solon<\/code><\/pre>\n<p><\/p>\n<p>Vi m\u00e5 lage et program som trekker en tilfeldig linje fra filen source.<br \/>\nLa oss skissere algoritmen for programmet:<\/p>\n<p><\/p>\n<ol>\n<li>\u00c5pne filen source<\/li>\n<li>Tell antall linjer i den \u00e5pne filen<\/li>\n<li>Lukk filen (det er un\u00f8dvendig \u00e5 holde den \u00e5pen lenger)<\/li>\n<li>Vi genererer et tilfeldig heltall innenfor antallet rader i kildefilen<\/li>\n<li>\u00c5pne filen source<\/li>\n<li>Vi skriver ut raden med nummeret til det genererte tallet<\/li>\n<li>Vi lukker filen<\/li>\n<\/ol>\n<p><\/p>\n<p>Vi implementerer algoritmen i Python (jeg skriver for Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  # importerer for \u00e5 generere tilfeldige tall\nimport os  # for \u00e5 f\u00e5 stien\n\npath = os.path.abspath(__file__)  # f\u00e5r den direkte stien til filen rndstr.py\npath = os.path.dirname(path)  # konverterer til stien til katalogen\npath = path  + '\u200d\/source'  # konverterer til stien til kildefilen\n\nf = open(path)  # \u00e5pner filen\ni = 0  # nullstiller telleren\nfor str in f: i+=1  # teller radene i filen\nf.close  # lukker filen\n\nj = int(round(i * random.random()))  # genererer et tilfeldig heltall fra 0 til i\n\nf = open(path)  # \u00e5pner filen\ni = 0  # nullstiller telleren\nfor str in f:  # itererer gjennom radene i filen\n    if i == j:  # hvis rekkeviddetelleren er lik det genererte tallet\n        print (str, end='')  # skriver ut raden uten ny linje\n        break  # forlater l\u00f8kken\n    i+=1  # \u00f8ker telleren med 1\nf.close  # lukker filen<\/code><\/pre>\n<p><\/p>\n<p>Etter at filene er opprettet og skrevet, m\u00e5 du gi kj\u00f8retilgang til filen <code>rndstr.sh<\/code>, og opprette et alias for rask tilgang.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\u200d\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>N\u00e5, ved \u00e5 skrive inn i terminalen <code>rnst<\/code> vil vi f\u00e5 et tilfeldig sitat i utklippstavlen, som for eksempel kan brukes i samtaler.<\/p>\n<p><\/p>\n<p>Vi har skrevet noe nyttig. Relativt nyttig.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Jeg har bevisst unng\u00e5tt \u00e5 inkludere skjermbilder i det siste trinnet og har ikke detaljert forklart noen av handlingene, bare beskrevet innholdet i filene, slik at leserne har muligheten til \u00e5 eksperimentere selv.<\/p>\n<p><\/p>\n<p>S\u00e5 tror jeg det er p\u00e5 tide \u00e5 avslutte 'Termux steg for steg'. Dette er selvf\u00f8lgelig bare de f\u00f8rste stegene, men n\u00e5 kan du g\u00e5 videre p\u00e5 egen h\u00e5nd.<\/p>\n<p><\/p>\n<p>Opprinnelig planla jeg \u00e5 vise hvordan bruke nmap og sqlmap i denne serien, men det er allerede mange artikler om dette emnet. Hvis du \u00f8nsker at jeg skal fortsette serien 'Termux steg for steg', s\u00e5 er det en avstemning nedenfor, og i kommentarene kan du foresl\u00e5 hva annet jeg kan skrive om.<\/p>\n<p class=\"for_users_only_msg\">Kun registrerte brukere kan delta i unders\u00f8kelsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logg inn<\/a><\/noindex>, v\u00e6r s\u00e5 snill.<\/p>\n<h2 class=\"default-block__polling-title\">Fortsette 'Termux trinn for trinn'?<\/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>                    Nei<\/p>\n<\/li>\n<\/ul>\n<p>    2 brukere har stemt. Ingen avholdte seg.<br \/>\n<br \/>Kilde: <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\/no\/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=\"nn_NO\" \/>\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\/no\/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 trinn for trinn (Del 2) | ProHoster","description":"I forrige del ble vi kjent med de grunnleggende kommandoene i Termux, satte opp SSH-tilkobling til PC-en, l\u00e6rte \u00e5 opprette aliaser og.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}