logiciels:bash
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | logiciels:bash [2024/01/28 23:48] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Pourquoi utiliser la ligne de commande? ====== | ||
+ | Dans un environnement technologique où presque tout a une durée de vie utile de quelques années tout au plus, il est parfois important de se questionner sur les approches les plus durables. Dans le domaine du génie logiciel, seules quelques technologies passent à travers les décennies sans être profondément transformées. Le courriel, le protocole Internet et la culture des systèmes Unix. À travers cette présentation, | ||
+ | |||
+ | Quelques références | ||
+ | |||
+ | * (Raymond 2003) The Art of Unix Programming: | ||
+ | * [[http:// | ||
+ | |||
+ | ===== Standard établi depuis des décennies ===== | ||
+ | |||
+ | GNU Bash est fourni avec tous les systèmes qui suivent les normes POSIX, un standard établi en 1989 et dont Richard Stallman faisait partie du comité initial. Cette norme est apparue 19 ans après la création du premier système Unix par Kenneth Thompson, Dennis Ritchie et Brian Kernighan. | ||
+ | |||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | ===== Énormément de documentation ===== | ||
+ | |||
+ | ==== Les pages " | ||
+ | |||
+ | Les pages '' | ||
+ | |||
+ | Référence: | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ==== Une littérature imposante ==== | ||
+ | |||
+ | Plusieurs centaines de livres sur la programmation en ligne de commandes avec Bash sont édités. De plus, d' | ||
+ | |||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Une très grande communauté ==== | ||
+ | |||
+ | Le site web Stack Overflow recense plus de 100000 questions et réponses sur Bash | ||
+ | |||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | ===== Maturité des logiciels ===== | ||
+ | |||
+ | Les logiciels en ligne de commande ont une plus grande maturité que les logiciels avec interface graphique. Ils sont souvent plus anciens, et comme ils n' | ||
+ | |||
+ | ===== Indépendance entre les distributions GNU/Linux et autres systèmes Unix ===== | ||
+ | |||
+ | Les logiciels utilisés en ligne de commande, ainsi que le langage Bash, sont des outils communs à toutes les distributions GNU/Linux ainsi que les autres systèmes Unix qui suivent les normes POSIX. Ainsi, ce qui est appris sur un système peut être réutilisé tel quel. Une fois qu'on a appris les bases de la programmation avec Bash, on peut se débrouiller un peu partout. | ||
+ | |||
+ | ===== Parce que c'est amusant ===== | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | sudo aptitude moo | ||
+ | sudo apt-get moo | ||
+ | </ | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | cowsay "La ligne de commande c'est amusant" | ||
+ | </ | ||
+ | ===== Parce que parfois, on n'a pas le choix ===== | ||
+ | |||
+ | ==== Accès à distance avec SSH ==== | ||
+ | |||
+ | [[logiciels: | ||
+ | |||
+ | ==== Serveur Web ==== | ||
+ | |||
+ | [[auto-heber: | ||
+ | |||
+ | ==== Editeur de Texte ==== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ====== Comment exécuter un programme? ====== | ||
+ | |||
+ | Les programmes en ligne de commande s' | ||
+ | |||
+ | ===== L' | ||
+ | |||
+ | Une fois un émulateur de terminal chargé, on dispose d'un environnement d' | ||
+ | |||
+ | La commande '' | ||
+ | |||
+ | Par exemple, si on veut savoir quel interpréteur Python est appelé par défaut: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | which python | ||
+ | </ | ||
+ | ==== Shebang ==== | ||
+ | |||
+ | Les symboles '' | ||
+ | |||
+ | ===== GNU Bash sur Linux ===== | ||
+ | |||
+ | Sur Linux, GNU Bash est l' | ||
+ | |||
+ | ===== Mac OS X et Windows ===== | ||
+ | |||
+ | * Depuis Mac OS X Panther, l' | ||
+ | * Depuis Windows 10, il est possible d' | ||
+ | |||
+ | ==== Cygwin et Msys2 ==== | ||
+ | |||
+ | Cygwin et Msys2 permettent d' | ||
+ | |||
+ | Cygwin est très complet, mais peut être difficile à installer et à utiliser. Msys2 est facile à utiliser et sera familier pour les utilisateurs de Arch Linux car il utilise le système de distribution de paquetages '' | ||
+ | |||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ====== Est-ce que GNU Bash est un vrai langage de programmation? | ||
+ | |||
+ | Oui, GNU Bash est un langage de programmation complet, qui permet de construire des programmes complexes ainsi que des logiciels. Cependant, il est concu pour écrire des scripts et non des applications. | ||
+ | |||
+ | Référence pour le langage GNU Bash: | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | ===== Structures de contrôle ===== | ||
+ | |||
+ | ==== Structure conditionnelle ==== | ||
+ | |||
+ | Une structure conditionnelle permet de modifier l' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | if [condition] | ||
+ | then | ||
+ | commandes | ||
+ | elif [condition] | ||
+ | then | ||
+ | commandes | ||
+ | else | ||
+ | commandes | ||
+ | fi | ||
+ | </ | ||
+ | ==== Boucle ==== | ||
+ | |||
+ | La boucle '' | ||
+ | |||
+ | ===== Variables ===== | ||
+ | |||
+ | Une variable permet de garder une valeur produite par une application ou une fonction et de la réutiliser ultérieurement | ||
+ | |||
+ | On définit une variable comme suit: | ||
+ | |||
+ | <code bash> | ||
+ | VARIABLE=valeur | ||
+ | </ | ||
+ | Ensuite, pour retrouver la valeur de la variable, on met un signe '' | ||
+ | |||
+ | <code bash> | ||
+ | echo $VARIABLE | ||
+ | </ | ||
+ | Si on désire limiter la portée d'une variable, on précède l' | ||
+ | |||
+ | On peut aussi utiliser la sortie d'un programme à l' | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | OF=/ | ||
+ | tar -zcf $OF / | ||
+ | </ | ||
+ | ===== Composition et redirection ===== | ||
+ | |||
+ | Pour passer la sortir d'une application en entrée à une autre application, | ||
+ | |||
+ | <code bash> | ||
+ | cat fichier | programme1 | programme2 | ||
+ | </ | ||
+ | Pour rediriger la sortie d'un programme vers un fichier, on utilise le chevron '' | ||
+ | |||
+ | ====== Quelles sont les différences entre GNU Bash et PowerShell? ====== | ||
+ | |||
+ | ====== Comment travailler avec ... ====== | ||
+ | |||
+ | ===== Des fichiers ===== | ||
+ | |||
+ | Les systèmes de fichiers sont composés de fichiers et de répertoires. Il existe plusieurs utilitaires de base pour manipuler ces éléments. Tout d' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | On doit ensuite pouvoir lire le contenu d'un fichier. Habituellement, | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== Le réseau Internet ===== | ||
+ | |||
+ | Pour vérifier si un ordinateur distant est en ligne, on peut utiliser la commande '' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | whois francoispelletier.org | ||
+ | </ | ||
+ | ===== Les utilisateurs et permissions ===== | ||
+ | |||
+ | Le système de permission POSIX est composé de trois valeurs en base octale, qui sont la somme des permissions en lecture, en écriture et en exécution pour le propriétaire, | ||
+ | |||
+ | La permission de lecture (r) vaut 4, d' | ||
+ | |||
+ | Pour afficher les permissions d'un répertoire, | ||
+ | |||
+ | ===== La compression de fichiers ===== | ||
+ | |||
+ | Les systèmes GNU/Linux incluent souvent de nombreux utilitaires de compression de fichiers et de répertoires, | ||
+ | |||
+ | Par exemple: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | tar zcf mon_archive.tar.gz mon_repertoire/ | ||
+ | </ | ||
+ | Dans le cas où on désire compresser un seul fichier, il est préférable d' | ||
+ | |||
+ | ===== Quelques raccourcis utiles ===== | ||
+ | |||
+ | Il y a quelques raccourcis utiles à connaître pour utiliser la ligne de commane de façon conviviale: | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ====== Effectuer une tâche spécifique ====== | ||
+ | |||
+ | Cette section présente plusieurs exemples de logiciels puissants et versatiles qui sont essentiellement utilisés à partir d'une interface en ligne de commandes. | ||
+ | |||
+ | ===== Manipulation d' | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | convert eye.gif news.gif \ | ||
+ | -append storm.gif tree.gif \ | ||
+ | -background skyblue \ | ||
+ | +append result.gif | ||
+ | </ | ||
+ | * [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | ffmpeg -i input.avi -r 24 output.avi | ||
+ | </ | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | Références: | ||
+ | |||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | ===== Télécharger des fichiers ===== | ||
+ | |||
+ | L' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | wget https:// | ||
+ | </ | ||
+ | Il permet aussi de télécharger de manière hiérarchique un site web. | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | wget -mpck --user-agent="" | ||
+ | </ | ||
+ | L' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | youtube-dl https:// | ||
+ | </ | ||
+ | Référence: | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ===== Synchroniser des fichiers ===== | ||
+ | |||
+ | rsync est un logiciel qui permet de rapidement transférer des fichiers entre deux emplacements de manière incrémentale. Ceci en fait un outil très efficace pour effectuer des sauvegardes. | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | rsync -avAXHS \ | ||
+ | --progress \ | ||
+ | --exclude={"/ | ||
+ | "/ | ||
+ | / \ | ||
+ | / | ||
+ | </ | ||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | ====== Pouvoir reproduire une séquence d' | ||
+ | |||
+ | ===== Script vs. application ===== | ||
+ | |||
+ | Précédemment, | ||
+ | |||
+ | Les scripts sont des recettes conçues pour répondre à un besoin spécifique de l' | ||
+ | |||
+ | Le langage GNU Bash permet de construire des recettes qui interagissent directement avec les différentes composantes du système d' | ||
+ | |||
+ | D'un point de vue mathématique, | ||
+ | |||
+ | Par dessus tout, le script est la mémoire d'un procédé, d'une expertise, et permet de reproduire un résultat dans le futur. | ||
+ | |||
+ | ===== Automatiser des tâches ===== | ||
+ | |||
+ | ==== Cron ==== | ||
+ | |||
+ | Vixie' | ||
+ | |||
+ | > cron est un programme qui permet aux utilisateurs des systèmes Unix d’exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiées à l’avance, ou selon un cycle défini à l’avance. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | mm hh jj MMM JJJ tâche | ||
+ | </ | ||
+ | Références: | ||
+ | |||
+ | * (Wikipédia 2018) | ||
+ | * [[https:// | ||
+ | |||
+ | ====== Développer des logiciels ====== | ||
+ | |||
+ | ===== GNU Make ===== | ||
+ | |||
+ | Make est un logiciel qui sert à construire des fichiers ou des bibliothèques à partir de divers éléments, dont du code source. La principale différence entre Make et un script est qu'il va seulement exécuter des commandes si elles sont nécessaires. Make introduit donc la notion d' | ||
+ | |||
+ | Exemple d'un makefile: | ||
+ | |||
+ | < | ||
+ | # Mon premier Makefile | ||
+ | |||
+ | all: foobar.o main.c | ||
+ | gcc -o main foobar.o main.c | ||
+ | |||
+ | foobar.o: foobar.c foobar.h | ||
+ | gcc -c foobar.c -o foobar.o | ||
+ | </ | ||
+ | La commande make apparaît dans la séquence traditionnelle de compilation et d' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | ./configure | ||
+ | make | ||
+ | sudo make install | ||
+ | </ | ||
+ | Référence: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== git ===== | ||
+ | |||
+ | git est un système créé par Linus Torvalds qui permet de gérer les différentes versions de fichiers de manière organisée et collaborative. Le logiciel permet aussi d' | ||
+ | |||
+ | Un flux de travail simple avec git: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | git clone https:// | ||
+ | git add nouveau_fichier | ||
+ | git commit -m " | ||
+ | git push origin master | ||
+ | </ | ||
+ | Références: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ====== Comprendre le fonctionnement du système d' | ||
+ | |||
+ | ===== Périphériques ===== | ||
+ | |||
+ | Bash donne accès directement à une abstraction des différents périphériques de l' | ||
+ | |||
+ | ===== Disques et mémoire ===== | ||
+ | |||
+ | L' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | ls -la /dev/disk | ||
+ | </ | ||
+ | L' | ||
+ | |||
+ | ===== Processus ===== | ||
+ | |||
+ | Il est possible d' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | La combinaison suivante des commandes '' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | ps -aux | grep firefox | ||
+ | </ | ||
+ | ====== Matériel d' | ||
+ | |||
+ | En français | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | En anglais: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ====== Références ====== | ||
+ | |||
+ | Raymond, Eric Steven. 2003. “The Art of Unix Programming.” In. Addison-Wesley. | ||
+ | |||
+ | |||
+ | Wikipédia. 2018. “Cron — Wikipédia, L’encyclopédie Libre.” http:// |
logiciels/bash.txt · Dernière modification : 2024/01/28 23:48 de 127.0.0.1