{"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\/de\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux Schritt f\u00fcr Schritt (Teil 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Im <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">habe ich erw\u00e4hnt, dass man bei den Steuern sparen kann, indem man in ein Dorf zieht. Im Netz gibt es<\/a><\/noindex> Wir haben uns mit den grundlegenden Befehlen von Termux vertraut gemacht, eine SSH-Verbindung mit dem PC eingerichtet, gelernt, Aliase zu erstellen, und einige n\u00fctzliche Tools installiert. Dieses Mal wollen wir noch einen Schritt weiter gehen, wir werden:<\/p>\n<p><\/p>\n<ul>\n<li>\u00fcber Termux:API lernen<\/li>\n<li>Python und nano installieren und zudem \"Hello, world!\" in Python schreiben.<\/li>\n<li>\u00fcber Bash-Skripte lernen und ein Skript mit Termux:API erstellen<\/li>\n<li>ein einfaches Programm schreiben, indem wir ein Bash-Skript, Termux:API und Python verwenden <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Da wir jetzt verstehen, was die eingegebenen Befehle bewirken, werde ich ab dem n\u00e4chsten Schritt nicht mehr so detailliert auf jede Aktion eingehen, aber wo es Schwierigkeiten geben k\u00f6nnte, werde ich unbedingt Erkl\u00e4rungen liefern.<\/p>\n<p><\/p>\n<p>Ich verwende oft Aliase, daher sind die in diesem Abschnitt verwendeten Abk\u00fcrzungen hier aufgef\u00fchrt:<\/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>Der Plan steht, wir k\u00f6nnen beginnen! Und vergisst nat\u00fcrlich nicht die \"magische Tab-Taste\" (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Siehe Teil 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>Schritt 4<\/h2>\n<p><\/p>\n<h3>Tauchen wir in den Kaninchenbau von Termux:API ein<\/h3>\n<p><\/p>\n<p><i>API, was f\u00fcr ein Wort f\u00fcr das Herz eines Entwicklers<\/i><\/p>\n<p><\/p>\n<p>Wenn wir das Thema Termux:API ausklammern, k\u00f6nnten wir all unsere Schritte auf eine einfache Zusammenfassung einer Brosch\u00fcre wie \"Linux f\u00fcr Dummies\" reduzieren, wie in den Kommentaren zur ersten Folge treffend angemerkt wurde.<\/p>\n<p><\/p>\n<p>Zun\u00e4chst installieren wir Termux:API aus dem Google Play Store (nach der Installation kann es hilfreich sein, Termux neu zu starten):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Als n\u00e4chstes m\u00fcssen wir das API-Paket in der Termux-Konsole installieren:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # Vergiss die Aliase nicht\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>F\u00fcr Experimente benutze ich Android 5.1.1. F\u00fcr Besitzer von Android 7 muss Termux:API \"gesch\u00fctzt\" werden, indem man zu 'Einstellungen' &gt; 'Gesch\u00fctzte Apps' geht, andernfalls k\u00f6nnten API-Aufrufe wie <code>termux-battery-status<\/code>, h\u00e4ngen bleiben. (Siehe <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">Projektwiki<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Jetzt sollten wir uns n\u00e4her mit den neu erworbenen M\u00f6glichkeiten besch\u00e4ftigen. Die aktuellste und detaillierteste Beschreibung von Termux:API findest du auf <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">Projektwiki<\/a><\/noindex>. Ich werde versuchen, die anschaulichsten und interessantesten Aspekte auszuw\u00e4hlen, um dir die Selbstst\u00e4ndigkeit in der weiteren Arbeit zu erleichtern.<\/p>\n<p><\/p>\n<h3>Einige Beispiele f\u00fcr Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nGibt den Status des Akkus zur\u00fcck<br \/>\n<img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nStellt die Bildschirmhelligkeit von 0 bis 255 ein<br \/>\n<img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nZeigt eine tempor\u00e4re Popup-Benachrichtigung an<br \/>\n<img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nSchaltet die Taschenlampe ein<br \/>\n<img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nGibt Informationen \u00fcber den letzten WLAN-Scan zur\u00fcck<br \/>\n<img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Es ist nicht schwer zu erkennen, dass die zur\u00fcckgegebenen Werte Strings, Dictionaries, Listen von Dictionaries und allgemein Datentypen sind, mit denen Python hervorragend arbeiten kann, weshalb wir ihn nun installieren werden.<\/p>\n<p><\/p>\n<h2>Schritt 5<\/h2>\n<p><\/p>\n<h3>Wir installieren Python und nano<\/h3>\n<p><\/p>\n<p>Um Python zu installieren, geben wir im Terminal folgendes ein:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Jetzt haben wir Python 2 und 3 installiert.<\/p>\n<p><\/p>\n<p>W\u00e4hrend meiner Arbeit an diesem Artikel habe ich einen anderen Texteditor namens nano entdeckt, der mir besser gef\u00e4llt als vim. Lassen Sie uns ihn installieren:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Es ist einfacher, damit zu arbeiten als mit vim, und nano hat eine benutzerfreundlichere Oberfl\u00e4che. <i>Auf Android-Ger\u00e4ten ist vim jedoch bequemer.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld in Python unter Termux<\/h3>\n<p><\/p>\n<p>Im Grunde genommen h\u00e4tte man diesen Punkt auch weglassen k\u00f6nnen, aber es ist meiner Meinung nach unh\u00f6flich, Python in Termux zu installieren und kein HelloWorld zu schreiben.<\/p>\n<p><\/p>\n<p>Ich habe nicht die Absicht, jemanden in Python zu unterrichten, daher k\u00f6nnen Unwissende einfach den Code kopieren (oder selbst mit dem Lernen beginnen, es gibt gen\u00fcgend Literatur), und diejenigen, die sich auskennen, k\u00f6nnen auch selbst etwas entwickeln. Und ich werde \"nebenbei\" noch zeigen, wie man Text im Terminal ohne Editor eingibt.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Wenn Sie die Quelle nicht angeben (ich erinnere daran, dass cat 1.txt &gt; 2.txt)\n# \u00fcbernimmt cat die Daten aus dem Standard-Eingabestrom,\n# einfacher gesagt, das, was von der Tastatur eingegeben wird.\n\nstr = 'Hello, world!' # weise der Variable str den Wert \"Hello, world!\" zu\nprint (str) # gebe den Wert der Variablen str auf dem Bildschirm aus\n\n# Ctrl + D zum Beenden der Eingabe und zum Speichern der Datei (hello-world.py)\n\npy hello-world.py # f\u00fchre die Datei aus (py ist ein Alias f\u00fcr python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn Sie w\u00e4hrend der Eingabe einen Fehler nicht bemerkt haben und bereits Enter gedr\u00fcckt haben, k\u00f6nnen Sie nicht zur vorherigen Zeile zur\u00fcckkehren. Beenden Sie die Eingabe, indem Sie Ctrl + D dr\u00fccken (Sie k\u00f6nnen auch einfach Ctrl + Z dr\u00fccken) und wiederholen Sie alles von Anfang an. Da wir '&gt;' verwendet haben, wird die Datei vollst\u00e4ndig \u00fcberschrieben. Aus diesem Grund empfehle ich, diese Eingabemethode nicht zu verwenden, wenn Sie sich nicht sicher sind, dass Sie den Code sofort ohne Fehler schreiben k\u00f6nnen.<\/p>\n<p><\/p>\n<h2>Schritt 6<\/h2>\n<p><\/p>\n<h3>Bash-Skripte<\/h3>\n<p><\/p>\n<p>Bash-Skripte sind eine hervorragende M\u00f6glichkeit, die Arbeit im Terminal zu automatisieren. Ein Skript ist eine Datei mit der Endung .sh (die Endung ist nicht zwingend erforderlich), die eine Reihe von Terminalbefehlen enth\u00e4lt, von denen wir einige bereits gelernt haben. Hier ist <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">eine Liste der meisten Befehle<\/a><\/noindex>, alles sollte funktionieren, aber beachten Sie, dass dies eine Liste f\u00fcr \"erwachsenes\" Linux ist und nicht f\u00fcr Termux, und einfach nur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">erstklassiges Material \u00fcber Bash-Skripte<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Mit Skripten k\u00f6nnen praktisch alle monotone Aufgaben automatisiert werden. Lassen Sie uns ein einfaches Bash-Skript schreiben, das den Wert einer von ihm erstellten Variablen ausgibt. Ich werde erneut cat verwenden; Sie k\u00f6nnen jedoch einen normalen Texteditor nutzen, und besonders Motivierte k\u00f6nnen echo verwenden.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Hallo, Habr!\"\n# export erstellt die Variable str\n# und weist ihr den Wert \"Hallo, Habr!\" zu\n# Setzen Sie keine Leerzeichen vor und nach dem '='\n\necho $str # Um auf Variablen zuzugreifen, setzen Sie '$' davor\n\n# Ctrl + D\n\n# .\/test.sh zum Ausf\u00fchren des Skripts, aber wenn Sie dies jetzt tun, wird ein Fehler auftreten\n# Um den Fehler zu beheben, muss die Datei test.sh ausf\u00fchrbar gemacht werden\n\nchmod +x test.sh\n# chmod \u00e4ndert die Zugriffsrechte (+ hinzuf\u00fcgen \/ - entfernen)\n# '+x' bedeutet, dass wir die Datei ausf\u00fchrbar machen\n\n.\/test.sh # Jetzt f\u00fchren wir unser Skript aus<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Bash-Skript mit Termux:API<\/h3>\n<p><\/p>\n<p>Lassen Sie uns etwas schreiben, das sich von den ber\u00fchmten HelloWorlds unterscheidet, aber ebenso nutzlos ist. Unser Skript wird:<\/p>\n<p><\/p>\n<ol>\n<li>eine API-Anfrage f\u00fcr termux-battery-status ausf\u00fchren<\/li>\n<li>die erhaltenen Daten in die Datei test.txt speichern<\/li>\n<li>die Daten aus der Datei auf dem Bildschirm ausgeben<\/li>\n<li>das zuvor geschriebene Programm hello-world.py ausf\u00fchren<\/li>\n<li>die von dem Programm erhaltenen Daten in die Datei test.txt schreiben<\/li>\n<li>die Daten aus der Datei auf dem Bildschirm ausgeben<\/li>\n<li>die Daten aus der Datei in die Zwischenablage kopieren<\/li>\n<li>den Inhalt der Zwischenablage auf dem Bildschirm ausgeben<\/li>\n<li>eine Popup-Nachricht mit den Daten aus der Zwischenablage ausgeben<\/li>\n<\/ol>\n<p><\/p>\n<p>Zuerst erstellen wir einen Arbeitsordner und kopieren hello-world.py als test.py hinein, wir erstellen in diesem Ordner die Dateien test.sh und 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 erstellt Dateien\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Jetzt schreiben wir das Skript auf jede beliebige Weise in die Datei 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>Jetzt, w\u00e4hrend wir im Ordner bashscript sind, schreiben wir <code>.\/test.sh<\/code> beobachten wir das im Terminal auf dem Android-Ger\u00e4t:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux Schritt f\u00fcr Schritt (Teil 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So, wir haben das geplante Bash-Skript geschrieben. Wir k\u00f6nnten die Ausgabe mit Informationen \u00fcber die Ausf\u00fchrung jeder Aktion (mithilfe von echo) auflockern, das \u00fcberlasse ich den Lesern.<\/p>\n<p><\/p>\n<h2>Schritt 7<\/h2>\n<p><\/p>\n<h3>Lassen Sie uns etwas N\u00fctzliches tun<\/h3>\n<p><\/p>\n<p><i>Relativ n\u00fctzlich<\/i><\/p>\n<p><\/p>\n<p>Lassen Sie uns die technische Aufgabe formulieren<br \/>\nDie Anwendung soll nach dem Start eine zuf\u00e4llige Zeichenfolge aus der Datei in die Zwischenablage kopieren und mit einer Popup-Nachricht dar\u00fcber informieren.<\/p>\n<p><\/p>\n<p>Wir werden ein Bash-Skript als Grundlage nehmen, die zuf\u00e4llige Zeichenfolge aus der Datei werden wir mit einer Python-Unterprogramm abrufen. Lassen Sie uns einen Arbeitsplan f\u00fcr das Skript erstellen:<\/p>\n<p><\/p>\n<ol>\n<li>Das Unterprogramm starten<\/li>\n<li>Das Ergebnis der Unterroutine in die Zwischenablage \u00fcbertragen<\/li>\n<li>Eine Meldung anzeigen<\/li>\n<\/ol>\n<p><\/p>\n<p>Lass uns auf die Namen des Verzeichnisses und der Anwendungsdateien festlegen:<\/p>\n<p><\/p>\n<ul>\n<li>Ordner rndstr im Home-Verzeichnis\n<ul>\n<li>source \u2013 die Datei, aus der wir die Zeilen entnehmen werden<\/li>\n<li>rndstr.py \u2013 Unterprogramm, das eine zuf\u00e4llige Zeile aus der Datei source in die Konsole ausgibt<\/li>\n<li>rndstr.sh \u2013 Skriptdatei<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Erstelle das Anwendungsverzeichnis und wechsle hinein, um dort die Dateien zu erstellen.<\/p>\n<p><\/p>\n<p>Die ersten zwei Punkte des Skriptplans k\u00f6nnen mit einer Pipeline kombiniert werden; letztendlich erhalten wir unter Verwendung von Termux:API:<\/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>In die Datei source kannst du beliebigen text einf\u00fcgen, der logisch in Zeilen unterteilt ist; ich habe mich entschieden, Zitate aufzunehmen:<\/p>\n<p>\n<b class=\"spoiler_title\">Listing der Datei source<\/b><\/p>\n<pre><code class=\"plaintext\">Ehrlichkeit ist nicht Wahrheit. L. Lavelle\nErtrage und halte dich zur\u00fcck. Epiktet\nEdel ist nur das, was selbstlos ist. J. La Bruy\u00e8re\nSei weise mutig. B. Graci\u00e1n\nG\u00fcte ist mehr wert als Sch\u00f6nheit. G. Heine\nF\u00fcr gro\u00dfe Taten ist unerm\u00fcdliche Best\u00e4ndigkeit erforderlich. F. Voltaire\nWenn du m\u00f6chtest, dass man dir immer gefallen kann, diene dir selbst. B. Franklin\n\u00dcberm\u00e4\u00dfige Bescheidenheit ist nichts anderes als versteckte Arroganz. A. Chenier\nSehr klugen Menschen wird nicht vertraut, wenn man ihr Z\u00f6gern sieht. F. Nietzsche\nArmut zeigt einen Mangel an Mitteln, nicht an Adel. D. Boccaccio\nMan muss sich davor h\u00fcten, Bescheidenheit bis zur Erniedrigung zu treiben. A. Bakihanov\nWer auf viel verzichtet, kann sich viel erlauben. J. Chardon\nWenn man f\u00fcr eine edle Tat bezahlt wird, wird sie uns genommen. N. Chamfort\nEs ist nicht schlimm, nichts zu erhalten, aber es ist \u00e4rgerlich, das Erhaltene zu verlieren. Claudius Aelianus\nEs ist leichter, geduldig das zu ertragen, was wir nicht \u00e4ndern k\u00f6nnen. Horaz\nMan wird m\u00fcde vom Warten, aber wie viel schlimmer w\u00e4re es, wenn es nichts mehr zu warten g\u00e4be. B. Shaw\nAlles kommt p\u00fcnktlich, wenn die Menschen warten k\u00f6nnen. F. Rabelais\nMit unserer Geduld k\u00f6nnen wir mehr erreichen als mit St\u00e4rke. E. Burke\nMan muss in der Lage sein, das zu tragen, was man nicht vermeiden kann. M. Montaigne\nWer im Gesch\u00e4ft mutig ist, f\u00fcrchtet sich nicht vor Worten. Sophokles\nIch k\u00e4mpfe nicht gerne, ich liebe es zu siegen. B. Shaw\nEin bedr\u00e4ngter und an die Wand gedr\u00e4ngter Kater wird zum Tiger. M. Cervantes\nEin w\u00fcrdiger Mensch geht nicht in den Fu\u00dfstapfen anderer. Konfuzius\nEin gro\u00dfer Geist wird seine Kraft nicht nur im Denken, sondern auch im Leben zeigen. R. Emerson\nRuhm ist eine unvorteilhafte Ware. Er kostet viel und bleibt schlecht erhalten. O. Balzac\nZ\u00fcgelung und Angemessenheit in Gespr\u00e4chen sind mehr wert als Redefertigkeit. F. Bacon\nWer nicht schweigen kann, kann auch nicht sprechen. Seneca der J\u00fcngere\nGute Manieren bestehen aus kleinen Opfern. F. Chesterfield\nEin guter Mensch ist nicht der, der Gutes tun kann, sondern der, der B\u00f6ses tun kann und es nicht tut. W. Kluchevsky\nF\u00e4llen Sie keine unumst\u00f6\u00dflichen Urteile! Augustinus\nNichts im \u00dcberma\u00df! Solon<\/code><\/pre>\n<p><\/p>\n<p>Wir m\u00fcssen ein Unterprogramm erstellen, das eine zuf\u00e4llige Zeile aus der Datei source extrahiert.<br \/>\nLassen Sie uns den Algorithmus des Unterprogramms aufschreiben:<\/p>\n<p><\/p>\n<ol>\n<li>Wir \u00f6ffnen die Datei source<\/li>\n<li>Wir z\u00e4hlen die Anzahl der Zeilen in der ge\u00f6ffneten Datei<\/li>\n<li>Wir schlie\u00dfen die Datei (es gibt keinen Grund, sie unn\u00f6tig offen zu halten)<\/li>\n<li>Wir generieren eine zuf\u00e4llige ganze Zahl im Bereich der Zeilenanzahl der Quelldatei<\/li>\n<li>Wir \u00f6ffnen die Datei source<\/li>\n<li>Wir geben die Zeile mit der Nummer der generierten Zahl aus<\/li>\n<li>Wir schlie\u00dfen die Datei<\/li>\n<\/ol>\n<p><\/p>\n<p>Wir implementieren den Algorithmus in Python (ich schreibe f\u00fcr Python 3.7):<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  # importieren zur Erzeugung zuf\u00e4lliger Zahlen\nimport os  # zum Abrufen des Pfades\n\npath = os.path.abspath(__file__)  # direkten Pfad zur Datei rndstr.py erhalten\npath = os.path.dirname(path)  # in den Verzeichnispfad umwandeln\npath = path + '\\\/source'  # in den Pfad zur Datei source umwandeln\n\nf = open(path)  # Datei \u00f6ffnen\ni = 0  # Z\u00e4hler zur\u00fccksetzen\nfor str in f: i+=1  # Zeilen der Datei z\u00e4hlen\nf.close  # Datei schlie\u00dfen\n\nj = int(round(i * random.random()))  # eine ganze Zufallszahl von 0 bis i generieren\n\nf = open(path)  # Datei \u00f6ffnen\ni = 0  # Z\u00e4hler zur\u00fccksetzen\nfor str in f:  # Zeilen aus der Datei durchlaufen\n    if i == j:  # wenn Z\u00e4hler der Zeilen der generierten Zahl entspricht\n        print (str, end='')  # Zeile ohne Zeilenumbruch ausgeben\n        break  # Schleife verlassen\n    i+=1  # Z\u00e4hler um 1 erh\u00f6hen\nf.close  # Datei schlie\u00dfen<\/code><\/pre>\n<p><\/p>\n<p>Nachdem die Dateien erstellt und gespeichert wurden, m\u00fcssen Sie die Ausf\u00fchrungsrechte f\u00fcr die Datei festlegen <code>rndstr.sh<\/code>, und einen Alias f\u00fcr einen schnellen Start erstellen.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\\\/rndstr\\\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Jetzt, indem wir im Terminal eingeben <code>rnst<\/code> , erhalten wir einen zuf\u00e4lligen Aphorismus in die Zwischenablage, den wir zum Beispiel in der Korrespondenz verwenden k\u00f6nnen.<\/p>\n<p><\/p>\n<p>So haben wir wenigstens etwas N\u00fctzliches geschrieben. Relativ n\u00fctzlich.<\/p>\n<p><\/p>\n<h3>P.s.<\/h3>\n<p><\/p>\n<p>Ich habe absichtlich in dem letzten Schritt keine Screenshots mitgebracht und einige Aktionen nicht detailliert erkl\u00e4rt, sondern nur den Inhalt der Dateien beschrieben, damit die Leser selbst arbeiten k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Das war's mit \"Termux Schritt f\u00fcr Schritt\", ich denke, es ist an der Zeit, abzuschlie\u00dfen. Nat\u00fcrlich sind das nur die ersten Schritte, aber jetzt k\u00f6nnen Sie selbst voranschreiten.<\/p>\n<p><\/p>\n<p>Urspr\u00fcnglich hatte ich geplant, in dieser Reihe zu zeigen, wie man nmap und sqlmap benutzt, aber es gibt bereits viele Artikel zu diesem Thema. Wenn Sie m\u00f6chten, dass ich die Reihe \"Termux Schritt f\u00fcr Schritt\" fortsetze, gibt es unten eine Umfrage und in den Kommentaren k\u00f6nnen Sie vorschlagen, wor\u00fcber ich noch schreiben soll.<\/p>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte einloggen<\/a><\/noindex>.<\/p>\n<h2 class=\"default-block__polling-title\">M\u00f6chten Sie \"Termux Schritt f\u00fcr Schritt\" fortsetzen?<\/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>                    Nein<\/p>\n<\/li>\n<\/ul>\n<p>    2 Benutzer haben abgestimmt. Es gibt keine Enthaltungen.<br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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 Schritt f\u00fcr Schritt (Teil 2) | ProHoster","description":"In der vorherigen Ausgabe haben wir uns mit den grundlegenden Termux-Befehlen vertraut gemacht, eine SSH-Verbindung zum PC eingerichtet, gelernt, Aliase zu erstellen und.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}