8.2. Utilisation du shell#
Le shell est l’interface de commande historique, développée vers 1970 par Ken Thomson et Brian Ritchie avec Unix. Cette interface permet de contrôler tout le comportement d’un ordinateur :
exécuter des programmes
consulter/éditer des fichiers
copier/déplacer des fichiers
Bien que la conception de cette interface remonte aux année 1970, elle est toujours utilisée de nos jours, en particulier pour la gestion des serveurs sur Internet ou pour l’automatisation de la construction des logiciels.
On peut noter ces deux citations.
Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. (Doug McIlroy)
What I saw in the Xerox PARC technology was the caveman interface, you point and you grunt. A massive winding down, regressing away from language, in order to address the technological nervousness of the user. (Attributed to an IBM technician lambasting the Apple Lisa, c. 1979)
8.2.1. Savoir se repérer/déplacer#
Avant de pouvoir agir sur des fichiers, il faut savoir où on se trouve.
La commande pwd
permet de savoir où on est.
pwd
/builds/lamadone/informatique/premiere-nsi/jupyter/os/cours
La commande ls
permet de lister le contenu d’un répertoire :
ls -lh
total 56K
-rw-rw-rw- 1 root root 80 Feb 10 20:14 fichier.py
-rw-rw-rw- 1 root root 1.7K Feb 10 20:14 generalites.md
-rw-rw-rw- 1 root root 40K Feb 10 20:14 schema_exec.svg
-rw-rw-rw- 1 root root 6.6K Feb 10 20:14 shell.md
Chaque ligne commence par un groupe de 10 caractères : 1 + 3 + 3 + 3 correspondant
au type de fichier :
-
pour un fichier normal,d
pour un répertoire ;aux permissions : du propriétaire (premier groupe), du groupe (deuxième groupe) et du reste du monde (other)
r
signifie que le propriétaire, groupe ou le reste peut lire le fichier ;w
signifie que le propriétaire, groupe ou le reste peut écrire dans le fichier ;x
signifie que le propriétaire, groupe ou le reste peut exécuter le fichier.
Note
Un répertoire doit être exécutable pour être « traversé ».
Example 8.1
-rwx------
est un fichier lisible et inscriptible par l’utilisateur seulement ;drwxr-xr-x
est un dossier lisible par tous et dans lequel l’utilisateur peut écrire-rwxr-xr--
est par exemple un fichier python écrit par le propriétaire, lisible et exécutable par le groupe et lisible uniquement par le reste du monde.
8.2.2. Utiliser des commandes basiques :#
Afficher le contenu d’un fichier :
cat fichier.py
def hello():
print("Hello world!")
if __name__ == '__main__':
hello()
Recherche d’un motif
dans un fichier
:
grep hello fichier.py
def hello():
hello()
Écraser le contenu d’un fichier :
echo "Texte" > fichier
cat fichier
Texte
echo nouveau > fichier
cat fichier
nouveau
Écrire à la fin d’un fichier
echo Texte >> fichier
cat fichier
nouveau
Texte
8.2.3. Manipuler les emplacements de fichier#
mkdir dossier
pwd
/tmp/demo
ls -l
total 4
drwxr-xr-x 2 root root 4096 Feb 10 20:18 dossier
Changer le répertoire relativement au cwd
actuel.
cd dossier
pwd
/tmp/demo/dossier
Changer le répertoire pour le répertoire parent du cwd
.
cd ..
pwd
/tmp/demo
Se déplacer dans le répertoire /chemin/complet
et ce quelque soit l’actuel cwd
.
pwd
cd /tmp/demo
pwd
/builds/lamadone/informatique/premiere-nsi/jupyter/os/cours
/tmp/demo
Créer le repertoire
relativement au cwd
.
mkdir rerpetoire
ls -lh
total 8.0K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
Créer le répertoire
dans le sous répertoire /chemin/vers/
.
pwd
mkdir /tmp/demo/autre/
ls -lh
cd /tmp/demo
ls -lh
/builds/lamadone/informatique/premiere-nsi/jupyter/os/cours
total 60K
-rw-r--r-- 1 root root 14 Feb 10 20:18 fichier
-rw-rw-rw- 1 root root 80 Feb 10 20:14 fichier.py
-rw-rw-rw- 1 root root 1.7K Feb 10 20:14 generalites.md
-rw-rw-rw- 1 root root 40K Feb 10 20:14 schema_exec.svg
-rw-rw-rw- 1 root root 6.6K Feb 10 20:14 shell.md
total 12K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 autre
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
Copier la source
dans la destination
.
cd $gcwd
pwd
ls -lh
cp fichier.py /tmp/demo
/builds/lamadone/informatique/premiere-nsi/jupyter/os/cours
total 60K
-rw-r--r-- 1 root root 14 Feb 10 20:18 fichier
-rw-rw-rw- 1 root root 80 Feb 10 20:14 fichier.py
-rw-rw-rw- 1 root root 1.7K Feb 10 20:14 generalites.md
-rw-rw-rw- 1 root root 40K Feb 10 20:14 schema_exec.svg
-rw-rw-rw- 1 root root 6.6K Feb 10 20:14 shell.md
ls -lh fichier.py
-rw-rw-rw- 1 root root 80 Feb 10 20:14 fichier.py
ls -lh /tmp/demo
total 16K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 autre
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
-rw-r--r-- 1 root root 80 Feb 10 20:18 fichier.py
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
Note
La commande diff
permet de voir les différences entre deux fichiers textes.
diff -Naur fichier.py /tmp/demo/fichier.py
echo " hello()" >> /tmp/demo/fichier.py
diff -Naur fichier.py /tmp/demo/fichier.py
--- fichier.py 2025-02-10 20:14:33.152442419 +0000
+++ /tmp/demo/fichier.py 2025-02-10 20:18:23.856061687 +0000
@@ -4,3 +4,4 @@
if __name__ == '__main__':
hello()
+ hello()
Déplacer ou renommer la source
en destination
mv /tmp/demo/fichier.py /tmp/demo/fichier_new.py
ls -lh /tmp/demo
total 16K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 autre
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
-rw-r--r-- 1 root root 92 Feb 10 20:18 fichier_new.py
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
Supprimer définitivement le fichier
rm /tmp/demo/fichier_new.py
ls -lh /tmp/demo
total 12K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 autre
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
mv /tmp/demo/dossier /tmp/demo/autre
ls -lh /tmp/demo/
total 8.0K
drwxr-xr-x 3 root root 4.0K Feb 10 20:18 autre
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 rerpetoire
ls -lh /tmp/demo/autre
total 4.0K
drwxr-xr-x 2 root root 4.0K Feb 10 20:18 dossier
rmdir /tmp/demo/autre
rmdir: failed to remove '/tmp/demo/autre': Directory not empty
rmdir /tmp/demo/autre/dossier
ls -lh /tmp/demo/autre/
total 0
Supprimer définitivement un dossier vide.
if [ -d /tmp/demo ] ; then
rm -rf /tmp/demo
fi
if [ -e fichier ] ; then
rm -rf fichier
fi