Guillaume Chanel
Remerciements à Jean-Luc Falcone
Cours système d'exploitation by Guillaume Chanel, Jean-Luc Falcone and University of Geneva is licensed under CC BY-NC-SA 4.0
home
Les utilisateurs peuvent faire partie d'un ou plusieurs groupes:
Ceci permet par exemple de:
whoami | quel est mon nom d'utilisateur |
---|---|
groups | de quels groupes fais-je partie ? |
id | affiche les identifiants de mon nom d'utilisateur et de mes groupes |
w | quels sont les utilisateurs logués sur la machine |
who | comme w mais avec moins d'infos |
exit | permet de quitter le shell courant |
man
)man [section] <sujet>
1 | Commandes générales |
2 | Appels systèmes |
3 | Librairie C |
4 | Fichiers spéciaux |
5 | Formats de fichiers et conventions |
6 | Jeux |
7 | Divers |
8 | Commandes d'administration et démons |
Il existe plusieurs types de systèmes de fichiers. Par exemple:
VFAT | Ancien système de fichiers de Windows, très utilisé sur les clé-usb, lecteurs MP3, etc. |
---|---|
NTFS | Système de fichiers récent sur Windows. |
ext4 | Système de fichiers par défaut sous beaucoup de distributions GNU/Linux |
ISO9660 | Système de fichiers des CD-ROMs |
UDF | Système de fichiers des DVDs |
HFS+ | Système de fichiers sur MacOSX |
NFS | Système de fichiers réseau sous Unix |
IPFS | Système de fichiers peer-to-peer distribué |
root
peut monter/démonter des systèmes de fichiers (par défaut)/bin/ | Principaux exécutables |
/boot/ | Fichiers de démarrage |
/dev/ | Périphériques |
/etc | Configuration système |
/home/ | Données utilisateurs |
/lib/ | Librairies système |
/media/ | Montage des périphériques de stockage |
/mnt/ | Point de montage manuel |
/proc/ | Processus |
/root/ | Répertoire perso du superutilisateur |
/sbin/ | Exécutables pour la maintenance |
/sys/ | Informations système |
/usr/ | Applications et librairies utilisateurs |
/var/ | Données variables (logs, spool, mail…) |
.
*
?
/
!
Les conventions suivantes (POSIX) s'appliquent:
/
/
/
est relatif au répertoire courant..
..
~
pwd | affiche le répertoire courant |
---|---|
cd | change de répertoire courant |
ls | liste le contenu d'un répertoire |
ls
)ls [options]... [répertoire-ou-fichier]...
Par défaut, utilise le répertoire courant
Options courantes:
-l | liste les fichiers (plus d'infos) |
---|---|
-h | affiche les tailles en format humain |
-a | affiche les fichiers cachés |
$ ls ..
$ ls dossier/sous-dossier
$ ls -l dossier1 dossier2 fichier
$ ls -l | less # utile si la sortie est trop longue
mkdir
)mkdir [options]... répertoire-à-créer...
L'option -p
permet de créer automatiquement les repertoires parents.
$ mkdir ../foo
$ mkdir ../foo/bar ../foo/bar/baz
$ mkdir -p ../foo/bar/baz # equivalent des précédents en une commande
mv
)mv [options]... fichiers... destination
Fonctionne aussi avec des répertoires
$ mv foo.avi bar.mpg baz.mkv video/ # deplace foo.avi et bar.mpg dans le dossier vidéo
$ mv SysInfo/ InfoBio ~/cours # deplace les premiers éléments dans le répertoire cours du "home"
$ mv foo.AVI foo.avi # renomme le fichier foo.AVI vers foo.avi (case sensitive)
$ mkdir bar
$ mv bar/ foo/ # renomme le dossier bar en foo SI foo n'existe pas !
mv
Que faire si on déplace un fichier vers une source ou un fichier existe déjà avec le même nom:
-f | Ecrase silencieusement la destination si elle existe (force) |
---|---|
-i | Demande une confirmation avant d'écraser la destination (interactive) |
-u | Efface la destination si elle est plus ancienne que la source (update) |
cp
)cp [options]... fichiers... destination
Options:
-r | Copie aussi le contenu des répertoires (recursive) |
---|---|
-a | Préserve les attributs (permissions, propriétaire, etc.) et copie le contenu des répertoires (archive) |
$ cp foo.txt foo.txt.backup
$ cp bar.txt baz.doc projet/ # copie les deux fichiers dans le dossier projet
cp
Que faire si on déplace un fichier vers une source ou un fichier existe déjà avec le même nom:
-f | Ecrase silencieusement la destination si elle existe (force) |
---|---|
-i | Demande une confirmation avant d'écraser la destination (interactive) |
-u | Efface la destination si elle est plus ancienne que la source (update) |
rmdir
)rmdir [options]... répertoires...
L'option -p
permet de supprimer automatiquement les repertoires parents si ils sont vides.
$ rmdir ../foo/bar/baz
$ rmdir ../foo/bar
$ rmdir ../foo
$ rmdir ../foo/bar/baz # equivalent aux commandes précédentes
rm
)rm [options]... fichiers...
Options:
-r | efface recursivement le contenu (recursive) |
---|---|
-f | ne demande pas de confirmation (force) |
-i | demande une confirmation pour chaque fichier (interactive) |
$ rmdir ../foo/bar/baz
$ rm foo.txt foo.txt.backup
$ rm -rf foo/ # supprime tout le contenu de foo
Y'a-t-il une différence ?
$ mv foo.avi video/
vs.
$ cp foo.avi video/
$ rm foo.avi
A. ouiB. non
https://votamatic.unige.ch, code BGPL
Si les fichiers sont sur le même système de fichier:
mv
ne fait que déplacer le nom (le lien), sans déplacer les donnéescp + rm
copie les données puis les supprime (beaucoup moins efficace)* | remplace zéro, un ou plusieurs caractères |
---|---|
? | un seul caractère |
Read | Lire le contenu du fichier |
---|---|
Write | Modifer le contenu d'un fichier Warning en cas de suppression |
eXecute | Exécuter le fichier (exécutable binaire ou script) |
Read | Lister les noms des fichiers inclus (mais pas les métadonnées) |
---|---|
Write | Créer, renommer ou détruire les fichiers inclus |
eXecute | "Ouvrir" le répertoire, voir les métadonnées, accèder au contenu des fichiers (mais pas aux noms), exécuter les fichiers exécutables. |
chmod
)chmod [options]... permission fichiers...
L'option -R
agit récursivement sur le contenu des répertoires
$ chmod 666 foo.txt
$ chmod 640 videos/*
$ chmod 750 videos/
$ chmod -R 750 videos/ # change les permissions de videos/ mais aussi de TOUT son contenu
chmod
accepte également une représentation symbolique:u
(user), g
(group), o
(other), ou a
(all)+
(add), -
(remove), ou = (set)rwx
$ chmod a+rw foo.txt # ajoute les droit read et write à tous
$ chmod u=w foo.txt # l'utilisateur n'a QUE le droit w
$ chmod g-wx foo.txt # le groupe perd les droit write et execution
chgrp
)chrgp [options]... groupe fichiers...
L'option -R
agit récursivement sur le contenu des répertoires
$ chgrp video *.avi
$ chgrp -R admin notes/
Il suffit d'ajouter un point au début du nom d'un fichier pour le cacher.
$ mv foo.txt .foo.txt
$ cp ~/.bashrc /tmp/bashrc
$ df -h
$ du -sh *
$ find . -name "*.txt"
$ ln -s /machin/chose/truc/ ~/truc
/dev/
/proc/
/sys/
/dev/
>
:
commande arguments > fichier
cat
)On peut concaténer plusieurs fichiers avec cat
cat [options]... [fichiers]...
Le résultat est envoyé sur le flux de sortie
Options:
-n | numérote les lignes |
---|---|
-b | numérote les lignes non-vides |
$ cat foo.txt
$ cat foo.txt bar.txt
$ cat foo.txt bar.txt > all.txt # ecrit le resultat dans all.txt au lieu su shell
$ cat episode1.avi episode2.avi episode3.avi > full.avi # est-ce que ca marche ?
On peut sauver le résultat de toute commande utilisant le flux de sortie:
$ ls -lh > content.txt
$ df -h > disk_usage.txt
$ w > users.txt
<
:
commande arguments < fichier
wc
)On peut compter les caractères/mots/lignes avec wc
wc [options]... [fichiers]...
Options:
-c | compte les caractères |
---|---|
-w | compte les mots |
-l | compte les lignes |
$ wc -w foo.txt
$ wc -w < foo.txt
$ wc -w < foo.txt > words.dat
$ wc -w
On peut interrompre le flux avec ctrl+D.
$ cat > foo.txt
>>
)>
écrase la destination si elle existe>>
pour ajouter à un fichier existant$ wc -l < foo.txt >> stats.dat
$ wc -l < bar.txt >> stats.dat
$ wc -l < baz.txt >> stats.dat
On veut concaténer des fichiers et compter les lignes du résultat:
$ cat foo.txt bar.txt baz.txt > all.txt
$ wc -l < all.txt > stats.dat
On peut utiliser les pipes (|
) pour rediriger la sortie d'une commande vers l'entrée de la suivante:
$ cat foo.txt bar.txt baz.txt | wc -l > stats.dat
sort
)sort [options]...
Options:
-r | trie "à l'envers" |
---|---|
-n | tri numérique |
-h | tri des représentations "humaines" |
$ du -sh * | sort -h
$ du -sh * | sort -rh
$ sort < words.txt > sorted.txt
head
)head [options]... [fichiers]...
Options:
Par défaut garde les 10 premières lignes
-n k | garde les k permières lignes |
---|---|
-c k | garde les k premiers bytes |
$ head -n 5 < foo.txt
$ du -sh * | sort -rh | head -n 5 > biggest.txt
2>
:
commande arguments 2> fichier
2>&1
:
commande arguments > fichier 2>&1
C | C++ | Java | Python | Ruby | |
---|---|---|---|---|---|
Entrée | stdin | std::cin | System.in | sys.stdin | $stdin |
Sortie | stdout | std::cout | System.out | sys.stdout | $stdout |
Erreur | stderr | std::cerr | System.err | sys.stderr | $stderr |
Sous unix, tous les processus ont:
ps
)ps [options]...
Exemples d'options:
-eF | Voir tous les processus |
---|---|
-ejHVoir l'arbre des processus | |
-u falcone | Voir tous les processus de l'utilisateur falcone |
grep
La commande grep
est extremement utile car elle permet de filtrer les lignes qui contiennent un certain motif
grep [options]... <motif> [fichiers]...
Options utiles:
-i | ignore les majuscules |
---|---|
-v | exclus les lignes qui contiennent le motif |
-r | cherche recursivement (sous-répertoires) |
$ grep falcone /etc/passwd
$ ps -eF | grep java
top
)La commande top
permet de voir quels processus occupent le(s) CPU(s).
kill -l
permet d'afficher les différent signauxNom | Action | Numero |
SIGINT | Interrompt le processus | 2 |
SIGKILL | Tue le processus immédiatement | 9 |
SIGTERM | Demande la terminaison (propre) | 15 |
SIGTSTP | Suspension | 20 |
SIGCONT | Active un processus suspendu | 18 |
SIGUSR1 | Signal utilisateur 1 | 10 |
SIGUSR2 | Signal utilisateur 2 | 12 |
kill
)kill -signal [pids]...
kill
permet d'envoyer un signal à un processus
$ kill -SIGKILL 2111 2120
$ kill -15 2111
SIGTERM
est reçuSIGINT
est reçuSIGKILL
ne peut être interceptéLes raccourcis claviers suivant permettent de lancer un signal à un processus du shell:
ctrl+C | Envoie SIGINT |
---|---|
ctrl+Z | Envoie SIGTSTP |
Attention ctl+D n'est pas un signal mais envoie "End-Of-File" (EOF) sur l'entrée standard
&
après la commande:
$ gedit &
ctrl-Z
pour interrompre le processusbg
pour relancer un processus interrompu en arrière-planfg
pour remettre le dernier processus interrompu en avant-plan