Bash à sable
Le but de ce TP d'introduction est de se familiariser avec l'environnement Unix Ubuntu et de voir quelques outils, notamment bash
, que vous utiliserez par la suite dans les TPs. Nous allons voir comment :
- créer/supprimer des fichiers/répertoires (éventuellement récursivement)
- écrire un script bash pour manipuler des fichiers, changer leurs droits
- rechercher/installer des packages
- ...
Prise en main
Pendant tous les TPs, nous allons utiliser deux outils : la console (ou terminal) et l'éditeur emacs
. Les scripts seront exécutés depuis un terminal et écrits avec emacs
.
Sous Gnome 3, pour afficher la liste des applications disponibles, déplacez le curseur de la souris dans le coin en haut à gauche de l’écran ou appuyez sur la touche Windows. Tapez « Terminal » puis cliquez sur l'application correspondante.
C’est dans ce terminal que nous allons exécuter nos scripts, créer des répertoires, etc.
Pourquoi passer par le terminal ? Je vous l'accorde, à première vue, l'interface est austère. Le terminal est une interface pour interagir avec le shell. Bash est un shell, un langage de programmation qui va vous offrir énormément de flexibilité dans la construction de commandes personnalisées. Grâce au Bash, vous pouvez combiner des commandes simples pour construire un programme plus compliqué. Pour l'instant, cela reste abstrait, mais plusieurs exemples ci-après vont l'illustrer. Faites-moi confiance.
Si vous vous posez des questions sur une commande, peut-être que le site https://explainshell.com pourrait vous être utile. Regardez par exemple ce qu'il propose sur la commande ls -p | grep -v / | wc -l
Navigation dans le système de fichiers
Quelques commandes de base à connaître :
ls
: lister le contenu du répertoire courantls /chemin/vers/un/repertoire
: lister un répertoire spécifiquepwd
: afficher le chemin du répertoire courantcd
: changer de répertoire (cd ..
,cd ~
)mkdir
: créer un répertoire (-p
pour hiérarchique)rm
: supprimer un fichier (-r
pour un répertoire)
Question
Créez un répertoire dans votre home (cd ~
) pour y stocker vos scripts.
Rechercher/Installer des packages
Linux permet d’installer facilement des logiciels via un gestionnaire de paquets :
-
Sous Fedora :
yum search
: chercher un paquetyum install
: installeryum remove
: désinstaller
-
Sous Ubuntu:
apt search
:apt install
: installerapt remove
: désinstaller
L'installation par le gestionnaire de paquet est à privilégier puisqu'il va prendre en charger l'installation des dépendances notamment.
Les installations nécessitent les droits superutilisateur car elles modifient des dossiers système comme /usr/lib
, /usr/bin
, etc.
Éditer avec Emacs
emacs
est un éditeur de texte (un IDE même, voir les IDE) très complet et configurable. Il offre :
- coloration syntaxique
- indentation
- modes spécifiques selon l’extension (.py, .cpp, .sh, .tex, etc)
Question
Lancez ces commandes pour tester les modes :
Note
Utilisez &
pour exécuter une commande en tâche de fond. Sans &
, utilisez Ctrl+Z
puis bg
.
Bashons un peu
Le but est d'écrire de petits scripts et les assembler avec Bash.
Question
Lisez, exécutez, expérimentez avec les différents scripts Bash ci-dessous. Pour chaque script, vous pouvez le coder en utilisant emacs ou VS code et l'exécuter en suivant les instructions.
Mon premier script bash
Fichier hello.sh
:
Exécution :
Puis :
La ligne #!/bin/bash
indique l’interpréteur à utiliser pour évaluer le script.
C'est ce qu'on appelle le shebang.
Passer des arguments à un script bash
#!/bin/bash
echo "J'ai reçu $# arguments"
if [ $# != 0 ]; then
echo "Liste des arguments :"
for i in $@; do
echo "$i"
done
else
echo "donc rien à lister"
fi
Fonctions utiles
#!/bin/bash
echo "Je m'exécute depuis le répertoire `pwd`"
echo "Le script $0 s'appelle `basename $0` et se trouve dans `dirname $0`"
Entrées et sorties standards
Une commande peut écrire sur :
stdout
: sortie standardstderr
: sortie d’erreur- et recevoir via
stdin
: entrée standard
Enchaîner des scripts : filtres et pipe
Un pipe (|
) connecte la sortie standard d’une commande à l’entrée standard d’une autre.
Exemples :
Consultez man ls
, man grep
, man wc
pour les détails.
Lire l'entrée standard dans un script
Fichier read_input.sh
:
Test :
Aide sur les commandes
Utilisez man
pour consulter l’aide :
q
pour quitter.
Il existe plusieurs manières d'avoir de l'aide sur les commandes