Un Système d'Exploitation (SE), ou Operating System en anglais (OS) est constitué d'un ensemble de programmes qui gèrent le fonctionnement de composants électroniques (ordinateur, téléphone portable, tablette, smartphone, montre connectée).
L'OS permet notamment :
Généralement, l'OS impose un format spécifique de stockage des fichiers sur les périphériques comme les disques durs : il s'agit du système de fichiers du système d'exploitation.
Le système de fichiers définit notamment :
Voici quelques exemples de systèmes de fichiers liés à des systèmes d'exploitation :
Système d'Exploitation | Type de système |
MSDOS | FAT (Fat16, Fat32, VFAT) |
WINDOWS | NTFS |
LINUX | EXT (EXT2, EXT3, EXT4) |
MACOS | HFS (HFS+) |
Par exemple le système de fichier FAT (File Allocation Table), qui est relativement ancien (1977), est généralement utilisé pour les clés USB notamment dans sa version FAT32 (1996).
En général, un ordinateur sous Windows ne pourra pas lire des fichiers sous LINUX à moins d'installer des drivers ou un logiciel spécifique. De la même manière un ordinateur sous LINUX ne pourra pas lire des fichiers sous NTFS à moins d'installer le package ntfs-3g.
Il existe d'autres systèmes d'exploitation comme :
Le système de fichier de MSDOS -- MicroSoft Disk Operating System -- (FAT16, FAT32, VFAT), puis de Windows qui utilise NTFS (New Technology File System) depuis 1993 avec la version Windows NT 3.1, repose sur l'utilisation de lecteurs identifiés par une lettre : A: B: C: D:.
Ces lecteurs correspondent à un disque ou une partition (c'est à dire une partie du disque).
Dans une configuration classique, on trouvera les associations suivantes :
L'organisation d'un système Unix ou Linux repose sur une seule arborescence qui commence à la racine notée
Chaque sous-répertoire peut être associé à un support physique différent ou à une partition d'un disque.
Sous Linux on utilise le slash pour décrire un chemin :
Sous Windows on utilise l'anti-slash pour décrire un chemin :
Voici une arborescence de premier niveau sous Linux Ubuntu 20.04 à partir de la racine :
Voici quelques répertoires importants sous Linux :
Vous trouverez plus d'explications sur la documentation Ubuntu.
Le shell que l'on qualifie également de console ou de terminal est un programme qui exécute les commandes que saisit l'utilisateur au clavier. On peut le voir comme un petit langage de programmation.
Il permet d'interagir avec le système d'exploitation.
Il existe plusieurs types de shell :
UNIX/Linux étant un système multi-utilisateurs, chaque utilisateur dispose par convention de son espace personnel de fichiers dans le répertoire
Par exemple, les utilisateurs jean et paul peuvent stocker leurs fichiers respectivement dans les répertoires
Comme nous le verrons plus tard, jean peut autoriser paul à avoir accès à ses fichiers ou lui interdire tout accès.
Le répertoire
Lorsque l'on ouvre un terminal, on se trouve dans ce répertoire. Pour retourner dans ce répertoire, il suffit de taper l'une des commandes suivantes :
richer@zentopia:~$ cd
richer@zentopia:/$ cd $HOME
richer@zentopia:/$ cd ~
Notamment le symbole ~ représente le HOME directory.
L'expression
richer@zentopia:~$ export | grep HOME
Dans une arborescence, lorsque l'on fait référence à un fichier ou un répertoire, on distingue :
Considérons l'arborescence de répertoires / fichiers suivante de l'utilisateur jean :
/home/jean
├── tds
│ ├── td1
│ │ ├── file10.txt
│ │ ├── file11.txt
│ │ ├── file1.txt
│ │ ├── file20.txt
│ │ ├── file2.txt
│ │ ├── file3.txt
│ │ └── images
│ │ └── pyramide.jpg
│ └── td2
└── tps
├── tp1
│ ├── script1.sh
│ └── script2.sh
└── tp2
Le fichier
Les commandes ont toutes le même format, à savoir :
Les crochets
La commande
Le manuel est composé de plusieurs niveaux (voir
# répertoire actuel
pwd
/home/jean/tds/td1
# revenir au home directory
cd
# ou
cd ~
# aller dans le répertoire tds/td1
cd tds/td1
# aller dans le répertoire tp1/tp2
cd ../../tps/tp2
# ou
cd ~/tps/tp2
# lister les fichiers du répertoire courant
ls
# ou
ls *
file10.txt file11.txt file1.txt file20.txt file2.txt file3.txt images
# lister tous les fichiers (dont les fichiers cachés, cf ci-après)
ls -a
. .. file10.txt file11.txt file1.txt file20.txt file2.txt file3.txt
# lister les fichiers au format long
ls -l
total 28
-rw-rw-r-- 1 richer richer 370 nov. 1 23:39 file10.txt
-rw-rw-r-- 1 richer richer 982 nov. 1 23:39 file11.txt
-rw-rw-r-- 1 richer richer 142 nov. 1 23:38 file1.txt
-rw-rw-r-- 1 richer richer 27 nov. 1 23:39 file20.txt
-rw-rw-r-- 1 richer richer 273 nov. 1 23:39 file2.txt
-rw-rw-r-- 1 richer richer 529 nov. 1 23:39 file3.txt
drwxrwxr-x 2 richer richer 4096 nov. 1 23:44 images
# lister au format long avec tri sur taille du fichier
ls -l -S
ou
ls -lS
total 28
drwxrwxr-x 2 richer richer 4096 nov. 1 23:44 images
-rw-rw-r-- 1 richer richer 982 nov. 1 23:39 file11.txt
-rw-rw-r-- 1 richer richer 529 nov. 1 23:39 file3.txt
-rw-rw-r-- 1 richer richer 370 nov. 1 23:39 file10.txt
-rw-rw-r-- 1 richer richer 273 nov. 1 23:39 file2.txt
-rw-rw-r-- 1 richer richer 142 nov. 1 23:38 file1.txt
-rw-rw-r-- 1 richer richer 27 nov. 1 23:39 file20.txt
# lister les fichiers dans le répertoire /bin
ls /bin
Attention : sous Linux les fichiers cachés commencent par un point .
Au format long (
Concernant les permissions, elles sont listées pour le propriétaire (utilisateur), le groupe et les autres (user, group, others) :
Voir la commande
On peut utiliser des caractères spéciaux pour spécifier les fichiers à afficher.
? [ ] - ^ * \
# ? pour un caractère
ls file?.txt
file1.txt file2.txt file3.txt
# [] pour une liste de caractères
# tous les fichiers dont le 5ème caractère est 1 ou 2 et qui commence par 'file'
ls file[1-2].txt
file1.txt file2.txt
# tous les fichiers qui commencent par une lettre minuscule, puis 0 à n caractères et qui se terminent par ".txt"
ls [a-z]*.txt
file10.txt file11.txt file1.txt file20.txt file2.txt file3.txt
# tous les fichiers qui commencent par "f", puis 0 à n caractères et qui se terminent par ".txt"
ls f*.txt
file10.txt file11.txt file1.txt file20.txt file2.txt file3.txt
# tous les fichiers qui ne commencent par par la lettre f
ls [^f]*
La commande
On distingue :
Le fichier
# nom du groupe:mot de passe:identifiant numérique:liste utilisateurs
root:x:0:
daemon:x:1:
bin:x:2:
...
cdrom:x:24:richer utilisation du cdrom
sudo:x:27:richer devenir super utilisateur
lpadmin:x:120:richer gérer les imprimantes
richer:x:1000:
On peut modifier les droits de deux manières différentes :
# interdire l'écriture pour le groupe et les autres sur un fichier
chmod go-w file1.txt
# donner tous les droits à l'utilisateur et aucun au groupe ou aux autres
chmod 0700 file1.txt
# jean ne donne aucun droit au groupe ou aux autres sur son HOME directory :
chmod go-rwx /home/jean
La commande
echo "Bonjour !"
Bonjour
echo "Bonjour $USER"
Bonjour richer
On peut également rediriger la sortie de la commande pour l'envoyer vers un fichier :
echo "Bonjour !" > file.txt
Pour créer un répertoire on utilise la commande
Cette commande accepte une option
A partir d'un terminal :
# créer un répertoire cms et un sous répertoire cm1 dans cms
mkdir cms
cd cms
mkdir cm1
# ou alors
mkdir -p cms/cm1
La commande
# supprimer le répertoire cm1 de cms
rmdir cms/cm1
La commande
# supprimer tous les fichiers
!!! A ne pas utiliser en général ou faire très attention !!!
rm *
# supprimer tous les fichiers récursivement (dans les sous répertoires)
!!! A ne pas utiliser !!!
rm -r *
# supprimer tous les fichiers d'extension ".txt" en mode interactif
rm -i *.txt
On dispose de plusieurs commandes pour afficher le contenu d'un fichier texte :
# afficher le fichier file1.txt
cat file1.txt
# afficher le fichier file1.txt page par page
more file1.txt
ou
cat file1.txt | more
# afficher les 20 premières lignes
head -n 20 file1.txt
ou
cat file1.txt | head -n 20
# afficher les 15 dernières lignes
tail -n 15 file1.txt
ou
cat file1.txt | tail -n 15
Le symbole | (appelé pipe en anglais) fournit le résultat de la commande à sa gauche à la commande de droite.
Il existe plusieurs utilitaires qui permettent de créer une archive et de la compresser, notamment l'utilitaire
# créer une archive du répertoire tds
tar -cf tds.tar tds
# créer et compresser
tar -czf tds.tar.gz tds
ou
tar -czf tds.tgz tds
# décompresser une archive
tar -xf tds.tar
ou
tar -xzf tds.tgz
# décompresser une archive vers le répertoire ~/tmp
tar -xzf tds.tgz -C ~/tmp
On peut également utiliser l'utilitaire
# créer une archive du répertoire tds
zip -r tds.zip tds
adding: tds/ (stored 0%)
adding: tds/td2/ (stored 0%)
adding: tds/td1/ (stored 0%)
adding: tds/td1/images/ (stored 0%)
adding: tds/td1/images/pyramide.jpg (deflated 1%)
adding: tds/td1/file3.txt (deflated 51%)
adding: tds/td1/file20.txt (deflated 15%)
adding: tds/td1/file11.txt (deflated 50%)
adding: tds/td1/file10.txt (deflated 41%)
adding: tds/td1/file2.txt (deflated 44%)
adding: tds/td1/file1.txt (deflated 36%)
# décompresser avec zip
unzip tds.zip
# décompresser avec zip dans le répertoire ~/tmp
unzip tds.zip -d ~/tmp
Sous Linux un processus est un programme qui s'exécute. Il est identifié par un identifiant entier appelé pid pour Processus IDentifier.
Pour afficher tous les processus qui s'exécutent, on utilise la commande
richer@zentopia:/$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:08 ? 00:00:01 /sbin/init splash
root 2 0 0 13:08 ? 00:00:00 [kthreadd]
root 3 2 0 13:08 ? 00:00:00 [rcu_gp]
root 4 2 0 13:08 ? 00:00:00 [rcu_par_gp]
root 5 2 0 13:08 ? 00:00:00 [netns]
...
richer 6937 3644 0 13:12 pts/1 00:00:00 bash
richer 6984 6937 1 13:12 pts/1 00:01:18 gedit autodescr_nasm.asm
richer 7379 2698 0 13:13 ? 00:00:00 /usr/libexec/gvfsd-network --spawner :1.3 /org/gtk/gvfs/e
richer 7398 2698 0 13:13 ? 00:00:00 /usr/libexec/gvfsd-dnssd --spawner :1.3 /org/gtk/gvfs/exe
...
www-data 12093 2013 0 14:14 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 12097 2013 0 14:14 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 12098 2013 0 14:14 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 12099 2013 0 14:14 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 12100 2013 0 14:14 ? 00:00:00 /usr/sbin/apache2 -k start
Dans la liste précédente on distingue le PID et le PPID, le parent PID, c'est à dire le numéro de processus qui est reponsable de la création du processus.
Dans l'exemple précédent, il y a 394 processus.
Pour supprimer un processus il faut utiliser la commande kill qui envoie un signal (une sorte de message) à un processus. Par exemple la commande kill -l donne la liste des signaux que l'on peut envoyer :
richer@zentopia:/$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
En l'occurrence, le signal de numéro 9 (SIGKILL) permet de tuer (demander la fin de l'exécution) d'un processus. Pour arrêter l'éditeur gedit, on saisira :
richer@zentopia:/$ ps -ef | grep "gedit"
richer 6984 6937 1 13:12 pts/1 00:01:29 gedit autodescr_nasm.asm
richer 12495 12120 0 14:29 pts/2 00:00:00 grep --color=auto gedit
richer@zentopia:/$ kill -9 6984
Note : il faut faire précéder la commande de