{"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\/fr\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","title":{"rendered":"Termux \u00e9tape par \u00e9tape (Partie 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">la partie pr\u00e9c\u00e9dente<\/a><\/noindex> Nous avons fait connaissance avec les commandes de base de Termux, configur\u00e9 une connexion SSH avec un PC, appris \u00e0 cr\u00e9er des alias et install\u00e9 plusieurs utilitaires utiles. Cette fois-ci, nous allons faire un pas encore plus loin, nous allons :<\/p>\n<p><\/p>\n<ul>\n<li>d\u00e9couvrir Termux:API<\/li>\n<li>installer Python et nano, et \u00e9crire \u00ab Hello, world! \u00bb en Python<\/li>\n<li>en apprendre sur les scripts bash et \u00e9crire un script utilisant Termux:API<\/li>\n<li>en utilisant un script bash, Termux:API et Python, cr\u00e9er un petit programme <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Puisque nous comprenons maintenant ce que font les commandes saisies, je ne d\u00e9taillerai plus chaque action \u00e0 partir de ce point, mais j'expliquerai l\u00e0 o\u00f9 des difficult\u00e9s pourraient surgir.<\/p>\n<p><\/p>\n<p>J'utilise souvent des alias, donc les abr\u00e9viations utilis\u00e9es dans cette partie sont pr\u00e9sent\u00e9es ici :<\/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>Le plan est pr\u00eat, nous pouvons commencer ! Et bien s\u00fbr, n'oubliez pas le \u00ab magique Tab \u00bb (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444950\/\">Voir Partie 1<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2>\u00c9tape 4<\/h2>\n<p><\/p>\n<h3>Plongeons dans le terrier du lapin Termux:API<\/h3>\n<p><\/p>\n<p><i>API, combien ce mot signifie pour le c\u0153ur d'un codeur<\/i><\/p>\n<p><\/p>\n<p>Si l'on ne touche pas au sujet de Termux:API, toutes nos \u00e9tapes auraient pu \u00eatre r\u00e9sum\u00e9es \u00e0 un simple r\u00e9cit d'une brochure du type \u00ab Linux pour les nuls \u00bb, comme cela a \u00e9t\u00e9 justement soulign\u00e9 dans les commentaires \u00e0 la premi\u00e8re partie.<\/p>\n<p><\/p>\n<p>Tout d'abord, installons Termux:API depuis le Google Play Market (apr\u00e8s, il vaut mieux red\u00e9marrer Termux) :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/415e25a8ddefc5d4f1741c97d742eeb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, nous devons installer le paquet API dans la console Termux :<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg # N'oublions pas les alias\napt install termux-api<\/code><\/pre>\n<p><\/p>\n<p>Pour les exp\u00e9riences, j'utilise Android 5.1.1, pour les propri\u00e9taires d'Android 7, il faut \u00ab prot\u00e9ger \u00bb Termux: API en allant dans \u2018Param\u00e8tres\u2019 &gt; \u2018Applications s\u00e9curis\u00e9es\u2019, sinon les appels API, comme <code>termux-battery-status<\/code>, vont se bloquer. (Voir. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki du projet<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Il est maintenant temps de se familiariser avec les fonctionnalit\u00e9s acquises. La description la plus r\u00e9cente et d\u00e9taill\u00e9e de Termux:API peut \u00eatre trouv\u00e9e sur <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.termux.com\/wiki\/Termux:API\">wiki du projet<\/a><\/noindex>. Je vais essayer de s\u00e9lectionner les \u00e9l\u00e9ments les plus illustratifs et int\u00e9ressants pour permettre de se familiariser davantage avec le travail autonome \u00e0 l'avenir.<\/p>\n<p><\/p>\n<h3>Quelques exemples de Termux:API <\/h3>\n<p><\/p>\n<ul>\n<li>termux-battery-status<br \/>\nRenvoie l'\u00e9tat de la batterie<br \/>\n<img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/9a5f793d1b028905b3ee9ceab0fbcdec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-brightness<br \/>\nR\u00e8gle la luminosit\u00e9 de l'\u00e9cran entre 0 et 255<br \/>\n<img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/23e5f3726607921d7f52d5d0de543968.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-toast<br \/>\nAffiche une notification contextuelle temporaire<br \/>\n<img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/5c75ad9b678773801ea9975b23422384.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-torch<br \/>\nAllume la lampe de poche<br \/>\n<img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7695202f5972e93e5b7a8f4bd952882c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>termux-wifi-scaninfo<br \/>\nRenvoie des informations sur la derni\u00e8re analyse des r\u00e9seaux Wi-Fi<br \/>\n<img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/f10669f8e7dff1046ab4f9b7d68228e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>Il n'est pas difficile de remarquer que les valeurs renvoy\u00e9es sont des cha\u00eenes, des dictionnaires, des listes de dictionnaires, en bref, des types de donn\u00e9es avec lesquels Python fonctionne parfaitement, donc la prochaine \u00e9tape sera de l'installer.<\/p>\n<p><\/p>\n<h2>\u00c9tape 5<\/h2>\n<p><\/p>\n<h3>Installons Python et nano<\/h3>\n<p><\/p>\n<p>Pour installer Python, tapez dans le terminal :<\/p>\n<p><\/p>\n<pre><code class=\"bash\">updg\napt install python\napt install python2<\/code><\/pre>\n<p><\/p>\n<p>Nous avons maintenant Python 2 et 3 install\u00e9s.<\/p>\n<p><\/p>\n<p>Au cours de mes recherches pour cet article, j'ai d\u00e9couvert un autre \u00e9diteur de texte, nano, qui m'a plu plus que vim, installons-le :<\/p>\n<p><\/p>\n<pre><code class=\"bash\">apt install nano<\/code><\/pre>\n<p><\/p>\n<p>Il est plus facile \u00e0 utiliser que vim, et nano a une interface plus conviviale. <i>Sur les appareils Android, vim reste cependant plus pratique.<\/i><\/p>\n<p><\/p>\n<h3>HelloWorld en Python dans Termux<\/h3>\n<p><\/p>\n<p>On aurait pu se passer de ce point, mais installer Python dans Termux et ne pas \u00e9crire de HelloWorld serait, \u00e0 mon avis, impensable.<\/p>\n<p><\/p>\n<p>Je n'ai pas pour but d'enseigner Python \u00e0 quiconque, donc ceux qui ne connaissent pas peuvent simplement copier le code (ou commencer \u00e0 \u00e9tudier par eux-m\u00eames, heureusement, il y a beaucoup de litt\u00e9rature), et ceux qui savent peuvent aussi cr\u00e9er quelque chose eux-m\u00eames. Et moi, \u00ab dans le bruit \u00bb, je vais encore montrer comment entrer du texte dans le terminal sans \u00e9diteur.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;hello-world.py     \n# Si vous ne sp\u00e9cifiez pas la source (rappelons que cat 1.txt &gt; 2.txt)\n# cat prendra les donn\u00e9es du flux d'entr\u00e9e standard,\n# en d'autres termes, \u00e0 partir du clavier.\n\nstr = 'Hello, world!' # nous affectons \u00e0 la variable str la valeur \"Hello, world!\"\nprint (str) # affichons la valeur de la variable str \u00e0 l'\u00e9cran\n\n# Ctrl + D pour finir la saisie et enregistrer le fichier (hello-world.py)\n\npy hello-world.py # ex\u00e9cutons le fichier (py est un alias pour python)<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/e9086da1ce27f723681f142dad11d878.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si pendant la saisie vous n'avez pas remarqu\u00e9 une erreur et que vous avez d\u00e9j\u00e0 appuy\u00e9 sur Entr\u00e9e, vous ne pourrez pas remonter \u00e0 la ligne pr\u00e9c\u00e9dente, donc terminez la saisie en appuyant sur Ctrl + D (vous pouvez aussi interrompre avec Ctrl + Z) et recommencez tout. \u00c9tant donn\u00e9 que nous avons utilis\u00e9 '&gt;', le fichier sera compl\u00e8tement \u00e9cras\u00e9. Pour cette raison, je ne recommande pas d'utiliser cette m\u00e9thode de saisie si vous n'\u00eates pas s\u00fbr de pouvoir \u00e9crire le code imm\u00e9diatement sans erreurs.<\/p>\n<p><\/p>\n<h2>\u00c9tape 6<\/h2>\n<p><\/p>\n<h3>Scripts Bash<\/h3>\n<p><\/p>\n<p>Les scripts Bash sont un excellent moyen d'automatiser le travail dans le terminal. Un script est un fichier avec l'extension .sh (l'extension n'est pas obligatoire) contenant un ensemble de commandes terminales dont certaines ont d\u00e9j\u00e0 \u00e9t\u00e9 abord\u00e9es. Voici <noindex><a rel=\"nofollow\" href=\"https:\/\/tproger.ru\/translations\/bash-cheatsheet\/\">la liste de la plupart des commandes<\/a><\/noindex>, tout devrait fonctionner, mais veuillez noter que c'est une liste pour le \u00ab grand \u00bb Linux, et non pour Termux, mais juste <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/325522\/\">un excellent mat\u00e9riel sur les scripts bash<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Avec des scripts, il est possible d'automatiser pratiquement toutes les actions monotones. \u00c9crivons un simple script bash qui affiche une valeur \u00e0 partir d'une variable qu'il a lui-m\u00eame cr\u00e9\u00e9e, j'utiliserai \u00e0 nouveau cat, mais vous pouvez utiliser un \u00e9diteur de texte normal, et ceux qui souhaitent s'entra\u00eener peuvent utiliser echo.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">cat &gt;test.sh\n\nexport str=\"Bonjour, Habr!\"\n# export cr\u00e9e une variable str\n# et lui attribue la valeur \"Bonjour, Habr!\"\n# Ne mettez pas d'espaces avant et apr\u00e8s '='\n\necho $str # Pour acc\u00e9der aux variables, mettez '$' devant\n\n# Ctrl + D\n\n# .\/test.sh pour ex\u00e9cuter le script, mais si vous le faites maintenant, une erreur se produira\n# pour \u00e9viter l'erreur, il faut rendre le fichier test.sh ex\u00e9cutable\n\nchmod +x test.sh\n# chmod change les permissions (+ ajouter \/ - retirer)\n# '+x' signifie que nous rendons le fichier ex\u00e9cutable\n\n.\/test.sh # Nous ex\u00e9cutons notre script<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/7c56f1aaf938a711f3a30dd3eed3eec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3>Script Bash avec Termux:API<\/h3>\n<p><\/p>\n<p>\u00c9crivons quelque chose de diff\u00e9rent des fameux HelloWorld, mais tout aussi inutile. Notre script fera :<\/p>\n<p><\/p>\n<ol>\n<li>effectuer une requ\u00eate API termux-battery-status<\/li>\n<li>enregistrer les donn\u00e9es obtenues dans le fichier test.txt<\/li>\n<li>afficher les donn\u00e9es du fichier \u00e0 l'\u00e9cran<\/li>\n<li>ex\u00e9cuter le programme hello-world.py \u00e9crit pr\u00e9c\u00e9demment<\/li>\n<li>enregistrer les donn\u00e9es du programme dans le fichier test.txt<\/li>\n<li>afficher les donn\u00e9es du fichier \u00e0 l'\u00e9cran<\/li>\n<li>transf\u00e9rer les donn\u00e9es du fichier dans le presse-papiers<\/li>\n<li>afficher le contenu du presse-papiers \u00e0 l'\u00e9cran<\/li>\n<li>afficher un message contextuel avec les donn\u00e9es du presse-papiers<\/li>\n<\/ol>\n<p><\/p>\n<p>Commen\u00e7ons par cr\u00e9er un dossier de travail et y copier hello-world.py sous le nom test.py, puis cr\u00e9ons dans ce dossier les fichiers test.sh et 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 cr\u00e9e des fichiers\n\nchmod +x test.sh<\/code><\/pre>\n<p><\/p>\n<p>Maintenant, de n'importe quelle mani\u00e8re pratique, \u00e9crivons le script dans le fichier 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>Maintenant, dans le dossier bashscript, nous \u00e9crivons <code>.\/test.sh<\/code> observons dans le terminal sur le dispositif Android :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Termux \u00e9tape par \u00e9tape (Partie 2)\" src=\"\/wp-content\/uploads\/2019\/03\/44c6632c7a3903dad1113017dc81ee61.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons \u00e9crit le script bash pr\u00e9vu. On peut enrichir son affichage dans la console avec des informations sur l'ex\u00e9cution de chaque action (avec echo), je laisserai cela aux lecteurs.<\/p>\n<p><\/p>\n<h2>\u00c9tape 7<\/h2>\n<p><\/p>\n<h3>Faisons quelque chose d'utile<\/h3>\n<p><\/p>\n<p><i>Relativement utile<\/i><\/p>\n<p><\/p>\n<p>Formulons le cahier des charges<br \/>\nL'application doit, apr\u00e8s son lancement, placer une cha\u00eene al\u00e9atoire du fichier dans le presse-papiers et notifier cela avec un message contextuel.<\/p>\n<p><\/p>\n<p>Nous prendrons comme base le script bash, et nous extrairons une cha\u00eene al\u00e9atoire du fichier \u00e0 l'aide d'une sous-programme en Python. \u00c9tablissons un plan de travail pour le script :<\/p>\n<p><\/p>\n<ol>\n<li>Lancer la sous-programme<\/li>\n<li>Transf\u00e9rer le r\u00e9sultat de l'ex\u00e9cution de la sous-programme dans le presse-papiers<\/li>\n<li>Afficher un message contextuel<\/li>\n<\/ol>\n<p><\/p>\n<p>D\u00e9terminons les noms du r\u00e9pertoire et des fichiers de l'application :<\/p>\n<p><\/p>\n<ul>\n<li>dossier rndstr dans le r\u00e9pertoire personnel\n<ul>\n<li>source \u2014 fichier \u00e0 partir duquel nous allons prendre des lignes<\/li>\n<li>rndstr.py \u2014 sous-programme qui affiche une ligne al\u00e9atoire dans la console \u00e0 partir du fichier source<\/li>\n<li>rndstr.sh \u2014 fichier script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Cr\u00e9ons le r\u00e9pertoire de l'application et, en nous y d\u00e9pla\u00e7ant, cr\u00e9ons les fichiers.<\/p>\n<p><\/p>\n<p>Les deux premi\u00e8res \u00e9tapes du plan du script peuvent \u00eatre combin\u00e9es en un pipeline, r\u00e9sultant, en utilisant Termux:API, en :<\/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>Dans le fichier source, vous pouvez placer tout texte logiquement s\u00e9par\u00e9 par des lignes, j'ai d\u00e9cid\u00e9 d'y mettre des aphorismes :<\/p>\n<p>\n<b class=\"spoiler_title\">Listing du fichier source<\/b><\/p>\n<pre><code class=\"plaintext\">L'honn\u00eatet\u00e9 n'est pas v\u00e9rit\u00e9. L. Lavelle\nSupporte et retiens-toi. \u00c9pict\u00e8te\nN'est noble que ce qui est d\u00e9sint\u00e9ress\u00e9. J. La Bruy\u00e8re\nSois sage et courageux. B. Graci\u00e1n\nLa bont\u00e9 vaut mieux que la beaut\u00e9. G. Heine\nPour de grandes entreprises, une constance inflexible est n\u00e9cessaire. F. Voltaire\nSi tu veux plaire \u00e0 tout le monde, sers-toi toi-m\u00eame. B. Franklin\nL'exc\u00e8s de modestie n'est rien d'autre qu'une fiert\u00e9 cach\u00e9e. A. Chenier\nLes gens tr\u00e8s intelligents commencent \u00e0 ne pas \u00eatre dignes de confiance lorsqu'on voit leur embarras. F. Nietzsche\nLa pauvret\u00e9 indique un manque de moyens, et non un manque de noblesse. D. Boccace\nIl faut se garder de porter la modestie \u00e0 l'humiliation. A. Bakihanov\nQui renonce \u00e0 beaucoup peut s'en permettre beaucoup. J. Chardon\nLorsqu'on nous paie pour un acte noble, nous nous le faisons retirer. N. Chamfort\nNe rien obtenir du tout n'est pas effrayant, mais perdre ce qu'on a obtenu est vexant. Claude \u00c9lien\nIl est plus facile de supporter patiemment ce que nous ne pouvons pas changer. Horace\nOn se fatigue \u00e0 attendre, mais combien c'e\u00fbt \u00e9t\u00e9 pire si l'on n'avait rien \u00e0 attendre. B. Shaw\nTout arrive \u00e0 temps, si les gens savent attendre. F. Rabelais\nAvec notre patience, nous pouvons accomplir plus qu'avec la force. E. Burke\nIl faut savoir supporter ce qu'il est impossible d'\u00e9viter. M. Montaigne\nQui est courageux dans l'affaire n'a pas peur des mots. Sophocle\nJe n'aime pas me battre, j'aime gagner. B. Shaw\nUn chat accul\u00e9 se transforme en tigre. M. Cervant\u00e8s\nUn homme digne ne suit pas les traces des autres. Confucius\nUn grand esprit manifestera sa force non seulement par sa capacit\u00e9 \u00e0 penser, mais aussi par sa capacit\u00e9 \u00e0 vivre. R. Emerson\nLa gloire est une marchandise peu rentable. Elle co\u00fbte cher et se conserve mal. O. Balzac\nLa r\u00e9serve et la pertinence dans les conversations valent plus que l'\u00e9loquence. F. Bacon\nQui ne sait pas se taire ne sait pas parler non plus. S\u00e9n\u00e8que le Jeune\nDe bonnes mani\u00e8res consistent en de petits sacrifices. F. Chesterfield\nUn homme bon n'est pas celui qui sait faire le bien, mais celui qui ne sait pas faire le mal. V. Kliouchefsky\nNe portez pas de jugements irr\u00e9vocables ! Augustin\nRien de trop ! Solon<\/code><\/pre>\n<p><\/p>\n<p>Il nous reste \u00e0 cr\u00e9er une sous-programme qui extrait une ligne al\u00e9atoire du fichier source.<br \/>\nD\u00e9crivons l'algorithme de fonctionnement de la sous-programme :<\/p>\n<p><\/p>\n<ol>\n<li>Ouvrons le fichier source<\/li>\n<li>Comptons le nombre de lignes dans le fichier ouvert<\/li>\n<li>Fermons le fichier (inutile de le laisser ouvert plus longtemps)<\/li>\n<li>G\u00e9n\u00e9rer un nombre entier al\u00e9atoire dans les limites du nombre de lignes du fichier source<\/li>\n<li>Ouvrons le fichier source<\/li>\n<li>Afficher la ligne correspondant au num\u00e9ro g\u00e9n\u00e9r\u00e9<\/li>\n<li>Fermer le fichier<\/li>\n<\/ol>\n<p><\/p>\n<p>Impl\u00e9menter l'algorithme en Python (j'\u00e9cris sous Python 3.7) :<\/p>\n<p><\/p>\n<pre><code class=\"python\">import random  # importer pour g\u00e9n\u00e9rer des nombres al\u00e9atoires\nimport os  # pour obtenir le chemin\n\npath = os.path.abspath(__file__)  # obtenir le chemin absolu du fichier rndstr.py\npath = os.path.dirname(path)  # le convertir en chemin vers le r\u00e9pertoire\npath = path + 'source'  # le convertir en chemin vers le fichier source\n\nf = open(path)  # ouvrir le fichier\ni = 0  # initialiser le compteur\nfor str in f: i+=1  # compter les lignes du fichier\nf.close  # fermer le fichier\n\nj = int(round(i * random.random()))  # g\u00e9n\u00e9rer un nombre entier al\u00e9atoire de 0 \u00e0 i\n\nf = open(path)  # ouvrir le fichier\ni = 0  # initialiser le compteur\nfor str in f:  # parcourir les lignes du fichier\n    if i == j:  # si le compteur de lignes est \u00e9gal au nombre g\u00e9n\u00e9r\u00e9\n        print (str, end='')  # afficher la ligne sans passer \u00e0 la ligne suivante\n        break  # sortir de la boucle\n    i+=1  # augmenter le compteur de 1\nf.close  # fermer le fichier<\/code><\/pre>\n<p><\/p>\n<p>Apr\u00e8s avoir cr\u00e9\u00e9 et enregistr\u00e9 les fichiers, il est n\u00e9cessaire de donner les droits d'ex\u00e9cution au fichier <code>rndstr.sh<\/code>, et de cr\u00e9er un alias pour un lancement rapide.<\/p>\n<p><\/p>\n<pre><code class=\"bash\">alias rnst=\"~\/rndstr\/rndstr.sh\"<\/code><\/pre>\n<p><\/p>\n<p>Maintenant, en entrant dans le terminal <code>rnst<\/code> nous obtiendrons dans le presse-papiers un aphorisme al\u00e9atoire, que l'on peut par exemple utiliser dans une correspondance.<\/p>\n<p><\/p>\n<p>Voil\u00e0, nous avons \u00e9crit quelque chose d'utile. Relativement utile.<\/p>\n<p><\/p>\n<h3>P.S.<\/h3>\n<p><\/p>\n<p>J'ai d\u00e9lib\u00e9r\u00e9ment omis de fournir des captures d'\u00e9cran \u00e0 l'\u00e9tape finale et je n'ai pas d\u00e9taill\u00e9 certaines actions, listant seulement le contenu des fichiers, afin que les lecteurs aient la possibilit\u00e9 de travailler eux-m\u00eames.<\/p>\n<p><\/p>\n<p>Sur cela \u00ab Termux \u00e9tape par \u00e9tape \u00bb, je pense qu'il est temps de conclure. Bien s\u00fbr, ce ne sont que les premiers pas, mais maintenant vous pouvez avancer par vous-m\u00eame.<\/p>\n<p><\/p>\n<p>\u00c0 l'origine, je pr\u00e9voyais de montrer dans ce cycle comment utiliser nmap, sqlmap, mais il y a d\u00e9j\u00e0 beaucoup d'articles sur le sujet sans moi. Si vous souhaitez que je continue le cycle \u00ab Termux \u00e9tape par \u00e9tape \u00bb, il y a un sondage ci-dessous et vous pouvez proposer dans les commentaires de quoi \u00e9crire d'autre.<\/p>\n<p class=\"for_users_only_msg\">Seuls les utilisateurs enregistr\u00e9s peuvent participer au sondage. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Connectez-vous<\/a><\/noindex>, s'il vous pla\u00eet.<\/p>\n<h2 class=\"default-block__polling-title\">Continuer \u00ab Termux \u00e9tape par \u00e9tape \u00bb ?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oui<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Non<\/p>\n<\/li>\n<\/ul>\n<p>    2 utilisateurs ont vot\u00e9. Aucun abstention.<br \/>\n<br \/>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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 \u00e9tape par \u00e9tape (Partie 2) | ProHoster","description":"Dans la partie pr\u00e9c\u00e9dente, nous avons d\u00e9couvert les commandes de base de Termux, configur\u00e9 la connexion SSH avec le PC, appris \u00e0 cr\u00e9er des alias et.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/termux-shag-za-shagom-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/30531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=30531"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/22529"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=30531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=30531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=30531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}